001/*
002 * Stallion Core: A Modern Web Framework
003 *
004 * Copyright (C) 2015 - 2016 Stallion Software LLC.
005 *
006 * This program is free software: you can redistribute it and/or modify it under the terms of the
007 * GNU General Public License as published by the Free Software Foundation, either version 2 of
008 * the License, or (at your option) any later version. This program is distributed in the hope that
009 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
011 * License for more details. You should have received a copy of the GNU General Public License
012 * along with this program.  If not, see <http://www.gnu.org/licenses/gpl-2.0.html>.
013 *
014 *
015 *
016 */
017
018package io.stallion.dataAccess;
019
020import com.fasterxml.jackson.annotation.JsonIgnore;
021
022/**
023 * A Model is the basic interface by which all data access in Stallion is done.
024 */
025public interface Model {
026
027    /**
028     * The primary key of the item.
029     * @return
030     */
031    public Long getId();                     ;
032
033    public <Y extends Model> Y setId(Long id);
034
035    /**
036     * The controller used to save/retrieve/update this model.
037     * @return
038     */
039    @JsonIgnore
040    public ModelController getController();
041
042    /**
043     * Return true if the model is soft delete, false by default.
044     * @return
045     */
046    public Boolean getDeleted();
047    public void setDeleted(Boolean deleted);
048
049    /**
050     * Temporary Marker to indicate that this model should be inserted, not updated
051     * @return
052     */
053    @JsonIgnore
054    public Boolean getIsNewInsert();
055    public void setIsNewInsert(Boolean isNewInsert);
056    public String getCompoundId();
057
058    /**
059     * The datastore bucket associated with this model.
060     * @return
061     */
062    public String getBucket();
063    public Model setBucket(String bucket);
064
065    /**
066     * When this model was last changed.
067     *
068     * @return
069     */
070    public Long getLastModifiedMillis();
071    public <Y extends Model> Y setLastModifiedMillis(Long millis);
072}