source: branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/matrix/ObjectDistanceSubstitionMatrix.java @ 1687

Last change on this file since 1687 was 1687, checked in by rkrimmel, 10 years ago

Comments from patrick

File size: 4.9 KB
Line 
1package de.ugoe.cs.autoquest.tasktrees.alignment.matrix;
2
3
4import java.util.HashMap;
5import java.util.Iterator;
6
7import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
8import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.AlignmentHelpers;
9import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.Constants;
10import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
11import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
12import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
13import de.ugoe.cs.autoquest.usageprofiles.SymbolMap;
14
15
16public class ObjectDistanceSubstitionMatrix implements SubstitutionMatrix {
17
18        // private ArrayList<int[][]> matrix;
19        HashMap<Integer, Integer> idmapping;
20        private TriangleMatrix matrix;
21        private SymbolMap<ITaskInstance, ITask> uniqueTasks;
22        private double gapPenalty;
23        private int index = 0;
24       
25        private double positiveThreshold;
26       
27        public ObjectDistanceSubstitionMatrix(
28                        SymbolMap<ITaskInstance, ITask> uniqueTasks,float positiveThreshold, int gapPenalty) {
29                this.uniqueTasks = uniqueTasks;
30                this.positiveThreshold = positiveThreshold;
31                idmapping = new HashMap<Integer, Integer>();
32                matrix = new TriangleMatrix(uniqueTasks.size()+1);
33                this.gapPenalty = gapPenalty;
34               
35        }
36
37
38        public double getGapPenalty() {
39                return gapPenalty;
40        }
41       
42        public void setGapPenalty(double gapPenalty) {
43                this.gapPenalty = gapPenalty;
44        }
45
46        public void generate() {
47               
48                int index1=-1;
49                int index2=-1;
50                float distance=0;
51               
52                //TODO: Nicht ueber Symbols sondern ueber values, wenn Eventtask -> getInstances()->get(0)
53                for (Iterator<ITaskInstance> it = uniqueTasks.getSymbols().iterator(); it
54                                .hasNext();) {
55                        Object obj1 = it.next();
56                        for (Iterator<ITaskInstance> jt = uniqueTasks.getSymbols()
57                                        .iterator(); jt.hasNext();) {
58                       
59                                IEventTaskInstance eti1 = null;
60                                ITask task1 = null;
61                               
62                                IEventTaskInstance eti2 = null;
63                                ITask task2 = null;
64                               
65                                Object obj2 = jt.next();
66                               
67                                if (obj1 instanceof IEventTaskInstance && obj2 instanceof IEventTaskInstance) {
68                                        eti1 = (IEventTaskInstance) obj1;
69                                        index1 = getIndex(eti1);
70                                        eti2 = (IEventTaskInstance) obj2;
71                                        index2 = getIndex(eti2);
72                                        distance = distanceBetweenInstances(eti1,eti2);
73                                }
74                                else if(obj1 instanceof IEventTaskInstance &&  !(obj2 instanceof IEventTaskInstance)) {
75                                        task2 = ((ITaskInstance) obj2).getTask();
76                                        index2 = getIndex(task2);
77                                        eti1 = (IEventTaskInstance) obj1;
78                                        index1 = getIndex(eti1);
79                                        distance = distanceBetweenTaskAndInstance(task2,eti1);
80                                }
81                                else if(!(obj1 instanceof IEventTaskInstance) && obj2 instanceof IEventTaskInstance) {
82                                        task1 = ((ITaskInstance) obj1).getTask();
83                                        index1 = getIndex(task1);
84                                        eti2 = (IEventTaskInstance) obj2;
85                                        index2 = getIndex(eti2);
86                                        distance = distanceBetweenTaskAndInstance(task1,eti2);
87                                }
88                                else if(!(obj2 instanceof IEventTaskInstance) && !(obj2 instanceof IEventTaskInstance)) {
89                                        task1 = ((ITaskInstance) obj1).getTask();
90                                        index1 = getIndex(task1);
91                                        task2 = ((ITaskInstance) obj2).getTask();
92                                        index2 = getIndex(task2);
93                                        distance = distanceBetweenTasks(task1,task2);
94                                }
95                                else {
96                                        System.out.println("Unknown error");
97                                }
98                               
99                                matrix.set(index1, index2,distance);
100       
101                        }
102                }
103        }
104
105       
106        private float distanceBetweenTaskAndInstance(ITask task1, IEventTaskInstance eti) {
107                return 0;
108        }
109       
110        private float distanceBetweenTasks(ITask task1, ITask task2) {
111                return 0;
112        }
113
114
115        private int getIndex(ITask task) {
116                int tempindex =-1;
117       
118                if(!idmapping.containsKey(task.getId())) {
119                        idmapping.put(task.getId(), index);
120                        tempindex = index;
121                        index++;
122                }
123                else {
124                        tempindex = idmapping.get(task.getId());
125                }
126               
127                return tempindex;
128        }
129       
130        private int getIndex(IEventTaskInstance eti) {
131                int tempindex = -1;
132                if(!idmapping.containsKey(eti.getTask().getId())) {
133                        idmapping.put(eti.getTask().getId(), index);
134                        tempindex = index;
135                        index++;
136                }       
137                else {
138                        tempindex = idmapping.get(eti.getTask().getId());
139                }
140                return tempindex;
141        };
142       
143        private float distanceBetweenInstances(IEventTaskInstance eti1, IEventTaskInstance eti2)  {
144                IGUIElement first = (IGUIElement) eti1.getEvent().getTarget();
145                IGUIElement second = (IGUIElement) eti2.getEvent().getTarget();
146                float distance = -1*AlignmentHelpers.distanceBetween(first, second);
147                distance += positiveThreshold;
148                return distance;
149        }
150       
151        public String toString(){
152                return matrix.toString();
153        }
154
155        public double getScore(int taskId1, int taskId2) {
156                if(taskId1 == Constants.GAP_SYMBOL || taskId1 == Constants.UNMATCHED_SYMBOL || taskId2 == Constants.GAP_SYMBOL || taskId2 == Constants.UNMATCHED_SYMBOL ) {
157                        return 0.0;
158                }
159                else {
160                        System.out.println("Firsttask: " +taskId1);
161                        System.out.println("Secondtask: " + taskId2);
162                        System.out.println(idmapping);
163                        Integer first = idmapping.get(taskId1);
164                        Integer second = idmapping.get(taskId2);
165                        System.out.println("First: " + first + " Second: " + second);
166                        System.out.println("Matrix: " + matrix.get(first, second));
167                        return matrix.get(first,second);       
168                }
169               
170        }
171
172}
173
Note: See TracBrowser for help on using the repository browser.