Revision 8186

View differences:

trunk/libraries/libGDBMS/src/main/java/com/hardcode/gdbms/engine/values/ValueFactory.java
3 3
import com.hardcode.gdbms.engine.instruction.SemanticException;
4 4
import com.hardcode.gdbms.parser.SQLEngineConstants;
5 5

  
6
import java.lang.reflect.Constructor;
7
import java.lang.reflect.InvocationTargetException;
6 8
import java.sql.Time;
7 9
import java.sql.Timestamp;
8 10
import java.sql.Types;
......
608 610
    		return null;
609 611
		}
610 612
    }
613

  
614
    /**
615
     *  Create a Value instance from a String value using
616
     * the class specified in valueName.
617
     * <P>
618
     * 
619
     * <code>
620
     * Nota: Habria que ver que hacemos con esto... seguimos delegando
621
     * o modificar el createValueByType para que delege en esta
622
     * </code>
623
     * <P>
624
     * @param text String representation of value
625
     * @param valueName class name of the instance of Value to return.
626
     * 			It can be the class name without the package.
627
     * @return a Value instance
628
     * @throws ParseException
629
     */
630
    public static Value createValueByValueName(String text, String valueName)
631
    	throws ParseException {
632
    	String baseName;
633
    	if (valueName.indexOf(".") > -1) {
634
    		baseName = valueName.substring( valueName.lastIndexOf(".")+1);
635
    	} else {
636
    		baseName = valueName;
637
    	}
638
    	if (baseName.equals("BinaryValue")) {
639
    		return createValueByType(text,Types.BINARY);
640
    	} else if (baseName.equals("BooleanValue")) {
641
    		return createValueByType(text,Types.BOOLEAN);
642
    	} else if (baseName.equals("ByteValue")) {
643
    		return createValueByType(text,Types.TINYINT);
644
    	} else if (baseName.equals("ComplexValue")) {
645
    		return createComplexValue(text);
646
    	} else if (baseName.equals("DateValue")) {
647
    		return createValueByType(text,Types.DATE);
648
    	} else if (baseName.equals("DoubleValue")) {
649
    		return createValueByType(text,Types.DOUBLE);
650
    	} else if (baseName.equals("FloatValue")) {
651
    		return createValueByType(text,Types.REAL);
652
    	} else if (baseName.equals("IntValue")) {
653
    		return createValueByType(text,Types.INTEGER);
654
    	} else if (baseName.equals("LongValue")) {
655
    		return createValueByType(text,Types.BIGINT);
656
    	} else if (baseName.equals("NullValue")) {
657
    		return new NullValue();
658
    	} else if (baseName.equals("ShortValue")) {
659
    		return createValueByType(text,Types.SMALLINT);
660
    	} else if (baseName.equals("StringValue")) {
661
    		return createValueByType(text,Types.VARCHAR);
662
    	} else if (baseName.equals("TimestampValue")) {
663
    		return createValueByType(text,Types.TIMESTAMP);
664
    	} else if (baseName.equals("TimeValue")) {
665
    		return createValueByType(text,Types.TIME);
666
    	} else {
667
    		try {
668
        		Class valueClass = Class.forName(valueName);
669
        		Constructor constr= valueClass.getConstructor(new Class[] {String.class});
670
        		return (Value) constr.newInstance(new Object[] {text});
671
			} catch (Exception e) {
672
				throw new ParseException(e.getMessage(),0);
673
			}
674
    	}
675
    }
611 676
}

Also available in: Unified diff