Author: pkluegl
Date: Fri Nov 15 09:04:07 2019
New Revision: 1869839
URL: http://svn.apache.org/viewvc?rev=1869839&view=rev
Log:
UIMA-3139: provide UI for explanation of inlined rules, refactor debug type
system by introducing new type that can store required information
Added:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRootNode.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRuleBlockNode.java
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/RutaVerbalizer.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/DebugInfoFactory.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/ExplainConstants.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeContentProvider.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeLabelProvider.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyViewPage.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/element/ElementTreeContentProvider.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/failed/FailedViewPage.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeContentProvider.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeLabelProvider.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedViewPage.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/matched/MatchedViewPage.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainAbstractTreeNode.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainTree.java
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/IExplainTreeNode.java
uima/ruta/trunk/ruta-typesystem/src/main/resources/org/apache/uima/ruta/engine/RutaInternalTypeSystem.xml
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/RutaVerbalizer.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/RutaVerbalizer.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/RutaVerbalizer.java
(original)
+++
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/RutaVerbalizer.java
Fri Nov 15 09:04:07 2019
@@ -26,6 +26,7 @@ import java.util.Map;
import org.apache.uima.cas.CAS;
import org.apache.uima.cas.Type;
import org.apache.uima.ruta.RutaElement;
+import org.apache.uima.ruta.ScriptApply;
import org.apache.uima.ruta.action.AbstractRutaAction;
import org.apache.uima.ruta.block.RutaBlock;
import org.apache.uima.ruta.condition.AbstractRutaCondition;
@@ -68,7 +69,8 @@ public class RutaVerbalizer {
public String verbalize(Object element) {
if (element != null) {
- if (externalVerbalizers.keySet().contains(element.getClass()) && element
instanceof RutaElement) {
+ if (externalVerbalizers.keySet().contains(element.getClass())
+ && element instanceof RutaElement) {
return
externalVerbalizers.get(element.getClass()).verbalize((RutaElement) element,
this);
} else if (element instanceof AbstractRutaAction) {
return actionVerbalizer.verbalize((AbstractRutaAction) element);
@@ -106,6 +108,14 @@ public class RutaVerbalizer {
return scriptVerbalizer.verbalizeRuleElement(element);
}
+ public String verbalizeInlinedActionRuleBlock(List<ScriptApply> block) {
+ return scriptVerbalizer.verbalizeInlinedActionRuleApplyBlock(block);
+ }
+
+ public String verbalizeInlinedConditionRuleBlock(List<ScriptApply> block) {
+ return scriptVerbalizer.verbalizeInlinedConditionRuleApplyBlock(block);
+ }
+
public String verbalizeType(Type type) {
if (type.getName().equals(CAS.TYPE_NAME_DOCUMENT_ANNOTATION)) {
return "Document";
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
(original)
+++
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/verbalize/ScriptVerbalizer.java
Fri Nov 15 09:04:07 2019
@@ -23,10 +23,12 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.uima.ruta.RutaElement;
import org.apache.uima.ruta.RutaStatement;
+import org.apache.uima.ruta.ScriptApply;
import org.apache.uima.ruta.action.AbstractRutaAction;
import org.apache.uima.ruta.block.ForEachBlock;
import org.apache.uima.ruta.block.RutaBlock;
@@ -212,32 +214,61 @@ public class ScriptVerbalizer {
}
if (re instanceof AbstractRuleElement) {
AbstractRuleElement are = (AbstractRuleElement) re;
+
List<List<RutaStatement>> inlinedConditionRuleBlocks =
are.getInlinedConditionRuleBlocks();
for (List<RutaStatement> inlinedConditionRules :
inlinedConditionRuleBlocks) {
- if (inlinedConditionRules != null && !inlinedConditionRules.isEmpty())
{
- result.append(THEN2);
- result.append(CBOPEN);
- for (RutaStatement rutaStatement : inlinedConditionRules) {
- result.append(verbalize(rutaStatement));
- }
- result.append(CBCLOSE);
- }
+
result.append(verbalizeInlinedConditionRuleBlock(inlinedConditionRules));
}
List<List<RutaStatement>> inlinedActionRuleBlocks =
are.getInlinedActionRuleBlocks();
for (List<RutaStatement> inlinedActionRules : inlinedActionRuleBlocks) {
- if (inlinedActionRules != null && !inlinedActionRules.isEmpty()) {
- result.append(THEN);
- result.append(CBOPEN);
- for (RutaStatement rutaStatement : inlinedActionRules) {
- result.append(verbalize(rutaStatement));
- }
- result.append(CBCLOSE);
- }
+ result.append(verbalizeInlinedActionRuleBlock(inlinedActionRules));
+ }
+ }
+ return result.toString();
+ }
+
+ public String verbalizeInlinedActionRuleBlock(List<RutaStatement>
inlinedActionRules) {
+ StringBuilder result = new StringBuilder();
+ if (inlinedActionRules != null && !inlinedActionRules.isEmpty()) {
+ result.append(THEN);
+ result.append(CBOPEN);
+ for (RutaStatement rutaStatement : inlinedActionRules) {
+ result.append(verbalize(rutaStatement));
}
+ result.append(CBCLOSE);
}
return result.toString();
}
+ public String verbalizeInlinedConditionRuleBlock(List<RutaStatement>
inlinedConditionRules) {
+ StringBuilder result = new StringBuilder();
+ if (inlinedConditionRules != null && !inlinedConditionRules.isEmpty()) {
+ result.append(THEN2);
+ result.append(CBOPEN);
+ for (RutaStatement rutaStatement : inlinedConditionRules) {
+ result.append(verbalize(rutaStatement));
+ }
+ result.append(CBCLOSE);
+ }
+ return result.toString();
+ }
+
+ public String verbalizeInlinedConditionRuleApplyBlock(List<ScriptApply>
block) {
+
+ List<RutaStatement> list = block.stream().map(a -> a.getElement())
+ .filter(RutaStatement.class::isInstance).map(s -> (RutaStatement)
s)
+ .collect(Collectors.toList());
+ return verbalizeInlinedConditionRuleBlock(list);
+ }
+
+ public String verbalizeInlinedActionRuleApplyBlock(List<ScriptApply> block) {
+
+ List<RutaStatement> list = block.stream().map(a -> a.getElement())
+ .filter(RutaStatement.class::isInstance).map(s -> (RutaStatement)
s)
+ .collect(Collectors.toList());
+ return verbalizeInlinedActionRuleBlock(list);
+ }
+
private String verbalizeConjunct(ConjunctRulesRuleElement re) {
StringBuilder result = new StringBuilder();
String sep = " % ";
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/DebugInfoFactory.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/DebugInfoFactory.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/DebugInfoFactory.java
(original)
+++
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/visitor/DebugInfoFactory.java
Fri Nov 15 09:04:07 2019
@@ -49,6 +49,7 @@ import org.apache.uima.ruta.rule.RutaRul
import org.apache.uima.ruta.type.DebugBlockApply;
import org.apache.uima.ruta.type.DebugEvaluatedCondition;
import org.apache.uima.ruta.type.DebugFailedRuleMatch;
+import org.apache.uima.ruta.type.DebugInlinedBlock;
import org.apache.uima.ruta.type.DebugMatchedRuleMatch;
import org.apache.uima.ruta.type.DebugRuleApply;
import org.apache.uima.ruta.type.DebugRuleElementMatch;
@@ -335,9 +336,9 @@ public class DebugInfoFactory {
} else {
rem = createDebugRuleElementMatch(each, stream, addToIndex);
}
- FSArray inlinedConditionRules =
createInlinedRules(each.getInlinedConditionRules(), stream,
- addToIndex, withMatches, timeInfo);
- rem.setInlinedConditionRules(inlinedConditionRules);
+ FSArray inlinedConditionBlocks =
createInlinedBlocks(each.getInlinedConditionRules(),
+ stream, true, addToIndex, withMatches, timeInfo);
+ rem.setInlinedConditionBlocks(inlinedConditionBlocks);
if (rem != null) {
remList.add(rem);
}
@@ -348,43 +349,59 @@ public class DebugInfoFactory {
}
drems.setMatches(UIMAUtils.toFSArray(cas, remList));
- FSArray inlinedActionRules = createInlinedActionRules(rems, stream,
addToIndex, withMatches,
+ FSArray inlinedActionBlocks = createInlinedActionBlocks(rems, stream,
addToIndex, withMatches,
timeInfo);
- drems.setInlinedActionRules(inlinedActionRules);
+ drems.setInlinedActionBlocks(inlinedActionBlocks);
if (addToIndex)
drems.addToIndexes();
return drems;
}
- private FSArray createInlinedRules(List<List<ScriptApply>> blocks,
RutaStream stream,
- boolean addToIndex, boolean withMatches, Map<RutaElement, Long>
timeInfo) {
+ private FSArray createInlinedBlocks(List<List<ScriptApply>> blocks,
RutaStream stream,
+ boolean asCondition, boolean addToIndex, boolean withMatches,
+ Map<RutaElement, Long> timeInfo) {
JCas jcas = stream.getJCas();
if (blocks == null || blocks.isEmpty()) {
return null;
}
- List<FSArray> resultList = new ArrayList<>();
+ List<DebugInlinedBlock> blockList = new ArrayList<>();
for (List<ScriptApply> block : blocks) {
List<DebugScriptApply> list = new ArrayList<>();
+ boolean oneRuleApplied = false;
for (ScriptApply ruleApply : block) {
+ if (ruleApply instanceof RuleApply) {
+ if (((RuleApply) ruleApply).getApplied() > 0) {
+ oneRuleApplied = true;
+ }
+ }
DebugScriptApply debugScriptApply = createDebugScriptApply(ruleApply,
stream, addToIndex,
withMatches, timeInfo);
list.add(debugScriptApply);
}
- resultList.add(FSCollectionFactory.createFSArray(jcas, list));
+ DebugInlinedBlock debugInlinedBlock = new DebugInlinedBlock(jcas);
+
debugInlinedBlock.setInlinedRules(FSCollectionFactory.createFSArray(jcas,
list));
+ debugInlinedBlock.setAsCondition(asCondition);
+ if (asCondition) {
+
debugInlinedBlock.setElement(verbalizer.verbalizeInlinedConditionRuleBlock(block));
+ debugInlinedBlock.setMatched(oneRuleApplied);
+ } else {
+
debugInlinedBlock.setElement(verbalizer.verbalizeInlinedActionRuleBlock(block));
+ }
+ blockList.add(debugInlinedBlock);
}
- return FSCollectionFactory.createFSArray(jcas, resultList);
+ return FSCollectionFactory.createFSArray(jcas, blockList);
}
- private FSArray createInlinedActionRules(List<RuleElementMatch> rems,
RutaStream stream,
+ private FSArray createInlinedActionBlocks(List<RuleElementMatch> rems,
RutaStream stream,
boolean addToIndex, boolean withMatches, Map<RutaElement, Long>
timeInfo) {
if (rems == null || rems.isEmpty()) {
return null;
}
- return createInlinedRules(rems.get(0).getInlinedActionRules(), stream,
addToIndex, withMatches,
- timeInfo);
+ return createInlinedBlocks(rems.get(0).getInlinedActionRules(), stream,
false, addToIndex,
+ withMatches, timeInfo);
}
public DebugRuleElementMatch
createDebugComposedRuleElementMatch(ComposedRuleElementMatch rem,
@@ -444,8 +461,9 @@ public class DebugInfoFactory {
}
}
- if (addToIndex)
+ if (addToIndex) {
drem.addToIndexes();
+ }
return drem;
}
Modified:
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java
(original)
+++
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/visitor/InlinedRulesExplanationTest.java
Fri Nov 15 09:04:07 2019
@@ -86,8 +86,8 @@ public class InlinedRulesExplanationTest
DebugRuleElementMatches re1Matches = (DebugRuleElementMatches)
reMatches1FS;
DebugRuleElementMatches re2Matches = (DebugRuleElementMatches)
reMatches2FS;
- FSArray inlinedActionRules1 = re1Matches.getInlinedActionRules();
- FSArray inlinedActionRules2 = re2Matches.getInlinedActionRules();
+ FSArray inlinedActionRules1 = re1Matches.getInlinedActionBlocks();
+ FSArray inlinedActionRules2 = re2Matches.getInlinedActionBlocks();
Assert.assertEquals(1, inlinedActionRules1.size());
Assert.assertEquals(2, inlinedActionRules2.size());
@@ -95,8 +95,8 @@ public class InlinedRulesExplanationTest
DebugRuleElementMatch re1Match = (DebugRuleElementMatch)
re1Matches.getMatches().get(0);
DebugRuleElementMatch re2Match = (DebugRuleElementMatch)
re2Matches.getMatches().get(0);
- FSArray inlinedConditionRules1 = re1Match.getInlinedConditionRules();
- FSArray inlinedConditionRules2 = re2Match.getInlinedConditionRules();
+ FSArray inlinedConditionRules1 = re1Match.getInlinedConditionBlocks();
+ FSArray inlinedConditionRules2 = re2Match.getInlinedConditionBlocks();
Assert.assertEquals(2, inlinedConditionRules1.size());
Assert.assertEquals(1, inlinedConditionRules2.size());
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/ExplainConstants.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/ExplainConstants.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/ExplainConstants.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/ExplainConstants.java
Fri Nov 15 09:04:07 2019
@@ -22,6 +22,17 @@ package org.apache.uima.ruta.explain;
import org.apache.uima.ruta.engine.RutaEngine;
public class ExplainConstants {
+
+ public static final String INLINED_AS_CONDITION = "inlinedAsCondition";
+
+ public static final String INLINED_AS_ACTION = "inlinedAsAction";
+
+ public static final String INLINED_ACTION_BLOCK = "inlinedActionBlock";
+
+ public static final String INLINED_CONDITION_BLOCK_MATCHED =
"inlinedConditionBlockMatched";
+
+ public static final String INLINED_CONDITION_BLOCK_FAILED =
"inlinedConditionBlockFailed";
+
public static final String BASIC_TYPE = RutaEngine.BASIC_TYPE;
public static final String SCRIPT_APPLY_TYPE =
"org.apache.uima.ruta.type.DebugScriptApply";
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeContentProvider.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeContentProvider.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeContentProvider.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeContentProvider.java
Fri Nov 15 09:04:07 2019
@@ -29,6 +29,7 @@ import org.eclipse.jface.viewers.Viewer;
public class ApplyTreeContentProvider implements ITreeContentProvider {
+ @Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof IExplainTreeNode) {
List<Object> result = new ArrayList<Object>();
@@ -43,6 +44,7 @@ public class ApplyTreeContentProvider im
return null;
}
+ @Override
public Object getParent(Object element) {
if (element instanceof IExplainTreeNode) {
return ((IExplainTreeNode) element).getParent();
@@ -50,10 +52,12 @@ public class ApplyTreeContentProvider im
return null;
}
+ @Override
public Object[] getElements(Object parentElement) {
return getChildren(parentElement);
}
+ @Override
public boolean hasChildren(Object parentElement) {
if (parentElement instanceof IExplainTreeNode) {
IExplainTreeNode debugNode = (IExplainTreeNode) parentElement;
@@ -66,10 +70,11 @@ public class ApplyTreeContentProvider im
return false;
}
+ @Override
public void dispose() {
}
+ @Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
-
}
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeLabelProvider.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeLabelProvider.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeLabelProvider.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyTreeLabelProvider.java
Fri Nov 15 09:04:07 2019
@@ -29,6 +29,7 @@ import org.apache.uima.cas.Type;
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.ruta.explain.ExplainConstants;
import org.apache.uima.ruta.explain.tree.IExplainTreeNode;
+import org.apache.uima.ruta.type.ProfiledAnnotation;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
@@ -37,12 +38,12 @@ import org.eclipse.swt.graphics.Image;
public class ApplyTreeLabelProvider extends LabelProvider implements
ILabelProvider {
private DecimalFormat dfTime = new DecimalFormat("###,###,##0.000",
- DecimalFormatSymbols.getInstance(Locale.ENGLISH));;
+ DecimalFormatSymbols.getInstance(Locale.ENGLISH));
private DecimalFormat dfPercentage = new DecimalFormat("##0.00",
- DecimalFormatSymbols.getInstance(Locale.ENGLISH));;
+ DecimalFormatSymbols.getInstance(Locale.ENGLISH));
- private ApplyViewPage owner;
+ protected ApplyViewPage owner;
ImageDescriptor blockApply;
@@ -111,8 +112,9 @@ public class ApplyTreeLabelProvider exte
IExplainTreeNode parentNode = debugNode.getParent();
if (parentNode != null) {
FeatureStructure parent = parentNode.getFeatureStructure();
- if (parent != null) {
- long parentTime = parent.getLongValue(f4);
+ if (parent instanceof ProfiledAnnotation) {
+ // TODO FSArray break in inlined by purpose?
+ long parentTime = ((ProfiledAnnotation) parent).getTime();
if (parentTime > 0) {
percent = (took / (parentTime / 1000.0)) * 100.0;
}
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyViewPage.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyViewPage.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyViewPage.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/apply/ApplyViewPage.java
Fri Nov 15 09:04:07 2019
@@ -107,6 +107,23 @@ public class ApplyViewPage extends Page
image = desc.createImage();
name = ExplainConstants.RULE_APPLY_TYPE;
images.put(name, image);
+ images.put(ExplainConstants.INLINED_AS_ACTION, image);
+
+ desc = RutaAddonsPlugin.getImageDescriptor("/icons/arrow_left.png");
+ image = desc.createImage();
+ images.put(ExplainConstants.INLINED_AS_CONDITION, image);
+
+ desc =
RutaAddonsPlugin.getImageDescriptor("/icons/chart_organisation.png");
+ image = desc.createImage();
+ images.put(ExplainConstants.INLINED_ACTION_BLOCK, image);
+
+ desc =
RutaAddonsPlugin.getImageDescriptor("/icons/chart_organisation_add.png");
+ image = desc.createImage();
+ images.put(ExplainConstants.INLINED_CONDITION_BLOCK_MATCHED, image);
+
+ desc =
RutaAddonsPlugin.getImageDescriptor("/icons/chart_organisation_delete.png");
+ image = desc.createImage();
+ images.put(ExplainConstants.INLINED_CONDITION_BLOCK_FAILED, image);
desc = RutaAddonsPlugin.getImageDescriptor("/icons/arrow_branch.png");
image = desc.createImage();
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/element/ElementTreeContentProvider.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/element/ElementTreeContentProvider.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/element/ElementTreeContentProvider.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/element/ElementTreeContentProvider.java
Fri Nov 15 09:04:07 2019
@@ -19,21 +19,29 @@
package org.apache.uima.ruta.explain.element;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.uima.ruta.explain.tree.IExplainTreeNode;
+import org.apache.uima.ruta.explain.tree.InlinedRootNode;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
-
public class ElementTreeContentProvider implements ITreeContentProvider {
+ @Override
public Object[] getChildren(Object parentElement) {
- if (parentElement instanceof IExplainTreeNode) {
- IExplainTreeNode debugNode = (IExplainTreeNode) parentElement;
- return debugNode.getChildren().toArray();
+ List<Object> result = new ArrayList<Object>();
+ IExplainTreeNode debugNode = (IExplainTreeNode) parentElement;
+ for (IExplainTreeNode each : debugNode.getChildren()) {
+ if (!(each instanceof InlinedRootNode)) {
+ result.add(each);
+ }
}
- return null;
+ return result.toArray();
}
+ @Override
public Object getParent(Object element) {
if (element instanceof IExplainTreeNode) {
return ((IExplainTreeNode) element).getParent();
@@ -42,10 +50,12 @@ public class ElementTreeContentProvider
}
+ @Override
public Object[] getElements(Object element) {
return getChildren(element);
}
+ @Override
public boolean hasChildren(Object parentElement) {
if (parentElement instanceof IExplainTreeNode) {
IExplainTreeNode debugNode = (IExplainTreeNode) parentElement;
@@ -54,9 +64,11 @@ public class ElementTreeContentProvider
return false;
}
+ @Override
public void dispose() {
}
+ @Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/failed/FailedViewPage.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/failed/FailedViewPage.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/failed/FailedViewPage.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/failed/FailedViewPage.java
Fri Nov 15 09:04:07 2019
@@ -26,6 +26,7 @@ import org.apache.uima.caseditor.editor.
import org.apache.uima.ruta.addons.RutaAddonsPlugin;
import org.apache.uima.ruta.explain.ExplainConstants;
import org.apache.uima.ruta.explain.apply.ApplyView;
+import org.apache.uima.ruta.explain.inlined.InlinedView;
import org.apache.uima.ruta.explain.rulelist.RuleListView;
import org.apache.uima.ruta.explain.selection.ExplainSelectionView;
import org.apache.uima.ruta.explain.tree.BlockApplyNode;
@@ -126,9 +127,11 @@ public class FailedViewPage extends Page
}
}
+ @Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (selection instanceof TreeSelection
- && (part instanceof ApplyView || part instanceof RuleListView ||
part instanceof ExplainSelectionView)) {
+ && (part instanceof ApplyView || part instanceof RuleListView
+ || part instanceof ExplainSelectionView || part instanceof
InlinedView)) {
TreeSelection ts = (TreeSelection) selection;
Object firstElement = ts.getFirstElement();
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeContentProvider.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeContentProvider.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeContentProvider.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeContentProvider.java
Fri Nov 15 09:04:07 2019
@@ -19,68 +19,8 @@
package org.apache.uima.ruta.explain.inlined;
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.uima.ruta.explain.apply.ApplyTreeContentProvider;
-import org.apache.uima.ruta.explain.tree.IExplainTreeNode;
-import org.apache.uima.ruta.explain.tree.RuleMatchNode;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-
-public class InlinedTreeContentProvider implements ITreeContentProvider {
-
- @Override
- public Object[] getChildren(Object parentElement) {
-
- // TODO
- if (parentElement instanceof IExplainTreeNode) {
- List<Object> result = new ArrayList<Object>();
- IExplainTreeNode debugNode = (IExplainTreeNode) parentElement;
- for (IExplainTreeNode each : debugNode.getChildren()) {
- if (each instanceof RuleMatchNode) {
- result.add(each);
- }
- }
- return result.toArray();
- }
- return null;
- }
-
- @Override
- public Object getParent(Object element) {
- if (element instanceof IExplainTreeNode) {
- return ((IExplainTreeNode) element).getParent();
- }
- return null;
-
- }
-
- @Override
- public Object[] getElements(Object element) {
- return getChildren(element);
- }
-
- @Override
- public boolean hasChildren(Object parentElement) {
-
- // TODO
- // if (parentElement instanceof IExplainTreeNode) {
- // IExplainTreeNode debugNode = (IExplainTreeNode) parentElement;
- // for (Object each : debugNode.getChildren()) {
- // if(!(each instanceof ExplainRootNode)) {
- // return true;
- // }
- // }
- // }
- return false;
- }
-
- @Override
- public void dispose() {
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
+public class InlinedTreeContentProvider extends ApplyTreeContentProvider {
}
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeLabelProvider.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeLabelProvider.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeLabelProvider.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedTreeLabelProvider.java
Fri Nov 15 09:04:07 2019
@@ -20,47 +20,47 @@
package org.apache.uima.ruta.explain.inlined;
import org.apache.uima.cas.FeatureStructure;
-import org.apache.uima.cas.text.AnnotationFS;
-import org.apache.uima.ruta.explain.tree.RuleMatchNode;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
+import org.apache.uima.ruta.explain.ExplainConstants;
+import org.apache.uima.ruta.explain.apply.ApplyTreeLabelProvider;
+import org.apache.uima.ruta.explain.apply.ApplyViewPage;
+import org.apache.uima.ruta.explain.tree.InlinedRuleBlockNode;
+import org.apache.uima.ruta.type.DebugInlinedBlock;
import org.eclipse.swt.graphics.Image;
+public class InlinedTreeLabelProvider extends ApplyTreeLabelProvider {
-public class InlinedTreeLabelProvider extends LabelProvider implements
ILabelProvider {
-
- private InlinedViewPage owner;
-
- public InlinedTreeLabelProvider(InlinedViewPage owner) {
- super();
- this.owner = owner;
+ public InlinedTreeLabelProvider(ApplyViewPage owner) {
+ super(owner);
}
@Override
public Image getImage(Object element) {
- if (element instanceof RuleMatchNode) {
- RuleMatchNode ruleMatchNode = (RuleMatchNode) element;
- FeatureStructure fs = ruleMatchNode.getFeatureStructure();
- if (fs != null) {
- String name = fs.getType().getName();
- return owner.getImage(name);
+ if (element instanceof InlinedRuleBlockNode) {
+ InlinedRuleBlockNode ruleBlockNode = (InlinedRuleBlockNode) element;
+ if (ruleBlockNode.isAsCondition()) {
+ if (ruleBlockNode.isMatched()) {
+ return
owner.getImage(ExplainConstants.INLINED_CONDITION_BLOCK_MATCHED);
+ } else {
+ return
owner.getImage(ExplainConstants.INLINED_CONDITION_BLOCK_FAILED);
+ }
+ } else {
+ return owner.getImage(ExplainConstants.INLINED_ACTION_BLOCK);
}
}
- return null;
+
+ return super.getImage(element);
}
@Override
public String getText(Object element) {
- if (element instanceof RuleMatchNode) {
- RuleMatchNode debugNode = (RuleMatchNode) element;
- FeatureStructure fs = debugNode.getFeatureStructure();
- if (fs != null) {
- String s = ((AnnotationFS) fs).getCoveredText();
- s = s.replaceAll("[\\n\\r]", "");
- return s;
+ if (element instanceof InlinedRuleBlockNode) {
+ InlinedRuleBlockNode node = (InlinedRuleBlockNode) element;
+ FeatureStructure fs = node.getFeatureStructure();
+ if (fs instanceof DebugInlinedBlock) {
+ return ((DebugInlinedBlock) fs).getElement();
}
}
- return element.toString();
+ return super.getText(element);
}
}
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedViewPage.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedViewPage.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedViewPage.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/inlined/InlinedViewPage.java
Fri Nov 15 09:04:07 2019
@@ -19,129 +19,63 @@
package org.apache.uima.ruta.explain.inlined;
-import java.util.HashMap;
-import java.util.Map;
-
import org.apache.uima.caseditor.editor.AnnotationEditor;
-import org.apache.uima.ruta.addons.RutaAddonsPlugin;
-import org.apache.uima.ruta.explain.ExplainConstants;
import org.apache.uima.ruta.explain.apply.ApplyView;
+import org.apache.uima.ruta.explain.apply.ApplyViewPage;
+import org.apache.uima.ruta.explain.element.ElementView;
+import org.apache.uima.ruta.explain.failed.FailedView;
+import org.apache.uima.ruta.explain.matched.MatchedView;
import org.apache.uima.ruta.explain.rulelist.RuleListView;
import org.apache.uima.ruta.explain.selection.ExplainSelectionView;
-import org.apache.uima.ruta.explain.tree.BlockApplyNode;
-import org.apache.uima.ruta.explain.tree.RuleApplyNode;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
+import org.apache.uima.ruta.explain.tree.ExplainAbstractTreeNode;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.part.Page;
-
-public class InlinedViewPage extends Page implements ISelectionListener {
-
- private CheckboxTreeViewer treeView;
- private Map<String, Image> images;
+public class InlinedViewPage extends ApplyViewPage implements
ISelectionListener {
public InlinedViewPage(AnnotationEditor editor) {
- super();
- }
-
- @Override
- public void dispose() {
- getSite().getPage().removeSelectionListener(this);
- if (images != null) {
- for (Image each : images.values()) {
- each.dispose();
- }
- }
- super.dispose();
- }
-
- private void initImages() {
- images = new HashMap<String, Image>();
- ImageDescriptor desc;
- Image image;
- String name;
-
- desc = RutaAddonsPlugin.getImageDescriptor("/icons/accept.png");
- image = desc.createImage();
- name = "matched";
- images.put(name, image);
-
- desc = RutaAddonsPlugin.getImageDescriptor("/icons/cancel.png");
- image = desc.createImage();
- name = "failed";
- images.put(name, image);
-
- desc = RutaAddonsPlugin.getImageDescriptor("/icons/font_add.png");
- image = desc.createImage();
- name = ExplainConstants.MATCHED_RULE_MATCH_TYPE;
- images.put(name, image);
-
- desc = RutaAddonsPlugin.getImageDescriptor("/icons/font_delete.png");
- image = desc.createImage();
- name = ExplainConstants.FAILED_RULE_MATCH_TYPE;
- images.put(name, image);
- }
-
- public Image getImage(String name) {
- if (images == null) {
- initImages();
- }
- return images.get(name);
+ super(editor);
}
@Override
public void createControl(Composite parent) {
- treeView = new CheckboxTreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL |
SWT.V_SCROLL);
- treeView.setContentProvider(new InlinedTreeContentProvider());
- treeView.setLabelProvider(new InlinedTreeLabelProvider(this));
- treeView.setInput(null);
- getSite().setSelectionProvider(treeView);
+ viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
+ viewer.setContentProvider(new InlinedTreeContentProvider());
+ viewer.setLabelProvider(new InlinedTreeLabelProvider(this));
+
+ document.addChangeListener(this);
+
+ viewer.setAutoExpandLevel(2);
+ viewer.addDoubleClickListener(this);
+ getSite().setSelectionProvider(viewer);
getSite().getPage().addSelectionListener(this);
}
- @Override
- public Control getControl() {
- return treeView.getControl();
- }
-
- @Override
- public void setFocus() {
- treeView.getControl().setFocus();
- }
-
public void inputChange(Object newInput) {
- if (newInput == null || treeView == null || newInput ==
treeView.getInput()) {
+ if (newInput == null || viewer == null || newInput == viewer.getInput()) {
return;
}
- // TODO filter
- this.treeView.setInput(newInput);
- this.treeView.refresh();
+ this.viewer.setInput(newInput);
+ this.viewer.refresh();
}
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
- if (selection instanceof TreeSelection && (part instanceof ApplyView
- || part instanceof RuleListView || part instanceof
ExplainSelectionView)) {
+ if (selection instanceof TreeSelection
+ && (part instanceof ApplyView || part instanceof RuleListView
+ || part instanceof ExplainSelectionView || part instanceof
MatchedView
+ || part instanceof FailedView || part instanceof
ElementView)) {
TreeSelection ts = (TreeSelection) selection;
Object firstElement = ts.getFirstElement();
- // TODO: !!!!
- if (firstElement instanceof BlockApplyNode) {
- BlockApplyNode block = (BlockApplyNode) firstElement;
- inputChange(block.getBlockRuleNode().getMatchedChild());
- } else if (firstElement instanceof RuleApplyNode) {
- RuleApplyNode rule = (RuleApplyNode) firstElement;
- inputChange(rule.getMatchedChild());
+ if (firstElement instanceof ExplainAbstractTreeNode) {
+ inputChange(((ExplainAbstractTreeNode) firstElement).getInlined());
}
-
}
}
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/matched/MatchedViewPage.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/matched/MatchedViewPage.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/matched/MatchedViewPage.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/matched/MatchedViewPage.java
Fri Nov 15 09:04:07 2019
@@ -26,6 +26,7 @@ import org.apache.uima.caseditor.editor.
import org.apache.uima.ruta.addons.RutaAddonsPlugin;
import org.apache.uima.ruta.explain.ExplainConstants;
import org.apache.uima.ruta.explain.apply.ApplyView;
+import org.apache.uima.ruta.explain.inlined.InlinedView;
import org.apache.uima.ruta.explain.rulelist.RuleListView;
import org.apache.uima.ruta.explain.selection.ExplainSelectionView;
import org.apache.uima.ruta.explain.tree.BlockApplyNode;
@@ -126,9 +127,11 @@ public class MatchedViewPage extends Pag
}
}
+ @Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (selection instanceof TreeSelection
- && (part instanceof ApplyView || part instanceof RuleListView ||
part instanceof ExplainSelectionView)) {
+ && (part instanceof ApplyView || part instanceof RuleListView
+ || part instanceof ExplainSelectionView || part instanceof
InlinedView)) {
TreeSelection ts = (TreeSelection) selection;
Object firstElement = ts.getFirstElement();
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainAbstractTreeNode.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainAbstractTreeNode.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainAbstractTreeNode.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainAbstractTreeNode.java
Fri Nov 15 09:04:07 2019
@@ -31,6 +31,8 @@ public abstract class ExplainAbstractTre
private IExplainTreeNode parent;
+ private InlinedRootNode inlined;
+
private List<IExplainTreeNode> children;
private FeatureStructure fs;
@@ -44,14 +46,17 @@ public abstract class ExplainAbstractTre
this.ts = ts;
}
+ @Override
public IExplainTreeNode getParent() {
return parent;
}
+ @Override
public List<IExplainTreeNode> getChildren() {
return children;
}
+ @Override
public boolean hasChildren() {
if (children.size() > 0) {
return true;
@@ -59,18 +64,22 @@ public abstract class ExplainAbstractTre
return false;
}
+ @Override
public void addChild(IExplainTreeNode child) {
children.add(child);
}
+ @Override
public boolean removeChild(IExplainTreeNode child) {
return children.remove(child);
}
+ @Override
public FeatureStructure getFeatureStructure() {
return fs;
}
+ @Override
public TypeSystem getTypeSystem() {
return ts;
}
@@ -80,15 +89,26 @@ public abstract class ExplainAbstractTre
return fs.toString();
}
+ @Override
@SuppressWarnings({ "unchecked", "rawtypes" })
public Object getAdapter(Class adapter) {
if (FeatureStructure.class.equals(adapter)) {
return getFeatureStructure();
- } else if (AnnotationFS.class.equals(adapter) && getFeatureStructure()
instanceof AnnotationFS) {
+ } else if (AnnotationFS.class.equals(adapter)
+ && getFeatureStructure() instanceof AnnotationFS) {
return getFeatureStructure();
}
return null;
}
+
+ @Override
+ public InlinedRootNode getInlined() {
+ return inlined;
+ }
+
+ public void setInlined(InlinedRootNode inlined) {
+ this.inlined = inlined;
+ }
}
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainTree.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainTree.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainTree.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/ExplainTree.java
Fri Nov 15 09:04:07 2019
@@ -28,8 +28,10 @@ import org.apache.uima.cas.FeatureStruct
import org.apache.uima.cas.TypeSystem;
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.cas.FSArray;
import org.apache.uima.ruta.type.DebugBlockApply;
import org.apache.uima.ruta.type.DebugEvaluatedCondition;
+import org.apache.uima.ruta.type.DebugInlinedBlock;
import org.apache.uima.ruta.type.DebugRuleApply;
import org.apache.uima.ruta.type.DebugRuleElementMatch;
import org.apache.uima.ruta.type.DebugRuleElementMatches;
@@ -99,6 +101,20 @@ public class ExplainTree {
}
}
+ private void buildInlinedBlock(boolean asCondition, DebugInlinedBlock
debugInlinedBlock,
+ IExplainTreeNode parent, TypeSystem ts, int offset, boolean
onlyRules) {
+ InlinedRuleBlockNode inlinedBlockNode = new InlinedRuleBlockNode(parent,
debugInlinedBlock,
+ debugInlinedBlock.getAsCondition(),
debugInlinedBlock.getMatched(), ts);
+ parent.addChild(inlinedBlockNode);
+
+ FSArray inlinedRules = debugInlinedBlock.getInlinedRules();
+ if (inlinedRules != null) {
+ for (FeatureStructure each : inlinedRules) {
+ buildTree(each, inlinedBlockNode, ts, offset, onlyRules);
+ }
+ }
+ }
+
private void processBlockApply(DebugBlockApply fs, IExplainTreeNode parent,
TypeSystem ts,
int offset, boolean onlyRules) {
if (offset >= 0 && (fs.getBegin() >= offset || fs.getEnd() <= offset)) {
@@ -151,6 +167,7 @@ public class ExplainTree {
}
}
}
+
}
private void processRuleApply(DebugRuleApply fs, IExplainTreeNode parent,
TypeSystem ts,
@@ -181,8 +198,10 @@ public class ExplainTree {
}
}
}
+ if (fs.getRules().size() == 1) {
+ mergeInlinedRuleBlockNodesOfChildren(ruleNode);
+ }
}
-
}
private void processRuleMatch(DebugRuleMatch fs, IExplainTreeNode parent,
TypeSystem ts,
@@ -201,6 +220,7 @@ public class ExplainTree {
buildTree(each, remRoot, ts, offset, onlyRules);
}
}
+ mergeInlinedRuleBlockNodesOfChildren(matchNode);
}
private void processRuleElementMatches(DebugRuleElementMatches fs,
IExplainTreeNode parent,
@@ -213,6 +233,19 @@ public class ExplainTree {
buildTree(each, remsNode, ts, offset, onlyRules);
}
}
+
+ FSArray inlinedActionBlocks = fs.getInlinedActionBlocks();
+ if (inlinedActionBlocks != null) {
+ InlinedRootNode inlinedRootNode = new InlinedRootNode(remsNode, ts);
+ remsNode.setInlined(inlinedRootNode);
+ for (FeatureStructure each : inlinedActionBlocks) {
+ if (each instanceof DebugInlinedBlock) {
+ buildInlinedBlock(false, (DebugInlinedBlock) each, inlinedRootNode,
ts, offset,
+ onlyRules);
+ }
+ }
+ }
+ mergeInlinedRuleBlockNodesOfChildren(remsNode);
}
private void processRuleElementMatch(DebugRuleElementMatch fs,
IExplainTreeNode parent,
@@ -236,6 +269,17 @@ public class ExplainTree {
buildTree(each, remNode, ts, offset, onlyRules);
}
}
+ FSArray inlinedConditionBlocks = fs.getInlinedConditionBlocks();
+ if (inlinedConditionBlocks != null) {
+ InlinedRootNode inlinedRootNode = new InlinedRootNode(remNode, ts);
+ remNode.setInlined(inlinedRootNode);
+ for (FeatureStructure each : inlinedConditionBlocks) {
+ if (each instanceof DebugInlinedBlock) {
+ buildInlinedBlock(true, (DebugInlinedBlock) each, inlinedRootNode,
ts, offset, onlyRules);
+ }
+ }
+ }
+ mergeInlinedRuleBlockNodesOfChildren(remNode);
}
private void processEvaluatedCondition(DebugEvaluatedCondition fs,
IExplainTreeNode parent,
@@ -250,6 +294,41 @@ public class ExplainTree {
}
}
+ private void mergeInlinedRuleBlockNodesOfChildren(ExplainAbstractTreeNode
parent) {
+
+ List<IExplainTreeNode> list = new ArrayList<>();
+
+ for (IExplainTreeNode each : parent.getChildren()) {
+ collectInlinedBlockNodes(each, list);
+ }
+ InlinedRootNode inlinedRootNode = parent.getInlined();
+ if (inlinedRootNode == null && !list.isEmpty()) {
+ inlinedRootNode = new InlinedRootNode(parent, parent.getTypeSystem());
+ parent.setInlined(inlinedRootNode);
+ }
+
+ if (inlinedRootNode != null) {
+ for (IExplainTreeNode each : list) {
+ if (!inlinedRootNode.getChildren().contains(each)) {
+ inlinedRootNode.addChild(each);
+ }
+ }
+ }
+ }
+
+ private void collectInlinedBlockNodes(IExplainTreeNode node,
List<IExplainTreeNode> result) {
+ if (node.getInlined() != null && node.getInlined().hasChildren()) {
+ // already collected down to this level
+ result.addAll(node.getInlined().getChildren());
+ return;
+ }
+
+ List<IExplainTreeNode> children = node.getChildren();
+ for (IExplainTreeNode each : children) {
+ collectInlinedBlockNodes(each, result);
+ }
+ }
+
private void prune(IExplainTreeNode node) {
if (node == null) {
return;
Modified:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/IExplainTreeNode.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/IExplainTreeNode.java?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/IExplainTreeNode.java
(original)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/IExplainTreeNode.java
Fri Nov 15 09:04:07 2019
@@ -39,4 +39,7 @@ public interface IExplainTreeNode {
FeatureStructure getFeatureStructure();
TypeSystem getTypeSystem();
+
+ ExplainAbstractTreeNode getInlined();
+
}
Added:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRootNode.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRootNode.java?rev=1869839&view=auto
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRootNode.java
(added)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRootNode.java
Fri Nov 15 09:04:07 2019
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.uima.ruta.explain.tree;
+
+import org.apache.uima.cas.TypeSystem;
+
+public class InlinedRootNode extends ExplainAbstractTreeNode implements
ExplainRootNode {
+
+ public InlinedRootNode(IExplainTreeNode parent, TypeSystem ts) {
+ super(parent, null, ts);
+ }
+
+ @Override
+ public String toString() {
+ return "Inlined";
+ }
+}
Added:
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRuleBlockNode.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRuleBlockNode.java?rev=1869839&view=auto
==============================================================================
---
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRuleBlockNode.java
(added)
+++
uima/ruta/trunk/ruta-ep-addons/src/main/java/org/apache/uima/ruta/explain/tree/InlinedRuleBlockNode.java
Fri Nov 15 09:04:07 2019
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.uima.ruta.explain.tree;
+
+import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.TypeSystem;
+
+public class InlinedRuleBlockNode extends ExplainAbstractTreeNode {
+
+ private final boolean asCondition;
+
+ private final boolean matched;
+
+ public InlinedRuleBlockNode(IExplainTreeNode parent, FeatureStructure fs,
boolean asCondition,
+ boolean matched, TypeSystem ts) {
+ super(parent, fs, ts);
+ this.asCondition = asCondition;
+ this.matched = matched;
+ }
+
+ @Override
+ public void addChild(IExplainTreeNode node) {
+ super.addChild(node);
+ }
+
+ public boolean isAsCondition() {
+ return asCondition;
+ }
+
+ public boolean isMatched() {
+ return matched;
+ }
+
+}
Modified:
uima/ruta/trunk/ruta-typesystem/src/main/resources/org/apache/uima/ruta/engine/RutaInternalTypeSystem.xml
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-typesystem/src/main/resources/org/apache/uima/ruta/engine/RutaInternalTypeSystem.xml?rev=1869839&r1=1869838&r2=1869839&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-typesystem/src/main/resources/org/apache/uima/ruta/engine/RutaInternalTypeSystem.xml
(original)
+++
uima/ruta/trunk/ruta-typesystem/src/main/resources/org/apache/uima/ruta/engine/RutaInternalTypeSystem.xml
Fri Nov 15 09:04:07 2019
@@ -156,10 +156,10 @@
<multipleReferencesAllowed>false</multipleReferencesAllowed>
</featureDescription>
<featureDescription>
- <name>inlinedConditionRules</name>
+ <name>inlinedConditionBlocks</name>
<description/>
<rangeTypeName>uima.cas.FSArray</rangeTypeName>
- <elementType>org.apache.uima.ruta.type.DebugScriptApply</elementType>
+
<elementType>org.apache.uima.ruta.type.DebugInlinedBlock</elementType>
<multipleReferencesAllowed>false</multipleReferencesAllowed>
</featureDescription>
</features>
@@ -186,7 +186,36 @@
<rangeTypeName>uima.cas.Boolean</rangeTypeName>
</featureDescription>
<featureDescription>
- <name>inlinedActionRules</name>
+ <name>inlinedActionBlocks</name>
+ <description/>
+ <rangeTypeName>uima.cas.FSArray</rangeTypeName>
+
<elementType>org.apache.uima.ruta.type.DebugInlinedBlock</elementType>
+ <multipleReferencesAllowed>false</multipleReferencesAllowed>
+ </featureDescription>
+ </features>
+ </typeDescription>
+ <typeDescription>
+ <name>org.apache.uima.ruta.type.DebugInlinedBlock</name>
+ <description/>
+ <supertypeName>uima.cas.TOP</supertypeName>
+ <features>
+ <featureDescription>
+ <name>element</name>
+ <description/>
+ <rangeTypeName>uima.cas.String</rangeTypeName>
+ </featureDescription>
+ <featureDescription>
+ <name>asCondition</name>
+ <description/>
+ <rangeTypeName>uima.cas.Boolean</rangeTypeName>
+ </featureDescription>
+ <featureDescription>
+ <name>matched</name>
+ <description/>
+ <rangeTypeName>uima.cas.Boolean</rangeTypeName>
+ </featureDescription>
+ <featureDescription>
+ <name>inlinedRules</name>
<description/>
<rangeTypeName>uima.cas.FSArray</rangeTypeName>
<elementType>org.apache.uima.ruta.type.DebugScriptApply</elementType>