/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.camunda.bpm.model.dmn.impl.instance;
import static org.camunda.bpm.model.dmn.impl.DmnModelConstants.CAMUNDA_ATTRIBUTE_HISTORY_TIME_TO_LIVE;
import static org.camunda.bpm.model.dmn.impl.DmnModelConstants.CAMUNDA_NS;
import static org.camunda.bpm.model.dmn.impl.DmnModelConstants.DMN11_NS;
import static org.camunda.bpm.model.dmn.impl.DmnModelConstants.DMN_ELEMENT_DECISION;
import java.util.Collection;
import org.camunda.bpm.model.dmn.instance.AllowedAnswers;
import org.camunda.bpm.model.dmn.instance.AuthorityRequirement;
import org.camunda.bpm.model.dmn.instance.Decision;
import org.camunda.bpm.model.dmn.instance.DecisionMakerReference;
import org.camunda.bpm.model.dmn.instance.DecisionOwnerReference;
import org.camunda.bpm.model.dmn.instance.DrgElement;
import org.camunda.bpm.model.dmn.instance.Expression;
import org.camunda.bpm.model.dmn.instance.ImpactedPerformanceIndicatorReference;
import org.camunda.bpm.model.dmn.instance.InformationRequirement;
import org.camunda.bpm.model.dmn.instance.KnowledgeRequirement;
import org.camunda.bpm.model.dmn.instance.OrganizationUnit;
import org.camunda.bpm.model.dmn.instance.PerformanceIndicator;
import org.camunda.bpm.model.dmn.instance.Question;
import org.camunda.bpm.model.dmn.instance.SupportedObjectiveReference;
import org.camunda.bpm.model.dmn.instance.UsingProcessReference;
import org.camunda.bpm.model.dmn.instance.UsingTaskReference;
import org.camunda.bpm.model.dmn.instance.Variable;
import org.camunda.bpm.model.xml.ModelBuilder;
import org.camunda.bpm.model.xml.impl.instance.ModelTypeInstanceContext;
import org.camunda.bpm.model.xml.type.ModelElementTypeBuilder;
import org.camunda.bpm.model.xml.type.ModelElementTypeBuilder.ModelTypeInstanceProvider;
import org.camunda.bpm.model.xml.type.attribute.Attribute;
import org.camunda.bpm.model.xml.type.child.ChildElement;
import org.camunda.bpm.model.xml.type.child.ChildElementCollection;
import org.camunda.bpm.model.xml.type.child.SequenceBuilder;
import org.camunda.bpm.model.xml.type.reference.ElementReferenceCollection;
public class DecisionImpl extends DrgElementImpl implements Decision {
protected static ChildElement<Question> questionChild;
protected static ChildElement<AllowedAnswers> allowedAnswersChild;
protected static ChildElement<Variable> variableChild;
protected static ChildElementCollection<InformationRequirement> informationRequirementCollection;
protected static ChildElementCollection<KnowledgeRequirement> knowledgeRequirementCollection;
protected static ChildElementCollection<AuthorityRequirement> authorityRequirementCollection;
protected static ChildElementCollection<SupportedObjectiveReference> supportedObjectiveChildElementCollection;
protected static ElementReferenceCollection<PerformanceIndicator, ImpactedPerformanceIndicatorReference> impactedPerformanceIndicatorRefCollection;
protected static ElementReferenceCollection<OrganizationUnit, DecisionMakerReference> decisionMakerRefCollection;
protected static ElementReferenceCollection<OrganizationUnit, DecisionOwnerReference> decisionOwnerRefCollection;
protected static ChildElementCollection<UsingProcessReference> usingProcessCollection;
protected static ChildElementCollection<UsingTaskReference> usingTaskCollection;
protected static ChildElement<Expression> expressionChild;
// camunda extensions
protected static Attribute<Integer> camundaHistoryTimeToLiveAttribute;
public DecisionImpl(ModelTypeInstanceContext instanceContext) {
super(instanceContext);
}
public Question getQuestion() {
return questionChild.getChild(this);
}
public void setQuestion(Question question) {
questionChild.setChild(this, question);
}
public AllowedAnswers getAllowedAnswers() {
return allowedAnswersChild.getChild(this);
}
public void setAllowedAnswers(AllowedAnswers allowedAnswers) {
allowedAnswersChild.setChild(this, allowedAnswers);
}
public Variable getVariable() {
return variableChild.getChild(this);
}
public void setVariable(Variable variable) {
variableChild.setChild(this, variable);
}
public Collection<InformationRequirement> getInformationRequirements() {
return informationRequirementCollection.get(this);
}
public Collection<KnowledgeRequirement> getKnowledgeRequirements() {
return knowledgeRequirementCollection.get(this);
}
public Collection<AuthorityRequirement> getAuthorityRequirements() {
return authorityRequirementCollection.get(this);
}
public Collection<SupportedObjectiveReference> getSupportedObjectiveReferences() {
return supportedObjectiveChildElementCollection.get(this);
}
public Collection<PerformanceIndicator> getImpactedPerformanceIndicators() {
return impactedPerformanceIndicatorRefCollection.getReferenceTargetElements(this);
}
public Collection<OrganizationUnit> getDecisionMakers() {
return decisionMakerRefCollection.getReferenceTargetElements(this);
}
public Collection<OrganizationUnit> getDecisionOwners() {
return decisionOwnerRefCollection.getReferenceTargetElements(this);
}
public Collection<UsingProcessReference> getUsingProcessReferences() {
return usingProcessCollection.get(this);
}
public Collection<UsingTaskReference> getUsingTaskReferences() {
return usingTaskCollection.get(this);
}
public Expression getExpression() {
return expressionChild.getChild(this);
}
public void setExpression(Expression expression) {
expressionChild.setChild(this, expression);
}
// camunda extensions
@Override
public Integer getCamundaHistoryTimeToLive() {
return camundaHistoryTimeToLiveAttribute.getValue(this);
}
@Override
public void setCamundaHistoryTimeToLive(Integer inputVariable) {
camundaHistoryTimeToLiveAttribute.setValue(this, inputVariable);
}
public static void registerType(ModelBuilder modelBuilder) {
ModelElementTypeBuilder typeBuilder = modelBuilder.defineType(Decision.class, DMN_ELEMENT_DECISION)
.namespaceUri(DMN11_NS)
.extendsType(DrgElement.class)
.instanceProvider(new ModelTypeInstanceProvider<Decision>() {
public Decision newInstance(ModelTypeInstanceContext instanceContext) {
return new DecisionImpl(instanceContext);
}
});
SequenceBuilder sequenceBuilder = typeBuilder.sequence();
questionChild = sequenceBuilder.element(Question.class)
.build();
allowedAnswersChild = sequenceBuilder.element(AllowedAnswers.class)
.build();
variableChild = sequenceBuilder.element(Variable.class)
.build();
informationRequirementCollection = sequenceBuilder.elementCollection(InformationRequirement.class)
.build();
knowledgeRequirementCollection = sequenceBuilder.elementCollection(KnowledgeRequirement.class)
.build();
authorityRequirementCollection = sequenceBuilder.elementCollection(AuthorityRequirement.class)
.build();
supportedObjectiveChildElementCollection = sequenceBuilder.elementCollection(SupportedObjectiveReference.class)
.build();
impactedPerformanceIndicatorRefCollection = sequenceBuilder.elementCollection(ImpactedPerformanceIndicatorReference.class)
.uriElementReferenceCollection(PerformanceIndicator.class)
.build();
decisionMakerRefCollection = sequenceBuilder.elementCollection(DecisionMakerReference.class)
.uriElementReferenceCollection(OrganizationUnit.class)
.build();
decisionOwnerRefCollection = sequenceBuilder.elementCollection(DecisionOwnerReference.class)
.uriElementReferenceCollection(OrganizationUnit.class)
.build();
usingProcessCollection = sequenceBuilder.elementCollection(UsingProcessReference.class)
.build();
usingTaskCollection = sequenceBuilder.elementCollection(UsingTaskReference.class)
.build();
expressionChild = sequenceBuilder.element(Expression.class)
.build();
// camunda extensions
camundaHistoryTimeToLiveAttribute = typeBuilder.integerAttribute(CAMUNDA_ATTRIBUTE_HISTORY_TIME_TO_LIVE)
.namespace(CAMUNDA_NS)
.build();
typeBuilder.build();
}
}