use of org.kie.workbench.common.dmn.api.definition.v1_1.TextAnnotation in project opencast by opencast.
the class SolrIndexManager method getMaxRelevance.
/**
* Gets the maximum relevance for a given keyword in the text annotation.
*
* @param keyword
* @param sortedAnnotations
* @return The maximum relevance value.
*/
static double getMaxRelevance(String keyword, SortedSet<TextAnnotation> sortedAnnotations) {
double max = 0.0;
String needle = null;
TextAnnotation textAnnotation = null;
Iterator<TextAnnotation> textAnnotations = sortedAnnotations.iterator();
while (textAnnotations.hasNext()) {
textAnnotation = textAnnotations.next();
Iterator<KeywordAnnotation> keywordAnnotations = textAnnotation.keywordAnnotations();
while (keywordAnnotations.hasNext()) {
KeywordAnnotation ann = keywordAnnotations.next();
needle = ann.getKeyword().toLowerCase();
if (keyword.equals(needle)) {
if (max < textAnnotation.getRelevance()) {
max = textAnnotation.getRelevance();
}
}
}
}
return max;
}
use of org.kie.workbench.common.dmn.api.definition.v1_1.TextAnnotation in project kie-wb-common by kiegroup.
the class Bpmn2JsonUnmarshaller method unmarshallItem.
public BaseElement unmarshallItem(JsonParser parser, String preProcessingData) throws JsonParseException, IOException {
String resourceId = null;
Map<String, String> properties = null;
String stencil = null;
List<BaseElement> childElements = new ArrayList<BaseElement>();
List<String> outgoing = new ArrayList<String>();
while (parser.nextToken() != JsonToken.END_OBJECT) {
String fieldname = parser.getCurrentName();
parser.nextToken();
if ("resourceId".equals(fieldname)) {
resourceId = parser.getText();
} else if ("properties".equals(fieldname)) {
properties = unmarshallProperties(parser);
} else if ("stencil".equals(fieldname)) {
// "stencil":{"id":"Task"},
parser.nextToken();
parser.nextToken();
stencil = parser.getText();
parser.nextToken();
} else if ("childShapes".equals(fieldname)) {
while (parser.nextToken() != JsonToken.END_ARRAY) {
// open the
// object
// the childShapes element is a json array. We opened the
// array.
childElements.add(unmarshallItem(parser, preProcessingData));
}
} else if ("bounds".equals(fieldname)) {
// bounds: {"lowerRight":{"x":484.0,"y":198.0},"upperLeft":{"x":454.0,"y":168.0}}
parser.nextToken();
parser.nextToken();
parser.nextToken();
parser.nextToken();
Integer x2 = parser.getIntValue();
parser.nextToken();
parser.nextToken();
Integer y2 = parser.getIntValue();
parser.nextToken();
parser.nextToken();
parser.nextToken();
parser.nextToken();
parser.nextToken();
Integer x1 = parser.getIntValue();
parser.nextToken();
parser.nextToken();
Integer y1 = parser.getIntValue();
parser.nextToken();
parser.nextToken();
Bounds b = DcFactory.eINSTANCE.createBounds();
b.setX(x1);
b.setY(y1);
b.setWidth(x2 - x1);
b.setHeight(y2 - y1);
this._bounds.put(resourceId, b);
} else if ("dockers".equals(fieldname)) {
// "dockers":[{"x":50,"y":40},{"x":353.5,"y":115},{"x":353.5,"y":152},{"x":50,"y":40}],
List<Point> dockers = new ArrayList<Point>();
JsonToken nextToken = parser.nextToken();
boolean end = JsonToken.END_ARRAY.equals(nextToken);
while (!end) {
nextToken = parser.nextToken();
nextToken = parser.nextToken();
Integer x = parser.getIntValue();
parser.nextToken();
parser.nextToken();
Integer y = parser.getIntValue();
Point point = DcFactory.eINSTANCE.createPoint();
point.setX(x);
point.setY(y);
dockers.add(point);
parser.nextToken();
nextToken = parser.nextToken();
end = JsonToken.END_ARRAY.equals(nextToken);
}
this._dockers.put(resourceId, dockers);
} else if ("outgoing".equals(fieldname)) {
while (parser.nextToken() != JsonToken.END_ARRAY) {
// {resourceId: oryx_1AAA8C9A-39A5-42FC-8ED1-507A7F3728EA}
parser.nextToken();
parser.nextToken();
outgoing.add(parser.getText());
parser.nextToken();
}
// pass on the array
parser.skipChildren();
} else if ("target".equals(fieldname)) {
// we already collected that info with the outgoing field.
parser.skipChildren();
// "target": {
// "resourceId": "oryx_A75E7546-DF71-48EA-84D3-2A8FD4A47568"
// }
// add to the map:
// parser.nextToken(); // resourceId:
// parser.nextToken(); // the value we want to save
// targetId = parser.getText();
// parser.nextToken(); // }, closing the object
}
}
properties.put("resourceId", resourceId);
boolean customElement = isCustomElement(properties.get("tasktype"), preProcessingData);
BaseElement baseElt = this.createBaseElement(stencil, properties.get("tasktype"), customElement);
// register the sequence flow targets.
if (baseElt instanceof SequenceFlow) {
_sequenceFlowTargets.addAll(outgoing);
}
_outgoingFlows.put(baseElt, outgoing);
_objMap.put(baseElt, // keep the object around to do connections
resourceId);
_idMap.put(resourceId, baseElt);
// baseElt.setId(resourceId); commented out as bpmn2 seems to create
// duplicate ids right now.
applyProperties(baseElt, properties, preProcessingData);
if (baseElt instanceof Definitions) {
Process rootLevelProcess = null;
if (childElements == null || childElements.size() < 1) {
if (rootLevelProcess == null) {
rootLevelProcess = Bpmn2Factory.eINSTANCE.createProcess();
// set the properties and item definitions first
if (properties.get("vardefs") != null && properties.get("vardefs").length() > 0) {
String[] vardefs = properties.get("vardefs").split(",\\s*");
for (String vardef : vardefs) {
Property prop = Bpmn2Factory.eINSTANCE.createProperty();
ItemDefinition itemdef = Bpmn2Factory.eINSTANCE.createItemDefinition();
// check if we define a structure ref in the definition
if (vardef.contains(":")) {
String[] vardefParts = vardef.split(":\\s*");
prop.setId(vardefParts[0]);
itemdef.setId("_" + prop.getId() + "Item");
boolean haveKPI = false;
String kpiValue = "";
if (vardefParts.length == 3) {
itemdef.setStructureRef(vardefParts[1]);
if (vardefParts[2].equals("true")) {
haveKPI = true;
kpiValue = vardefParts[2];
}
}
if (vardefParts.length == 2) {
if (vardefParts[1].equals("true") || vardefParts[1].equals("false")) {
if (vardefParts[1].equals("true")) {
haveKPI = true;
kpiValue = vardefParts[1];
}
} else {
itemdef.setStructureRef(vardefParts[1]);
}
}
if (haveKPI) {
Utils.setMetaDataExtensionValue(prop, "customKPI", wrapInCDATABlock(kpiValue));
}
} else {
prop.setId(vardef);
itemdef.setId("_" + prop.getId() + "Item");
}
prop.setItemSubjectRef(itemdef);
rootLevelProcess.getProperties().add(prop);
((Definitions) baseElt).getRootElements().add(itemdef);
}
}
if (properties.get("adhocprocess") != null && properties.get("adhocprocess").equals("true")) {
ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "adHoc", false, false);
SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("adhocprocess"));
rootLevelProcess.getAnyAttribute().add(extensionEntry);
}
if (properties.get("customdescription") != null && properties.get("customdescription").length() > 0) {
Utils.setMetaDataExtensionValue(rootLevelProcess, "customDescription", wrapInCDATABlock(properties.get("customdescription")));
}
rootLevelProcess.setId(properties.get("id"));
applyProcessProperties(rootLevelProcess, properties);
((Definitions) baseElt).getRootElements().add(rootLevelProcess);
}
} else {
for (BaseElement child : childElements) {
// } else {
if (child instanceof SequenceFlow) {
// for some reason sequence flows are placed as root elements.
// find if the target has a container, and if we can use it:
List<String> ids = _outgoingFlows.get(child);
FlowElementsContainer container = null;
for (String id : ids) {
// yes, we iterate, but we'll take the first in the list that will work.
Object obj = _idMap.get(id);
if (obj instanceof EObject && ((EObject) obj).eContainer() instanceof FlowElementsContainer) {
container = (FlowElementsContainer) ((EObject) obj).eContainer();
break;
}
}
if (container != null) {
container.getFlowElements().add((SequenceFlow) child);
continue;
}
}
if (child instanceof Task || child instanceof SequenceFlow || child instanceof Gateway || child instanceof Event || child instanceof Artifact || child instanceof DataObject || child instanceof SubProcess || child instanceof Lane || child instanceof CallActivity || child instanceof TextAnnotation) {
if (rootLevelProcess == null) {
rootLevelProcess = Bpmn2Factory.eINSTANCE.createProcess();
// set the properties and item definitions first
if (properties.get("vardefs") != null && properties.get("vardefs").length() > 0) {
String[] vardefs = properties.get("vardefs").split(",\\s*");
for (String vardef : vardefs) {
Property prop = Bpmn2Factory.eINSTANCE.createProperty();
ItemDefinition itemdef = Bpmn2Factory.eINSTANCE.createItemDefinition();
// check if we define a structure ref in the definition
if (vardef.contains(":")) {
String[] vardefParts = vardef.split(":\\s*");
prop.setId(vardefParts[0]);
itemdef.setId("_" + prop.getId() + "Item");
boolean haveKPI = false;
String kpiValue = "";
if (vardefParts.length == 3) {
itemdef.setStructureRef(vardefParts[1]);
if (vardefParts[2].equals("true")) {
haveKPI = true;
kpiValue = vardefParts[2];
}
}
if (vardefParts.length == 2) {
if (vardefParts[1].equals("true") || vardefParts[1].equals("false")) {
if (vardefParts[1].equals("true")) {
haveKPI = true;
kpiValue = vardefParts[1];
}
} else {
itemdef.setStructureRef(vardefParts[1]);
}
}
if (haveKPI) {
Utils.setMetaDataExtensionValue(prop, "customKPI", wrapInCDATABlock(kpiValue));
}
} else {
prop.setId(vardef);
itemdef.setId("_" + prop.getId() + "Item");
}
prop.setItemSubjectRef(itemdef);
rootLevelProcess.getProperties().add(prop);
((Definitions) baseElt).getRootElements().add(itemdef);
}
}
if (properties.get("adhocprocess") != null && properties.get("adhocprocess").equals("true")) {
ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;
EAttributeImpl extensionAttribute = (EAttributeImpl) metadata.demandFeature("http://www.jboss.org/drools", "adHoc", false, false);
SimpleFeatureMapEntry extensionEntry = new SimpleFeatureMapEntry(extensionAttribute, properties.get("adhocprocess"));
rootLevelProcess.getAnyAttribute().add(extensionEntry);
}
if (properties.get("customdescription") != null && properties.get("customdescription").length() > 0) {
Utils.setMetaDataExtensionValue(rootLevelProcess, "customDescription", wrapInCDATABlock(properties.get("customdescription")));
}
rootLevelProcess.setId(properties.get("id"));
applyProcessProperties(rootLevelProcess, properties);
((Definitions) baseElt).getRootElements().add(rootLevelProcess);
}
}
if (child instanceof Task) {
rootLevelProcess.getFlowElements().add((Task) child);
} else if (child instanceof CallActivity) {
rootLevelProcess.getFlowElements().add((CallActivity) child);
} else if (child instanceof RootElement) {
((Definitions) baseElt).getRootElements().add((RootElement) child);
} else if (child instanceof SequenceFlow) {
rootLevelProcess.getFlowElements().add((SequenceFlow) child);
} else if (child instanceof Gateway) {
rootLevelProcess.getFlowElements().add((Gateway) child);
} else if (child instanceof Event) {
rootLevelProcess.getFlowElements().add((Event) child);
} else if (child instanceof TextAnnotation) {
rootLevelProcess.getFlowElements().add((TextAnnotation) child);
} else if (child instanceof Artifact) {
rootLevelProcess.getArtifacts().add((Artifact) child);
} else if (child instanceof DataObject) {
// bubble up data objects
// rootLevelProcess.getFlowElements().add(0, (DataObject) child);
rootLevelProcess.getFlowElements().add((DataObject) child);
// ItemDefinition def = ((DataObject) child).getItemSubjectRef();
// if (def != null) {
// if (def.eResource() == null) {
// ((Definitions) rootLevelProcess.eContainer()).getRootElements().add(0, def);
// }
// Import imported = def.getImport();
// if (imported != null && imported.eResource() == null) {
// ((Definitions) rootLevelProcess.eContainer()).getImports().add(0, imported);
// }
// }
} else if (child instanceof SubProcess) {
rootLevelProcess.getFlowElements().add((SubProcess) child);
} else if (child instanceof Lane) {
// lanes handled later
} else {
_logger.error("Don't know what to do of " + child);
}
// }
}
}
} else if (baseElt instanceof Process) {
for (BaseElement child : childElements) {
if (child instanceof Lane) {
if (((Process) baseElt).getLaneSets().isEmpty()) {
((Process) baseElt).getLaneSets().add(Bpmn2Factory.eINSTANCE.createLaneSet());
}
((Process) baseElt).getLaneSets().get(0).getLanes().add((Lane) child);
addLaneFlowNodes((Process) baseElt, (Lane) child);
} else if (child instanceof Artifact) {
((Process) baseElt).getArtifacts().add((Artifact) child);
} else {
_logger.error("Don't know what to do of " + child);
}
}
} else if (baseElt instanceof SubProcess) {
for (BaseElement child : childElements) {
if (child instanceof FlowElement) {
((SubProcess) baseElt).getFlowElements().add((FlowElement) child);
} else if (child instanceof Artifact) {
((SubProcess) baseElt).getArtifacts().add((Artifact) child);
} else {
_logger.error("Subprocess - don't know what to do of " + child);
}
}
} else if (baseElt instanceof Message) {
// we do not support base-element messages from the json. They are created dynamically for events that use them.
} else if (baseElt instanceof Lane) {
for (BaseElement child : childElements) {
if (child instanceof FlowNode) {
((Lane) baseElt).getFlowNodeRefs().add((FlowNode) child);
} else // }
if (child instanceof Artifact) {
_artifacts.add((Artifact) child);
} else {
_logger.error("Don't know what to do of " + childElements);
}
}
_lanes.add((Lane) baseElt);
} else {
if (!childElements.isEmpty()) {
_logger.error("Don't know what to do of " + childElements + " with " + baseElt);
}
}
return baseElt;
}
use of org.kie.workbench.common.dmn.api.definition.v1_1.TextAnnotation in project kie-wb-common by kiegroup.
the class Bpmn2JsonMarshaller method marshallNode.
protected void marshallNode(FlowNode node, Map<String, Object> properties, String stencil, BPMNPlane plane, JsonGenerator generator, float xOffset, float yOffset) throws JsonGenerationException, IOException {
if (properties == null) {
properties = new LinkedHashMap<String, Object>();
}
putDocumentationProperty(node, properties);
if (node.getName() != null) {
properties.put(NAME, StringEscapeUtils.unescapeXml(node.getName()));
} else {
if (node instanceof TextAnnotation) {
if (((TextAnnotation) node).getText() != null) {
properties.put(NAME, ((TextAnnotation) node).getText());
} else {
properties.put(NAME, "");
}
} else {
properties.put(NAME, "");
}
}
// overwrite name if elementname extension element is present
String elementName = Utils.getMetaDataValue(node.getExtensionValues(), "elementname");
if (elementName != null) {
properties.put("name", elementName);
}
marshallProperties(properties, generator);
generator.writeObjectFieldStart("stencil");
generator.writeObjectField("id", stencil);
generator.writeEndObject();
generator.writeArrayFieldStart("childShapes");
generator.writeEndArray();
generator.writeArrayFieldStart("outgoing");
for (SequenceFlow outgoing : node.getOutgoing()) {
generator.writeStartObject();
generator.writeObjectField("resourceId", outgoing.getId());
generator.writeEndObject();
}
// we need to also add associations as outgoing elements
Process process = (Process) plane.getBpmnElement();
writeAssociations(process, node.getId(), generator);
// and boundary events for activities
List<BoundaryEvent> boundaryEvents = new ArrayList<BoundaryEvent>();
findBoundaryEvents(process, boundaryEvents);
for (BoundaryEvent be : boundaryEvents) {
if (be.getAttachedToRef().getId().equals(node.getId())) {
generator.writeStartObject();
generator.writeObjectField("resourceId", be.getId());
generator.writeEndObject();
}
}
generator.writeEndArray();
// boundary events have a docker
if (node instanceof BoundaryEvent) {
Iterator<FeatureMap.Entry> iter = node.getAnyAttribute().iterator();
boolean foundDockerInfo = false;
while (iter.hasNext()) {
FeatureMap.Entry entry = iter.next();
if (entry.getEStructuralFeature().getName().equals("dockerinfo")) {
foundDockerInfo = true;
String dockerInfoStr = String.valueOf(entry.getValue());
if (dockerInfoStr != null && dockerInfoStr.length() > 0) {
if (dockerInfoStr.endsWith("|")) {
dockerInfoStr = dockerInfoStr.substring(0, dockerInfoStr.length() - 1);
String[] dockerInfoParts = dockerInfoStr.split("\\|");
String infoPartsToUse = dockerInfoParts[0];
String[] infoPartsToUseParts = infoPartsToUse.split("\\^");
if (infoPartsToUseParts != null && infoPartsToUseParts.length > 0) {
generator.writeArrayFieldStart("dockers");
generator.writeStartObject();
generator.writeObjectField("x", Double.valueOf(infoPartsToUseParts[0]));
generator.writeObjectField("y", Double.valueOf(infoPartsToUseParts[1]));
generator.writeEndObject();
generator.writeEndArray();
}
}
}
}
}
// backwards compatibility to older versions -- BZ 1196259
if (!foundDockerInfo) {
// find the edge associated with this boundary event
for (DiagramElement element : plane.getPlaneElement()) {
if (element instanceof BPMNEdge && ((BPMNEdge) element).getBpmnElement() == node) {
List<Point> waypoints = ((BPMNEdge) element).getWaypoint();
if (waypoints != null && waypoints.size() > 0) {
// one per boundary event
Point p = waypoints.get(0);
if (p != null) {
generator.writeArrayFieldStart("dockers");
generator.writeStartObject();
generator.writeObjectField("x", p.getX());
generator.writeObjectField("y", p.getY());
generator.writeEndObject();
generator.writeEndArray();
}
}
}
}
}
}
BPMNShape shape = (BPMNShape) findDiagramElement(plane, node);
Bounds bounds = shape.getBounds();
correctEventNodeSize(shape);
generator.writeObjectFieldStart("bounds");
generator.writeObjectFieldStart("lowerRight");
generator.writeObjectField("x", bounds.getX() + bounds.getWidth() - xOffset);
generator.writeObjectField("y", bounds.getY() + bounds.getHeight() - yOffset);
generator.writeEndObject();
generator.writeObjectFieldStart("upperLeft");
generator.writeObjectField("x", bounds.getX() - xOffset);
generator.writeObjectField("y", bounds.getY() - yOffset);
generator.writeEndObject();
generator.writeEndObject();
}
use of org.kie.workbench.common.dmn.api.definition.v1_1.TextAnnotation in project kie-wb-common by kiegroup.
the class TextAnnotationConverter method dmnFromNode.
@Override
public org.kie.dmn.model.v1_1.TextAnnotation dmnFromNode(final Node<View<TextAnnotation>, ?> node) {
TextAnnotation source = node.getContent().getDefinition();
org.kie.dmn.model.v1_1.TextAnnotation result = new org.kie.dmn.model.v1_1.TextAnnotation();
result.setId(source.getId().getValue());
result.setDescription(DescriptionPropertyConverter.dmnFromWB(source.getDescription()));
result.setText(source.getText().getValue());
result.setTextFormat(source.getTextFormat().getValue());
return result;
}
use of org.kie.workbench.common.dmn.api.definition.v1_1.TextAnnotation in project kie-wb-common by kiegroup.
the class TextAnnotationConverter method nodeFromDMN.
@Override
public Node<View<TextAnnotation>, ?> nodeFromDMN(final org.kie.dmn.model.v1_1.TextAnnotation dmn) {
@SuppressWarnings("unchecked") Node<View<TextAnnotation>, ?> node = (Node<View<TextAnnotation>, ?>) factoryManager.newElement(dmn.getId(), TextAnnotation.class).asNode();
Id id = new Id(dmn.getId());
Description description = DescriptionPropertyConverter.wbFromDMN(dmn.getDescription());
Text text = new Text(dmn.getText());
TextFormat textFormat = new TextFormat(dmn.getTextFormat());
TextAnnotation textAnnotation = new TextAnnotation(id, description, text, textFormat, new BackgroundSet(), new FontSet(), new RectangleDimensionsSet());
node.getContent().setDefinition(textAnnotation);
return node;
}
Aggregations