code: public static <D extends BioPAXElement, R> PropertyEditor<D, R> createPropertyEditor(Class<D> domain,
  	                                                                                     String property)
  	{
  		PropertyEditor editor = null;
  		try
  		{
  			Method getMethod = detectGetMethod(domain, property);
  			boolean multipleCardinality = isMultipleCardinality(getMethod);
  			Class<R> range = detectRange(getMethod);
  
  			if (range.isPrimitive() || range.equals(Boolean.class))
  			{
  				editor = new PrimitivePropertyEditor<D, R>(property, getMethod, domain, range, multipleCardinality);
  			} else if (range.isEnum())
  			{
  				editor = new EnumeratedPropertyEditor(property, getMethod, domain, range, multipleCardinality);
  			} else if (range.equals(String.class))
  			{
  				editor = new StringPropertyEditor(property, getMethod, domain, multipleCardinality);
  			} else
  			{
  				editor = new ObjectPropertyEditor(property, getMethod, domain, range, multipleCardinality);
  			}
  		}
  		catch (NoSuchMethodException e)
  		{
  			if (log.isWarnEnabled()) log.warn("Failed creating the controller for " + property + " on " + domain);
  		}
  		return editor;
  	}
docs: This method creates a property reflecting on the domain and property. Proper subclass is chosen
  based on the range of the property.
  @param domain paxtools level2 interface that maps to the corresponding owl level2.
  @param property to be managed by the constructed controller.
  @param <D> domain
  @param <R> range
  @return a property controller to manipulate the beans for the given property.