package org.enhydra.shark.xpdl.elements;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.enhydra.shark.utilities.SequencedHashMap;
import org.enhydra.shark.xpdl.XMLAttribute;
import org.enhydra.shark.xpdl.XMLComplexElement;
import org.enhydra.shark.xpdl.XMLElement;
import org.enhydra.shark.xpdl.XMLElementChangeInfo;
public class Package extends XMLComplexElement {
protected Namespaces namespaces;
protected String internalVersion;
protected boolean isTransient;
protected SequencedHashMap extPkgRefsToIds = new SequencedHashMap();
public Package() {
super(null, true);
namespaces = new Namespaces(this);
internalVersion = "-1";
isTransient = false;
}
public void makeAs(XMLElement el) {
super.makeAs(el);
this.namespaces.makeAs(((Package) el).namespaces);
extPkgRefsToIds = new SequencedHashMap(((Package) el).extPkgRefsToIds);
this.isTransient = ((Package) el).isTransient;
}
protected void fillStructure() {
XMLAttribute attrId = new XMLAttribute(this, "Id", true); // required
XMLAttribute attrName = new XMLAttribute(this, "Name", false);
PackageHeader refPackageHeader = new PackageHeader(this);
RedefinableHeader refRedefinableHeader = new RedefinableHeader(this); // min=0
ConformanceClass refConformanceClass = new ConformanceClass(this); // min=0
Script refScript = new Script(this); // min=0
refScript.setType(Script.DEFAULT_TYPE);
ExternalPackages refExternalPackages = new ExternalPackages(this); // min=0
TypeDeclarations refTypeDeclarations = new TypeDeclarations(this); // min=0
Participants refParticipants = new Participants(this);
Applications refApplications = new Applications(this); // min=0
DataFields refDataFields = new DataFields(this); // min=0
WorkflowProcesses refWorkflowProcesses = new WorkflowProcesses(this); // min=0
ExtendedAttributes refExtendedAttributes = new ExtendedAttributes(this);
add(attrId);
add(attrName);
add(refPackageHeader);
add(refRedefinableHeader);
add(refConformanceClass);
add(refScript);
add(refExternalPackages);
add(refTypeDeclarations);
add(refParticipants);
add(refApplications);
add(refDataFields);
add(refWorkflowProcesses);
add(refExtendedAttributes);
}
public boolean isTransient() {
return isTransient;
}
public void setTransient(boolean trans) {
this.isTransient = trans;
}
public String getInternalVersion() {
return internalVersion;
}
public void setInternalVersion(String internalVersion) {
this.internalVersion = internalVersion;
}
public void addExternalPackageMapping(String epRef, String epId) {
extPkgRefsToIds.put(epRef, epId);
}
public void removeExternalPackageMapping(String epRef) {
extPkgRefsToIds.remove(epRef);
}
public String getExternalPackageId(String epRef) {
return (String) extPkgRefsToIds.get(epRef);
}
public Collection getExternalPackageIds() {
return new ArrayList(extPkgRefsToIds.values());
}
public ExternalPackage getExternalPackage(String id) {
ExternalPackage toRet = null;
Iterator it = getExternalPackages().toElements().iterator();
while (it.hasNext()) {
ExternalPackage ep = (ExternalPackage) it.next();
String href = ep.getHref();
String epId = getExternalPackageId(href);
if (epId != null && epId.equals(id)) {
toRet = ep;
break;
}
}
return toRet;
}
public WorkflowProcess getWorkflowProcess(String Id) {
return getWorkflowProcesses().getWorkflowProcess(Id);
}
public Application getApplication(String Id) {
return getApplications().getApplication(Id);
}
public Participant getParticipant(String Id) {
return getParticipants().getParticipant(Id);
}
public DataField getDataField(String Id) {
return getDataFields().getDataField(Id);
}
public TypeDeclaration getTypeDeclaration(String Id) {
return getTypeDeclarations().getTypeDeclaration(Id);
}
public String getId() {
return get("Id").toValue();
}
public void setId(String id) {
set("Id", id);
}
public String getName() {
return get("Name").toValue();
}
public void setName(String name) {
set("Name", name);
}
public Applications getApplications() {
return (Applications) get("Applications");
}
public ConformanceClass getConformanceClass() {
return (ConformanceClass) get("ConformanceClass");
}
public DataFields getDataFields() {
return (DataFields) get("DataFields");
}
public ExtendedAttributes getExtendedAttributes() {
return (ExtendedAttributes) get("ExtendedAttributes");
}
public ExternalPackages getExternalPackages() {
return (ExternalPackages) get("ExternalPackages");
}
public PackageHeader getPackageHeader() {
return (PackageHeader) get("PackageHeader");
}
public Participants getParticipants() {
return (Participants) get("Participants");
}
public RedefinableHeader getRedefinableHeader() {
return (RedefinableHeader) get("RedefinableHeader");
}
public Script getScript() {
return (Script) get("Script");
}
public TypeDeclarations getTypeDeclarations() {
return (TypeDeclarations) get("TypeDeclarations");
}
public WorkflowProcesses getWorkflowProcesses() {
return (WorkflowProcesses) get("WorkflowProcesses");
}
public Namespaces getNamespaces() {
return namespaces;
}
public void setNotifyMainListeners(boolean notify) {
super.setNotifyMainListeners(notify);
namespaces.setNotifyMainListeners(notify);
}
public void setReadOnly(boolean ro) {
super.setReadOnly(ro);
namespaces.setReadOnly(ro);
}
public Object clone() {
Package d = (Package) super.clone();
d.namespaces = (Namespaces) this.namespaces.clone();
d.namespaces.setParent(d);
d.extPkgRefsToIds = new SequencedHashMap(extPkgRefsToIds);
d.isTransient = isTransient;
d.clearCaches();
if (d.isReadOnly) {
d.initCaches();
}
return d;
}
public boolean equals(Object e) {
boolean equals = super.equals(e);
if (equals) {
Package el = (Package) e;
equals = (this.namespaces.equals(el.namespaces) && this.internalVersion.equals(el.internalVersion));
}
return equals;
}
protected boolean isMainElement() {
return true;
}
protected void notifyMainListeners(XMLElementChangeInfo info) {
if (parent == null) {
return;
}
super.notifyMainListeners(info);
}
public static void dbg() {
System.gc();
}
}