/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.client.threetier;
import com.eas.client.threetier.json.ChangesJSONWriter;
import com.eas.client.changes.Change;
import com.eas.client.Application;
import com.eas.client.ModulesProxy;
import com.eas.client.RemoteModulesProxy;
import com.eas.client.RemoteServerModulesProxy;
import com.eas.client.ServerModulesProxy;
import com.eas.client.cache.FormsDocuments;
import com.eas.client.cache.ModelsDocuments;
import com.eas.client.cache.ReportsConfigs;
import com.eas.client.cache.ScriptsConfigs;
import com.eas.client.cache.ServerDataStorage;
import com.eas.client.queries.PlatypusQuery;
import com.eas.client.queries.QueriesProxy;
import com.eas.client.queries.RemoteQueriesProxy;
import com.eas.client.threetier.requests.*;
import com.eas.script.Scripts;
import java.net.URL;
import java.util.*;
import java.util.function.Consumer;
/**
*
* @author kl, mg refactoring
*/
public class PlatypusClient implements Application<PlatypusQuery>, ServerDataStorage {
// error messages
public static final String ENQUEUEING_UPDATES_THREE_TIER_MSG = "Enqueueing updates are not allowed in three tier mode.";
public static final String EXECUTING_UPDATES_THREE_TIER_MSG = "Executing updates are not allowed in three tier mode.";
public static final String SQL_TEXT_PROVIDERS_ARE_NOT_ALLOWED_MSG = "Sql query text based flow providers are not allowed in three tier mode.";
//
protected URL url;
protected PlatypusConnection conn;
protected QueriesProxy<PlatypusQuery> queries;
protected ModulesProxy modules;
protected ServerModulesProxy serverModulesProxy;
protected ScriptsConfigs securityConfigs;
protected FormsDocuments forms;
protected ReportsConfigs reports;
protected ModelsDocuments models;
public PlatypusClient(PlatypusConnection aConn) throws Exception {
super();
url = aConn.getUrl();
conn = aConn;
queries = new RemoteQueriesProxy(aConn, this);
modules = new RemoteModulesProxy(aConn);
serverModulesProxy = new RemoteServerModulesProxy(aConn);
securityConfigs = new ScriptsConfigs();
forms = new FormsDocuments();
reports = new ReportsConfigs();
models = new ModelsDocuments();
}
public PlatypusConnection getConn() {
return conn;
}
@Override
public Type getType() {
return Type.CLIENT;
}
@Override
public QueriesProxy<PlatypusQuery> getQueries() {
return queries;
}
@Override
public ModulesProxy getModules() {
return modules;
}
@Override
public ServerModulesProxy getServerModules() {
return serverModulesProxy;
}
@Override
public ScriptsConfigs getScriptsConfigs() {
return securityConfigs;
}
@Override
public ModelsDocuments getModels() {
return models;
}
@Override
public ReportsConfigs getReports() {
return reports;
}
@Override
public FormsDocuments getForms() {
return forms;
}
public URL getUrl() {
return url;
}
@Override
public int commit(List<Change> aLog, Scripts.Space aSpace, Consumer<Integer> onSuccess, Consumer<Exception> onFailure) throws Exception {
String changesJson = ChangesJSONWriter.write(aLog);
CommitRequest request = new CommitRequest(changesJson);
if (onSuccess != null) {
conn.<CommitRequest.Response>enqueueRequest(request, aSpace, (CommitRequest.Response aResponse) -> {
onSuccess.accept(aResponse.getUpdated());
}, (Exception aException) -> {
if (onFailure != null) {
onFailure.accept(aException);
}
});
return 0;
} else {
CommitRequest.Response response = conn.executeRequest(request);
return response.getUpdated();
}
}
public void shutdown() {
if (conn != null) {
conn.shutdown();
conn = null;
}
}
}