package com.raizlabs.android.dbflow.structure;
import android.support.annotation.NonNull;
import com.raizlabs.android.dbflow.annotation.ColumnIgnore;
import com.raizlabs.android.dbflow.config.FlowManager;
import com.raizlabs.android.dbflow.structure.database.DatabaseWrapper;
/**
* Description: The base implementation of {@link Model}. It is recommended to use this class as
* the base for your {@link Model}, but it is not required.
*/
@SuppressWarnings("unchecked")
public class BaseModel implements Model {
/**
* Specifies the Action that was taken when data changes
*/
public enum Action {
/**
* The model called {@link Model#save()}
*/
SAVE,
/**
* The model called {@link Model#insert()}
*/
INSERT,
/**
* The model called {@link Model#update()}
*/
UPDATE,
/**
* The model called {@link Model#delete()}
*/
DELETE,
/**
* The model was changed. used in prior to {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}
*/
CHANGE
}
@ColumnIgnore
private transient ModelAdapter modelAdapter;
@Override
public void load() {
getModelAdapter().load(this);
}
@Override
public void load(DatabaseWrapper wrapper) {
getModelAdapter().load(this, wrapper);
}
@Override
public boolean save() {
return getModelAdapter().save(this);
}
@Override
public boolean save(@NonNull DatabaseWrapper databaseWrapper) {
return getModelAdapter().save(this, databaseWrapper);
}
@Override
public boolean delete() {
return getModelAdapter().delete(this);
}
@Override
public boolean delete(@NonNull DatabaseWrapper databaseWrapper) {
return getModelAdapter().delete(this, databaseWrapper);
}
@Override
public boolean update() {
return getModelAdapter().update(this);
}
@Override
public boolean update(@NonNull DatabaseWrapper databaseWrapper) {
return getModelAdapter().update(this, databaseWrapper);
}
@Override
public long insert() {
return getModelAdapter().insert(this);
}
@Override
public long insert(DatabaseWrapper databaseWrapper) {
return getModelAdapter().insert(this, databaseWrapper);
}
@Override
public boolean exists() {
return getModelAdapter().exists(this);
}
@Override
public boolean exists(DatabaseWrapper databaseWrapper) {
return getModelAdapter().exists(this, databaseWrapper);
}
@NonNull
@Override
public AsyncModel<? extends Model> async() {
return new AsyncModel<>(this);
}
/**
* @return The associated {@link ModelAdapter}. The {@link FlowManager}
* may throw a {@link InvalidDBConfiguration} for this call if this class
* is not associated with a table, so be careful when using this method.
*/
public ModelAdapter getModelAdapter() {
if (modelAdapter == null) {
modelAdapter = FlowManager.getModelAdapter(getClass());
}
return modelAdapter;
}
}