1 package com.acumenvelocity.ath.steps;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import net.sf.okapi.common.Event;
7 import net.sf.okapi.common.EventType;
8 import net.sf.okapi.common.Util;
9 import net.sf.okapi.common.pipeline.BasePipelineStep;
10 import net.sf.okapi.common.resource.ITextUnit;
11 import net.sf.okapi.common.resource.MultiEvent;
12 import net.sf.okapi.common.resource.Property;
13
14 public abstract class BaseTuBatchProcessingStep extends BasePipelineStep {
15
16 private long numProcessedTus;
17
18
19 private final List<Event> tuEvents = new ArrayList<>();
20
21
22 private final List<Event> allEvents = new ArrayList<>();
23
24 protected abstract void clear();
25
26 protected abstract void processTuEvents(List<Event> tuEvents);
27
28 @Override
29 protected Event handleStartDocument(Event event) {
30 numProcessedTus = 0;
31 return super.handleStartDocument(event);
32 }
33
34 private void clearEvents() {
35 clear();
36 allEvents.clear();
37 tuEvents.clear();
38 }
39
40 @Override
41 public Event handleEvent(Event event) {
42
43 allEvents.add(event);
44
45 Event e = super.handleEvent(event);
46 return event.isEndDocument() ? e : Event.createNoopEvent();
47 }
48
49 @Override
50 protected Event handleTextUnit(Event event) {
51 ITextUnit tu = event.getTextUnit();
52
53
54 if (!tu.isTranslatable()) {
55 return event;
56 }
57
58
59 Property prop = tu.getTargetProperty(getTargetLocale(), Property.APPROVED);
60
61 if (prop != null) {
62 if ("yes".equals(prop.getValue()))
63 return event;
64 }
65
66 numProcessedTus++;
67 tuEvents.add(event);
68 return Event.createNoopEvent();
69 }
70
71 @Override
72 protected Event handleEndDocument(Event event) {
73 if (Util.isEmpty(allEvents)) {
74
75 return event;
76 }
77
78
79 processTuEvents(tuEvents);
80
81
82 MultiEvent me = new MultiEvent(List.copyOf(allEvents));
83 clearEvents();
84
85 return new Event(EventType.MULTI_EVENT, me);
86 }
87
88 public long getNumProcessedTus() {
89 return numProcessedTus;
90 }
91 }