/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.model.application;
import com.eas.client.cache.ServerDataStorage;
import com.eas.client.changes.Change;
import com.eas.client.model.Model;
import com.eas.client.model.visitors.ModelVisitor;
import com.eas.client.queries.PlatypusQuery;
import com.eas.client.queries.QueriesProxy;
import com.eas.script.ScriptFunction;
import com.eas.script.Scripts;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import jdk.nashorn.api.scripting.JSObject;
/**
*
* @author mg
*/
public class ApplicationPlatypusModel extends ApplicationModel<ApplicationPlatypusEntity, PlatypusQuery> {
protected List<Change> changeLog = new ArrayList<>();
protected ServerDataStorage serverProxy;
protected ApplicationPlatypusModel(QueriesProxy<PlatypusQuery> aQueries) {
super(aQueries);
}
public ApplicationPlatypusModel(ServerDataStorage aServerProxy, QueriesProxy<PlatypusQuery> aQueries) {
this(aQueries);
serverProxy = aServerProxy;
}
@Override
public <M extends Model<ApplicationPlatypusEntity, ?>> void accept(ModelVisitor<ApplicationPlatypusEntity, M> visitor) {
visitor.visit((M) this);
}
public ServerDataStorage getServerProxy() {
return serverProxy;
}
@Override
public ApplicationPlatypusEntity newGenericEntity() {
return new ApplicationPlatypusEntity(this);
}
@Override
public void addEntity(ApplicationPlatypusEntity aEntity) {
aEntity.setModel(this);
super.addEntity(aEntity);
}
@ScriptFunction(jsDoc = SAVE_JSDOC, params = {"onSuccess", "onFailure"})
@Override
public int save(JSObject aOnSuccess, JSObject aOnFailure) throws Exception {
return super.save(aOnSuccess, aOnFailure);
}
@Override
public boolean isModified() throws Exception {
return !changeLog.isEmpty();
}
@Override
public int commit(final Consumer<Integer> aOnSuccess, final Consumer<Exception> aOnFailure) throws Exception {
return serverProxy.commit(changeLog, Scripts.getSpace(), aOnSuccess, aOnFailure);
}
@Override
public void commited() {
changeLog.clear();
super.commited();
}
@ScriptFunction(jsDoc = REVERT_JSDOC)
@Override
public void revert() {
changeLog.clear();
super.revert();
}
@ScriptFunction(jsDoc = REQUERY_JSDOC, params = {"onSuccess", "onFailure"})
@Override
public void requery(JSObject aOnSuccess, JSObject aOnFailure) throws Exception {
changeLog.clear();
super.requery(aOnSuccess, aOnFailure);
}
public List<Change> getChangeLog() {
return changeLog;
}
}