private void persistNewsData(NodeList titles, NodeList links, NodeList descriptions) { // Persists news data feed. // Also clears out previously persisted news feed data PersistenceManager pm = PMF.get().getPersistenceManager(); javax.jdo.Query query = pm.newQuery(NewsItem.class); Long res = query.deletePersistentAll(); System.out.println("Datastore deleted " + res + "records"); pm = PMF.get().getPersistenceManager(); try { for (int i = 1; i < titles.getLength(); i++) { NewsItem ni = new NewsItem(); ni.setTitle(titles.item(i).getTextContent()); ni.setLink(links.item(i).getTextContent()); if (descriptions.item(i) != null) { ni.setDescription(new Text(descriptions.item(i).getTextContent())); } pm.makePersistent(ni); } } finally { pm.close(); } }
@Override public Document asDocument(NewsItem newsItem) { Document doc = new Document(); doc.add(new IntField(ITEM_ID, newsItem.itemID(), Field.Store.YES)); doc.add(new StringFieldWithTermVectors(YEAR, String.valueOf(newsItem.date().getYear()))); doc.add(new StringFieldWithTermVectors(MONTH, String.valueOf(newsItem.date().getMonth()))); doc.add(new StringFieldWithTermVectors(DAY, String.valueOf(newsItem.date().getDay()))); doc.add(new TextFieldWithTermVectors(TITLE, newsItem.title())); doc.add(new TextFieldWithTermVectors(HEADLINE, newsItem.headline())); doc.add(new TextFieldWithTermVectors(DATELINE, newsItem.dateline())); doc.add(new TextFieldWithTermVectors(TEXT, newsItem.text())); for (Map.Entry<String, String> entry : newsItem.codes().entries()) { doc.add(new StringFieldWithTermVectors(entry.getKey(), entry.getValue())); } for (Map.Entry<String, String> entry : newsItem.dcs().entrySet()) { doc.add(new StringFieldWithTermVectors(entry.getKey(), entry.getValue())); } return doc; }
@Override public View getView(int position, View convertView, ViewGroup parent) { View itemView = convertView; if (itemView == null) itemView = getActivity().getLayoutInflater().inflate(R.layout.textcar, parent, false); CNews currentNews = NewsItem.get(position); ((TextView) itemView.findViewById(R.id.News_txtTitle)).setText(currentNews.getNTitle()); ((TextView) itemView.findViewById(R.id.News_txtdate)) .setText(currentNews.getNStartDate() + "~" + currentNews.getNEndDate()); return itemView; }
// Involves populating data into the item through holder @Override public void onBindViewHolder(NewsItemAdapter.ViewHolder viewHolder, int position) { // Get the data model based on position final NewsItem item = nItems.get(position); // Set item views based on the data model TextView headLine = viewHolder.headLine; headLine.setText(item.getHeadLine()); ImageView thumbnail = viewHolder.thumbnail; Glide.with(context).load("http://nytimes.com/" + item.getImageUrl()).into(thumbnail); viewHolder.itemView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, BrowserActivity.class); intent.putExtra("url", item.getNewsUrl()); context.startActivity(intent); } }); }
private NewsItem parseInfo(Element item) { NewsItem tempItem = new NewsItem(); tempItem.setTitle(item.getElementsByTagName("title").item(0).getTextContent()); tempItem.setLink(item.getElementsByTagName("link").item(0).getTextContent()); try { tempItem.setPubDate( new SimpleDateFormat("EEE, dd MMM yyyy HH:mm z") .parse( item.getElementsByTagName("pubDate") .item(0) .getTextContent() .replaceAll("\\p{Cntrl}", ""))); } catch (ParseException e) { System.out.println("NewsFeed: parseInfo Error parsing date-> " + e.getLocalizedMessage()); e.printStackTrace(); } String tmpDesc = item.getElementsByTagName("description").item(0).getTextContent(); int imgStartIndex = tmpDesc.indexOf("<img"); System.out.println("Start of img tag: " + imgStartIndex); if (imgStartIndex != -1) { int imgStopIndex = tmpDesc.indexOf("/>", imgStartIndex); System.out.println("Sto of img tag: " + imgStopIndex); String imageTag = tmpDesc.substring(imgStartIndex + 5, imgStopIndex - 1); tmpDesc = tmpDesc.substring(imgStopIndex + 2); imgStartIndex = imageTag.indexOf("src=\""); imgStopIndex = imageTag.indexOf("\" ", imgStartIndex); String imageSrc = imageTag.substring(imgStartIndex + 5, imgStopIndex); System.out.println("Image Link: " + imageSrc); tempItem.setImage(imageSrc); } tempItem.setDescription(tmpDesc); return tempItem; }
protected void paint(Graphics g) { g.setColor(TITLE_COLOR); Font titleFont = Utils.getFontBold(FONT_SIZE); g.setFont(titleFont); int textWidht = Display.getWidth() - TEXT_ANCHOR - PADDING_RIGHT; if (title == null) { title = TextUtils.wrapText(newsItem.getTitle(), textWidht, titleFont); } int yOff = 0; for (int i = 0; i < title.size(); i++) { if (title.size() > 2 && i == 1) { g.drawText( title.elementAt(i).toString() + "...", TEXT_ANCHOR, PADDING_TOP + i * titleFont.getHeight()); yOff += g.getFont().getHeight(); break; } else { g.drawText( title.elementAt(i).toString(), TEXT_ANCHOR, PADDING_TOP + i * titleFont.getHeight()); yOff += g.getFont().getHeight(); } } Font textFont = Utils.getFont(FONT_SIZE); g.setColor(PRETEXT_COLOR); g.setFont(textFont); if (text == null) { text = TextUtils.wrapText(newsItem.getBody(), textWidht, textFont); } int titleHeight = PADDING_TOP + title.size() * titleFont.getHeight(); int contentHeight = getPreferredHeight() - (PADDING_TOP); for (int i = 0; i < text.size(); i++) { if (yOff + g.getFont().getHeight() >= getPreferredHeight() - 2 * PADDING_TOP) { g.drawText( (String) text.elementAt(i) + "...", TEXT_ANCHOR, titleHeight + i * textFont.getHeight()); } else { g.drawText((String) text.elementAt(i), TEXT_ANCHOR, titleHeight + i * textFont.getHeight()); } yOff += g.getFont().getHeight(); if (yOff >= getPreferredHeight() - 2 * PADDING_TOP) { break; } } if (newsImage != null) { try { g.drawBitmap( PADDING_LEFT, PADDING_TOP, newsImage.getWidth(), newsImage.getHeight(), newsImage, 0, 0); } catch (Exception e) { drawDummyPhoto(g); } } else { drawDummyPhoto(g); } }