BasicMappingOperator.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package de.tu_darmstadt.informatik.tk.scopviz.metrics;
  2. import java.util.Comparator;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. import de.tu_darmstadt.informatik.tk.scopviz.debug.Debug;
  6. import de.tu_darmstadt.informatik.tk.scopviz.graphs.GraphManager;
  7. import de.tu_darmstadt.informatik.tk.scopviz.graphs.MappingGraphManager;
  8. import de.tu_darmstadt.informatik.tk.scopviz.graphs.MyNode;
  9. import de.tu_darmstadt.informatik.tk.scopviz.main.Main;
  10. import de.tu_darmstadt.informatik.tk.scopviz.metrics.interfaces.ScopvizGraphOperator;
  11. public class BasicMappingOperator implements ScopvizGraphOperator {
  12. @Override
  13. public void calculate(GraphManager g) {
  14. // check if you are using a Mapping Graph
  15. MappingGraphManager map;
  16. if (g instanceof MappingGraphManager) {
  17. map = (MappingGraphManager) g;
  18. } else {
  19. Debug.out("ERROR: can only invoke " + getName() + " on a Mapping Graph", 3);
  20. return;
  21. }
  22. // find the Nodes that have to be mapped and where they can be mapped to
  23. LinkedList<MyNode> operatorNodes = getOperatorNodes(map);
  24. LinkedList<MyNode> procEnNodes = getProcEnNodes(map);
  25. // Map the Nodes (beginning with the operatorNode with the highest
  26. // Processing requirement)
  27. operatorNodes.sort(operatorComparator);
  28. Iterator<MyNode> procEnIterator;
  29. Boolean successfull;
  30. for (MyNode n : operatorNodes) {
  31. procEnIterator = procEnNodes.iterator();
  32. successfull = false;
  33. while (procEnIterator.hasNext() && !successfull) {
  34. successfull = map.createEdge(procEnIterator.next().getId(), n.getId());
  35. }
  36. if (!successfull) {
  37. Debug.out("WARNING: BasicMappingOperator could not map all Nodes", 2);
  38. }
  39. }
  40. }
  41. @Override
  42. public String getName() {
  43. return "Basic Automapping";
  44. }
  45. protected LinkedList<MyNode> getProcEnNodes(GraphManager g) {
  46. LinkedList<MyNode> result = new LinkedList<MyNode>();
  47. Iterator<MyNode> nodeIter = g.getGraph().getNodeIterator();
  48. while (nodeIter.hasNext()) {
  49. MyNode n = nodeIter.next();
  50. if ("procEn".equals(n.getAttribute("typeofNode"))) {
  51. result.add(n);
  52. }
  53. }
  54. return result;
  55. }
  56. protected LinkedList<MyNode> getOperatorNodes(GraphManager g) {
  57. LinkedList<MyNode> result = new LinkedList<MyNode>();
  58. Iterator<MyNode> nodeIter = g.getGraph().getNodeIterator();
  59. while (nodeIter.hasNext()) {
  60. MyNode n = nodeIter.next();
  61. if ("operator".equals(n.getAttribute("typeofNode"))) {
  62. result.add(n);
  63. }
  64. }
  65. return result;
  66. }
  67. protected Comparator<MyNode> operatorComparator = new Comparator<MyNode>() {
  68. @Override
  69. public int compare(MyNode o1, MyNode o2) {
  70. Main m = Main.getInstance();
  71. // the cmparator uses a reverse ordering so that the resulting list
  72. // is sorted descending
  73. // this does: process-need(o1) - process-need(o2)
  74. Double result = m.convertAttributeTypes(o1.getAttribute("process-need"), new Double(0))
  75. - m.convertAttributeTypes(o2.getAttribute("process-need"), new Double(0));
  76. if (result == 0.0) {
  77. return 0;
  78. } else if (result < 0.0) {
  79. return 1;
  80. } else {
  81. return -1;
  82. }
  83. }
  84. };
  85. }