Browse Source

Merge remote-tracking branch 'origin/Matthias'

Jan Enders 7 years ago
parent
commit
0b05a32a70

+ 68 - 0
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/graphs/MyEdge.java

@@ -0,0 +1,68 @@
+package de.tu_darmstadt.informatik.tk.scopviz.graphs;
+
+import java.util.Set;
+
+import org.graphstream.graph.implementations.AbstractEdge;
+import org.graphstream.graph.implementations.AbstractNode;
+
+import de.tu_darmstadt.informatik.tk.scopviz.ui.css.CSSManager;
+import de.tu_darmstadt.informatik.tk.scopviz.ui.css.CSSable;
+
+public class MyEdge extends AbstractEdge implements CSSable {
+	// TODO comment
+		Set<String> classes;
+		// TODO comment
+		String type = "edge";
+		// TODO comment
+		String css;
+
+		
+	public MyEdge(String id, AbstractNode source, AbstractNode target, boolean directed) {
+		super(id, source, target, directed);
+		// TODO Auto-generated constructor stub
+	}
+
+	@Override
+	public void addCSSClass(String c) {
+		classes.add(c);
+	}
+
+	@Override
+	public void removeCSSClass(String c) {
+		classes.remove(c);
+	}
+
+	@Override
+	public void toggleCSSClass(String c) {
+		if (hasCSSClass(c))
+			removeCSSClass(c);
+		else
+			addCSSClass(c);
+	}
+
+	@Override
+	public boolean hasCSSClass(String c) {
+		return classes.contains(c);
+	}
+
+	@Override
+	public Set<String> getClasses() {
+		return classes;
+	}
+
+	@Override
+	public String getType() {
+		return type;
+	}
+
+	@Override
+	public void updateCSS() {
+		css = CSSManager.getCSS(this);
+		addAttribute("ui.style", css);
+	}
+
+	@Override
+	public String getCSS() {
+		return css;
+	}
+}

+ 67 - 0
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/graphs/MyNode.java

@@ -0,0 +1,67 @@
+package de.tu_darmstadt.informatik.tk.scopviz.graphs;
+
+import java.util.Set;
+
+import org.graphstream.graph.implementations.AbstractGraph;
+import org.graphstream.graph.implementations.SingleNode;
+
+import de.tu_darmstadt.informatik.tk.scopviz.ui.css.CSSManager;
+import de.tu_darmstadt.informatik.tk.scopviz.ui.css.CSSable;
+
+public class MyNode extends SingleNode implements CSSable {
+	// TODO comment
+	Set<String> classes;
+	// TODO comment
+	String type = "node";
+	// TODO comment
+	String css;
+
+	public MyNode(AbstractGraph graph, String id) {
+		super(graph, id);
+		updateCSS();
+	}
+
+	@Override
+	public void addCSSClass(String c) {
+		classes.add(c);
+	}
+
+	@Override
+	public void removeCSSClass(String c) {
+		classes.remove(c);
+	}
+
+	@Override
+	public void toggleCSSClass(String c) {
+		if (hasCSSClass(c))
+			removeCSSClass(c);
+		else
+			addCSSClass(c);
+	}
+
+	@Override
+	public boolean hasCSSClass(String c) {
+		return classes.contains(c);
+	}
+
+	@Override
+	public Set<String> getClasses() {
+		return classes;
+	}
+
+	@Override
+	public String getType() {
+		return type;
+	}
+
+	@Override
+	public void updateCSS() {
+		css = CSSManager.getCSS(this);
+		addAttribute("ui.style", css);
+	}
+
+	@Override
+	public String getCSS() {
+		return css;
+	}
+}

+ 3 - 1
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/main/MainApp.java

@@ -4,6 +4,8 @@ import java.io.IOException;
 import java.net.URL;
 
 import de.tu_darmstadt.informatik.tk.scopviz.debug.Debug;
+import de.tu_darmstadt.informatik.tk.scopviz.graphs.MyEdge;
+import de.tu_darmstadt.informatik.tk.scopviz.graphs.MyNode;
 import de.tu_darmstadt.informatik.tk.scopviz.io.GraphMLExporter;
 import de.tu_darmstadt.informatik.tk.scopviz.ui.GraphDisplayManager;
 import de.tu_darmstadt.informatik.tk.scopviz.ui.css.CSSManager;
@@ -74,7 +76,7 @@ public class MainApp extends Application {
 			GraphDisplayManager.addGraph(Debug.getDefaultUnderlayGraph(), true);
 		}
 
-		CSSManager.addRule("node.green{text-alignment: at-right; size: 15px;}");
+		CSSManager.addRule("node{text-alignment: at-right; size: 15px;}");
 	}
 
 	/**

+ 40 - 0
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/css/CSSDeclaration.java

@@ -0,0 +1,40 @@
+package de.tu_darmstadt.informatik.tk.scopviz.ui.css;
+
+class CSSDeclaration {
+	// TODO comment
+	String property;
+	// TODO comment
+	String value;
+
+	// TODO comment
+	CSSDeclaration(String property, String value) {
+		this.property = property.trim();
+		this.value = value.trim();
+	}
+
+	// TODO comment
+	String getProperty() {
+		return property;
+	}
+
+	// TODO comment
+	void setProperty(String property) {
+		this.property = property;
+	}
+
+	// TODO comment
+	String getValue() {
+		return value;
+	}
+
+	// TODO comment
+	void setValue(String value) {
+		this.value = value;
+	}
+
+	@Override
+	public String toString() {
+		return property + ": " + value;
+	}
+
+}

+ 91 - 12
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/css/CSSManager.java

@@ -1,5 +1,6 @@
 package de.tu_darmstadt.informatik.tk.scopviz.ui.css;
 
+import java.util.HashMap;
 import java.util.HashSet;
 
 import de.tu_darmstadt.informatik.tk.scopviz.debug.Debug;
@@ -8,45 +9,123 @@ public class CSSManager {
 	/**
 	 * Du zerstörst diesen REGEX und Matthias zerstört dich
 	 */
+	// TODO comment
 	private static final String CSS_MATCH_REGEX = "(\\s*([A-Za-z]+|[A-Za-z]*(\\.[A-Za-z_-]*)+)\\s*\\{(\\s*[A-Za-z_-]+\\s*\\:\\s*[0-9A-Za-z\\(\\)_\\#\\'\\\"-]+\\s*\\;?)+\\s*\\})+\\s*";
 
+	// TODO comment
 	static HashSet<CSSRule> rules = new HashSet<CSSRule>();
+	// TODO comment
+	private static HashSet<CSSable> cssAbles = new HashSet<CSSable>();
 
+	// TODO comment
 	public static void addRule(String rule) {
+		addRule(rule, true);
+	}
+
+	// TODO comment
+	public static void addRule(String rule, boolean updateCSSable) {
 		if (!rule.matches(CSS_MATCH_REGEX)) {
 			Debug.out("rule << " + rule + " >> doesn't match regex");
 			return;
 		}
 
-		String[] sArray = rule.split("\\}");
+		String[] sArray = rule.trim().split("\\}");
 		for (String s : sArray) {
 			CSSRule newRule = extractRule(s);
 			rules.add(newRule);
 			Debug.out("<< " + newRule.toString() + " >> added.");
 		}
+		if (updateCSSable)
+			updateCSSAble();
+	}
+
+	// TODO comment
+	public static void addCSSAble(CSSable ca) {
+		cssAbles.add(ca);
+	}
+
+	// TODO comment
+	public static void removeCSSAble(CSSable ca) {
+		cssAbles.remove(ca);
+	}
+
+	// TODO comment
+	public static String getCSS(CSSable ca) {
+		// TODO implement
+		// <Property, <CSSValue, RuleValue>>
+		HashMap<String, CSSValueValue> cssDeclarations = new HashMap<>();
+		for (CSSRule r : rules) {
+			int ruleValue = r.ConditionsMetBy(ca);
+			HashSet<CSSDeclaration> declarations = r.getDeclarations();
+			for (CSSDeclaration d : declarations) {
+				String property = d.getProperty();
+				String value = d.getValue();
+				if (!cssDeclarations.containsKey(property) || ruleValue >= cssDeclarations.get(property).getRuleValue())
+					cssDeclarations.put(property, new CSSValueValue(value, ruleValue));
+			}
+		}
+		String result = "";
+
+		for (String key : cssDeclarations.keySet()) {
+			result = result.concat(key).concat(": ").concat(cssDeclarations.get(key).getCssValue()).concat("; ");
+		}
+		return result.trim();
 	}
 
+	// TODO comment
+	private static void updateCSSAble() {
+		for (CSSable ca : cssAbles)
+			ca.updateCSS();
+	}
+
+	// TODO comment
 	private static CSSRule extractRule(String s) {
-		String[] sArray = s.split("\\{");
-		return new CSSRule(extractConditions(sArray[0]), sArray[1]);
+		String[] sArray = s.trim().split("\\{");
+		return new CSSRule(extractSelectors(sArray[0]), parseCss(sArray[1]));
 	}
 
-	private static HashSet<CSSCondition> extractConditions(String s) {
-		HashSet<CSSCondition> conditions = new HashSet<>();
-		String[] sArray = s.split("\\,");
-		for (String cond : sArray) {
-			conditions.add(extractCondition(cond));
+	// TODO comment
+	private static HashSet<CSSSelector> extractSelectors(String s) {
+		HashSet<CSSSelector> selectors = new HashSet<>();
+		String[] sArray = s.trim().split("\\,");
+		for (String selecteor : sArray) {
+			selectors.add(extractSelector(selecteor));
 		}
-		return conditions;
+		return selectors;
 	}
 
-	private static CSSCondition extractCondition(String s) {
+	// TODO comment
+	private static CSSSelector extractSelector(String s) {
 		HashSet<String> classes = new HashSet<String>();
-		String[] sArray = s.split("\\.");
+		String[] sArray = s.trim().split("\\.");
 		for (int i = 1; i < sArray.length; i++) {
 			classes.add(sArray[i]);
 		}
-		return new CSSCondition(sArray[0], classes);
+		return new CSSSelector(sArray[0], classes);
+	}
+
+	// TODO comment
+	private static HashSet<CSSDeclaration> parseCss(String s) {
+		HashSet<CSSDeclaration> declarations = new HashSet<CSSDeclaration>();
+		String[] sArray = s.trim().split("\\;");
+		for (int i = 0; i < sArray.length; i++) {
+			CSSDeclaration cssDeclaration = parseCssStatement(sArray[i]);
+			String property = cssDeclaration.getProperty();
+			for (CSSDeclaration cd : declarations) {
+				if (property.equals(cd.getProperty())) {
+					declarations.remove(cd);
+					break;
+				}
+			}
+			declarations.add(cssDeclaration);
+		}
+		return declarations;
+	}
+
+	// TODO comment
+	private static CSSDeclaration parseCssStatement(String s) {
+		String[] sArray = s.trim().split("\\:");
+		return new CSSDeclaration(sArray[0], sArray[1]);
 	}
 
 }

+ 32 - 8
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/css/CSSRule.java

@@ -4,21 +4,34 @@ import java.util.HashSet;
 import java.util.Iterator;
 
 class CSSRule {
-	HashSet<CSSCondition> conditions = new HashSet<CSSCondition>();
+	// TODO comment
+	HashSet<CSSSelector> selectors = new HashSet<CSSSelector>();
+	// TODO comment
+	HashSet<CSSDeclaration> declarations = new HashSet<CSSDeclaration>();
+	// TODO comment
 	String css;
 
-	public CSSRule(HashSet<CSSCondition> conditions, String css) {
+	// TODO comment
+	CSSRule(HashSet<CSSSelector> selectors, HashSet<CSSDeclaration> declarations) {
 		super();
-		this.conditions = conditions;
-		this.css = css.trim();
+		this.selectors = selectors;
+		this.declarations = declarations;
+		css = "";
+		for (CSSDeclaration dc : declarations) {
+			css = css.concat(dc.toString()).concat("; ");
+		}
+		css = css.trim();
 	}
 
+	// TODO comment
 	int ConditionsMetBy(CSSable suspect) {
 		int result = 0;
-		Iterator<CSSCondition> i = conditions.iterator();
+		Iterator<CSSSelector> i = selectors.iterator();
 		while (i.hasNext()) {
-			CSSCondition condition = i.next();
-			int r = condition.ConditionsMetBy(suspect);
+			CSSSelector condition = i.next();
+			int r = -1;
+			if (condition.ConditionsMetBy(suspect))
+				r = condition.getValue();
 			if (r > result)
 				result = r;
 		}
@@ -26,13 +39,24 @@ class CSSRule {
 		return result;
 	}
 
+	// TODO comment
+	public HashSet<CSSSelector> getSelectors() {
+		return selectors;
+	}
+
+	// TODO comment
+	public HashSet<CSSDeclaration> getDeclarations() {
+		return declarations;
+	}
+
+	// TODO comment
 	String getCSS() {
 		return css;
 	}
 
 	@Override
 	public String toString() {
-		return conditions.toString().replace("[", "").replace("]", "") + " { " + css + " }";
+		return selectors.toString().replace("[", "").replace("]", "") + " { " + css + " }";
 	}
 
 }

+ 13 - 8
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/css/CSSCondition.java → scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/css/CSSSelector.java

@@ -3,29 +3,34 @@ package de.tu_darmstadt.informatik.tk.scopviz.ui.css;
 import java.util.HashSet;
 import java.util.Iterator;
 
-class CSSCondition {
+class CSSSelector {
+	//TODO comment
 	String type;
+	//TODO comment
 	HashSet<String> classes;
+	//TODO comment
 	int value;
 
-	public CSSCondition(String type, HashSet<String> classes) {
+	//TODO comment
+	CSSSelector(String type, HashSet<String> classes) {
 		this.type = type;
 		this.classes = classes;
-		value = type != null ? 1 : 0 + classes.size() << 1;
+		value = (type != null ? 1 : 0) + classes.size() << 1;
 	}
 
-	int ConditionsMetBy(CSSable suspect) {
+	//TODO comment
+	boolean ConditionsMetBy(CSSable suspect) {
 		if (type != null && !type.equals(suspect.getType()))
-			return 0;
-
+			return false;
 		Iterator<String> i = classes.iterator();
 		while (i.hasNext()) {
 			if (!suspect.getClasses().contains(i.next()))
-				return 0;
+				return false;
 		}
-		return classes.size();
+		return true;
 	}
 
+	//TODO comment
 	int getValue() {
 		return value;
 	}

+ 24 - 0
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/css/CSSValueValue.java

@@ -0,0 +1,24 @@
+package de.tu_darmstadt.informatik.tk.scopviz.ui.css;
+
+public class CSSValueValue {
+	// TODO comment
+	String cssValue;
+	// TODO comment
+	int ruleValue;
+
+	// TODO comment
+	CSSValueValue(String cssValue, int ruleValue) {
+		this.cssValue = cssValue;
+		this.ruleValue = ruleValue;
+	}
+
+	// TODO comment
+	String getCssValue() {
+		return cssValue;
+	}
+
+	// TODO comment
+	int getRuleValue() {
+		return ruleValue;
+	}
+}

+ 9 - 0
scopviz/src/main/java/de/tu_darmstadt/informatik/tk/scopviz/ui/css/CSSable.java

@@ -21,6 +21,15 @@ public interface CSSable {
 	 */
 	public void removeCSSClass(String c);
 
+	/**
+	 * Toggles a CSS class from the object. multiple classes can be separated by
+	 * a '.' or ' '.
+	 * 
+	 * @param c
+	 *            the classes to remove
+	 */
+	public void toggleCSSClass(String c);
+
 	/**
 	 * Checks whether the given classes are part of the object. multiple classes
 	 * can be separated by a '.' or ' '.