/
MergeTranslationsManager.java
137 lines (120 loc) · 4.87 KB
/
MergeTranslationsManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package org.zanata.action;
import java.io.Serializable;
import java.util.List;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import org.zanata.async.AsyncTaskHandleManager;
import org.zanata.async.handle.MergeTranslationsTaskHandle;
import org.zanata.security.ZanataIdentity;
import org.zanata.service.MergeTranslationsService;
/**
* Manages tasks to copy translations from one existing version to another.
*
* @author Alex Eng <a href="mailto:aeng@redhat.com">aeng@redhat.com</a>
*/
@Dependent
public class MergeTranslationsManager implements Serializable {
private static final org.slf4j.Logger log =
org.slf4j.LoggerFactory.getLogger(MergeTranslationsManager.class);
private static final long serialVersionUID = -8717740654253262530L;
@Inject
@SuppressFBWarnings(value = "SE_BAD_FIELD",
justification = "CDI proxies are Serializable")
private AsyncTaskHandleManager asyncTaskHandleManager;
@Inject
private MergeTranslationsService mergeTranslationsServiceImpl;
@Inject
private ZanataIdentity identity;
/**
* Merge translations from an existing version to another.
*
* @param sourceProjectSlug
* - source project identifier
* @param sourceVersionSlug
* - source version identifier
* @param targetProjectSlug
* - target project identifier
* @param targetVersionSlug
* - target version identifier
* @param useNewerTranslation
* - to override translated/approved string in target with newer
* entry in source
*/
public void start(String sourceProjectSlug, String sourceVersionSlug,
String targetProjectSlug, String targetVersionSlug,
boolean useNewerTranslation) {
MergeVersionKey
key = MergeVersionKey
.getKey(targetProjectSlug, targetVersionSlug);
MergeTranslationsTaskHandle handle = new MergeTranslationsTaskHandle();
asyncTaskHandleManager.registerTaskHandle(handle, key);
mergeTranslationsServiceImpl.startMergeTranslations(sourceProjectSlug,
sourceVersionSlug, targetProjectSlug, targetVersionSlug,
useNewerTranslation, handle);
}
/**
* Cancel running merge translations task
*
* @param projectSlug
* - target project identifier
* @param versionSlug
* - target version identifier
*/
public void cancel(String projectSlug, String versionSlug) {
if (isRunning(projectSlug, versionSlug)) {
MergeTranslationsTaskHandle handle =
getProcessHandle(projectSlug, versionSlug);
handle.cancel(true);
handle.setCancelledTime(System.currentTimeMillis());
handle.setCancelledBy(identity.getCredentials().getUsername());
log.info("Merge translations cancelled- {}:{}", projectSlug,
versionSlug);
}
}
public MergeTranslationsTaskHandle getProcessHandle(String projectSlug,
String versionSlug) {
return (MergeTranslationsTaskHandle) asyncTaskHandleManager
.getHandleByKey(MergeVersionKey.getKey(projectSlug, versionSlug));
}
public boolean isRunning(String projectSlug, String versionSlug) {
MergeTranslationsTaskHandle handle =
getProcessHandle(projectSlug, versionSlug);
return handle != null && !handle.isDone();
}
/**
* Key used for merge version task
*/
public static final class MergeVersionKey implements
AsyncTaskHandleManager.AsyncTaskKey<MergeVersionKey> {
private static final long serialVersionUID = 1L;
private static final String KEY_NAME = "mergeVersion";
// target project identifier
private final String projectSlug;
// target version identifier
private final String versionSlug;
public static MergeVersionKey getKey(String projectSlug, String versionSlug) {
return new MergeVersionKey(projectSlug, versionSlug);
}
public String getProjectSlug() {
return this.projectSlug;
}
public String getVersionSlug() {
return this.versionSlug;
}
@java.beans.ConstructorProperties({ "projectSlug", "versionSlug" })
public MergeVersionKey(final String projectSlug, final String versionSlug) {
this.projectSlug = projectSlug;
this.versionSlug = versionSlug;
}
@Override
public String id() {
return joinFields(KEY_NAME, projectSlug, versionSlug);
}
@Override
public MergeVersionKey from(String id) {
List<String> parts = parseId(id, KEY_NAME, 2);
return getKey(parts.get(0), parts.get(1));
}
}
}