public static Cascades.VersionValue GetUnsavedVersionValue(
     String versionUnsavedValue,
     IGetter versionGetter,
     IVersionType versionType,
     ConstructorInfo constructor)
 {
     if (versionUnsavedValue == null)
     {
         if (constructor != null)
         {
             Object defaultValue = versionGetter.Get(Instantiate(constructor));
             // if the version of a newly instantiated object is not the same
             // as the version seed value, use that as the unsaved-value
             return(versionType.Equals(versionType.Seed, defaultValue) ?
                    Cascades.VersionValue.VersionUndefined :
                    new Cascades.VersionValue(defaultValue));
         }
         else
         {
             return(Cascades.VersionValue.VersionUndefined);
         }
     }
     else if ("undefined" == versionUnsavedValue)
     {
         return(Cascades.VersionValue.VersionUndefined);
     }
     else if ("null" == versionUnsavedValue)
     {
         return(Cascades.VersionValue.VersionSaveNull);
     }
     else if ("negative" == versionUnsavedValue)
     {
         return(Cascades.VersionValue.VersionNegative);
     }
     else
     {
         // NHibernate-specific
         try
         {
             return(new Cascades.VersionValue(versionType.StringToObject(versionUnsavedValue)));
         }
         catch (InvalidCastException ice)
         {
             throw new MappingException("Bad version type: " + versionType.Name, ice);
         }
         catch (Exception e)
         {
             throw new MappingException("Could not parse version unsaved-value: " + versionUnsavedValue, e);
         }
     }
 }
		public static Cascades.VersionValue GetUnsavedVersionValue(
			String versionUnsavedValue, 
			IGetter versionGetter,
			IVersionType versionType,
			ConstructorInfo constructor) 
		{
		
			if ( versionUnsavedValue == null ) 
			{
				if ( constructor!=null ) 
				{
					Object defaultValue = versionGetter.Get( Instantiate(constructor) );
					// if the version of a newly instantiated object is not the same
					// as the version seed value, use that as the unsaved-value
					return versionType.Equals( versionType.Seed, defaultValue ) ?
						Cascades.VersionValue.VersionUndefined :
						new Cascades.VersionValue( defaultValue );
				}
				else 
				{
					return Cascades.VersionValue.VersionUndefined;
				}
			}
			else if ( "undefined" == versionUnsavedValue )
			{
				return Cascades.VersionValue.VersionUndefined;
			}
			else if ( "null" == versionUnsavedValue ) 
			{
				return Cascades.VersionValue.VersionSaveNull;
			}
			else if ( "negative" == versionUnsavedValue ) 
			{
				return Cascades.VersionValue.VersionNegative;
			}
			else 
			{
				// NHibernate-specific
				try
				{
					return new Cascades.VersionValue( versionType.StringToObject( versionUnsavedValue ) );
				}
				catch( InvalidCastException ice )
				{
					throw new MappingException( "Bad version type: " + versionType.Name, ice );
				}
				catch( Exception e )
				{
					throw new MappingException( "Could not parse version unsaved-value: " + versionUnsavedValue, e );
				}
			}
		
		}