public List<String> translateAllInDoc(final String projectSlug,
final String iterationSlug, final String docId,
final LocaleId locale, final TranslationsResource translations,
final Set<String> extensions, final MergeType mergeType,
AsyncTaskHandle handle) {
final HProjectIteration hProjectIteration =
projectIterationDAO.getBySlug(projectSlug, iterationSlug);
if (hProjectIteration == null) {
throw new ZanataServiceException("Version '" + iterationSlug
+ "' for project '" + projectSlug + "' ");
}
if (mergeType == MergeType.IMPORT) {
identity.checkPermission("import-translation", hProjectIteration);
}
ResourceUtils.validateExtensions(extensions);
log.debug("pass evaluate");
final HDocument document =
documentDAO.getByDocIdAndIteration(hProjectIteration, docId);
if (document == null || document.isObsolete()) {
throw new ZanataServiceException("A document was not found.", 404);
}
log.debug("start put translations entity:{}", translations);
boolean changed = false;
final HLocale hLocale =
localeServiceImpl.validateLocaleByProjectIteration(locale,
projectSlug, iterationSlug);
final Optional<AsyncTaskHandle> handleOp =
Optional.fromNullable(handle);
if (handleOp.isPresent()) {
handleOp.get().setMaxProgress(
translations.getTextFlowTargets().size());
}
try {
changed |= new Work<Boolean>() {
@Override
protected Boolean work() throws Exception {
// handle extensions
boolean changed =
resourceUtils
.transferFromTranslationsResourceExtensions(
translations.getExtensions(true),
document, extensions, hLocale,
mergeType);
return changed;
}
}.workInTransaction();
} catch (Exception e) {
throw new ZanataServiceException("Error during translation.", 500,
e);
}
// NB: removedTargets only applies for MergeType.IMPORT
final Collection<HTextFlowTarget> removedTargets =
new HashSet<HTextFlowTarget>();
final List<String> warnings = new ArrayList<String>();
if (mergeType == MergeType.IMPORT) {
for (HTextFlow textFlow : document.getTextFlows()) {
HTextFlowTarget hTarget =
textFlow.getTargets().get(hLocale.getId());
if (hTarget != null) {
removedTargets.add(hTarget);
}
}
}
// Break the target into batches
List<List<TextFlowTarget>> batches =
Lists.partition(translations.getTextFlowTargets(), BATCH_SIZE);
for (final List<TextFlowTarget> batch : batches) {
try {
SaveBatchWork work = new SaveBatchWork();
work.setExtensions(extensions);
work.setWarnings(warnings);
work.setLocale(hLocale);
work.setDocument(document);
work.setMergeType(mergeType);
work.setRemovedTargets(removedTargets);
work.setHandleOp(handleOp);
work.setProjectIterationId(hProjectIteration.getId());
work.setBatch(batch);
changed |= work.workInTransaction();
} catch (Exception e) {
throw new ZanataServiceException("Error during translation.",
500, e);