question: private < P > void decodeProperty ( PropertySet newProperties , ManagedObjectPath < ? , ? > path , PropertyDefinition < P > propertyDef , Attribute attribute ) { PropertyException exception = null ; SortedSet < P > activeValues = new TreeSet < > ( propertyDef ) ; if ( attribute != null ) { for ( ByteString byteValue : attribute ) { P value = ValueDecoder . decode ( propertyDef , byteValue ) ; activeValues . add ( value ) ; } } if ( activeValues . size ( ) > 1 && ! propertyDef . hasOption ( PropertyOption . MULTI_VALUED ) ) { exception = PropertyException . propertyIsSingleValuedException ( propertyDef ) ; P value = activeValues . first ( ) ; activeValues . clear ( ) ; activeValues . add ( value ) ; } Collection < P > defaultValues ; try { defaultValues = findDefaultValues ( path , propertyDef , false ) ; } catch ( PropertyException e ) { defaultValues = Collections . emptySet ( ) ; exception = e ; } newProperties . addProperty ( propertyDef , defaultValues , activeValues ) ; if ( activeValues . isEmpty ( ) && defaultValues . isEmpty ( ) && propertyDef . hasOption ( PropertyOption . MANDATORY ) && exception == null ) { exception = PropertyException . propertyIsMandatoryException ( propertyDef ) ; } if ( exception != null ) { throw exception ; } }
target:  Create a property using the provided string values. 