package com.opendoorlogistics.core.api.impl.scripts; import java.io.File; import javax.swing.JPanel; import com.opendoorlogistics.api.ExecutionReport; import com.opendoorlogistics.api.ODLApi; import com.opendoorlogistics.api.components.ComponentControlLauncherApi.ControlLauncherCallback; import com.opendoorlogistics.api.components.ComponentExecutionApi.ClosedStatusObservable; import com.opendoorlogistics.api.components.ODLComponent; import com.opendoorlogistics.api.scripts.ScriptOption; import com.opendoorlogistics.api.scripts.Scripts; import com.opendoorlogistics.api.scripts.parameters.Parameters; import com.opendoorlogistics.api.tables.ODLDatastore; import com.opendoorlogistics.api.tables.ODLDatastoreAlterable; import com.opendoorlogistics.api.tables.ODLTable; import com.opendoorlogistics.api.tables.ODLTableAlterable; import com.opendoorlogistics.core.scripts.elements.Script; import com.opendoorlogistics.core.scripts.execution.ExecutionReportImpl; import com.opendoorlogistics.core.scripts.execution.OptionsSubpath; import com.opendoorlogistics.core.scripts.execution.ScriptExecutor; import com.opendoorlogistics.core.scripts.execution.dependencyinjection.AbstractDependencyInjector; import com.opendoorlogistics.core.scripts.io.ScriptIO; import com.opendoorlogistics.core.scripts.parameters.ParametersImpl; import com.opendoorlogistics.core.scripts.utils.ScriptUtils; public class ScriptsImpl implements Scripts { private final ODLApi api; private volatile Parameters parameters; public ScriptsImpl(ODLApi api) { this.api = api; } @Override public ScriptOption loadScript(File file) { Script script = ScriptIO.instance().fromFile(file); if(script!=null){ return new ScriptOptionImpl(api, null, script, null); } return null; } @Override public String findOptionIdByName(ScriptOption option, String optionName) { ScriptOptionImpl impl = (ScriptOptionImpl) option; return ScriptUtils.getOptionIdByName(impl.getOption(), optionName); } @Override public ExecutionReport executeScript(ScriptOption option, String optionId, ODLDatastoreAlterable<? extends ODLTableAlterable> ds) { ExecutionReport report = new ExecutionReportImpl(); ScriptOptionImpl impl = (ScriptOptionImpl) option; if((impl.getOption() instanceof Script)==false){ report.setFailed("Invalid input script object"); return report; } Script script = (Script)impl.getOption(); Script subsetScript = optionId != null ? OptionsSubpath.getSubpathScript(script, new String[] { optionId }, report) : script; if(report.isFailed()){ return report; } ExecutionReport executionReport = new ExecutionReportImpl(); ScriptExecutor executor = new ScriptExecutor(api, false, new AbstractDependencyInjector(api) { @Override public void logWarning(String warning) { // executionReport.log(warning); } @Override public <T extends JPanel & ClosedStatusObservable> void showModalPanel(T panel, String title) { // TODO Auto-generated method stub } @Override public void submitControlLauncher(String instructionId, ODLComponent component, ODLDatastore<? extends ODLTable> parametersTableCopy,String reportTopLabel,ControlLauncherCallback cb) { // launch ODL Studio? } }); executionReport = executor.execute(subsetScript, ds); return executionReport; } @Override public Parameters parameters() { if(parameters==null){ parameters = new ParametersImpl(api); } return parameters; } }