public void writeOperation(SimpleInstruction operation) { if (isWithinOperationSet()) { OperationSet currentOperationSet = operationSetStack.peek(); currentOperationSet.addOperation(operation); } else { if (operation.getType() == SimpleInstruction.Type.PURL) { writeOperation(getMessageHelper().getPluralizedMessage( "operation.purl", 1)); } else { writeOperation(getMessageHelper().getPluralizedMessage( "operation.knit", 1)); } } }
private boolean renderOperationSet(OperationSet operationSet, boolean potentiallySimple) { if (operationSet.size() > 1) { potentiallySimple = false; } if (operationSet.getHead() != null) { getWriterHelper().write( StringUtils.capitalize(operationSet.getHead())); } Iterator it = operationSet.iterator(); while (it.hasNext()) { Object operation = it.next(); boolean useComma = true; if (operation instanceof RepeatOperationSet) { // a RepeatInstructionSet takes additional handling renderRepeatInstructionSet((RepeatOperationSet) operation, potentiallySimple); } else if (operation instanceof OperationSet) { OperationSet nestedOperationSet = (OperationSet) operation; if (nestedOperationSet.getType() == Type.INLINE_INSTRUCTION) { renderOperationSet(nestedOperationSet, potentiallySimple); } else if (nestedOperationSet.getType() == Type.USING_NEEDLE) { // an operation set of type USING_NEEDLE getWriterHelper().writeNewLine(); getWriterHelper().incrementIndent(); getWriterHelper().writeIndent(); renderOperationSet((OperationSet) operation, potentiallySimple); getWriterHelper().decrementIndent(); useComma = false; } } else if (operation instanceof SimpleInstruction) { SimpleInstruction simpleInstruction = (SimpleInstruction) operation; String message; if (simpleInstruction.getType() == SimpleInstruction.Type.KNIT) { if (potentiallySimple) { message = getMessage("operation.knit-only"); } else { message = getMessageHelper().getPluralizedMessage( "operation.knit", 1, StringUtils.EMPTY); } } else if (simpleInstruction.getType() == SimpleInstruction.Type.PURL) { if (potentiallySimple) { message = getMessage("operation.purl-only"); } else { message = getMessageHelper().getPluralizedMessage( "operation.purl", 1, StringUtils.EMPTY); } } else { throw new IllegalArgumentException( "Unhandled operation type " + simpleInstruction.getType()); } // some messages may take one argument getWriterHelper().write(message); } else { // it's something but it's not simple potentiallySimple = false; getWriterHelper().write(String.valueOf(operation)); } if (it.hasNext() && useComma) { getWriterHelper().write( getMessage("operation.list-item-separator") + " "); } } if (operationSet.getTail() != null) { getWriterHelper() .write( ". " + StringUtils.capitalize(operationSet .getTail()) + "."); } return potentiallySimple; }