package Specification;
import java.util.Enumeration;
import java.util.List;
import FileOps.Generator;
import FileOps.Parser;
import FileOps.XStream.XStreamWrapper;
import Galaxy.Tree.Tool.Input.Input;
import LONI.tree.*;
import LONI.tree.GraphObject.*;
import LONI.tree.module.Output;
import LONI.tree.module.Parameter;
import LONI.tree.module.Value;
import LONI.tree.module.Values;
import LONI.tree.module.format.FileType;
import LONI.tree.module.format.FileTypes;
import LONI.tree.module.format.Format;
import LONI.tree.module.metadata.Metadata;
import LONI.tree.workflow.Connection;
import LONI.tree.workflow.Connections;
import LONI.tree.workflow.Pipeline;
import LONI.tree.workflow.Variable;
import LONI.tree.workflow.Variables;
import Specification.LONI.ValueHandler;
public class LoniSpecification {
private static XStreamWrapper<Pipeline> xstream = new XStreamWrapper<Pipeline>();
private static boolean initialized = false;
private static void init(){
initXML();
initialized = true;
}
private static void initXML(){
/*Pipeline*/
xstream.bindElementToClass(Pipeline.class, "pipeline");
xstream.bindAttributeToClassField(Pipeline.class, "version", "version");
xstream.bindAttributeToClassField(Pipeline.class, "pipelineModuleGroup", "moduleGroup");
xstream.bindAttributeToClassField(Pipeline.class, "connections", "connections");
/*ModuleGroup*/
xstream.bindElementToClass(ModuleGroup.class, "moduleGroup");
xstream.bindAttributeToClassField(ModuleGroup.class, "id", "id");
xstream.bindAttributeToClassField(ModuleGroup.class, "name", "name");
xstream.bindAttributeToClassField(ModuleGroup.class, "myPackage", "package");
xstream.bindAttributeToClassField(ModuleGroup.class, "version", "version");
xstream.bindAttributeToClassField(ModuleGroup.class, "description", "description");
xstream.bindAttributeToClassField(ModuleGroup.class, "posX", "posX");
xstream.bindAttributeToClassField(ModuleGroup.class, "posY", "posY");
xstream.bindAttributeToClassField(ModuleGroup.class, "rotation", "rotation");
xstream.bindElementToClassField(ModuleGroup.class, "variables", "variables");
xstream.bindElementToClassField(ModuleGroup.class, "authors", "authors");
xstream.bindGroupToList(ModuleGroup.class, "inputs", Parameter.class);
xstream.bindGroupToList(ModuleGroup.class, "outputs", Output.class);
xstream.bindGroupToList(ModuleGroup.class, "modules", GraphObject.class);
xstream.bindElementToClassField(ModuleGroup.class, "metadata", "metadata");
//xstream.bindElementToClassField(ModuleGroup.class, "connections", "connections");
/*Connection(s)*/
xstream.bindElementToClass(Connections.class, "connections");
xstream.bindGroupToList(Connections.class, "connections");
xstream.bindElementToClass(Connection.class, "connection");
xstream.bindElementToClass(Connection.class, "connection");
xstream.bindAttributeToClassField(Connection.class, "source", "source");
xstream.bindAttributeToClassField(Connection.class, "sink", "sink");
/*Format*/
xstream.bindAttributeToClassField(Format.class, "cardinality", "cardinality");
xstream.bindAttributeToClassField(Format.class, "cardinalityBase", "cardinalityBase");
xstream.bindAttributeToClassField(Format.class, "transformationBase", "transformationBase");
xstream.bindElementToClass(Format.class, "format");
xstream.bindAttributeToClassField(Format.class, "type", "type");
xstream.bindGroupToList(Format.class, "enumerations", String.class);
xstream.bindElementToClass(String.class, "enumeration");
/*Values */
xstream.bindGroupToList(Values.class, "values", Value.class);
xstream.bindElementToClass(Value.class, "value");
xstream.addAdvancedHandler(new ValueHandler());
//xstream.bindElementToClassField(Value.class,"metadata", "value");
/* Variables*/
xstream.bindGroupToList(Variables.class, "variables");
xstream.bindElementToClass(Variable.class, "variable");
xstream.bindAttributeToClassField(Variable.class, "required", "required");
xstream.bindAttributeToClassField(Variable.class, "name", "name");
xstream.bindAttributeToClassField(Variable.class, "description", "description");
xstream.bindAttributeToClassField(Variable.class, "secret", "secret");
xstream.bindAttributeToClassField(Variable.class, "order", "order");
/* FileType(s) */
xstream.bindElementToClass(FileTypes.class, "fileTypes");
xstream.bindGroupToList(FileTypes.class, "fileTypes");
xstream.bindElementToClass(FileType.class, "filetype");
xstream.bindAttributeToClassField(FileType.class, "name", "name");
xstream.bindAttributeToClassField(FileType.class, "extension", "extension");
xstream.bindAttributeToClassField(FileType.class, "description", "description");
/*Output*/
/*Module*/
xstream.bindElementToClass(Module.class, "module");
xstream.bindElementToClass(String.class, "tag");
xstream.bindGroupToList(Module.class, "tags", String.class);
xstream.bindGroupToList(Module.class , "inputs", Input.class);
xstream.bindGroupToList(Module.class , "outputs", Output.class);
xstream.bindGroupToList(Module.class , "metadata", Metadata.class);
xstream.bindAttributeToClassField(Module.class, "myPackage", "package");
xstream.bindAttributeToClassField(Module.class, "id", "id");
xstream.bindAttributeToClassField(Module.class, "location", "location");
xstream.bindAttributeToClassField(Module.class, "description", "description");
xstream.bindAttributeToClassField(Module.class, "rotation", "rotation");
xstream.bindAttributeToClassField(Module.class, "version", "version");
xstream.bindAttributeToClassField(Module.class, "name", "name");
xstream.bindAttributeToClassField(Module.class, "executableVersion", "executableVersion");
xstream.bindAttributeToClassField(Module.class, "posX", "posX");
xstream.bindAttributeToClassField(Module.class, "posY", "posY");
xstream.bindGroupToList(Module.class ,"outputs", Output.class);
xstream.bindGroupToList(Module.class ,"inputs",Parameter.class);
xstream.bindElementToClass(Output.class, "output");
xstream.bindAttributeToClassField(Output.class, "id", "id");
xstream.bindAttributeToClassField(Output.class, "name", "name");
xstream.bindAttributeToClassField(Output.class, "description", "description");
xstream.bindAttributeToClassField(Output.class, "required", "required");
xstream.bindAttributeToClassField(Output.class, "enabled", "enabled");
xstream.bindAttributeToClassField(Output.class, "order", "order");
xstream.bindAttributeToClassField(Output.class, "prefix", "prefix");
xstream.bindAttributeToClassField(Output.class, "prefixSpaced", "prefixSpaced");
xstream.bindAttributeToClassField(Output.class, "prefixAllArgs", "prefixAllArgs");
xstream.bindElementToClassField(Output.class, "values", "values");
xstream.bindAttributeToClassField(Output.class, "link", "link");
xstream.bindElementToClassField(Output.class, "format", "format");
xstream.bindElementToClass(Format.class, "format");
xstream.bindAttributeToClassField(Format.class, "type", "type");
xstream.bindAttributeToClassField(Format.class, "cardinality", "cardinality");
xstream.bindAttributeToClassField(Format.class, "cardinalityBase", "cardinalityBase");
xstream.bindAttributeToClassField(Format.class, "transformationBase", "transformationBase");
xstream.bindElementToClassField(Format.class, "fileTypes", "fileTypes");
/*DataModule*/
xstream.bindElementToClass(DataModule.class, "dataModule");
xstream.bindAttributeToClassField(DataModule.class, "myPackage", "package");
xstream.bindAttributeToClassField(DataModule.class, "id", "id");
xstream.bindAttributeToClassField(DataModule.class, "description", "description");
xstream.bindAttributeToClassField(DataModule.class, "rotation", "rotation");
xstream.bindAttributeToClassField(DataModule.class, "version", "version");
xstream.bindAttributeToClassField(DataModule.class, "name", "name");
xstream.bindAttributeToClassField(DataModule.class, "posX", "posX");
xstream.bindAttributeToClassField(DataModule.class, "posY", "posY");
xstream.bindAttributeToClassField(DataModule.class, "type", "type");
xstream.bindAttributeToClassField(DataModule.class, "source", "source");
xstream.bindAttributeToClassField(DataModule.class, "dirSource", "dirSource");
xstream.bindAttributeToClassField(DataModule.class, "dirDump", "dirDump");
xstream.bindAttributeToClassField(DataModule.class, "useDirSourceFilters", "useDirSourceFilters");
xstream.bindAttributeToClassField(DataModule.class, "dirSourceFilterType", "dirSourceFilterType");
xstream.bindAttributeToClassField(DataModule.class, "recursive", "recursive");
xstream.bindAttributeToClassField(DataModule.class, "metadata", "metadata");
xstream.bindAttributeToClassField(DataModule.class, "fileTypes", "fileTypes");
xstream.bindGroupToList(DataModule.class, "outputs", Output.class);
xstream.bindGroupToList(DataModule.class, "inputs", Parameter.class);
xstream.bindGroupToList(DataModule.class, "tags", String.class);
xstream.bindElementToClassField(DataModule.class, "uri", "uri");
xstream.bindElementToClassField(DataModule.class, "authors", "authors");
/*Authors*/
xstream.bindElementToClass(Authors.class, "authors");
xstream.bindGroupToList(Authors.class, "authors");
/*Author*/
xstream.bindElementToClass(Author.class, "author");
xstream.bindAttributeToClassField(Author.class, "fullName", "fullName");
xstream.bindAttributeToClassField(Author.class, "email", "email");
xstream.bindAttributeToClassField(Author.class, "website", "website");
/*Metadata*/
xstream.bindElementToClass(Metadata.class, "metadata");
xstream.bindElementToClassField(Metadata.class, "data", "data");
/*Parameter*/
xstream.bindElementToClass(Parameter.class, "input");
xstream.bindElementToClassField(Parameter.class, "fileFormat", "format");
xstream.bindElementToClassField(Parameter.class, "values", "values");
xstream.bindAttributeToClassField(Parameter.class, "name", "name");
xstream.bindAttributeToClassField(Parameter.class, "required", "required");
xstream.bindAttributeToClassField(Parameter.class, "enabled", "enabled");
xstream.bindAttributeToClassField(Parameter.class, "order", "order");
xstream.bindAttributeToClassField(Parameter.class, "id", "id");
xstream.bindAttributeToClassField(Parameter.class, "predefined", "predefined");
xstream.bindAttributeToClassField(Parameter.class, "isMetadata", "isMetadata");
xstream.bindAttributeToClassField(Parameter.class, "isListFile", "isListFile");
xstream.bindAttributeToClassField(Parameter.class, "isHideData", "isHideData");
xstream.bindAttributeToClassField(Parameter.class, "includeTransformedParameter", "includeTransformedParameter");
xstream.bindAttributeToClassField(Parameter.class, "prefix", "prefix");
xstream.bindAttributeToClassField(Parameter.class, "description", "description");
xstream.bindAttributeToClassField(Parameter.class, "link", "link");
xstream.bindAttributeToClassField(Parameter.class, "prefixSpaced", "prefixSpaced");
xstream.bindAttributeToClassField(Parameter.class, "prefixAllArgs", "prefixAllArgs");
}
public static Parser<Pipeline> getXMLParser(){
if(!initialized)
init();
return xstream;
}
public static Generator<Pipeline> getXMLGenerator(){
if(!initialized)
init();
return xstream;
}
}