public ArrayList createAllTestRules()

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;
  }