in ruta-ep-textruler/src/main/java/org/apache/uima/ruta/textruler/learner/rapier/RapierRule.java [187:304]
public ArrayList<RapierRule> createAllTestRules() {
if (!hasListItemAtBorder())
return null;
ArrayList<RapierRule> result = new ArrayList<RapierRule>();
RapierRule strippedRule = copy();
int leftType = 0; // 0=none; 1=prefiller; 2=filler; 3=postfiller
RapierRuleItem left = null;
if (slotPattern.preFillerPattern.size() > 0) {
leftType = 1;
left = (RapierRuleItem) slotPattern.preFillerPattern.get(0);
if (left.isListItem())
strippedRule.getPreFillerPattern().remove(0);
} else if (slotPattern.fillerPattern.size() > 0) {
leftType = 2;
left = (RapierRuleItem) slotPattern.fillerPattern.get(0);
if (left.isListItem())
strippedRule.getFillerPattern().remove(0);
} else if (slotPattern.postFillerPattern.size() > 0) {
leftType = 3;
left = (RapierRuleItem) slotPattern.postFillerPattern.get(0);
if (left.isListItem())
strippedRule.getPostFillerPattern().remove(0);
}
if (left != null && !left.isListItem()) {
left = null;
leftType = 0;
}
int rightType = 0; // 0=none; 1=postfiller; 2=filler; 3=prefiller
RapierRuleItem right = null;
if (totalItemCount() > 1) {
if (slotPattern.postFillerPattern.size() > 0) {
rightType = 1;
right = (RapierRuleItem) slotPattern.postFillerPattern.get(slotPattern.postFillerPattern
.size() - 1);
if (right.isListItem())
strippedRule.getPostFillerPattern()
.remove(strippedRule.getPostFillerPattern().size() - 1);
} else if (slotPattern.fillerPattern.size() > 0) {
rightType = 2;
right = (RapierRuleItem) slotPattern.fillerPattern
.get(slotPattern.fillerPattern.size() - 1);
if (right.isListItem())
strippedRule.getFillerPattern().remove(strippedRule.getFillerPattern().size() - 1);
} else if (slotPattern.postFillerPattern.size() > 0) {
rightType = 3;
right = (RapierRuleItem) slotPattern.preFillerPattern.get(slotPattern.preFillerPattern
.size() - 1);
if (right.isListItem())
strippedRule.getPreFillerPattern().remove(strippedRule.getPreFillerPattern().size() - 1);
}
}
if (right != null && !right.isListItem()) {
right = null;
rightType = 0;
}
if (left == null && right == null) {
TextRulerToolkit.logIfDebug("HOW CAN THIS BE ?");
return null;
}
int leftCount = left != null ? left.listLen() : 0;
int rightCount = right != null ? right.listLen() : 0;
int leftStart;
if (leftCount > 0 && !left.listBeginsAtZero())
leftStart = 1;
else
leftStart = 0;
int rightStart;
if (rightCount > 0 && !right.listBeginsAtZero())
rightStart = 1;
else
rightStart = 0;
for (int leftI = leftStart; leftI <= leftCount; leftI++)
for (int rightI = rightStart; rightI <= rightCount; rightI++) {
RapierRule newRule = strippedRule.copy();
if (leftI > 0) {
TextRulerRulePattern thePattern = null;
if (leftType == 1)
thePattern = newRule.getPreFillerPattern();
else if (leftType == 2)
thePattern = newRule.getFillerPattern();
else if (leftType == 3)
thePattern = newRule.getPostFillerPattern();
for (int i = 0; i < leftI; i++) {
RapierRuleItem theItem = left.copy();
theItem.setListLen(0); // remove List-Character but add
// listI copies instead!!
thePattern.add(0, theItem);
}
}
if (rightI > 0) {
TextRulerRulePattern thePattern = null;
if (rightType == 1)
thePattern = newRule.getPostFillerPattern();
else if (rightType == 2)
thePattern = newRule.getFillerPattern();
else if (rightType == 3)
thePattern = newRule.getPreFillerPattern();
for (int i = 0; i < rightI; i++) {
RapierRuleItem theItem = right.copy();
theItem.setListLen(0); // remove List-Character but add
// listI copies instead!!
thePattern.add(theItem);
}
}
newRule.setNeedsCompile(true);
if (newRule.totalItemCount() > 0) {
// TextRulerToolkit.log(newRule.getRuleString());
result.add(newRule);
}
}
return result;
}