private int encodeResponseWithInit(Channel channel, HeadlineResult result, TransportBuffer msgBuf, int streamId, boolean legacyFormat) { // TODO Auto-generated method stub _refreshMsg.clear(); _refreshMsg.msgClass(MsgClasses.REFRESH); _refreshMsg.flags(RefreshMsgFlags.SOLICITED | RefreshMsgFlags.REFRESH_COMPLETE ); // _refreshMsg.flags(RefreshMsgFlags.SOLICITED | RefreshMsgFlags.REFRESH_COMPLETE | RefreshMsgFlags.HAS_MSG_KEY); _refreshMsg.state().streamState(StreamStates.OPEN); _refreshMsg.state().dataState(DataStates.OK); _refreshMsg.state().streamState(StreamStates.NON_STREAMING); _refreshMsg.state().code(StateCodes.NONE); _refreshMsg.state().text().data(""); _refreshMsg.domainType(msg.domainType()); _refreshMsg.containerType(DataTypes.SERIES); _refreshMsg.streamId(streamId); _refreshMsg.applyHasMsgKey(); // _refreshMsg.msgKey().applyHasIdentifier(); // _refreshMsg.msgKey().applyHasName(); // _refreshMsg.msgKey().applyHasNameType(); // _refreshMsg.msgKey().applyHasServiceId(); // _refreshMsg.msgKey().nameType(1); // _refreshMsg.msgKey().serviceId(1); // _refreshMsg.msgKey().name(key.name()); // _refreshMsg.msgKey().identifier(DomainTypes.HEADLINE); // _refreshMsg.msgKey().applyHasAttrib(); // _refreshMsg.msgKey().attribContainerType(DataTypes.ELEMENT_LIST); // _refreshMsg.msgKey().encodedAttrib(key.encodedAttrib()); _refreshMsg.msgKey().flags(key.flags()); _refreshMsg.msgKey().name(key.name()); _refreshMsg.msgKey().nameType(key.nameType()); _refreshMsg.msgKey().identifier(key.identifier()); _refreshMsg.msgKey().serviceId(key.serviceId()); _refreshMsg.msgKey().attribContainerType(key.attribContainerType()); _refreshMsg.msgKey().encodedAttrib(key.encodedAttrib()); EncodeIterator _encodeIter = CodecFactory.createEncodeIterator(); _encodeIter.clear(); /* encode message */ int ret = _encodeIter.setBufferAndRWFVersion(msgBuf, channel.majorVersion(), channel.minorVersion()); if (ret != CodecReturnCodes.SUCCESS) { _error.text("EncodeIter.setBufferAndRWFVersion() failed with return code: " + CodecReturnCodes.toString(ret)); return ret; } ret = _refreshMsg.encodeInit(_encodeIter, 0); if (ret < CodecReturnCodes.SUCCESS) { _error.text("Msg.encodeInit() failed with return code: " + CodecReturnCodes.toString(ret)); return ret; } // _refreshMsg.msgKey().encodedAttrib(key.encodedAttrib()); // ret = _refreshMsg.encodeKeyAttribComplete(_encodeIter, true); int len = result.getResult() == null ? 0 : result.getResult().length; boolean hasAnalyticData = (len == 0 ? false : ((NewsItem) result .getResult()[0]).getNewsAnalyticItems() != null); /* create and initialize series structure */ Series series = CodecFactory.createSeries(); /* create a single SeriesEntry and reuse for each entry */ SeriesEntry seriesEntry = CodecFactory.createSeriesEntry(); /* populate series structure prior to call to EncodeSeriesInit */ /* indicate that a total count hint will be encoded */ series.flags((len == 0 ? 0 : SeriesFlags.HAS_SET_DEFS) | SeriesFlags.HAS_TOTAL_COUNT_HINT | (result.hasTotalHitCount() ? SeriesFlags.HAS_SUMMARY_DATA : 0)); series.containerType(DataTypes.FIELD_LIST); series.totalCountHint(len); if(len > 0) series.applyHasSetDefs(); if ((ret = series.encodeInit(_encodeIter, 0, 0)) < CodecReturnCodes.SUCCESS) { /* print out message with return value string, value, and text */ System.out.printf("Error %s (%d) encountered with EncodeSeriesInit. Error Text: %s\n", CodecReturnCodes.toString(ret), ret, CodecReturnCodes.info(ret)); //to do , error return ret; } /* Create the fieldSetDefDb */ LocalFieldSetDefDb fieldSetDefDb = CodecFactory.createLocalFieldSetDefDb(); if(len > 0) { /* create entries arrays */ List fieldSetDefEntries = new ArrayList(); FieldSetDefEntry displayname = CodecFactory.createFieldSetDefEntry(); displayname.dataType(DataTypes.RMTES_STRING); displayname.fieldId(FIDList.getFidId("DSPLY_NAME")); fieldSetDefEntries.add(displayname); FieldSetDefEntry revLevel = CodecFactory.createFieldSetDefEntry(); revLevel.dataType(DataTypes.UINT); revLevel.fieldId(FIDList.getFidId("REV_LEVEL")); fieldSetDefEntries.add(revLevel); FieldSetDefEntry takeSeqno = CodecFactory.createFieldSetDefEntry(); takeSeqno.dataType(DataTypes.UINT); takeSeqno.fieldId(FIDList.getFidId("TAKE_SEQNO")); fieldSetDefEntries.add(takeSeqno); FieldSetDefEntry attribtn = CodecFactory.createFieldSetDefEntry(); attribtn.dataType(DataTypes.RMTES_STRING); attribtn.fieldId(FIDList.getFidId("ATTRIBTN")); fieldSetDefEntries.add(attribtn); FieldSetDefEntry topicCode = CodecFactory.createFieldSetDefEntry(); topicCode.dataType(DataTypes.RMTES_STRING); topicCode.fieldId(FIDList.getFidId("TOPIC_CODE")); fieldSetDefEntries.add(topicCode); FieldSetDefEntry coIds = CodecFactory.createFieldSetDefEntry(); coIds.dataType(DataTypes.RMTES_STRING); coIds.fieldId(FIDList.getFidId("CO_IDS")); fieldSetDefEntries.add(coIds); FieldSetDefEntry guid = CodecFactory.createFieldSetDefEntry(); guid.dataType(DataTypes.RMTES_STRING); guid.fieldId(FIDList.getFidId("GUID")); fieldSetDefEntries.add(guid); FieldSetDefEntry nameItems = CodecFactory.createFieldSetDefEntry(); nameItems.dataType(DataTypes.RMTES_STRING); nameItems.fieldId(FIDList.getFidId("NAMEDITEMS")); fieldSetDefEntries.add(nameItems); FieldSetDefEntry newsPrio = CodecFactory.createFieldSetDefEntry(); newsPrio.dataType(DataTypes.UINT); newsPrio.fieldId(FIDList.getFidId("NEWS_PRIO")); fieldSetDefEntries.add(newsPrio); FieldSetDefEntry headLang = CodecFactory.createFieldSetDefEntry(); headLang.dataType(DataTypes.RMTES_STRING); headLang.fieldId(FIDList.getFidId("HEAD_LANG")); fieldSetDefEntries.add(headLang); FieldSetDefEntry prodcode = CodecFactory.createFieldSetDefEntry(); prodcode.dataType(DataTypes.RMTES_STRING); prodcode.fieldId(FIDList.getFidId("PRODCODE_N")); fieldSetDefEntries.add(prodcode); FieldSetDefEntry newsSrc = CodecFactory.createFieldSetDefEntry(); newsSrc.dataType(DataTypes.RMTES_STRING); newsSrc.fieldId(FIDList.getFidId("NEWS_SRC")); fieldSetDefEntries.add(newsSrc); FieldSetDefEntry newsHdln= CodecFactory.createFieldSetDefEntry(); newsHdln.dataType(DataTypes.RMTES_STRING); newsHdln.fieldId(FIDList.getFidId("NEWSHDLN")); fieldSetDefEntries.add(newsHdln); FieldSetDefEntry mimeType = CodecFactory.createFieldSetDefEntry(); mimeType.dataType(DataTypes.RMTES_STRING); mimeType.fieldId(FIDList.getFidId("MIMETYPE")); fieldSetDefEntries.add(mimeType); FieldSetDefEntry newsCt = CodecFactory.createFieldSetDefEntry(); newsCt.dataType(DataTypes.TIME); newsCt.fieldId(FIDList.getFidId("NEWS_CT")); fieldSetDefEntries.add(newsCt); FieldSetDefEntry newsLsn = CodecFactory.createFieldSetDefEntry(); newsLsn.dataType(DataTypes.UINT); newsLsn.fieldId(FIDList.getFidId("NEWS_LSN")); fieldSetDefEntries.add(newsLsn); FieldSetDefEntry newsLt = CodecFactory.createFieldSetDefEntry(); newsLt.dataType(DataTypes.TIME); newsLt.fieldId(FIDList.getFidId("NEWS_LT")); fieldSetDefEntries.add(newsLt); FieldSetDefEntry newsRt = CodecFactory.createFieldSetDefEntry(); newsRt.dataType(DataTypes.TIME); newsRt.fieldId(FIDList.getFidId("NEWS_RT")); fieldSetDefEntries.add(newsRt); FieldSetDefEntry hdlnTes = CodecFactory.createFieldSetDefEntry(); hdlnTes.dataType(DataTypes.RMTES_STRING); hdlnTes.fieldId(FIDList.getFidId("HDLN_TES")); fieldSetDefEntries.add(hdlnTes); FieldSetDefEntry newsTn = CodecFactory.createFieldSetDefEntry(); newsTn.dataType(DataTypes.UINT); newsTn.fieldId(FIDList.getFidId("NEWS_TN")); fieldSetDefEntries.add(newsTn); FieldSetDefEntry hdlnPe = CodecFactory.createFieldSetDefEntry(); hdlnPe.dataType(DataTypes.ARRAY); hdlnPe.fieldId(FIDList.getFidId("HDLN_PE")); fieldSetDefEntries.add(hdlnPe); FieldSetDefEntry longWars = CodecFactory.createFieldSetDefEntry(); longWars.dataType(DataTypes.RMTES_STRING); longWars.fieldId(FIDList.getFidId("LONG_WADRS")); fieldSetDefEntries.add(longWars); FieldSetDefEntry newsCd = CodecFactory.createFieldSetDefEntry(); newsCd.dataType(DataTypes.DATE); newsCd.fieldId(FIDList.getFidId("NEWS_CD")); fieldSetDefEntries.add(newsCd); FieldSetDefEntry newsLd = CodecFactory.createFieldSetDefEntry(); newsLd.dataType(DataTypes.DATE); newsLd.fieldId(FIDList.getFidId("NEWS_LD")); fieldSetDefEntries.add(newsLd); FieldSetDefEntry newsRd = CodecFactory.createFieldSetDefEntry(); newsRd.dataType(DataTypes.DATE); newsRd.fieldId(FIDList.getFidId("NEWS_RD")); fieldSetDefEntries.add(newsRd); if (hasAnalyticData) { short trnaFidId = FIDList.getFidId("TRNA_ANS"); if(trnaFidId == 0) { trnaFidId = FIDList.getFidId("TRNA"); } FieldSetDefEntry trna = CodecFactory.createFieldSetDefEntry(); trna.dataType(DataTypes.SERIES); trna.fieldId(trnaFidId); fieldSetDefEntries.add(trna); } if (SnapshotHandler.isEnableTopnews()) { FieldSetDefEntry topNewsCde = CodecFactory.createFieldSetDefEntry(); topNewsCde.dataType(DataTypes.RMTES_STRING); topNewsCde.fieldId(FIDList.getFidId("TOPNEWSCDE")); fieldSetDefEntries.add(topNewsCde); } /* Now populate the entries into the set definition Db. If there were more than one definition, all required defs would be populated into the same Db */ /* Structure must be cleared first */ fieldSetDefDb.clear(); /* set the definition into the slot that corresponds to its ID */ /* since this definition is ID 5, it goes into definitions array position 5 */ fieldSetDefDb.definitions()[0].setId(0); fieldSetDefDb.definitions()[0].count(fieldSetDefEntries.size()); // fieldSetDefDb.definitions()[0].count(26); fieldSetDefDb.definitions()[0].entries(fieldSetDefEntries.toArray(new FieldSetDefEntry[fieldSetDefEntries.size()])); /* It expects the local set definition database to be encoded next */ /* because we are encoding a local field set definition database, we have to call the correct method */ ret = fieldSetDefDb.encode(_encodeIter); ret = series.encodeSetDefsComplete(_encodeIter, true); } /* Our set definition db is now encoded into the series, we must complete the series portion of this encoding and then begin encoding entries */ FieldList fieldList = CodecFactory.createFieldList(); // FieldEntry fieldEntry = CodecFactory.createFieldEntry(); // fieldEntry.clear(); if (result.hasTotalHitCount()) { fieldList.clear(); series.applyHasSummaryData(); fieldList.applyHasStandardData(); fieldList.applyHasSetId(); fieldList.encodeInit(_encodeIter, null, 0); FieldEntry fieldEntry = CodecFactory.createFieldEntry(); fieldEntry.fieldId(FIDList.getFidId("TOT_VOLUME")); fieldEntry.dataType(DataTypes.REAL); Real real = CodecFactory.createReal(); real.value((long) result.getTotalHitCount(),RealHints.EXPONENT0); ret = fieldEntry.encode(_encodeIter, real); ret = fieldList.encodeComplete(_encodeIter, true); ret = series.encodeSummaryDataComplete(_encodeIter, true); } // SeriesEntry seriesEntry = CodecFactory.createSeriesEntry(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));; SimpleDateFormat simpleDateFormatDate = new SimpleDateFormat("MM/dd/yyyy"); simpleDateFormatDate.setTimeZone(TimeZone.getTimeZone("GMT")); for (int i = 0; i < len; i++) { NewsItem item = (NewsItem) result.getResult()[i]; NewsAnalyticItems analytic = item.getNewsAnalyticItems(); String headline = result.getProcessedHeadline()[i]; String teaser = result.getTeaser() == null ? null : result .getTeaser()[i]; seriesEntry.clear(); ret = seriesEntry.encodeInit(_encodeIter, 0); fieldList.clear(); //fieldList.applyHasInfo(); fieldList.applyHasSetId(); fieldList.applyHasSetData(); fieldList.applyHasStandardData(); fieldList.setId(i); fieldList.fieldListNum(i); ret = fieldList.encodeInit(_encodeIter, fieldSetDefDb, 0); FieldEntry fieldEntry = CodecFactory.createFieldEntry(); com.thomsonreuters.upa.codec.Buffer rmtes = CodecFactory.createBuffer(); UInt uInt = CodecFactory.createUInt(); com.thomsonreuters.upa.codec.ArrayEntry arryEntry = CodecFactory.createArrayEntry(); com.thomsonreuters.upa.codec.Array array = CodecFactory.createArray(); com.thomsonreuters.upa.codec.Date date = CodecFactory.createDate(); com.thomsonreuters.upa.codec.Time time = CodecFactory.createTime(); rmtes.data(String.valueOf(item.getDisplayName())); fieldEntry.fieldId(FIDList.getFidId("DSPLY_NAME")); fieldEntry.dataType(DataTypes.RMTES_STRING); ret = fieldEntry.encode(_encodeIter, rmtes); fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("REV_LEVEL")); uInt.value(item.getRevisionNo()); ret = fieldEntry.encode(_encodeIter, uInt); fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("TAKE_SEQNO")); uInt.value(item.getTakeSeqNo()); ret = fieldEntry.encode(_encodeIter, uInt); // ATTRIBUTION fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("ATTRIBTN")); if (item.getAttribution() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(item.getAttribution()); ret = fieldEntry.encode(_encodeIter, rmtes); } // TOPIC CODES fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("TOPIC_CODE")); if (item.getTopics() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getTopics())); ret = fieldEntry.encode(_encodeIter, rmtes); } // CO IDS fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("CO_IDS")); if (item.getCompanies() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getCompanies())); ret = fieldEntry.encode(_encodeIter, rmtes); } // GUID fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("GUID")); if (item.getURN() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(legacyFormat ? URNUtil .toLegacyFormat(item.getURN()) : item.getURN()); ret = fieldEntry.encode(_encodeIter, rmtes); } // NAMED ITEMS fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("NAMEDITEMS")); if (item.getNamedItem() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getNamedItem())); ret = fieldEntry.encode(_encodeIter, rmtes); } // NEWS PRIORITY fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("NEWS_PRIO")); uInt.value(item.getUrgency()); ret = fieldEntry.encode(_encodeIter, uInt); // HEAD LANG fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("HEAD_LANG")); if (item.getLanguage() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(legacyFormat ? item.getLanguage() .toLowerCase() : item.getLanguage()); ret = fieldEntry.encode(_encodeIter, rmtes); } // PROD CODE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("PRODCODE_N")); if (item.getProdcodes() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getProdcodes())); ret = fieldEntry.encode(_encodeIter, rmtes); } // PROVIDER fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("NEWS_SRC")); if (item.getProvider() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(item.getProvider()); ret = fieldEntry.encode(_encodeIter, rmtes); } // NEWS HEADLINE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("NEWSHDLN")); if (headline == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(headline); ret = fieldEntry.encode(_encodeIter, rmtes); } // MIME TYPE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("MIMETYPE")); if (item.getMimetype() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(item.getMimetype()); ret = fieldEntry.encode(_encodeIter, rmtes); } // STORY TIME fieldEntry.dataType(DataTypes.TIME); fieldEntry.fieldId(FIDList.getFidId("NEWS_CT")); if (item.getFirstCreateTime() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { time.value(simpleDateFormat.format(item .getFirstCreateTime())); ret = fieldEntry.encode(_encodeIter, time); } // LOCAL TIME SEQUENCE NO fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("NEWS_LSN")); uInt.value(IDGenerator.getTimeSequence(item .getLocaltimeSeqNo())); ret = fieldEntry.encode(_encodeIter, uInt); // Local TIME fieldEntry.dataType(DataTypes.TIME); fieldEntry.fieldId(FIDList.getFidId("NEWS_LT")); if (item.getLocaltime() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { time.value(simpleDateFormat.format(item.getLocaltime())); ret = fieldEntry.encode(_encodeIter, time); } // TAKE TIME fieldEntry.dataType(DataTypes.TIME); fieldEntry.fieldId(FIDList.getFidId("NEWS_RT")); if (item.getRevisionTime() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item // .getRevisionTime()).getTimeInMillis()); // ret = fieldEntry.encode(_encodeIter, date); time.value(simpleDateFormat.format(item.getRevisionTime())); ret = fieldEntry.encode(_encodeIter, time); } // TEASER fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("HDLN_TES")); if (teaser == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(teaser); ret = fieldEntry.encode(_encodeIter, rmtes); } // TAKE NUMBER fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("NEWS_TN")); uInt.value(item.getTakeNo()); ret = fieldEntry.encode(_encodeIter, uInt); // HEADLINE PE fieldEntry.clear(); fieldEntry.dataType(DataTypes.ARRAY); fieldEntry.fieldId(FIDList.getFidId("HDLN_PE")); ret = fieldEntry.encodeInit(_encodeIter, 0); if (item.getHeadlinePE() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { array.primitiveType(DataTypes.UINT); ret = array.encodeInit(_encodeIter); for (int pe : item.getHeadlinePE()) { uInt.value((long) pe); arryEntry.clear(); ret = arryEntry.encode(_encodeIter, uInt); } array.encodeComplete(_encodeIter, true); ret = fieldEntry.encodeComplete(_encodeIter, true); } // DOCUMENT LINK fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("LONG_WADRS")); if (item.getDocLink() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { rmtes.data(item.getDocLink()); ret = fieldEntry.encode(_encodeIter, rmtes); } // STORY DATE fieldEntry.dataType(DataTypes.DATE); fieldEntry.fieldId(FIDList.getFidId("NEWS_CD")); if (item.getFirstCreateTime() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item // .getFirstCreateTime()).getTimeInMillis()); date.value(simpleDateFormatDate.format(item.getFirstCreateTime())); ret = fieldEntry.encode(_encodeIter, date); } // LOCAL DATE fieldEntry.dataType(DataTypes.DATE); fieldEntry.fieldId(FIDList.getFidId("NEWS_LD")); if (item.getLocaltime() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item.getLocaltime()).getTimeInMillis()); date.value(simpleDateFormatDate.format(item.getLocaltime())); ret = fieldEntry.encode(_encodeIter, date); } // TAKE DATE fieldEntry.dataType(DataTypes.DATE); fieldEntry.fieldId(FIDList.getFidId("NEWS_RD")); if (item.getRevisionTime() == null) { ret = fieldEntry.encodeBlank(_encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item // .getRevisionTime()).getTimeInMillis()); date.value(simpleDateFormatDate.format(item.getRevisionTime())); ret = fieldEntry.encode(_encodeIter, date); } // NEWS ANALYTIC ITEM if (hasAnalyticData) { if (analytic == null || analytic.getRicMap() == null || analytic.getRicMap().size() == 0) { ret = fieldEntry.encodeBlank(_encodeIter); } else { // to do // encodeNewsAnalyticsNoDataDefinitions(encoder, analytic); } } // TOP NEWS CODE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("TOPNEWSCDE")); if (SnapshotHandler.isEnableTopnews()) { if (item.getN2kTopNewsInfo() != null) { Map> infoMap = item.getN2kTopNewsInfo() .getInfoMap(); StringBuilder sb = new StringBuilder(); for (String key : infoMap.keySet()) { if (sb.length() > 0) { sb.append(" "); } sb.append(key); } rmtes.data(sb.toString()); ret = fieldEntry.encode(_encodeIter, rmtes); } else { ret = fieldEntry.encodeBlank(_encodeIter); } } ret = fieldList.encodeComplete(_encodeIter, true); ret = seriesEntry.encodeComplete(_encodeIter, true); } ret = series.encodeComplete(_encodeIter, true); ret = _refreshMsg.encodeComplete(_encodeIter, true); return 0; } private int encodeResponse(Channel channel, HeadlineResult result, TransportBuffer msgBuf, int streamId, boolean legacyFormat) { // TODO Auto-generated method stub _refreshMsg.clear(); _refreshMsg.msgClass(MsgClasses.REFRESH); _refreshMsg.domainType(msg.domainType()); _refreshMsg.containerType(DataTypes.SERIES); _refreshMsg.streamId(streamId); _refreshMsg.state().streamState(StreamStates.OPEN); _refreshMsg.state().dataState(DataStates.OK); _refreshMsg.state().streamState(StreamStates.NON_STREAMING); _refreshMsg.state().code(StateCodes.NONE); _refreshMsg.state().text().data(""); _refreshMsg.flags(RefreshMsgFlags.SOLICITED | RefreshMsgFlags.REFRESH_COMPLETE ); // _refreshMsg.applyHasMsgKey(); // _refreshMsg.msgKey().flags(key.flags()); // _refreshMsg.msgKey().name(key.name()); // _refreshMsg.msgKey().nameType(key.nameType()); // _refreshMsg.msgKey().identifier(key.identifier()); // _refreshMsg.msgKey().serviceId(key.serviceId()); // _refreshMsg.msgKey().attribContainerType(key.attribContainerType()); // _refreshMsg.msgKey().encodedAttrib(key.encodedAttrib()); EncodeIterator _encodeIter = CodecFactory.createEncodeIterator(); _encodeIter.clear(); /* encode message */ int ret = _encodeIter.setBufferAndRWFVersion(msgBuf, channel.majorVersion(), channel.minorVersion()); if (ret != CodecReturnCodes.SUCCESS) { _error.text("EncodeIter.setBufferAndRWFVersion() failed with return code: " + CodecReturnCodes.toString(ret)); return ret; } /* create a Buffer to encode into */ /* Typically, for performance, the transport layer can provide a pool of buffers * for use and reuse that avoids the constant allocation/garbage collection penalty. */ /* For this example I am heap allocating the buffer (500 bytes is large enough for * the message I am encoding). */ com.thomsonreuters.upa.codec.Buffer encBuffer = CodecFactory.createBuffer(); encBuffer.data(ByteBuffer.allocate(HEADLINE_MSG_SIZE)); /* perform the example for encoding a Series Container Type */ /* We pass in the buffer to this method with the total length available. When the method finishes, it will set the actual length encoded into the buffer for the encDecBuffer.length member */ if ((ret = encodeMsgBody(encBuffer, result, legacyFormat)) < CodecReturnCodes.SUCCESS) { System.out.printf("Error running the example for encoding a Series Container Type!\n"); return ret; } _refreshMsg.encodedDataBody(encBuffer); if ((ret = _refreshMsg.encode(_encodeIter)) < CodecReturnCodes.SUCCESS) { /* error condition - switch our success value to false so we can roll back */ // success = false; // /* print out message with return value string, value, and text */ // System.out.printf("Error (%d) (errno: %d) encountered with Msg.encode. Error Text: %s\n", // error.errorId(), error.sysError(), error.text()); } return 0; } private int encodeMsgBody(Buffer encBuf, HeadlineResult result, boolean legacyFormat) { int majorVersion = Codec.majorVersion(); //This should be initialized to the MAJOR version of RWF being encoded int minorVersion = Codec.minorVersion(); // This should be initialized to the MINOR version of RWF being encoded EncodeIterator encodeIter = CodecFactory.createEncodeIterator(); encodeIter.clear(); int retVal; //used to store and check the return value from the method calls if ((retVal = encodeIter.setBufferAndRWFVersion(encBuf, majorVersion, minorVersion)) < CodecReturnCodes.SUCCESS) { System.out.printf("Error %s (%d) encountered with setBufferAndRWFVersion. Error Text: %s\n", CodecReturnCodes.toString(retVal), retVal, CodecReturnCodes.info(retVal)); return retVal; } /* create and initialize series structure */ Series series = CodecFactory.createSeries(); /* populate series structure prior to call to EncodeSeriesInit */ int len = result.getResult() == null ? 0 : result.getResult().length; boolean hasAnalyticData = (len == 0 ? false : ((NewsItem) result .getResult()[0]).getNewsAnalyticItems() != null); /* indicate that a total count hint will be encoded */ series.flags((len == 0 ? 0 : SeriesFlags.HAS_SET_DEFS) | SeriesFlags.HAS_TOTAL_COUNT_HINT | (result.hasTotalHitCount() ? SeriesFlags.HAS_SUMMARY_DATA : 0)); series.containerType(DataTypes.FIELD_LIST); series.totalCountHint(len); if(len > 0) series.applyHasSetDefs(); if ((ret = series.encodeInit(encodeIter, 0, 0)) < CodecReturnCodes.SUCCESS) { /* print out message with return value string, value, and text */ System.out.printf("Error %s (%d) encountered with EncodeSeriesInit. Error Text: %s\n", CodecReturnCodes.toString(ret), ret, CodecReturnCodes.info(ret)); //to do , error return ret; } /* Create the fieldSetDefDb */ LocalFieldSetDefDb fieldSetDefDb = CodecFactory.createLocalFieldSetDefDb(); if(len > 0) { /* create entries arrays */ List fieldSetDefEntries = new ArrayList(); FieldSetDefEntry displayname = CodecFactory.createFieldSetDefEntry(); displayname.dataType(DataTypes.RMTES_STRING); displayname.fieldId(FIDList.getFidId("DSPLY_NAME")); fieldSetDefEntries.add(displayname); FieldSetDefEntry revLevel = CodecFactory.createFieldSetDefEntry(); revLevel.dataType(DataTypes.UINT); revLevel.fieldId(FIDList.getFidId("REV_LEVEL")); fieldSetDefEntries.add(revLevel); FieldSetDefEntry takeSeqno = CodecFactory.createFieldSetDefEntry(); takeSeqno.dataType(DataTypes.UINT); takeSeqno.fieldId(FIDList.getFidId("TAKE_SEQNO")); fieldSetDefEntries.add(takeSeqno); FieldSetDefEntry attribtn = CodecFactory.createFieldSetDefEntry(); attribtn.dataType(DataTypes.RMTES_STRING); attribtn.fieldId(FIDList.getFidId("ATTRIBTN")); fieldSetDefEntries.add(attribtn); FieldSetDefEntry topicCode = CodecFactory.createFieldSetDefEntry(); topicCode.dataType(DataTypes.RMTES_STRING); topicCode.fieldId(FIDList.getFidId("TOPIC_CODE")); fieldSetDefEntries.add(topicCode); FieldSetDefEntry coIds = CodecFactory.createFieldSetDefEntry(); coIds.dataType(DataTypes.RMTES_STRING); coIds.fieldId(FIDList.getFidId("CO_IDS")); fieldSetDefEntries.add(coIds); FieldSetDefEntry guid = CodecFactory.createFieldSetDefEntry(); guid.dataType(DataTypes.RMTES_STRING); guid.fieldId(FIDList.getFidId("GUID")); fieldSetDefEntries.add(guid); FieldSetDefEntry nameItems = CodecFactory.createFieldSetDefEntry(); nameItems.dataType(DataTypes.RMTES_STRING); nameItems.fieldId(FIDList.getFidId("NAMEDITEMS")); fieldSetDefEntries.add(nameItems); FieldSetDefEntry newsPrio = CodecFactory.createFieldSetDefEntry(); newsPrio.dataType(DataTypes.UINT); newsPrio.fieldId(FIDList.getFidId("NEWS_PRIO")); fieldSetDefEntries.add(newsPrio); FieldSetDefEntry headLang = CodecFactory.createFieldSetDefEntry(); headLang.dataType(DataTypes.RMTES_STRING); headLang.fieldId(FIDList.getFidId("HEAD_LANG")); fieldSetDefEntries.add(headLang); FieldSetDefEntry prodcode = CodecFactory.createFieldSetDefEntry(); prodcode.dataType(DataTypes.RMTES_STRING); prodcode.fieldId(FIDList.getFidId("PRODCODE_N")); fieldSetDefEntries.add(prodcode); FieldSetDefEntry newsSrc = CodecFactory.createFieldSetDefEntry(); newsSrc.dataType(DataTypes.RMTES_STRING); newsSrc.fieldId(FIDList.getFidId("NEWS_SRC")); fieldSetDefEntries.add(newsSrc); FieldSetDefEntry newsHdln= CodecFactory.createFieldSetDefEntry(); newsHdln.dataType(DataTypes.RMTES_STRING); newsHdln.fieldId(FIDList.getFidId("NEWSHDLN")); fieldSetDefEntries.add(newsHdln); FieldSetDefEntry mimeType = CodecFactory.createFieldSetDefEntry(); mimeType.dataType(DataTypes.RMTES_STRING); mimeType.fieldId(FIDList.getFidId("MIMETYPE")); fieldSetDefEntries.add(mimeType); FieldSetDefEntry newsCt = CodecFactory.createFieldSetDefEntry(); newsCt.dataType(DataTypes.TIME); newsCt.fieldId(FIDList.getFidId("NEWS_CT")); fieldSetDefEntries.add(newsCt); FieldSetDefEntry newsLsn = CodecFactory.createFieldSetDefEntry(); newsLsn.dataType(DataTypes.UINT); newsLsn.fieldId(FIDList.getFidId("NEWS_LSN")); fieldSetDefEntries.add(newsLsn); FieldSetDefEntry newsLt = CodecFactory.createFieldSetDefEntry(); newsLt.dataType(DataTypes.TIME); newsLt.fieldId(FIDList.getFidId("NEWS_LT")); fieldSetDefEntries.add(newsLt); FieldSetDefEntry newsRt = CodecFactory.createFieldSetDefEntry(); newsRt.dataType(DataTypes.TIME); newsRt.fieldId(FIDList.getFidId("NEWS_RT")); fieldSetDefEntries.add(newsRt); FieldSetDefEntry hdlnTes = CodecFactory.createFieldSetDefEntry(); hdlnTes.dataType(DataTypes.RMTES_STRING); hdlnTes.fieldId(FIDList.getFidId("HDLN_TES")); fieldSetDefEntries.add(hdlnTes); FieldSetDefEntry newsTn = CodecFactory.createFieldSetDefEntry(); newsTn.dataType(DataTypes.UINT); newsTn.fieldId(FIDList.getFidId("NEWS_TN")); fieldSetDefEntries.add(newsTn); FieldSetDefEntry hdlnPe = CodecFactory.createFieldSetDefEntry(); hdlnPe.dataType(DataTypes.ARRAY); hdlnPe.fieldId(FIDList.getFidId("HDLN_PE")); fieldSetDefEntries.add(hdlnPe); FieldSetDefEntry longWars = CodecFactory.createFieldSetDefEntry(); longWars.dataType(DataTypes.RMTES_STRING); longWars.fieldId(FIDList.getFidId("LONG_WADRS")); fieldSetDefEntries.add(longWars); FieldSetDefEntry newsCd = CodecFactory.createFieldSetDefEntry(); newsCd.dataType(DataTypes.DATE); newsCd.fieldId(FIDList.getFidId("NEWS_CD")); fieldSetDefEntries.add(newsCd); FieldSetDefEntry newsLd = CodecFactory.createFieldSetDefEntry(); newsLd.dataType(DataTypes.DATE); newsLd.fieldId(FIDList.getFidId("NEWS_LD")); fieldSetDefEntries.add(newsLd); FieldSetDefEntry newsRd = CodecFactory.createFieldSetDefEntry(); newsRd.dataType(DataTypes.DATE); newsRd.fieldId(FIDList.getFidId("NEWS_RD")); fieldSetDefEntries.add(newsRd); if (hasAnalyticData) { short trnaFidId = FIDList.getFidId("TRNA_ANS"); if(trnaFidId == 0) { trnaFidId = FIDList.getFidId("TRNA"); } FieldSetDefEntry trna = CodecFactory.createFieldSetDefEntry(); trna.dataType(DataTypes.SERIES); trna.fieldId(trnaFidId); fieldSetDefEntries.add(trna); } if (SnapshotHandler.isEnableTopnews()) { FieldSetDefEntry topNewsCde = CodecFactory.createFieldSetDefEntry(); topNewsCde.dataType(DataTypes.RMTES_STRING); topNewsCde.fieldId(FIDList.getFidId("TOPNEWSCDE")); fieldSetDefEntries.add(topNewsCde); } /* Now populate the entries into the set definition Db. If there were more than one definition, all required defs would be populated into the same Db */ /* Structure must be cleared first */ fieldSetDefDb.clear(); /* set the definition into the slot that corresponds to its ID */ /* since this definition is ID 5, it goes into definitions array position 5 */ fieldSetDefDb.definitions()[0].setId(0); fieldSetDefDb.definitions()[0].count(fieldSetDefEntries.size()); // fieldSetDefDb.definitions()[0].count(26); fieldSetDefDb.definitions()[0].entries(fieldSetDefEntries.toArray(new FieldSetDefEntry[fieldSetDefEntries.size()])); /* It expects the local set definition database to be encoded next */ /* because we are encoding a local field set definition database, we have to call the correct method */ ret = fieldSetDefDb.encode(encodeIter); ret = series.encodeSetDefsComplete(encodeIter, true); } /* Our set definition db is now encoded into the series, we must complete the series portion of this encoding and then begin encoding entries */ // FieldList fieldList = CodecFactory.createFieldList(); // FieldEntry fieldEntry = CodecFactory.createFieldEntry(); // fieldEntry.clear(); if (result.hasTotalHitCount()) { FieldList fieldList = CodecFactory.createFieldList(); fieldList.clear(); series.applyHasSummaryData(); fieldList.applyHasStandardData(); fieldList.applyHasSetId(); fieldList.encodeInit(encodeIter, null, 0); FieldEntry fieldEntry = CodecFactory.createFieldEntry(); fieldEntry.fieldId(FIDList.getFidId("TOT_VOLUME")); fieldEntry.dataType(DataTypes.REAL); Real real = CodecFactory.createReal(); real.value((long) result.getTotalHitCount(),RealHints.EXPONENT0); ret = fieldEntry.encode(encodeIter, real); ret = fieldList.encodeComplete(encodeIter, true); ret = series.encodeSummaryDataComplete(encodeIter, true); } // SeriesEntry seriesEntry = CodecFactory.createSeriesEntry(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));; SimpleDateFormat simpleDateFormatDate = new SimpleDateFormat("MM/dd/yyyy"); simpleDateFormatDate.setTimeZone(TimeZone.getTimeZone("GMT")); for (int i = 0; i < len; i++) { NewsItem item = (NewsItem) result.getResult()[i]; NewsAnalyticItems analytic = item.getNewsAnalyticItems(); String headline = result.getProcessedHeadline()[i]; String teaser = result.getTeaser() == null ? null : result .getTeaser()[i]; /* create a single SeriesEntry and reuse for each entry */ SeriesEntry seriesEntry = CodecFactory.createSeriesEntry(); seriesEntry.clear(); ret = seriesEntry.encodeInit(encodeIter, 0); FieldList fieldList = CodecFactory.createFieldList(); fieldList.clear(); //fieldList.applyHasInfo(); fieldList.applyHasSetId(); fieldList.applyHasSetData(); // fieldList.applyHasStandardData(); ret = fieldList.encodeInit(encodeIter, fieldSetDefDb, 0); FieldEntry fieldEntry = CodecFactory.createFieldEntry(); com.thomsonreuters.upa.codec.Buffer rmtes = CodecFactory.createBuffer(); UInt uInt = CodecFactory.createUInt(); com.thomsonreuters.upa.codec.ArrayEntry arryEntry = CodecFactory.createArrayEntry(); com.thomsonreuters.upa.codec.Array array = CodecFactory.createArray(); com.thomsonreuters.upa.codec.Date date = CodecFactory.createDate(); com.thomsonreuters.upa.codec.Time time = CodecFactory.createTime(); rmtes.data(String.valueOf(item.getDisplayName())); fieldEntry.fieldId(FIDList.getFidId("DSPLY_NAME")); fieldEntry.dataType(DataTypes.RMTES_STRING); ret = fieldEntry.encode(encodeIter, rmtes); fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("REV_LEVEL")); uInt.value(item.getRevisionNo()); ret = fieldEntry.encode(encodeIter, uInt); fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("TAKE_SEQNO")); uInt.value(item.getTakeSeqNo()); ret = fieldEntry.encode(encodeIter, uInt); // ATTRIBUTION fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("ATTRIBTN")); if (item.getAttribution() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(item.getAttribution()); ret = fieldEntry.encode(encodeIter, rmtes); } // TOPIC CODES fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("TOPIC_CODE")); if (item.getTopics() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getTopics())); ret = fieldEntry.encode(encodeIter, rmtes); } // CO IDS fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("CO_IDS")); if (item.getCompanies() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getCompanies())); ret = fieldEntry.encode(encodeIter, rmtes); } // GUID fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("GUID")); if (item.getURN() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(legacyFormat ? URNUtil .toLegacyFormat(item.getURN()) : item.getURN()); ret = fieldEntry.encode(encodeIter, rmtes); } // NAMED ITEMS fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("NAMEDITEMS")); if (item.getNamedItem() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getNamedItem())); ret = fieldEntry.encode(encodeIter, rmtes); } // NEWS PRIORITY fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("NEWS_PRIO")); uInt.value(item.getUrgency()); ret = fieldEntry.encode(encodeIter, uInt); // HEAD LANG fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("HEAD_LANG")); if (item.getLanguage() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(legacyFormat ? item.getLanguage() .toLowerCase() : item.getLanguage()); ret = fieldEntry.encode(encodeIter, rmtes); } // PROD CODE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("PRODCODE_N")); if (item.getProdcodes() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(NewsItem.metaToString(item .getProdcodes())); ret = fieldEntry.encode(encodeIter, rmtes); } // PROVIDER fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("NEWS_SRC")); if (item.getProvider() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(item.getProvider()); ret = fieldEntry.encode(encodeIter, rmtes); } // NEWS HEADLINE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("NEWSHDLN")); if (headline == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(headline); ret = fieldEntry.encode(encodeIter, rmtes); } // MIME TYPE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("MIMETYPE")); if (item.getMimetype() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(item.getMimetype()); ret = fieldEntry.encode(encodeIter, rmtes); } // STORY TIME fieldEntry.dataType(DataTypes.TIME); fieldEntry.fieldId(FIDList.getFidId("NEWS_CT")); if (item.getFirstCreateTime() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { time.value(simpleDateFormat.format(item .getFirstCreateTime())); ret = fieldEntry.encode(encodeIter, time); } // LOCAL TIME SEQUENCE NO fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("NEWS_LSN")); uInt.value(IDGenerator.getTimeSequence(item .getLocaltimeSeqNo())); ret = fieldEntry.encode(encodeIter, uInt); // Local TIME fieldEntry.dataType(DataTypes.TIME); fieldEntry.fieldId(FIDList.getFidId("NEWS_LT")); if (item.getLocaltime() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { time.value(simpleDateFormat.format(item.getLocaltime())); ret = fieldEntry.encode(encodeIter, time); } // TAKE TIME fieldEntry.dataType(DataTypes.TIME); fieldEntry.fieldId(FIDList.getFidId("NEWS_RT")); if (item.getRevisionTime() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item // .getRevisionTime()).getTimeInMillis()); // ret = fieldEntry.encode(_encodeIter, date); time.value(simpleDateFormat.format(item.getRevisionTime())); ret = fieldEntry.encode(encodeIter, time); } // TEASER fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("HDLN_TES")); if (teaser == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(teaser); ret = fieldEntry.encode(encodeIter, rmtes); } // TAKE NUMBER fieldEntry.dataType(DataTypes.UINT); fieldEntry.fieldId(FIDList.getFidId("NEWS_TN")); uInt.value(item.getTakeNo()); ret = fieldEntry.encode(encodeIter, uInt); // HEADLINE PE fieldEntry.clear(); fieldEntry.dataType(DataTypes.ARRAY); fieldEntry.fieldId(FIDList.getFidId("HDLN_PE")); ret = fieldEntry.encodeInit(encodeIter, 0); if (item.getHeadlinePE() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { array.primitiveType(DataTypes.UINT); ret = array.encodeInit(encodeIter); for (int pe : item.getHeadlinePE()) { uInt.value((long) pe); arryEntry.clear(); ret = arryEntry.encode(encodeIter, uInt); } array.encodeComplete(encodeIter, true); ret = fieldEntry.encodeComplete(encodeIter, true); } // DOCUMENT LINK fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("LONG_WADRS")); if (item.getDocLink() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { rmtes.data(item.getDocLink()); ret = fieldEntry.encode(encodeIter, rmtes); } // STORY DATE fieldEntry.dataType(DataTypes.DATE); fieldEntry.fieldId(FIDList.getFidId("NEWS_CD")); if (item.getFirstCreateTime() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item // .getFirstCreateTime()).getTimeInMillis()); date.value(simpleDateFormatDate.format(item.getFirstCreateTime())); ret = fieldEntry.encode(encodeIter, date); } // LOCAL DATE fieldEntry.dataType(DataTypes.DATE); fieldEntry.fieldId(FIDList.getFidId("NEWS_LD")); if (item.getLocaltime() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item.getLocaltime()).getTimeInMillis()); date.value(simpleDateFormatDate.format(item.getLocaltime())); ret = fieldEntry.encode(encodeIter, date); } // TAKE DATE fieldEntry.dataType(DataTypes.DATE); fieldEntry.fieldId(FIDList.getFidId("NEWS_RD")); if (item.getRevisionTime() == null) { ret = fieldEntry.encodeBlank(encodeIter); } else { // date.value(DateTimeUtil.getCalendar(item // .getRevisionTime()).getTimeInMillis()); date.value(simpleDateFormatDate.format(item.getRevisionTime())); ret = fieldEntry.encode(encodeIter, date); } // NEWS ANALYTIC ITEM if (hasAnalyticData) { if (analytic == null || analytic.getRicMap() == null || analytic.getRicMap().size() == 0) { ret = fieldEntry.encodeBlank(encodeIter); } else { // to do // encodeNewsAnalyticsNoDataDefinitions(encoder, analytic); } } // TOP NEWS CODE fieldEntry.dataType(DataTypes.RMTES_STRING); fieldEntry.fieldId(FIDList.getFidId("TOPNEWSCDE")); if (SnapshotHandler.isEnableTopnews()) { if (item.getN2kTopNewsInfo() != null) { Map> infoMap = item.getN2kTopNewsInfo() .getInfoMap(); StringBuilder sb = new StringBuilder(); for (String key : infoMap.keySet()) { if (sb.length() > 0) { sb.append(" "); } sb.append(key); } rmtes.data(sb.toString()); ret = fieldEntry.encode(encodeIter, rmtes); } else { ret = fieldEntry.encodeBlank(encodeIter); } } ret = fieldList.encodeComplete(encodeIter, true); ret = seriesEntry.encodeComplete(encodeIter, true); } ret = series.encodeComplete(encodeIter, true); return 0; }