source: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultEventTargetSequenceDetectionRule.java @ 655

Last change on this file since 655 was 655, checked in by pharms, 12 years ago
  • removed old copyright file header
File size: 3.7 KB
Line 
1package de.ugoe.cs.quest.tasktrees.temporalrelation;
2
3import de.ugoe.cs.quest.eventcore.IEventTarget;
4import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
5import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
6import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
7import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
8import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
9
10/**
11 * TODO comment
12 *
13 * @version $Revision: $ $Date: 18.03.2012$
14 * @author 2012, last modified by $Author: patrick$
15 */
16public class DefaultEventTargetSequenceDetectionRule implements TemporalRelationshipRule {
17
18    /*
19     * (non-Javadoc)
20     *
21     * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode,
22     * TaskTreeBuilder, TaskTreeNodeFactory)
23     */
24    @Override
25    public RuleApplicationResult apply(ITaskTreeNode        parent,
26                                       ITaskTreeBuilder     builder,
27                                       ITaskTreeNodeFactory nodeFactory,
28                                       boolean              finalize)
29    {
30        if (!(parent instanceof ISequence)) {
31            return null;
32        }
33
34        RuleApplicationResult result = new RuleApplicationResult();
35
36        IEventTarget currentEventTarget = null;
37        int startingIndex = -1;
38
39        int index = 0;
40        while (index < parent.getChildren().size()) {
41            ITaskTreeNode child = parent.getChildren().get(index);
42
43            IEventTarget eventTarget = determineEventTarget(child);
44
45            if ((eventTarget != null) && (!eventTarget.equals(currentEventTarget))) {
46                if (startingIndex < 0) {
47                    startingIndex = index;
48                    currentEventTarget = eventTarget;
49                }
50                else {
51                    handleEventTargetSequence(parent, startingIndex, index - 1, builder,
52                                              nodeFactory, result);
53
54                    return result;
55                }
56            }
57
58            index++;
59        }
60
61        if (startingIndex > -1) {
62            if (finalize && (startingIndex > 0)) {
63                handleEventTargetSequence(parent, startingIndex, parent.getChildren().size() - 1,
64                                          builder, nodeFactory, result);
65            }
66            else {
67                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
68            }
69        }
70
71        return result;
72    }
73
74    /**
75     * TODO: comment
76     *
77     * @param child
78     * @return
79     */
80    private IEventTarget determineEventTarget(ITaskTreeNode node) {
81        if (node instanceof IEventTask) {
82            return ((IEventTask) node).getEventTarget();
83        }
84        else {
85            return null;
86        }
87    }
88
89    /**
90     * TODO: comment
91     *
92     */
93    private void handleEventTargetSequence(ITaskTreeNode         parent,
94                                           int                   startIndex,
95                                           int                   endIndex,
96                                           ITaskTreeBuilder      builder,
97                                           ITaskTreeNodeFactory  nodeFactory,
98                                           RuleApplicationResult result)
99    {
100        ISequence sequence = nodeFactory.createNewSequence();
101
102        for (int i = startIndex; i <= endIndex; i++) {
103            builder.addChild(sequence, parent.getChildren().get(startIndex));
104            builder.removeChild((ISequence) parent, startIndex);
105        }
106
107        builder.addChild((ISequence) parent, startIndex, sequence);
108
109        result.addNewlyCreatedParentNode(sequence);
110        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
111    }
112
113}
Note: See TracBrowser for help on using the repository browser.