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

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

Restructuring ObjectdistanceSubstitutionMatrix?

File size: 3.2 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                for (Iterator<ITaskInstance> it = uniqueTasks.getSymbols().iterator(); it
49                                .hasNext();) {
50                        Object obj1 = it.next();
51                        IEventTaskInstance eti1 = null;
52                        if (obj1 instanceof IEventTaskInstance) {
53                                System.out.println(obj1);
54                                eti1 = (IEventTaskInstance) obj1;
55                        }
56                        else {
57                                //System.out.println("Not an EventTaskInstance");
58                                //System.out.println(obj1);
59                                continue;
60                        }
61               
62                        for (Iterator<ITaskInstance> jt = uniqueTasks.getSymbols()
63                                        .iterator(); jt.hasNext();) {
64                                IEventTaskInstance eti2 = null;
65                                Object obj2 = jt.next();
66                                if (obj2 instanceof IEventTaskInstance) {
67                                        eti2 = (IEventTaskInstance) obj2;
68                                }
69                                else{
70                                        //System.out.println("Not an EventtaskInstance");
71                                        //System.out.println(obj1);
72                                        continue;
73                                }
74               
75                                matrix.set(getIndex(eti1), getIndex(eti2),distanceBetweenInstances(eti1,eti2));
76       
77                        }
78                }
79        }
80       
81        private int getIndex(IEventTaskInstance eti) {
82                int tempindex = -1;
83                if(!idmapping.containsKey(eti.getTask().getId()))
84                {
85                        idmapping.put(eti.getTask().getId(), index);
86                        tempindex = index;
87                        index++;
88                }       
89                else
90                {
91                        tempindex = idmapping.get(eti.getTask().getId());
92                }
93                return tempindex;
94        }
95       
96        private float distanceBetweenInstances(IEventTaskInstance eti1, IEventTaskInstance eti2)  {
97                IGUIElement first = (IGUIElement) eti1.getEvent().getTarget();
98                IGUIElement second = (IGUIElement) eti2.getEvent().getTarget();
99                float distance = -1*AlignmentHelpers.distanceBetween(first, second);
100                distance += positiveThreshold;
101                return distance;
102        }
103       
104        public String toString(){
105                return matrix.toString();
106        }
107
108        public double getScore(int taskId1, int taskId2) {
109                if(taskId1 == Constants.GAP_SYMBOL || taskId1 == Constants.UNMATCHED_SYMBOL || taskId2 == Constants.GAP_SYMBOL || taskId2 == Constants.UNMATCHED_SYMBOL ) {
110                        return 0.0;
111                }
112                else {
113                        return matrix.get(idmapping.get(taskId1),idmapping.get(taskId2));       
114                }
115               
116        }
117
118}
119
Note: See TracBrowser for help on using the repository browser.