public DefaultAnnotationRuleApplicationOperation(TreeAndParentMap<ExtendedInfo, ExtendedConstructionNode> textTreeAndParentMap,
BidirectionalMap<ExtendedNode, ExtendedConstructionNode> matchOfLhsToTree,
Map<ExtendedNode, BasicRuleAnnotations> mapLhsToAnnotations, AnnotationsMerger annotatiorMerger) throws OperationException {
if (null==textTreeAndParentMap)
throw new AnnotationOperationException("null textTree");
if (mapLhsToAnnotations == null)
throw new AnnotationOperationException("Got null mapLhsToAnnotations");
if (matchOfLhsToTree == null)
throw new AnnotationOperationException("Got null mapLhsToTree");
if (mapLhsToAnnotations.size() != matchOfLhsToTree.size())
throw new AnnotationOperationException("The number of tree nodes to map ("+matchOfLhsToTree.size()+")and the number of new annotation records to apply ("+mapLhsToAnnotations.size()+") don't match");
if (annotatiorMerger == null)
throw new AnnotationOperationException("null annotatiorMerger");
this.treeAndParentMap = textTreeAndParentMap;
this.mapLhsToAnnotations = mapLhsToAnnotations;
this.mapLhsToTree = matchOfLhsToTree;
this.annotationsMerger = annotatiorMerger;
}