|
@@ -1,5 +1,9 @@
|
|
|
package de.tu_darmstadt.informatik.tk.scopviz.main;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.BigInteger;
|
|
|
+
|
|
|
+import de.tu_darmstadt.informatik.tk.scopviz.debug.Debug;
|
|
|
import de.tu_darmstadt.informatik.tk.scopviz.graphs.GraphManager;
|
|
|
import de.tu_darmstadt.informatik.tk.scopviz.ui.GraphDisplayManager;
|
|
|
import de.tu_darmstadt.informatik.tk.scopviz.ui.handlers.MyAnimationTimer;
|
|
@@ -125,4 +129,210 @@ public final class Main {
|
|
|
this.creationMode = creationMode;
|
|
|
}
|
|
|
|
|
|
+ //TODO replace throw by something better for debug
|
|
|
+ /**
|
|
|
+ * Converts a given Attribute into the type of result
|
|
|
+ *
|
|
|
+ * @param attribute the Attribute to be converted.
|
|
|
+ * supported types: byte, short, integer, long, float, double, BigInteger, BigDecimal, String
|
|
|
+ *
|
|
|
+ * @param result the Attribute will be written in here after the conversion.
|
|
|
+ * the supported types are the same as above except for String
|
|
|
+ *
|
|
|
+ * @return the value of result
|
|
|
+ */
|
|
|
+ //don't worry I checked all the conversions
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public <T extends Number> T convertAttributeTypes (Object attribute, T result){
|
|
|
+ String currentType = attribute.getClass().getSimpleName().toLowerCase();
|
|
|
+ String targetType = result.getClass().getSimpleName().toLowerCase();
|
|
|
+ switch (targetType){
|
|
|
+ case "byte" :
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ case "short":
|
|
|
+ case "integer":
|
|
|
+ case "long":
|
|
|
+ case "biginteger":
|
|
|
+ case "float":
|
|
|
+ case "double":
|
|
|
+ case "bigdecimal":
|
|
|
+ result = (T) new Byte(((Number) attribute).byteValue());
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ result = (T) new Byte(new BigDecimal((String) attribute).byteValue());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "short" :
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ case "short":
|
|
|
+ case "integer":
|
|
|
+ case "long":
|
|
|
+ case "biginteger":
|
|
|
+ case "float":
|
|
|
+ case "double":
|
|
|
+ case "bigdecimal":
|
|
|
+ result = (T) new Short(((Number) attribute).shortValue());
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ result = (T) new Short(new BigDecimal((String) attribute).shortValue());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "integer" :
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ case "short":
|
|
|
+ case "integer":
|
|
|
+ case "long":
|
|
|
+ case "biginteger":
|
|
|
+ case "float":
|
|
|
+ case "double":
|
|
|
+ case "bigdecimal":
|
|
|
+ result = (T) new Integer(((Number) attribute).intValue());
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ result = (T) new Integer(new BigDecimal((String) attribute).intValue());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "long" :
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ case "short":
|
|
|
+ case "integer":
|
|
|
+ case "long":
|
|
|
+ case "biginteger":
|
|
|
+ case "float":
|
|
|
+ case "double":
|
|
|
+ case "bigdecimal":
|
|
|
+ result = (T) new Long(((Number) attribute).longValue());
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ result = (T) new Long(new BigDecimal((String) attribute).longValue());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "biginteger" :
|
|
|
+ BigInteger integer;
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ integer = new BigInteger(Byte.toString((byte) attribute));
|
|
|
+ break;
|
|
|
+ case "short":
|
|
|
+ integer = new BigInteger(Short.toString((short) attribute));
|
|
|
+ break;
|
|
|
+ case "integer":
|
|
|
+ integer = new BigInteger(Integer.toString((int) attribute));
|
|
|
+ break;
|
|
|
+ case "long":
|
|
|
+ integer = new BigInteger(Long.toString((long) attribute));
|
|
|
+ break;
|
|
|
+ case "float":
|
|
|
+ integer = new BigInteger(Integer.toString((int)(float) attribute));
|
|
|
+ break;
|
|
|
+ case "double":
|
|
|
+ integer = new BigInteger(Long.toString((long)(double) attribute));
|
|
|
+ break;
|
|
|
+ case "biginteger":
|
|
|
+ integer = (BigInteger) attribute;
|
|
|
+ break;
|
|
|
+ case "bigdecimal":
|
|
|
+ integer = ((BigDecimal) attribute).toBigInteger();
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ integer = new BigDecimal((String) attribute).toBigInteger();
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ result = (T) integer;
|
|
|
+ break;
|
|
|
+ case "float" :
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ case "short":
|
|
|
+ case "integer":
|
|
|
+ case "long":
|
|
|
+ case "biginteger":
|
|
|
+ case "float":
|
|
|
+ case "double":
|
|
|
+ case "bigdecimal":
|
|
|
+ result = (T) new Float(((Number) attribute).floatValue());
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ result = (T) new Float(new BigDecimal((String) attribute).floatValue());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "double" :
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ case "short":
|
|
|
+ case "integer":
|
|
|
+ case "long":
|
|
|
+ case "biginteger":
|
|
|
+ case "float":
|
|
|
+ case "double":
|
|
|
+ case "bigdecimal":
|
|
|
+ result = (T) new Double(((Number) attribute).doubleValue());
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ result = (T) new Double(new BigDecimal((String) attribute).doubleValue());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "bigdecimal" :
|
|
|
+ BigDecimal decimal;
|
|
|
+ switch (currentType){
|
|
|
+ case "byte":
|
|
|
+ decimal = new BigDecimal((byte) attribute);
|
|
|
+ break;
|
|
|
+ case "short":
|
|
|
+ decimal = new BigDecimal((short) attribute);
|
|
|
+ break;
|
|
|
+ case "integer":
|
|
|
+ decimal = new BigDecimal((int) attribute);
|
|
|
+ break;
|
|
|
+ case "long":
|
|
|
+ decimal = new BigDecimal((long) attribute);
|
|
|
+ break;
|
|
|
+ case "float":
|
|
|
+ decimal = new BigDecimal((float) attribute);
|
|
|
+ break;
|
|
|
+ case "double":
|
|
|
+ decimal = new BigDecimal((double) attribute);
|
|
|
+ break;
|
|
|
+ case "biginteger":
|
|
|
+ decimal = new BigDecimal((BigInteger) attribute);
|
|
|
+ break;
|
|
|
+ case "bigdecimal":
|
|
|
+ decimal = (BigDecimal) attribute;
|
|
|
+ break;
|
|
|
+ case "string" :
|
|
|
+ decimal = new BigDecimal((String) attribute);
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ throw new IllegalArgumentException("invalid type: " + attribute.getClass());
|
|
|
+ }
|
|
|
+ result = (T) decimal;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
}
|