aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/pagetemplates
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/pagetemplates')
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/PageTemplateSearcher.java72
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderMappingVisitor.java10
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderReferenceCreatingVisitor.java13
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/config/PageTemplateXMLReader.java62
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java10
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Resolution.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/pagetemplates/result/PageTemplatesXmlRenderer.java6
7 files changed, 91 insertions, 88 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/PageTemplateSearcher.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/PageTemplateSearcher.java
index 0ec04bf99de..2074fce19bd 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/PageTemplateSearcher.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/PageTemplateSearcher.java
@@ -2,9 +2,9 @@
package com.yahoo.search.pagetemplates;
import com.google.inject.Inject;
-import com.yahoo.component.ComponentId;
import com.yahoo.component.chain.dependencies.Provides;
import com.yahoo.component.provider.ComponentRegistry;
+import com.yahoo.processing.IllegalInputException;
import com.yahoo.search.Query;
import com.yahoo.search.Result;
import com.yahoo.search.Searcher;
@@ -13,8 +13,6 @@ import com.yahoo.search.pagetemplates.config.PageTemplateConfigurer;
import com.yahoo.search.pagetemplates.engine.Organizer;
import com.yahoo.search.pagetemplates.engine.Resolution;
import com.yahoo.search.pagetemplates.engine.Resolver;
-import com.yahoo.search.pagetemplates.engine.resolvers.DeterministicResolver;
-import com.yahoo.search.pagetemplates.engine.resolvers.RandomResolver;
import com.yahoo.search.pagetemplates.engine.resolvers.ResolverRegistry;
import com.yahoo.search.pagetemplates.model.Choice;
import com.yahoo.search.pagetemplates.model.PageElement;
@@ -23,7 +21,13 @@ import com.yahoo.processing.request.CompoundName;
import com.yahoo.search.result.ErrorMessage;
import com.yahoo.search.searchchain.Execution;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.Map;
/**
* Enables page optimization templates.
@@ -107,7 +111,7 @@ public class PageTemplateSearcher extends Searcher {
@Override
public Result search(Query query, Execution execution) {
// Pre execution: Choose template and sources
- List<PageElement> pages=selectPageTemplates(query);
+ List<PageElement> pages = selectPageTemplates(query);
if (pages.isEmpty()) return execution.search(query); // Bypass if no page template chosen
addSources(pages,query);
@@ -115,12 +119,12 @@ public class PageTemplateSearcher extends Searcher {
query.properties().set(pagePageTemplateListName, pages);
// Execute
- Result result=execution.search(query);
+ Result result = execution.search(query);
// Post execution: Resolve choices and organize the result as dictated by the resolved template
- Choice pageTemplateChoice=Choice.createSingletons(pages);
- Resolution resolution=selectResolver(query).resolve(pageTemplateChoice,query,result);
- organizer.organize(pageTemplateChoice,resolution,result);
+ Choice pageTemplateChoice = Choice.createSingletons(pages);
+ Resolution resolution = selectResolver(query).resolve(pageTemplateChoice, query, result);
+ organizer.organize(pageTemplateChoice, resolution, result);
return result;
}
@@ -132,23 +136,23 @@ public class PageTemplateSearcher extends Searcher {
// Determine the list of page template ids
@SuppressWarnings("unchecked")
List<String> pageIds = (List<String>) query.properties().get(pageIdListName);
- if (pageIds==null) {
- String pageIdString=query.properties().getString(pageIdName,"").trim();
- if (pageIdString.length()>0)
- pageIds=Arrays.asList(pageIdString.split(" "));
+ if (pageIds == null) {
+ String pageIdString = query.properties().getString(pageIdName,"").trim();
+ if (pageIdString.length() > 0)
+ pageIds = Arrays.asList(pageIdString.split(" "));
}
// If none set, just return the default or null if none
- if (pageIds==null) {
+ if (pageIds == null) {
PageElement defaultPage=templateRegistry.getComponent("default");
- return (defaultPage==null ? Collections.<PageElement>emptyList() : Collections.singletonList(defaultPage));
+ return (defaultPage == null ? Collections.<PageElement>emptyList() : Collections.singletonList(defaultPage));
}
// Resolve the id list to page templates
- List<PageElement> pages=new ArrayList<>(pageIds.size());
+ List<PageElement> pages = new ArrayList<>(pageIds.size());
for (String pageId : pageIds) {
- PageTemplate page=templateRegistry.getComponent(pageId);
- if (page==null)
+ PageTemplate page = templateRegistry.getComponent(pageId);
+ if (page == null)
query.errors().add(ErrorMessage.createInvalidQueryParameter("Could not resolve requested page template '" +
pageId + "'"));
else
@@ -159,17 +163,17 @@ public class PageTemplateSearcher extends Searcher {
}
private Resolver selectResolver(Query query) {
- String resolverId=query.properties().getString(pageResolverName);
- if (resolverId==null) return resolverRegistry.defaultResolver();
- Resolver resolver=resolverRegistry.getComponent(resolverId);
- if (resolver==null) throw new IllegalArgumentException("No page template resolver '" + resolverId + "'");
+ String resolverId = query.properties().getString(pageResolverName);
+ if (resolverId == null) return resolverRegistry.defaultResolver();
+ Resolver resolver = resolverRegistry.getComponent(resolverId);
+ if (resolver == null) throw new IllegalInputException("No page template resolver '" + resolverId + "'");
return resolver;
}
/** Sets query.getModel().getSources() to the right value and add source parameters specified in templates */
- private void addSources(List<PageElement> pages,Query query) {
+ private void addSources(List<PageElement> pages, Query query) {
// Determine all wanted sources
- Set<Source> pageSources=new HashSet<>();
+ Set<Source> pageSources = new HashSet<>();
for (PageElement page : pages)
pageSources.addAll(((PageTemplate)page).getSources());
@@ -177,34 +181,34 @@ public class PageTemplateSearcher extends Searcher {
if (query.getModel().getSources().size() > 0) {
// Add properties if the source list is set explicitly, but do not modify otherwise
- addParametersForIncludedSources(pageSources,query);
+ addParametersForIncludedSources(pageSources, query);
return;
}
if (pageSources.contains(Source.any)) {
- IntentModel intentModel=IntentModel.getFrom(query);
- if (intentModel!=null) {
+ IntentModel intentModel = IntentModel.getFrom(query);
+ if (intentModel != null) {
query.getModel().getSources().addAll(intentModel.getSourceNames());
- addPageTemplateSources(pageSources,query);
+ addPageTemplateSources(pageSources, query);
}
// otherwise leave empty to search all
}
else { // Let the page templates decide
- addPageTemplateSources(pageSources,query);
+ addPageTemplateSources(pageSources, query);
}
}
private void addPageTemplateSources(Set<Source> pageSources,Query query) {
for (Source pageSource : pageSources) {
- if (pageSource==Source.any) continue;
+ if (pageSource == Source.any) continue;
query.getModel().getSources().add(pageSource.getName());
addParameters(pageSource,query);
}
}
- private void addParametersForIncludedSources(Set<Source> sources,Query query) {
+ private void addParametersForIncludedSources(Set<Source> sources, Query query) {
for (Source source : sources) {
- if (source.parameters().size()>0 && query.getModel().getSources().contains(source.getName()))
+ if (source.parameters().size() > 0 && query.getModel().getSources().contains(source.getName()))
addParameters(source,query);
}
}
@@ -220,8 +224,8 @@ public class PageTemplateSearcher extends Searcher {
* is not supported. (Same parameter sets in multiple templates is supported,
* and will be just one entry in this set).
*/
- private void addErrorIfSameSourceMultipleTimes(List<PageElement> pages,Set<Source> sources,Query query) {
- Set<String> sourceNames=new HashSet<>();
+ private void addErrorIfSameSourceMultipleTimes(List<PageElement> pages, Set<Source> sources, Query query) {
+ Set<String> sourceNames = new HashSet<>();
for (Source source : sources) {
if (sourceNames.contains(source.getName()))
query.errors().add(ErrorMessage.createInvalidQueryParameter(
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderMappingVisitor.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderMappingVisitor.java
index c29e9615fe8..c37ea5667c0 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderMappingVisitor.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderMappingVisitor.java
@@ -19,16 +19,16 @@ import java.util.Map;
*/
class PlaceholderMappingVisitor extends PageTemplateVisitor {
- private Map<String, MapChoice> placeholderIdToChoice=new LinkedHashMap<>();
+ private final Map<String, MapChoice> placeholderIdToChoice = new LinkedHashMap<>();
@Override
public void visit(MapChoice mapChoice) {
- List<String> placeholderIds=mapChoice.placeholderIds();
+ List<String> placeholderIds = mapChoice.placeholderIds();
for (String placeholderId : placeholderIds) {
- MapChoice existingChoice=placeholderIdToChoice.put(placeholderId,mapChoice);
- if (existingChoice!=null)
+ MapChoice existingChoice = placeholderIdToChoice.put(placeholderId,mapChoice);
+ if (existingChoice != null)
throw new IllegalArgumentException("placeholder id '" + placeholderId + "' is referenced by both " +
- mapChoice + " and " + existingChoice + ": Only one reference is allowed");
+ mapChoice + " and " + existingChoice + ": Only one reference is allowed");
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderReferenceCreatingVisitor.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderReferenceCreatingVisitor.java
index e8870f4f11a..5ef507201cb 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderReferenceCreatingVisitor.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/PlaceholderReferenceCreatingVisitor.java
@@ -1,9 +1,10 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.pagetemplates;
-import com.yahoo.search.pagetemplates.model.*;
+import com.yahoo.search.pagetemplates.model.MapChoice;
+import com.yahoo.search.pagetemplates.model.PageTemplateVisitor;
+import com.yahoo.search.pagetemplates.model.Placeholder;
-import java.util.HashMap;
import java.util.Map;
/**
@@ -14,16 +15,16 @@ import java.util.Map;
*/
class PlaceholderReferenceCreatingVisitor extends PageTemplateVisitor {
- private Map<String, MapChoice> placeholderIdToChoice=new HashMap<>();
+ private final Map<String, MapChoice> placeholderIdToChoice;
public PlaceholderReferenceCreatingVisitor(Map<String, MapChoice> placeholderIdToChoice) {
- this.placeholderIdToChoice=placeholderIdToChoice;
+ this.placeholderIdToChoice = placeholderIdToChoice;
}
@Override
public void visit(Placeholder placeholder) {
- MapChoice choice=placeholderIdToChoice.get(placeholder.getId());
- if (choice==null)
+ MapChoice choice = placeholderIdToChoice.get(placeholder.getId());
+ if (choice == null)
throw new IllegalArgumentException(placeholder + " is not referenced by any choice");
placeholder.setValueContainer(choice);
}
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/config/PageTemplateXMLReader.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/config/PageTemplateXMLReader.java
index beffd12b22a..0359432a819 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/config/PageTemplateXMLReader.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/config/PageTemplateXMLReader.java
@@ -38,18 +38,18 @@ public class PageTemplateXMLReader {
* @throws RuntimeException if <code>directory</code> is not a readable directory, or if there is some error in the XML
*/
public PageTemplateRegistry read(String directory) {
- List<NamedReader> pageReaders=new ArrayList<>();
+ List<NamedReader> pageReaders = new ArrayList<>();
try {
- File dir=new File(directory);
- if ( !dir.isDirectory() ) throw new IllegalArgumentException("Could not read page templates: '" +
- directory + "' is not a valid directory.");
+ File dir = new File(directory);
+ if ( ! dir.isDirectory() ) throw new IllegalArgumentException("Could not read page templates: '" +
+ directory + "' is not a valid directory.");
for (File file : sortFiles(dir)) {
if ( ! file.getName().endsWith(".xml")) continue;
- pageReaders.add(new NamedReader(file.getName(),new FileReader(file)));
+ pageReaders.add(new NamedReader(file.getName(), new FileReader(file)));
}
- return read(pageReaders,true);
+ return read(pageReaders, true);
}
catch (IOException e) {
throw new IllegalArgumentException("Could not read page templates from '" + directory + "'",e);
@@ -67,18 +67,18 @@ public class PageTemplateXMLReader {
* @throws RuntimeException if <code>fileName</code> is not a readable file, or if there is some error in the XML
*/
public PageTemplate readFile(String fileName) {
- NamedReader pageReader=null;
+ NamedReader pageReader = null;
try {
- File file=new File(fileName);
- pageReader=new NamedReader(fileName,new FileReader(file));
- String firstName=file.getName().substring(0,file.getName().length()-4);
- return read(Collections.singletonList(pageReader),true).getComponent(firstName);
+ File file = new File(fileName);
+ pageReader = new NamedReader(fileName,new FileReader(file));
+ String firstName = file.getName().substring(0, file.getName().length() - 4);
+ return read(Collections.singletonList(pageReader), true).getComponent(firstName);
}
catch (IOException e) {
- throw new IllegalArgumentException("Could not read the page template '" + fileName + "'",e);
+ throw new IllegalArgumentException("Could not read the page template '" + fileName + "'", e);
}
finally {
- if (pageReader!=null)
+ if (pageReader != null)
try { pageReader.close(); } catch (IOException e) { }
}
}
@@ -130,11 +130,11 @@ public class PageTemplateXMLReader {
}
/** Throws an exception if the name is not corresponding to the id */
- private void validateFileName(final String actualName,ComponentId id,String artifactName) {
- String expectedCanonicalFileName=id.toFileName();
- String fileName=new File(actualName).getName();
- fileName=stripXmlEnding(fileName);
- String canonicalFileName=ComponentId.fromFileName(fileName).toFileName();
+ private void validateFileName(String actualName, ComponentId id, String artifactName) {
+ String expectedCanonicalFileName = id.toFileName();
+ String fileName = new File(actualName).getName();
+ fileName = stripXmlEnding(fileName);
+ String canonicalFileName = ComponentId.fromFileName(fileName).toFileName();
if ( ! canonicalFileName.equals(expectedCanonicalFileName))
throw new IllegalArgumentException("The file name of " + artifactName + " '" + id +
"' must be '" + expectedCanonicalFileName + ".xml' but was '" + actualName + "'");
@@ -144,14 +144,14 @@ public class PageTemplateXMLReader {
if (!fileName.endsWith(".xml"))
throw new IllegalArgumentException("'" + fileName + "' should have a .xml ending");
else
- return fileName.substring(0,fileName.length()-4);
+ return fileName.substring(0, fileName.length() - 4);
}
private void readPages() {
for (Map.Entry<ComponentId,Element> pageElement : pageElementsByPageId.entrySet()) {
try {
- PageTemplate page=registry.getComponent(pageElement.getValue().getAttribute("id"));
- readPageContent(pageElement.getValue(),page);
+ PageTemplate page = registry.getComponent(pageElement.getValue().getAttribute("id"));
+ readPageContent(pageElement.getValue(), page);
}
catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Could not read page template '" + pageElement.getKey() + "'",e);
@@ -159,16 +159,16 @@ public class PageTemplateXMLReader {
}
}
- private void readPageContent(Element pageElement,PageTemplate page) {
+ private void readPageContent(Element pageElement, PageTemplate page) {
if (page.isFrozen()) return; // Already read
- Section rootSection=new Section(page.getId().toString());
- readSection(pageElement,rootSection);
+ Section rootSection = new Section(page.getId().toString());
+ readSection(pageElement, rootSection);
page.setSection(rootSection);
page.freeze();
}
/** Fills a section with attributes and sub-elements from a "section" or "page" element */
- private Section readSection(Element sectionElement,Section section) {
+ private Section readSection(Element sectionElement, Section section) {
section.setLayout(Layout.fromString(sectionElement.getAttribute("layout")));
section.setRegion(sectionElement.getAttribute("region"));
section.setOrder(Sorting.fromString(sectionElement.getAttribute("order")));
@@ -198,10 +198,10 @@ public class PageTemplateXMLReader {
/** Reads the direct descendant elements of an include */
private List<PageElement> readInclude(Element element) {
- PageTemplate included=registry.getComponent(element.getAttribute("idref"));
- if (included==null)
+ PageTemplate included = registry.getComponent(element.getAttribute("idref"));
+ if (included == null)
throw new IllegalArgumentException("Could not find page template '" + element.getAttribute("idref"));
- readPageContent(pageElementsByPageId.get(included.getId()),included);
+ readPageContent(pageElementsByPageId.get(included.getId()), included);
return included.getSection().elements(Section.class);
}
@@ -223,9 +223,9 @@ public class PageTemplateXMLReader {
}
private List<Source> readSourceAttribute(Element sectionElement) {
- List<Source> sources=new ArrayList<>();
- String sourceAttributeString=sectionElement.getAttribute("source");
- if (sourceAttributeString!=null) {
+ List<Source> sources = new ArrayList<>();
+ String sourceAttributeString = sectionElement.getAttribute("source");
+ if (sourceAttributeString != null) {
for (String sourceName : sourceAttributeString.split(" ")) {
if (sourceName.isEmpty()) continue;
if ("*".equals(sourceName))
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java
index 3e6e82a5584..051103cba06 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Organizer.java
@@ -9,9 +9,7 @@ import com.yahoo.search.query.Sorting;
import com.yahoo.search.result.*;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
/**
* Reorganizes and prunes a result as prescribed by a resolved template.
@@ -29,13 +27,13 @@ public class Organizer {
* @param result the result to organize
*/
public void organize(Choice templateChoice, Resolution resolution, Result result) {
- PageTemplate template=(PageTemplate)templateChoice.get(resolution.getResolution(templateChoice)).get(0);
- SectionHitGroup sectionGroup =toGroup(template.getSection(),resolution,result);
- ErrorHit errors=result.hits().getErrorHit();
+ PageTemplate template = (PageTemplate)templateChoice.get(resolution.getResolution(templateChoice)).get(0);
+ SectionHitGroup sectionGroup = toGroup(template.getSection(), resolution, result);
+ ErrorHit errors = result.hits().getErrorHit();
// transfer state from existing hit
sectionGroup.setQuery(result.hits().getQuery());
- if (errors!=null && errors instanceof DefaultErrorHit)
+ if (errors instanceof DefaultErrorHit)
sectionGroup.add((DefaultErrorHit)errors);
result.hits().forEachField((name, value) -> sectionGroup.setField(name, value));
result.setHits(sectionGroup);
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Resolution.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Resolution.java
index e0a3821e10c..f36ebe56e21 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Resolution.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/engine/Resolution.java
@@ -40,10 +40,10 @@ public class Resolution {
* been resolved in this
*/
public int getResolution(Choice choice) {
- if (choice.alternatives().size()==1) return 0;
+ if (choice.alternatives().size() == 1) return 0;
if (choice.isEmpty()) throw new IllegalArgumentException("Cannot return a resolution of empty " + choice);
- Integer resolution=choiceResolutions.get(choice);
- if (resolution==null) throw new IllegalArgumentException(this + " has no resolution of " + choice);
+ Integer resolution = choiceResolutions.get(choice);
+ if (resolution == null) throw new IllegalArgumentException(this + " has no resolution of " + choice);
return resolution;
}
diff --git a/container-search/src/main/java/com/yahoo/search/pagetemplates/result/PageTemplatesXmlRenderer.java b/container-search/src/main/java/com/yahoo/search/pagetemplates/result/PageTemplatesXmlRenderer.java
index f2e2e1b034d..47914792da8 100644
--- a/container-search/src/main/java/com/yahoo/search/pagetemplates/result/PageTemplatesXmlRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/pagetemplates/result/PageTemplatesXmlRenderer.java
@@ -271,10 +271,10 @@ public class PageTemplatesXmlRenderer extends AsynchronousSectionedRenderer<Resu
private Result getResult() {
try {
- return (Result) getResponse();
+ return (Result)getResponse();
} catch (ClassCastException e) {
- throw new IllegalArgumentException("PageTemplatesXmlRenderer attempted used outside a search context, got a " +
- getResponse().getClass().getName());
+ throw new IllegalStateException("PageTemplatesXmlRenderer attempted used outside a search context, got a " +
+ getResponse().getClass().getName());
}
}