Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(490)

Side by Side Diff: java/org/chromium/distiller/SchemaOrgParserAccessor.java

Issue 1705123002: Add support for Schema.org/Recipe Base URL: https://github.com/chromium/dom-distiller.git@master
Patch Set: wychen's comments addressed Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.distiller; 5 package org.chromium.distiller;
6 6
7 import org.chromium.distiller.proto.DomDistillerProtos.TimingInfo; 7 import org.chromium.distiller.proto.DomDistillerProtos.TimingInfo;
8 8
9 import com.google.gwt.dom.client.Element; 9 import com.google.gwt.dom.client.Element;
10 10
11 import java.util.ArrayList; 11 import java.util.ArrayList;
12 import java.util.Collections; 12 import java.util.Collections;
13 import java.util.Comparator; 13 import java.util.Comparator;
14 import java.util.List; 14 import java.util.List;
15 15
16 /** 16 /**
17 * This class instantiates SchemaOrgParser and implements MarkupParser.Accessor interface to provide 17 * This class instantiates SchemaOrgParser and implements MarkupParser.Accessor interface to provide
18 * access to properties that SchemaOrgParser has parsed. 18 * access to properties that SchemaOrgParser has parsed.
19 */ 19 */
20 public class SchemaOrgParserAccessor implements MarkupParser.Accessor { 20 public class SchemaOrgParserAccessor implements MarkupParser.Accessor {
21 21
22 private static List<SchemaOrgParser.Type> supportedTypes;
wychen 2016/07/24 23:06:34 I suspect this still causes some slowness. Would l
22 private SchemaOrgParser mParser; 23 private SchemaOrgParser mParser;
23 private final Element mRoot; 24 private final Element mRoot;
24 private final TimingInfo mTimingInfo; 25 private final TimingInfo mTimingInfo;
26 private static final String ENGLISH_LANGUAGE = "en";
25 27
26 /** 28 /**
27 * The object that instantiates SchemaOrgParser and implements its MarkupPar ser.Accessor 29 * The object that instantiates SchemaOrgParser and implements its MarkupPar ser.Accessor
28 * interface. 30 * interface.
29 */ 31 */
30 public SchemaOrgParserAccessor(Element root) { 32 public SchemaOrgParserAccessor(Element root) {
31 this(root, (TimingInfo) null); 33 this(root, (TimingInfo) null);
32 } 34 }
33 35
34 public SchemaOrgParserAccessor(Element root, TimingInfo timingInfo) { 36 public SchemaOrgParserAccessor(Element root, TimingInfo timingInfo) {
35 mRoot = root; 37 mRoot = root;
36 mTimingInfo = timingInfo; 38 mTimingInfo = timingInfo;
37 } 39 }
38 40
41 static {
42 supportedTypes = new ArrayList<>();
43 supportedTypes.add(SchemaOrgParser.Type.RECIPE);
44 }
45
39 private void init() { 46 private void init() {
40 if (mParser == null) { 47 if (mParser == null) {
41 mParser = new SchemaOrgParser(mRoot, mTimingInfo); 48 mParser = new SchemaOrgParser(mRoot, mTimingInfo);
42 } 49 }
43 } 50 }
44 51
45 @Override 52 @Override
46 public String getTitle() { 53 public String getTitle() {
47 init(); 54 init();
48 String title = ""; 55 String title = "";
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 List<SchemaOrgParser.ArticleItem> articles = mParser.getArticleItems(); 184 List<SchemaOrgParser.ArticleItem> articles = mParser.getArticleItems();
178 return articles.isEmpty() ? null : articles.get(0).getArticle(); 185 return articles.isEmpty() ? null : articles.get(0).getArticle();
179 } 186 }
180 187
181 @Override 188 @Override
182 public boolean optOut() { 189 public boolean optOut() {
183 return false; 190 return false;
184 } 191 }
185 192
186 /** 193 /**
194 * Get schema.org parsed content.
195 *
196 * Content is generated when a main entity is identified or
197 * has only one entity item parsed and it is supported
198 *
199 * @return HTML output from the supported item.
200 */
201 @Override
202 public String getStructuredData() {
203 String output = "";
204 if (DomUtil.getLanguage(mRoot).startsWith(ENGLISH_LANGUAGE)) {
205 init();
206 SchemaOrgParser.ThingItem entity = mParser.getMainEntity();
207 List<SchemaOrgParser.ThingItem> topLevelEntities =
208 mParser.getTopLevelEntities();
209 if (entity == null && topLevelEntities.size() == 1) {
210 entity = topLevelEntities.get(0);
211 }
212 if (entity != null && supportedTypes.contains(entity.getType())) {
213 output = entity.generateOutput();
214 }
215 }
216 return output;
217 }
218
219 /**
187 * Sort a list of {@link SchemaOrgParser.ArticleItem}s by their area 220 * Sort a list of {@link SchemaOrgParser.ArticleItem}s by their area
188 * in descending order. 221 * in descending order.
189 * @param articles List of {@link SchemaOrgParser.ArticleItem}s to 222 * @param articles List of {@link SchemaOrgParser.ArticleItem}s to
190 * be sorted. 223 * be sorted.
191 * @return The sorted list. 224 * @return The sorted list.
192 */ 225 */
193 private List<SchemaOrgParser.ArticleItem> sortArticlesByArea( 226 private List<SchemaOrgParser.ArticleItem> sortArticlesByArea(
194 List<SchemaOrgParser.ArticleItem> articles) { 227 List<SchemaOrgParser.ArticleItem> articles) {
195 List<SchemaOrgParser.ArticleItem> sortedArticles = 228 List<SchemaOrgParser.ArticleItem> sortedArticles =
196 new ArrayList<>(articles); 229 new ArrayList<>(articles);
197 Collections.sort(sortedArticles, 230 Collections.sort(sortedArticles,
198 new Comparator<SchemaOrgParser.ArticleItem>() { 231 new Comparator<SchemaOrgParser.ArticleItem>() {
199 @Override 232 @Override
200 public int compare(SchemaOrgParser.ArticleItem i1, 233 public int compare(SchemaOrgParser.ArticleItem i1,
201 SchemaOrgParser.ArticleItem i2) { 234 SchemaOrgParser.ArticleItem i2) {
202 int area1 = DomUtil.getArea(i1.getElement()); 235 int area1 = DomUtil.getArea(i1.getElement());
203 int area2 = DomUtil.getArea(i2.getElement()); 236 int area2 = DomUtil.getArea(i2.getElement());
204 if (area1 > area2) { 237 if (area1 > area2) {
205 return -1; 238 return -1;
206 } else if (area1 < area2) { 239 } else if (area1 < area2) {
207 return 1; 240 return 1;
208 } 241 }
209 return 0; 242 return 0;
210 } 243 }
211 }); 244 });
212 return sortedArticles; 245 return sortedArticles;
213 } 246 }
214 } 247 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698