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
RevLine 
[1572]1package de.ugoe.cs.autoquest.tasktrees.alignment.matrix;
[1324]2
[1570]3
[1554]4import java.util.HashMap;
[1331]5import java.util.Iterator;
6
7import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
[1553]8import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.AlignmentHelpers;
[1578]9import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.Constants;
[1553]10import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
[1554]11import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
12import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
13import de.ugoe.cs.autoquest.usageprofiles.SymbolMap;
[1324]14
[1570]15
[1324]16public class ObjectDistanceSubstitionMatrix implements SubstitutionMatrix {
17
[1554]18        // private ArrayList<int[][]> matrix;
19        HashMap<Integer, Integer> idmapping;
20        private TriangleMatrix matrix;
21        private SymbolMap<ITaskInstance, ITask> uniqueTasks;
[1568]22        private double gapPenalty;
[1676]23        private int index = 0;
[1615]24       
[1568]25        private double positiveThreshold;
[1555]26       
[1554]27        public ObjectDistanceSubstitionMatrix(
[1620]28                        SymbolMap<ITaskInstance, ITask> uniqueTasks,float positiveThreshold, int gapPenalty) {
[1554]29                this.uniqueTasks = uniqueTasks;
[1558]30                this.positiveThreshold = positiveThreshold;
[1554]31                idmapping = new HashMap<Integer, Integer>();
32                matrix = new TriangleMatrix(uniqueTasks.size()+1);
[1620]33                this.gapPenalty = gapPenalty;
[1558]34               
[1324]35        }
36
[1615]37
[1568]38        public double getGapPenalty() {
[1555]39                return gapPenalty;
[1324]40        }
[1615]41       
42        public void setGapPenalty(double gapPenalty) {
43                this.gapPenalty = gapPenalty;
44        }
[1324]45
[1554]46        public void generate() {
[1578]47               
[1554]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) {
[1676]53                                System.out.println(obj1);
[1554]54                                eti1 = (IEventTaskInstance) obj1;
55                        }
[1675]56                        else {
57                                //System.out.println("Not an EventTaskInstance");
[1676]58                                //System.out.println(obj1);
[1675]59                                continue;
60                        }
[1555]61               
[1554]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;
[1331]68                                }
[1675]69                                else{
70                                        //System.out.println("Not an EventtaskInstance");
[1676]71                                        //System.out.println(obj1);
[1675]72                                        continue;
73                                }
[1676]74               
75                                matrix.set(getIndex(eti1), getIndex(eti2),distanceBetweenInstances(eti1,eti2));
[1578]76       
[1554]77                        }
[1331]78                }
[1324]79        }
[1558]80       
[1676]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       
[1558]104        public String toString(){
105                return matrix.toString();
106        }
[1554]107
[1578]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               
[1554]116        }
117
[1324]118}
[1554]119
Note: See TracBrowser for help on using the repository browser.