Revision 8186 trunk/libraries/libGDBMS/src/main/java/com/hardcode/gdbms/engine/values/ValueFactory.java
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