/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.core.scripts.elements;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import com.opendoorlogistics.core.utils.strings.Strings;
@XmlType(propOrder = { "componentConfigs", "adapters", "instructions" , "outputs", "options"})
@XmlRootElement(name="Option")
public class Option extends ScriptBaseElementImpl{
protected List<AdapterConfig> adapters = new ArrayList<>();
protected List<InstructionConfig> instructions = new ArrayList<>();
protected List<OutputConfig> outputs = new ArrayList<>();
protected List<Option> childOptions = new ArrayList<>();
private List<ComponentConfig> componentConfig = new ArrayList<ComponentConfig>();
private String optionId;
private boolean synchronised;
private boolean launchMultiple;
private boolean overrideVisibleParameters=false;
private boolean refreshButtonAlwaysEnabled=false;
private boolean showLastRefreshedTime=false;
private String visibleParametersOverride;
public String getOptionId() {
return optionId;
}
@XmlAttribute(name="OptionId")
public void setOptionId(String optionId) {
if(Strings.isEmpty(optionId)){
throw new RuntimeException("Script option id cannot be empty.");
}
// if(Strings.isEmptyAlphaNumericWhitespaceOrDash(optionId)==false){
// throw new RuntimeException("Invalid script option id: " + optionId);
// }
this.optionId = optionId;
}
@Override
public String getShortDescription() {
return "An optional execution path within the script";
}
public List<AdapterConfig> getAdapters() {
return adapters;
}
public List<InstructionConfig> getInstructions() {
return instructions;
}
/**
* Add the input option to this option.
* Assumes ids are already unique
* @param other
*/
public void mergeIntoMe(Option other){
getAdapters().addAll(other.getAdapters());
getInstructions().addAll(other.getInstructions());
getOutputs().addAll(other.getOutputs());
getOptions().addAll(other.getOptions());
getComponentConfigs().addAll(other.getComponentConfigs());
}
@XmlTransient
public InstructionConfig getLastInstruction(){
if(instructions!=null && instructions.size()>0){
return instructions.get(instructions.size()-1);
}
return null;
}
@XmlElement(name="Adapter")
public void setAdapters(List<AdapterConfig> adapters) {
this.adapters = adapters;
}
@XmlElement(name="Instruction")
public void setInstructions(List<InstructionConfig> instructions) {
this.instructions = instructions;
}
public List<OutputConfig> getOutputs() {
return outputs;
}
@XmlElement(name="Output")
public void setOutputs(List<OutputConfig> reports) {
this.outputs = reports;
}
public AdapterConfig createAdapter(String id){
AdapterConfig ret = new AdapterConfig(id);
adapters.add(ret);
return ret;
}
public AdaptedTableConfig createSingleTableAdapter(String adapterId,String fromDatastoreid, String fromTable, String toTable){
AdapterConfig adapter = createAdapter(adapterId);
AdaptedTableConfig ret = adapter.createTable(fromTable, toTable);
ret.setFromDatastore(fromDatastoreid);
return ret;
}
// public ComponentConfig createInstruction(String dataStoreId,String outputDatastoreId, String componentId, Serializable componentConfig){
// InstructionConfig ret = new InstructionConfig(dataStoreId, outputDatastoreId,componentId, componentConfig);
// instructions.add(ret);
// return ret;
// }
//
public List<Option> getOptions(){
return childOptions;
}
@XmlElement(name="Option")
public void setOptions(List<Option> childOptions){
this.childOptions = childOptions;
}
public boolean isSynchronised() {
return synchronised;
}
@XmlAttribute
public void setSynchronised(boolean sychronised) {
this.synchronised = sychronised;
}
public List<ComponentConfig> getComponentConfigs() {
return componentConfig;
}
@XmlElement(name="ComponentConfig")
public void setComponentConfigs(List<ComponentConfig> componentConfig) {
this.componentConfig = componentConfig;
}
public boolean isOverrideVisibleParameters() {
return overrideVisibleParameters;
}
@XmlAttribute
public void setOverrideVisibleParameters(boolean overrideVisibleParameters) {
this.overrideVisibleParameters = overrideVisibleParameters;
}
public String getVisibleParametersOverride() {
return visibleParametersOverride;
}
@XmlAttribute
public void setVisibleParametersOverride(String visibleParametersOverride) {
this.visibleParametersOverride = visibleParametersOverride;
}
public boolean isLaunchMultiple() {
return launchMultiple;
}
@XmlAttribute
public void setLaunchMultiple(boolean launchMultiple) {
this.launchMultiple = launchMultiple;
}
public boolean isRefreshButtonAlwaysEnabled() {
return refreshButtonAlwaysEnabled;
}
@XmlAttribute
public void setRefreshButtonAlwaysEnabled(boolean refreshButtonAlwaysEnabled) {
this.refreshButtonAlwaysEnabled = refreshButtonAlwaysEnabled;
}
public boolean isShowLastRefreshedTime() {
return showLastRefreshedTime;
}
@XmlAttribute
public void setShowLastRefreshedTime(boolean showLastRefreshedTime) {
this.showLastRefreshedTime = showLastRefreshedTime;
}
}