Package org.enhydra.jawe.base.xpdlobjectfactory

Source Code of org.enhydra.jawe.base.xpdlobjectfactory.XPDLObjectFactory

package org.enhydra.jawe.base.xpdlobjectfactory;

import java.lang.reflect.Method;
import java.util.HashSet;

import java.util.Map;
import org.enhydra.jawe.JaWEComponent;
import org.enhydra.jawe.JaWEConstants;
import org.enhydra.jawe.JaWEEAHandler;
import org.enhydra.jawe.JaWEManager;
import org.enhydra.jawe.ResourceManager;
import org.enhydra.jawe.Utils;
import org.enhydra.jawe.base.controller.JaWETypes;
import org.enhydra.jawe.base.xpdlhandler.XPDLHandler;
import org.enhydra.shark.xpdl.XMLCollection;
import org.enhydra.shark.xpdl.XMLCollectionElement;
import org.enhydra.shark.xpdl.XMLElement;
import org.enhydra.shark.xpdl.XMLUtil;
import org.enhydra.shark.xpdl.elements.Activities;
import org.enhydra.shark.xpdl.elements.Activity;
import org.enhydra.shark.xpdl.elements.ActivitySet;
import org.enhydra.shark.xpdl.elements.ActivitySets;
import org.enhydra.shark.xpdl.elements.ActualParameter;
import org.enhydra.shark.xpdl.elements.ActualParameters;
import org.enhydra.shark.xpdl.elements.Application;
import org.enhydra.shark.xpdl.elements.Applications;
import org.enhydra.shark.xpdl.elements.DataField;
import org.enhydra.shark.xpdl.elements.DataFields;
import org.enhydra.shark.xpdl.elements.Deadline;
import org.enhydra.shark.xpdl.elements.Deadlines;
import org.enhydra.shark.xpdl.elements.EnumerationType;
import org.enhydra.shark.xpdl.elements.EnumerationValue;
import org.enhydra.shark.xpdl.elements.ExtendedAttribute;
import org.enhydra.shark.xpdl.elements.ExtendedAttributes;
import org.enhydra.shark.xpdl.elements.ExternalPackage;
import org.enhydra.shark.xpdl.elements.ExternalPackages;
import org.enhydra.shark.xpdl.elements.FormalParameter;
import org.enhydra.shark.xpdl.elements.FormalParameters;
import org.enhydra.shark.xpdl.elements.Member;
import org.enhydra.shark.xpdl.elements.Namespace;
import org.enhydra.shark.xpdl.elements.Namespaces;
import org.enhydra.shark.xpdl.elements.Package;
import org.enhydra.shark.xpdl.elements.PackageHeader;
import org.enhydra.shark.xpdl.elements.Participant;
import org.enhydra.shark.xpdl.elements.Participants;
import org.enhydra.shark.xpdl.elements.RecordType;
import org.enhydra.shark.xpdl.elements.Responsible;
import org.enhydra.shark.xpdl.elements.Responsibles;
import org.enhydra.shark.xpdl.elements.Tool;
import org.enhydra.shark.xpdl.elements.Tools;
import org.enhydra.shark.xpdl.elements.Transition;
import org.enhydra.shark.xpdl.elements.TransitionRef;
import org.enhydra.shark.xpdl.elements.TransitionRefs;
import org.enhydra.shark.xpdl.elements.TransitionRestriction;
import org.enhydra.shark.xpdl.elements.TransitionRestrictions;
import org.enhydra.shark.xpdl.elements.Transitions;
import org.enhydra.shark.xpdl.elements.TypeDeclaration;
import org.enhydra.shark.xpdl.elements.TypeDeclarations;
import org.enhydra.shark.xpdl.elements.UnionType;
import org.enhydra.shark.xpdl.elements.WorkflowProcess;
import org.enhydra.shark.xpdl.elements.WorkflowProcesses;

public class XPDLObjectFactory {

    protected XPDLObjectFactorySettings settings;

    public XPDLObjectFactory() {
        settings = new XPDLObjectFactorySettings();
        settings.init((JaWEComponent) null);
    }

    public XPDLObjectFactory(XPDLObjectFactorySettings settings) {
        this.settings = settings;
        this.settings.init((JaWEComponent) null);
    }

    public Package createPackage(String type) {
        Package pkg = new Package();
        adjustType(pkg, type);
        XPDLHandler xpdlhandler = JaWEManager.getInstance().getXPDLHandler();
        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(pkg, type);
        }
        String id = pkg.getId();
        if (!hasTemplate || id.equals("") || xpdlhandler.getPackageById(id) != null) {
            int i = 0;
            while (id.equals("") || xpdlhandler.getPackageById(id) != null) {
                id = "package" + String.valueOf(++i);
            }
            pkg.setId(id);
        }
        if (!hasTemplate || pkg.getName().equals("")) {
            //CUSTOM
            pkg.setName("New Package");
            //END CUSTOM
        }
        PackageHeader ph = pkg.getPackageHeader();
        if (!hasTemplate) {
            ph.setXPDLVersion("1.0");
            ph.setVendor("Together");
        }
        ph.setCreated(Utils.getCurrentDateAndTime());

        Namespaces nss = pkg.getNamespaces();
        Namespace ns = createXPDLObject(nss, "", true);
        ns.setName("xpdl");
        ns.setLocation("http://www.wfmc.org/2002/XPDL1.0");
        adjustXPDLObject(pkg, type);

        return pkg;
    }

    public ActivitySet createXPDLObject(ActivitySets ass,
            String type,
            boolean addToCollection) {
        ActivitySet as = (ActivitySet) ass.generateNewElement();
        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        adjustType(as, type);
        if (hasTemplate) {
            jts.fillFromTemplate(as, type);
        }
        String id = as.getId();
        if (!hasTemplate || id.equals("") || ass.getActivitySet(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(ass);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(ass, new HashSet(), id);
            }
            int i = 0;
            while (ass.getActivitySet(id) != null) {
                id = id + String.valueOf(++i);
            }
            as.setId(id);
        }

        adjustXPDLObject(as, type);

        if (addToCollection) {
            ass.add(as);
        }
        return as;
    }

    public Activity createXPDLObject(Activities acts, String type, boolean addToCollection) {
        Activity act = null;
        if (type == null || type.equals("")) {
            type = JaWEConstants.ACTIVITY_TYPE_TOOL;
        }
        if (type.equals(JaWEConstants.ACTIVITY_TYPE_BLOCK) || type.equals(JaWEConstants.ACTIVITY_TYPE_NO) || type.equals(JaWEConstants.ACTIVITY_TYPE_ROUTE) || type.equals(JaWEConstants.ACTIVITY_TYPE_SUBFLOW) || type.equals(JaWEConstants.ACTIVITY_TYPE_TOOL)) {
            act = createStandardActivity(acts, type);
        } else {
            act = createSpecialActivity(acts, type);
        }

        adjustXPDLObject(act, type);

        if (addToCollection) {
            acts.add(act);
        }
        return act;
    }

    protected Activity createStandardActivity(Activities acts, String type) {
        Activity act = createXPDLActivity(acts, type);
        //CUSTOM
        String num = act.getId().substring("activity".length());
        act.setName("Activity " + num);
        //END CUSTOM
        if (type.equals(JaWEConstants.ACTIVITY_TYPE_BLOCK)) {
            act.getActivityTypes().setBlockActivity();
        } else if (type.equals(JaWEConstants.ACTIVITY_TYPE_ROUTE)) {
            int i = 1;
            String baseId = "route";
            String id = baseId + i;
            while (acts.getActivity(id) != null) {
                id = baseId + String.valueOf(++i);
            }
            act.setId(id);
            act.setName("Route " + i);
            act.getActivityTypes().setRoute();
        } else if (type.equals(JaWEConstants.ACTIVITY_TYPE_SUBFLOW)) {
            int i = 1;
            String baseId = "subflow";
            String id = baseId + i;
            while (acts.getActivity(id) != null) {
                id = baseId + String.valueOf(++i);
            }
            act.setId(id);
            act.setName("Subflow " + i);
            act.getActivityTypes().setImplementation();
            act.getActivityTypes().getImplementation().getImplementationTypes().setSubFlow();
        } else if (type.equals(JaWEConstants.ACTIVITY_TYPE_TOOL)) {
            //CUSTOM
            int i = 1;
            String baseId = "tool";
            String id = baseId + i;
            while (acts.getActivity(id) != null) {
                id = baseId + String.valueOf(++i);
            }
            act.setId(id);
            act.setName("Tool " + i);
            //END CUSTOM
            act.getActivityTypes().setImplementation();
            act.getActivityTypes().getImplementation().getImplementationTypes().setTools();

            // CUSTOM
            String defaultAppId = "default_application";
            // look for default tool
            XMLElement el = act.getParent();
            while (el.getParent() != null) {
                el = el.getParent();
            }
            Package pkg = (Package) el;
            Applications apps = pkg.getApplications();
            Application defaultApp = apps.getApplication(defaultAppId);
            if (defaultApp == null) {
                // create default app
                defaultApp = createXPDLObject(apps, null, true);
                defaultApp.setId(defaultAppId);
            }

            // create tool mapping
            Tools tools = act.getActivityTypes().getImplementation().getImplementationTypes().getTools();
            Tool tool = createXPDLObject(tools, null, true);
            tool.setId(defaultAppId);
            // END CUSTOM
        } else if (type.equals(JaWEConstants.ACTIVITY_TYPE_NO)) {
            act.getActivityTypes().setImplementation();
            act.getActivityTypes().getImplementation().getImplementationTypes().setNo();

            // CUSTOM: grab every available workflow variable from the workflow process that it belongs to and add as extended attribute (view only)
            WorkflowProcess process = (WorkflowProcess) act.getParent().getParent();
            Map m = XMLUtil.getPossibleVariables(process);
            XMLCollectionElement dataFields[] = (XMLCollectionElement[]) m.values().toArray(new XMLCollectionElement[0]);
            for (int i = 0; i < dataFields.length; i++) {
                ExtendedAttribute attribute = this.createXPDLObject(act.getExtendedAttributes(), null, true);
                attribute.setName("VariableToProcess_UPDATE");
                attribute.setVValue(dataFields[i].getId());
            }
            // END CUSTOM
        }
        return act;
    }

    protected Activity createSpecialActivity(Activities acts, String type) {
        Activity act = createXPDLActivity(acts, type);
        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);

        if (!hasTemplate) {
            act.getActivityTypes().getImplementation().getImplementationTypes().setTools();
            act.getActivityTypes().setImplementation();
        }
        return act;
    }

    protected Activity createXPDLActivity(Activities acts, String type) {
        Activity act = (Activity) acts.generateNewElement();
        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(act, type);
        }
        String id = act.getId();
        if (!hasTemplate || id.equals("") || acts.getActivity(id) != null) {

            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(acts);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(acts, new HashSet(), id);
            }

            int i = 0;
            while (acts.getActivity(id) != null) {
                id = id + String.valueOf(++i);
            }
            act.setId(id);
        }

        return act;
    }

    public ActualParameter createXPDLObject(ActualParameters aps,
            String type,
            boolean addToCollection) {
        ActualParameter ap = (ActualParameter) aps.generateNewElement();
        adjustType(ap, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(ap, type);
        }

        adjustXPDLObject(ap, type);

        if (addToCollection) {
            aps.add(ap);
        }
        return ap;
    }

    public Application createXPDLObject(Applications apps,
            String type,
            boolean addToCollection) {
        Application app = (Application) apps.generateNewElement();
        adjustType(app, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(app, type);
        }
        String id = app.getId();
        if (!hasTemplate || id.equals("") || apps.getApplication(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(apps);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(apps, new HashSet(), id);
            }
            int i = 0;
            while (apps.getApplication(id) != null) {
                id = id + String.valueOf(++i);
            }
            app.setId(id);
        }

        adjustXPDLObject(app, type);

        if (addToCollection) {
            apps.add(app);
        }
        return app;
    }

    public DataField createXPDLObject(DataFields dfs, String type, boolean addToCollection) {
        DataField df = (DataField) dfs.generateNewElement();
        adjustType(df, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(df, type);
        }
        String id = df.getId();
        if (!hasTemplate || id.equals("") || dfs.getDataField(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(dfs);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(dfs, new HashSet(), id);
            }
            int i = 0;
            while (dfs.getDataField(id) != null) {
                id = id + String.valueOf(++i);
            }
            df.setId(id);
        }

        adjustXPDLObject(df, type);

        if (addToCollection) {
            dfs.add(df);
        }

        return df;
    }

    public Deadline createXPDLObject(Deadlines dls, String type, boolean addToCollection) {
        Deadline dl = (Deadline) dls.generateNewElement();
        adjustType(dl, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(dl, type);
        }

        adjustXPDLObject(dl, type);

        if (addToCollection) {
            dls.add(dl);
        }
        return dl;
    }

    public EnumerationValue createXPDLObject(EnumerationType et,
            String type,
            boolean addToCollection) {
        EnumerationValue ev = (EnumerationValue) et.generateNewElement();
        adjustType(ev, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(ev, type);
        }

        adjustXPDLObject(ev, type);

        if (addToCollection) {
            et.add(ev);
        }
        return ev;
    }

    public ExtendedAttribute createXPDLObject(ExtendedAttributes eas,
            String type,
            boolean addToCollection) {
        ExtendedAttribute ea = (ExtendedAttribute) eas.generateNewElement();
        adjustType(ea, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(ea, type);
        }

        adjustXPDLObject(ea, type);

        if (addToCollection) {
            eas.add(ea);
        }
        return ea;
    }

    public ExternalPackage createXPDLObject(ExternalPackages eps,
            String type,
            boolean addToCollection) {
        ExternalPackage ep = (ExternalPackage) eps.generateNewElement();
        adjustType(ep, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(ep, type);
        }

        adjustXPDLObject(ep, type);

        if (addToCollection) {
            eps.add(ep);
        }
        return ep;
    }

    public FormalParameter createXPDLObject(FormalParameters fps,
            String type,
            boolean addToCollection) {
        FormalParameter fp = (FormalParameter) fps.generateNewElement();
        adjustType(fp, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(fp, type);
        }
        String id = fp.getId();
        if (!hasTemplate || id.equals("") || fps.getFormalParameter(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(fps);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(fps, new HashSet(), id);
            }
            int i = 0;
            while (fps.getFormalParameter(id) != null) {
                id = id + String.valueOf(++i);
            }
            fp.setId(id);
        }

        adjustXPDLObject(fp, type);

        if (addToCollection) {
            fps.add(fp);
        }
        return fp;
    }

    public Namespace createXPDLObject(Namespaces nss, String type, boolean addToCollection) {
        Namespace ns = (Namespace) nss.generateNewElement();
        adjustType(ns, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(ns, type);
        }

        adjustXPDLObject(ns, type);

        if (addToCollection) {
            nss.add(ns);
        }
        return ns;
    }

    public Participant createXPDLObject(Participants ps,
            String type,
            boolean addToCollection) {
        Participant par = (Participant) ps.generateNewElement();
        adjustType(par, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(par, type);
        }
        String id = par.getId();
        if (!hasTemplate || id.equals("") || ps.getParticipant(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(ps);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(ps, new HashSet(), id);
            }
            int i = 0;
            while (ps.getParticipant(id) != null) {
                id = id + String.valueOf(++i);
            }
            par.setId(id);
        }

        if (!hasTemplate || par.getName().equals("")) {
            //CUSTOM
            String num = id.substring("participant".length());
            par.setName("Participant " + num);
            //END CUSTOM
        }

        if (type == null || type.equals("")) {
            type = JaWEConstants.PARTICIPANT_TYPE_ROLE;
        }

        if (type.equals(JaWEConstants.PARTICIPANT_TYPE_HUMAN)) {
            par.getParticipantType().setTypeHUMAN();
        } else if (type.equals(JaWEConstants.PARTICIPANT_TYPE_ROLE)) {
            par.getParticipantType().setTypeROLE();
        } else if (type.equals(JaWEConstants.PARTICIPANT_TYPE_ORGANIZATIONAL_UNIT)) {
            par.getParticipantType().setTypeORGANIZATIONAL_UNIT();
        } else if (type.equals(JaWEConstants.PARTICIPANT_TYPE_RESOURCE)) {
            par.getParticipantType().setTypeRESOURCE();
        } else if (type.equals(JaWEConstants.PARTICIPANT_TYPE_RESOURCE_SET)) {
            par.getParticipantType().setTypeRESOURCE_SET();
        } else if (type.equals(JaWEConstants.PARTICIPANT_TYPE_SYSTEM)) {
            par.getParticipantType().setTypeSYSTEM();
        }

        adjustXPDLObject(par, type);

        if (addToCollection) {
            ps.add(par);
        }
        return par;
    }

    public Member createXPDLObject(RecordType rt, String type, boolean addToCollection) {
        Member m = (Member) rt.generateNewElement();
        adjustType(m, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(m, type);
        }

        adjustXPDLObject(m, type);

        if (addToCollection) {
            rt.add(m);
        }
        return m;
    }

    public Responsible createXPDLObject(Responsibles rs,
            String type,
            boolean addToCollection) {
        Responsible r = (Responsible) rs.generateNewElement();
        adjustType(r, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(r, type);
        }

        adjustXPDLObject(r, type);

        if (addToCollection) {
            rs.add(r);
        }
        return r;
    }

    public Tool createXPDLObject(Tools ts, String type, boolean addToCollection) {
        Tool t = (Tool) ts.generateNewElement();
        adjustType(t, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(t, type);
        }

        adjustXPDLObject(t, type);

        if (addToCollection) {
            ts.add(t);
        }
        return t;
    }

    public Transition createXPDLObject(Transitions tras,
            String type,
            boolean addToCollection) {
        if (type == null || type.equals("")) {
            type = JaWEConstants.TRANSITION_TYPE_UNCONDITIONAL;
        }

        Transition tra = createXPDLTransition(tras, type);
        if (type.equals(JaWEConstants.TRANSITION_TYPE_CONDITIONAL)) {
            tra.getCondition().setTypeCONDITION();
        } else if (type.equals(JaWEConstants.TRANSITION_TYPE_OTHERWISE)) {
            tra.getCondition().setTypeOTHERWISE();
        } else if (type.equals(JaWEConstants.TRANSITION_TYPE_EXCEPTION)) {
            tra.getCondition().setTypeEXCEPTION();
        } else if (type.equals(JaWEConstants.TRANSITION_TYPE_DEFAULTEXCEPTION)) {
            tra.getCondition().setTypeDEFAULTEXCEPTION();
        }

        adjustXPDLObject(tra, type);

        if (addToCollection) {
            tras.add(tra);
        }
        return tra;
    }

    protected Transition createXPDLTransition(Transitions tras, String type) {
        Transition tra = (Transition) tras.generateNewElement();
        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(tra, type);
        }
        String id = tra.getId();
        if (!hasTemplate || id.equals("") || tras.getTransition(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(tras);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(tras, new HashSet(), id);
            }
            int i = 0;
            while (tras.getTransition(id) != null) {
                id = id + String.valueOf(++i);
            }
            tra.setId(id);
        }

        return tra;
    }

    public TransitionRef createXPDLObject(TransitionRefs trs,
            String type,
            boolean addToCollection) {
        TransitionRef tr = (TransitionRef) trs.generateNewElement();
        adjustType(tr, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(tr, type);
        }

        adjustXPDLObject(tr, type);

        if (addToCollection) {
            trs.add(tr);
        }
        return tr;
    }

    public TransitionRestriction createXPDLObject(TransitionRestrictions trests,
            String type,
            boolean addToCollection) {
        TransitionRestriction tres = (TransitionRestriction) trests.generateNewElement();
        adjustType(tres, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(tres, type);
        }

        adjustXPDLObject(tres, type);

        if (addToCollection) {
            trests.add(tres);
        }
        return tres;
    }

    public TypeDeclaration createXPDLObject(TypeDeclarations tds,
            String type,
            boolean addToCollection) {
        TypeDeclaration td = (TypeDeclaration) tds.generateNewElement();
        adjustType(td, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(td, type);
        }
        String id = td.getId();
        if (!hasTemplate || id.equals("") || tds.getTypeDeclaration(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(tds);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(tds, new HashSet(), id);
            }
            int i = 0;
            while (tds.getTypeDeclaration(id) != null) {
                id = id + String.valueOf(++i);
            }
            td.setId(id);
        }

        adjustXPDLObject(td, type);

        if (addToCollection) {
            tds.add(td);
        }
        return td;
    }

    public Member createXPDLObject(UnionType ut, String type, boolean addToCollection) {
        Member m = (Member) ut.generateNewElement();
        adjustType(m, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(m, type);
        }

        adjustXPDLObject(m, type);

        if (addToCollection) {
            ut.add(m);
        }
        return m;
    }

    public WorkflowProcess createXPDLObject(WorkflowProcesses wps,
            String type,
            boolean addToCollection) {
        WorkflowProcess wp = (WorkflowProcess) wps.generateNewElement();
        adjustType(wp, type);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();
        boolean hasTemplate = jts.hasTemplateId(type);
        if (hasTemplate) {
            jts.fillFromTemplate(wp, type);
        }
        String id = wp.getId();

        if (!hasTemplate || id.equals("") || wps.getWorkflowProcess(id) != null) {
            if (id.equals("")) {
                id = JaWEManager.getInstance().getIdFactory().generateUniqueId(wps);
            } else {
                id = JaWEManager.getInstance().getIdFactory().generateSimilarOrIdenticalUniqueId(wps, new HashSet(), id);
            }
            int i = 0;
            while (wps.getWorkflowProcess(id) != null) {
                id = id + String.valueOf(++i);
            }
            wp.setId(id);
        }

        if (!hasTemplate || wp.getName().equals("")) {
            //CUSTOM
            String num = id.substring("process".length());
            wp.setName("Workflow Process " + num);
            //END CUSTOM
        }

        wp.getProcessHeader().setCreated(Utils.getCurrentDateAndTime());
        wp.getProcessHeader().setDurationUnitHOUR();
        wp.getRedefinableHeader().setAuthor(XMLUtil.getPackage(wps).getRedefinableHeader().getAuthor());

        adjustXPDLObject(wp, type);

        if (addToCollection) {
            wps.add(wp);
        }
        return wp;
    }

    public void adjustXPDLObject(XMLElement el, String type) {
        if (type != null && !type.equals("")) {
            JaWEEAHandler.setJaWEType(el, type);
        }
    }

    public XMLElement createXPDLObject(XMLCollection col,
            String type,
            boolean addToCollection) {
        try {
            Class cl = col.getClass();
            Method m = null;
            try {
                m = this.getClass().getMethod("createXPDLObject", new Class[]{
                            cl, String.class, boolean.class
                        });
            } catch (Exception ex) {
                if (!(cl == XMLCollection.class)) {
                    if (XMLCollection.class.isAssignableFrom(cl)) {
                        cl = XMLCollection.class;
                    }
                }
            }
            m = this.getClass().getMethod("createXPDLObject", new Class[]{
                        cl, String.class, boolean.class
                    });
            return (XMLElement) m.invoke(this, new Object[]{
                        col, type, new Boolean(addToCollection)
                    });
        } catch (Throwable e) {
            e.printStackTrace();
            return null;
        }

    }

    public XMLElement duplicateXPDLObject(XMLCollection col, XMLElement el) {
        XMLElement dup = col.generateNewElement();
        dup.makeAs(el);
        if (dup instanceof XMLCollectionElement) {
            if (!(dup instanceof Tool)) {
                ((XMLCollectionElement) dup).setId(JaWEManager.getInstance().getIdFactory().generateUniqueId((XMLCollection) dup.getParent()));
            }
            XMLElement name = ((XMLCollectionElement) el).get("Name");
            if (name != null && name.toValue().length() > 0) {
                ((XMLCollectionElement) dup).set("Name",
                        ResourceManager.getLanguageDependentString("CopyOfKey") + " " + name.toValue());
            }
        }
        return dup;
    }

    public XMLElement makeIdenticalXPDLObject(XMLCollection col, XMLElement el) {
        XMLElement dup = col.generateNewElement();
        dup.makeAs(el);
        return dup;
    }

    protected String adjustType(XMLElement el, String type) {
        if (type == null || type.equals("")) {
            type = JaWEManager.getInstance().getJaWEController().getJaWETypes().getDefaultType(el);
        }
        return type;
    }
}
TOP

Related Classes of org.enhydra.jawe.base.xpdlobjectfactory.XPDLObjectFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.