List<RootElement> rootElements = def.getRootElements();
List<ItemDefinition> itemDefinitionsToAddUnfiltered = new ArrayList<ItemDefinition>();
List<ItemDefinition> itemDefinitionsToAddFiltered = new ArrayList<ItemDefinition>();
for(RootElement root : rootElements) {
if(root instanceof Process) {
Process process = (Process) root;
List<FlowElement> flowElements = process.getFlowElements();
for(FlowElement fe : flowElements) {
if(fe instanceof DataObject) {
DataObject da = (DataObject) fe;
ItemDefinition itemdef = Bpmn2Factory.eINSTANCE.createItemDefinition();
itemdef.setId("_" + da.getId() + "Item");
Iterator<FeatureMap.Entry> iter = da.getAnyAttribute().iterator();
while(iter.hasNext()) {
FeatureMap.Entry entry = iter.next();
if(entry.getEStructuralFeature().getName().equals("datype")) {
String typeValue = (String) entry.getValue();
if(typeValue != null && !typeValue.equals("None")) {
itemdef.setStructureRef((String) entry.getValue());
}
}
}
da.setItemSubjectRef(itemdef);
itemDefinitionsToAddUnfiltered.add(itemdef);
}
}
}
}
for(ItemDefinition itemDef : itemDefinitionsToAddUnfiltered) {
boolean foundItemDef = false;
for(RootElement ele : rootElements) {
if(ele instanceof ItemDefinition) {
ItemDefinition idef = (ItemDefinition) ele;
if(idef.getId().equals(itemDef.getId())) {
foundItemDef = true;
break;
}
}
}
if(!foundItemDef) {
itemDefinitionsToAddFiltered.add(itemDef);
}
}
for(ItemDefinition itemDefFil : itemDefinitionsToAddFiltered) {
def.getRootElements().add(itemDefFil);
}
for(RootElement root : rootElements) {
if(root instanceof Process) {
Process process = (Process) root;
List<Artifact> artifactElements = process.getArtifacts();
for(Artifact af : artifactElements) {
if(af instanceof Association) {
Association as = (Association) af;
if(as.getSourceRef() != null && as.getSourceRef() instanceof DataObject
&& as.getTargetRef() != null && (as.getTargetRef() instanceof Task || as.getTargetRef() instanceof ThrowEvent)) {