package org.neo4j.meta.model; /** * Represents a {@link PropertyRange} where the values are of a data type, * f.ex. a string, a number, a date or something similar. */ public class DatatypeClassRange extends SimpleStringPropertyRange { private Class<?> rangeClass; /** * @param rangeClass the expected value type. */ public DatatypeClassRange( Class<?> rangeClass ) { this.rangeClass = rangeClass; } /** * Used internally. */ public DatatypeClassRange() { } /** * @return the value type. */ public Class<?> getRangeClass() { return this.rangeClass; } @Override protected String toStringRepresentation( MetaModelRestrictable owner ) { return this.rangeClass.getName(); } @Override protected void fromStringRepresentation( MetaModelRestrictable owner, String stringRepresentation ) { try { this.rangeClass = Class.forName( stringRepresentation ); } catch ( Exception e ) { throw new RuntimeException( e ); } } @Override public Object rdfLiteralToJavaObject( String value ) { Object result = null; if ( rangeClass.equals( String.class ) ) { result = value; } else { try { result = rangeClass.getConstructor( String.class ).newInstance( value ); } catch ( Exception e ) { throw new RuntimeException( e ); } } return result; } @Override public String javaObjectToRdfLiteral( Object value ) { return value.toString(); } @Override public String toString() { return getClass().getSimpleName() + "[" + rangeClass.getName() + "]"; } }