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;
  }
}

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 ; } }
create a property using the provided string values .
