~pixeldrama/annis/KidKo

« back to all changes in this revision

Viewing changes to annis-utilsgui/src/main/java/annis/gui/visualizers/partitur/TimeHelper.java

  • Committer: Benjamin Weißenfels
  • Date: 2012-04-20 10:59:07 UTC
  • Revision ID: b.pixeldrama@googlemail.com-20120420105907-y37utmkxsgqvx985
Media player will stop, if there is a following time annotation in
result set.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
import annis.model.AnnisNode;
19
19
import annis.model.Annotation;
 
20
import java.util.List;
20
21
 
21
22
/**
22
23
 *
25
26
public class TimeHelper
26
27
{
27
28
 
 
29
  private List<AnnisNode> token;
 
30
 
 
31
  // only for testing
 
32
  public TimeHelper()
 
33
  {
 
34
  }
 
35
 
 
36
  public TimeHelper(List<AnnisNode> token)
 
37
  {
 
38
    this.token = token;
 
39
  }
 
40
 
28
41
  public String getStartTime(String time)
29
42
  {
30
43
    return getTimePosition(time, true);
39
52
   * Split a time annotation s.ms-(s.ms)? Whether the flag first is set to true, 
40
53
   * we return the first value, otherwise we did try to return the second. The 
41
54
   * end time don't have to be annotated, in this case it returns "undefined". 
42
 
   * Without a defined start time the result is an empty String ""
 
55
   * Without a defined start time the result is an empty String "undefined". If 
 
56
   * there is no time anno, it returns undefined
43
57
   * 
44
 
   * @return "undefined", when time parameter is null
 
58
   * @return "undefined", when time parameter is undefined
45
59
   */
46
60
  private String getTimePosition(String time, boolean first)
47
61
  {
98
112
      return "";
99
113
    }
100
114
 
 
115
    // search for an end time in the result set, so we have the chance to stop 
 
116
    // the media    
 
117
    if ("undefined".equals(endTime))
 
118
    {
 
119
      endTime = getNextEndTime(rightNode);
 
120
    }
 
121
 
101
122
    return ("time=" + startTime + "-" + endTime);
102
123
  }
 
124
 
 
125
  private String getNextEndTime(AnnisNode rightNode)
 
126
  {
 
127
    int offset = getOffset(rightNode);
 
128
    String time = null;
 
129
    TimeHelper t = null;
 
130
 
 
131
    for (long i = offset + 1; i < token.size(); i++)
 
132
    {
 
133
      for (Annotation anno : token.get((int) i).getNodeAnnotations())
 
134
      {
 
135
        if ("time".equals(anno.getName()))
 
136
        {
 
137
          time = anno.getValue();
 
138
          break;
 
139
        }
 
140
      }
 
141
 
 
142
      String startTime = getStartTime(time);
 
143
      String endTime = getEndTime(time);
 
144
 
 
145
      if (startTime != null && !"undefined".equals(startTime))
 
146
      {
 
147
        return startTime;
 
148
      }
 
149
 
 
150
      if (endTime != null && !"undefined".equals(endTime))
 
151
      {
 
152
        return endTime;
 
153
      }
 
154
    }
 
155
    return "undefined";
 
156
  }
 
157
 
 
158
  private int getOffset(AnnisNode rightNode)
 
159
  {
 
160
    for (int i = 0; i < token.size(); i++)
 
161
    {
 
162
      if (rightNode == token.get(i))
 
163
      {
 
164
        return i;
 
165
      }
 
166
    }
 
167
 
 
168
    return 0;
 
169
  }
103
170
}