source: trunk/autoquest-plugin-usability2/src/main/java/de/ugoe/cs/autoquest/plugin/usability2/rules/operator/transformer/UniqueResultsTransformer.java @ 1326

Last change on this file since 1326 was 1326, checked in by khartmann, 10 years ago

Moved alexanders code into a new plugin project.
First commit of my experimental code (needs a lot of cleanup).

File size: 2.5 KB
Line 
1package de.ugoe.cs.autoquest.plugin.usability2.rules.operator.transformer;
2
3import java.util.Iterator;
4
5import de.ugoe.cs.autoquest.plugin.usability2.rules.operator.IFilter;
6import de.ugoe.cs.autoquest.plugin.usability2.rules.operator.IResultTransformer;
7import de.ugoe.cs.autoquest.plugin.usability2.rules.results.IMatch;
8import de.ugoe.cs.autoquest.plugin.usability2.rules.results.IResult;
9import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
10
11public class UniqueResultsTransformer implements IResultTransformer {
12
13    public static final IResultTransformer UNIQUE_RESULTS_TRANSFORMER = new UniqueResultsTransformer();
14   
15    private UniqueResultsTransformer(){
16        super();
17    }
18   
19    private static class UniqueResult implements IResult {
20
21        final IResult result;
22       
23        private UniqueResult(IResult result) {
24            this.result = result;
25        }
26       
27        /* (non-Javadoc)
28         * @see java.lang.Iterable#iterator()
29         */
30        @Override
31        public Iterator<IMatch> iterator() {
32            return new Iterator<IMatch>() {
33                IMatch last = null;
34                Iterator<IMatch> inner = result.iterator();
35               
36                @Override
37                public boolean hasNext() {
38                    boolean result;
39                    if (last == null) {
40                        result = inner.hasNext();
41                        if(result)
42                            last = inner.next();
43                        return result;
44                    }
45                   
46                    while((result = inner.hasNext())) {
47                        IMatch cur = inner.next();
48                        if (!cur.getTask().equals(last.getTask())) {
49                            last = cur;
50                            return true;
51                        }
52                    }
53                    return false;
54                }
55
56                @Override
57                public IMatch next() {
58                    return last;
59                }
60
61                @Override
62                public void remove() {
63                    throw new UnsupportedOperationException();
64                }
65               
66            };
67        }
68
69        /* (non-Javadoc)
70         * @see de.ugoe.cs.autoquest.usability.rules.patterns.operator.IResult#isPresent()
71         */
72        @Override
73        public boolean isPresent() {
74            return result.isPresent();
75        }
76    }
77   
78    @Override
79    public IResult transform(IResult result, IFilter filter, ITask task) {
80        return new UniqueResult(result);
81    }
82
83}
Note: See TracBrowser for help on using the repository browser.