/// <summary>
        /// Cleans all text fields in this element
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="visitSubNodes"></param>
        public override void visit(Generated.Range obj, bool visitSubNodes)
        {
            if ( obj.getMinValue() != null )
              {
            obj.setMinValue(obj.getMinValue().Trim());
              }
              if ( obj.getMaxValue() != null )
              {
            obj.setMaxValue(obj.getMaxValue().Trim());
              }

              base.visit(obj, visitSubNodes);
        }
        /// <summary>
        /// Compares two Range and annotates the differences on the first one
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="other"></param>
        public static void compareRange(Generated.Range obj, Generated.Range other, VersionDiff diff)
        {
            if ( other == null )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aAdd, "", "", obj.Name ) );
                return;
            }

            compareType (obj, other, diff);

            if ( !CompareUtil.canonicalStringEquality(obj.getMinValue(), other.getMinValue()) )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "MinValue", other.getMinValue(), obj.getMinValue()) );
            }
            if ( !CompareUtil.canonicalStringEquality(obj.getMaxValue(), other.getMaxValue()) )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "MaxValue", other.getMaxValue(), obj.getMaxValue()) );
            }
            if ( obj.allSpecialValues() != null )
            {
                if ( other.allSpecialValues() != null )
                {
                    int i = 0;
                    while ( i < obj.countSpecialValues() && i < other.countSpecialValues() )
                    {
                        Generated.EnumValue element = obj.getSpecialValues( i );
                        Generated.EnumValue otherElement = other.getSpecialValues( i );
                        compareEnumValue ( element, otherElement, diff );
                        i += 1;
                    }
                    while ( i < obj.countSpecialValues() )
                    {
                        diff.appendChanges ( new Diff(obj.getSpecialValues(i), HistoricalData.Generated.acceptor.ChangeOperationEnum.aAdd, "SpecialValues", "", obj.getSpecialValues( i ).Name ) );
                        i += 1;
                    }
                    while ( i < other.countSpecialValues() )
                    {
                        diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aRemove, "SpecialValues", other.getSpecialValues( i ).Name) );
                        i += 1;
                    }
                }
                else
                {
                    foreach ( Generated.EnumValue subElement in obj.allSpecialValues() )
                    {
                        diff.appendChanges ( new Diff(subElement, HistoricalData.Generated.acceptor.ChangeOperationEnum.aAdd, "SpecialValues", "", subElement.Name ) );
                    }
                }
            }
            else
            {
                if ( other.allSpecialValues() != null )
                {
                    foreach ( Generated.EnumValue otherElement in other.allSpecialValues() )
                    {
                        diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aRemove , "SpecialValues", otherElement.Name) );
                    }
                }
            }
            if ( obj.getPrecision() != other.getPrecision() )
            {
                diff.appendChanges ( new Diff(obj, HistoricalData.Generated.acceptor.ChangeOperationEnum.aChange, "Precision", other.getPrecision().ToString(), obj.getPrecision().ToString()) );
            }
        }
        /// <summary>
        /// Duplicates a source Range into its target
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target"></param>
        public static void DuplicateRange(Generated.Range source, Generated.Range target)
        {
            if ( source != null && target != null )
            {
                DuplicateType (source, target);

                target.setMinValue(source.getMinValue());
                target.setMaxValue(source.getMaxValue());
                target.setPrecision(source.getPrecision());
            }
        }
        /// <summary>
        /// Searches a specific string in Range 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 searchRange(Generated.Range obj, string searchString, List<ModelElement> occurences)
        {
            searchType (obj, searchString, occurences);

            if ( obj.getMinValue() != null && obj.getMinValue().Contains (searchString) )
            {
                occurences.Add ( obj );
            }
            if ( obj.getMaxValue() != null && obj.getMaxValue().Contains (searchString) )
            {
                occurences.Add ( obj );
            }
            if ( obj.allSpecialValues() != null )
            {
                foreach ( Generated.EnumValue subElement in obj.allSpecialValues() )
                {
                    searchEnumValue ( subElement, searchString, occurences );
                }
            }
        }