1 package com.acumenvelocity.ath.solr.tm;
2
3 import java.util.Date;
4 import java.util.UUID;
5
6 import org.apache.solr.client.solrj.SolrClient;
7 import org.apache.solr.common.SolrInputDocument;
8
9 import com.acumenvelocity.ath.common.Const;
10 import com.acumenvelocity.ath.common.ConversionUtil;
11 import com.acumenvelocity.ath.common.JacksonUtil;
12 import com.acumenvelocity.ath.common.Log;
13 import com.acumenvelocity.ath.common.SolrUtil;
14 import com.acumenvelocity.ath.model.x.LayeredTextX;
15 import com.acumenvelocity.ath.solr.AthIndex;
16 import com.acumenvelocity.ath.solr.SolrIndexWriterStep;
17
18 import net.sf.okapi.common.LocaleId;
19 import net.sf.okapi.common.resource.ITextUnit;
20 import net.sf.okapi.common.resource.Segment;
21
22 public class SolrTmWriterStep extends SolrIndexWriterStep {
23
24 private UUID tmId;
25 private String tmFileName;
26 private UUID userId;
27 private boolean newTm;
28
29 public SolrTmWriterStep(UUID tmId, String tmFileName, UUID userId, boolean newTm) {
30
31 super(AthIndex.getIndex().getClient(), Const.ATH_SOLR_BATCH_SIZE,
32 Const.SOLR_CORE_ATH_TM_SEGMENTS, true, true);
33
34 this.tmId = tmId;
35 this.tmFileName = tmFileName;
36 this.userId = userId;
37 this.newTm = newTm;
38 }
39
40 @Override
41 public String getName() {
42 return "Solr TM Writer Step";
43 }
44
45 @Override
46 public String getDescription() {
47 return "Writes text units to Solr TM in batches";
48 }
49
50 @Override
51 protected void populateSolrDocument(SolrInputDocument doc, ITextUnit tu, Segment sseg,
52 Segment tseg, LocaleId srcLoc, LocaleId trgLoc) throws Exception {
53
54
55
56 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_SOLR_ID,
57
58 SolrUtil.buildTmSegSolrId(tmId, sseg.toString()));
59
60 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_TM_SEG_ID, UUID.randomUUID().toString());
61
62 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_TM_ID, tmId.toString());
63 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_TM_FILE_NAME, tmFileName, false);
64 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_SRC_LANG, srcLoc.toString());
65 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_TRG_LANG, trgLoc.toString());
66
67 LayeredTextX slt = ConversionUtil.toLayeredText(sseg.getContent(), srcLoc);
68 LayeredTextX tlt = ConversionUtil.toLayeredText(tseg.getContent(), trgLoc);
69
70 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_SOURCE, slt.getText());
71 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_TARGET, tlt.getText());
72
73 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_SOURCE_WITH_CODES, slt.getTextWithCodes());
74 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_TARGET_WITH_CODES, tlt.getTextWithCodes());
75
76 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_SOURCE_JSON, JacksonUtil.toJson(slt, false));
77 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_TARGET_JSON, JacksonUtil.toJson(tlt, false));
78
79 if (newTm) {
80 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_CREATED_BY, userId.toString());
81 doc.setField(Const.ATH_PROP_CREATED_AT, new Date());
82
83 } else {
84 SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_UPDATED_BY, userId.toString());
85 doc.setField(Const.ATH_PROP_UPDATED_AT, new Date());
86 }
87 }
88
89 @Override
90 protected SolrInputDocument getSolrDocument(SolrClient solrClient, String coreName,
91 String sourceWithCodes) {
92
93 SolrInputDocument doc = null;
94
95 if (newTm) {
96 doc = new SolrInputDocument();
97
98 } else {
99 try {
100 doc = SolrUtil.getDocumentBySolrId(solrClient, coreName,
101 SolrUtil.buildTmSegSolrId(tmId, sourceWithCodes));
102
103 } catch (Exception e) {
104 Log.warn(getClass(), "Error getting a Solr document for '{}' -- {}", sourceWithCodes,
105 e.getMessage());
106 }
107
108 if (doc == null) {
109 doc = new SolrInputDocument();
110 }
111 }
112
113 return doc;
114 }
115
116 }