Procházet zdrojové kódy

added conversion between Attribute Types

jascha Bohne před 8 roky
rodič
revize
b6821fa160

+ 210 - 0
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/main/Main.java

@@ -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;
+	}
+
 }