View Javadoc
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      // Unique id (tmId + sourceWithTags) to overwrite an existing TM segment if the source with tags
55      // is the same
56      SolrUtil.safeSetField(tu, doc, Const.ATH_PROP_SOLR_ID,
57          // sseg.toString() => sseg.text.toText(), codes included
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 }