/// <summary>
 /// Duplicates a source PreCondition into its target
 /// </summary>
 /// <param name="source"></param>
 /// <param name="target"></param>
 public static void DuplicatePreCondition(Generated.PreCondition source, Generated.PreCondition target)
 {
     if ( source != null && target != null )
     {
         target.setCondition(source.getCondition());
         target.setComment(source.getComment());
     }
 }
        /// <summary>
        /// Cleans all text fields in this element
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="visitSubNodes"></param>
        public override void visit(Generated.Expectation obj, bool visitSubNodes)
        {
            if ( obj.getValue() != null )
              {
            obj.setValue(obj.getValue().Trim());
              }
              if ( obj.getCondition() != null )
              {
            obj.setCondition(obj.getCondition().Trim());
              }
              if ( obj.getComment() != null )
              {
            obj.setComment(obj.getComment().Trim());
              }

              base.visit(obj, visitSubNodes);
        }
        /// <summary>
        /// Duplicates a source Expectation into its target
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target"></param>
        public static void DuplicateExpectation(Generated.Expectation source, Generated.Expectation target)
        {
            if ( source != null && target != null )
            {
                DuplicateNamable (source, target);

                target.setValue(source.getValue());
                target.setBlocking(source.getBlocking());
                target.setKind(source.getKind());
                target.setDeadLine(source.getDeadLine());
                target.setCondition(source.getCondition());
                target.setComment(source.getComment());
                target.setCyclePhase(source.getCyclePhase());
            }
        }
        /// <summary>
        /// Compares two PreCondition and annotates the differences on the first one
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="other"></param>
        public static void comparePreCondition(Generated.PreCondition obj, Generated.PreCondition other, VersionDiff diff)
        {
            if ( other == null )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aAdd, "", "", obj.Name ) );
                return;
            }

            if ( !CompareUtil.canonicalStringEquality(obj.getCondition(), other.getCondition()) )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Condition", other.getCondition(), obj.getCondition()) );
            }
            if ( !CompareUtil.canonicalStringEquality(obj.getComment(), other.getComment()) )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Comment", other.getComment(), obj.getComment()) );
            }
        }
 /// <summary>
 /// Searches a specific string in PreCondition and updates the list 
 /// of model element with all the elements in which that string is found
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="obj">The string to search for</param>
 /// <param name="occurences">The list of model elements which hold the searched string</param>
 public static void searchPreCondition(Generated.PreCondition obj, string searchString, List<ModelElement> occurences)
 {
     if ( obj.getCondition() != null && obj.getCondition().Contains (searchString) )
     {
         occurences.Add ( obj );
     }
     if ( obj.getComment() != null && obj.getComment().Contains (searchString) )
     {
         occurences.Add ( obj );
     }
 }
        /// <summary>
        /// Searches a specific string in Expectation and updates the list 
        /// of model element with all the elements in which that string is found
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="obj">The string to search for</param>
        /// <param name="occurences">The list of model elements which hold the searched string</param>
        public static void searchExpectation(Generated.Expectation obj, string searchString, List<ModelElement> occurences)
        {
            searchNamable (obj, searchString, occurences);

            if ( obj.getValue() != null && obj.getValue().Contains (searchString) )
            {
                occurences.Add ( obj );
            }
            if ( obj.getCondition() != null && obj.getCondition().Contains (searchString) )
            {
                occurences.Add ( obj );
            }
            if ( obj.getComment() != null && obj.getComment().Contains (searchString) )
            {
                occurences.Add ( obj );
            }
        }
        /// <summary>
        /// Compares two Expectation and annotates the differences on the first one
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="other"></param>
        public static void compareExpectation(Generated.Expectation obj, Generated.Expectation other, VersionDiff diff)
        {
            if ( other == null )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aAdd, "", "", obj.Name ) );
                return;
            }

            compareNamable (obj, other, diff);

            if ( !CompareUtil.canonicalStringEquality(obj.getValue(), other.getValue()) )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Value", other.getValue(), obj.getValue()) );
            }
            if ( obj.getBlocking() != other.getBlocking() )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Blocking", other.getBlocking().ToString(), obj.getBlocking().ToString()) );
            }
            if ( obj.getKind() != other.getKind() )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Kind", other.getKind().ToString(), obj.getKind().ToString()) );
            }
            if ( obj.getDeadLine() != other.getDeadLine() )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "DeadLine", other.getDeadLine().ToString(), obj.getDeadLine().ToString()) );
            }
            if ( !CompareUtil.canonicalStringEquality(obj.getCondition(), other.getCondition()) )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Condition", other.getCondition(), obj.getCondition()) );
            }
            if ( !CompareUtil.canonicalStringEquality(obj.getComment(), other.getComment()) )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Comment", other.getComment(), obj.getComment()) );
            }
            if ( obj.getCyclePhase() != other.getCyclePhase() )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "CyclePhase", other.getCyclePhase().ToString(), obj.getCyclePhase().ToString()) );
            }
        }