aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/profile/AllTypesQueryProfileVisitor.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/profile/AllTypesQueryProfileVisitor.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/profile/AllTypesQueryProfileVisitor.java51
1 files changed, 51 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/AllTypesQueryProfileVisitor.java b/container-search/src/main/java/com/yahoo/search/query/profile/AllTypesQueryProfileVisitor.java
new file mode 100644
index 00000000000..fb9638a958b
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/query/profile/AllTypesQueryProfileVisitor.java
@@ -0,0 +1,51 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.search.query.profile;
+
+import com.yahoo.processing.request.CompoundName;
+import com.yahoo.search.query.profile.types.FieldDescription;
+import com.yahoo.search.query.profile.types.QueryProfileFieldType;
+import com.yahoo.search.query.profile.types.QueryProfileType;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author <a href="mailto:bratseth@yahoo-inc.com">Jon Bratseth</a>
+ */
+final class AllTypesQueryProfileVisitor extends PrefixQueryProfileVisitor {
+
+ /** A map of query profile types */
+ private Map<CompoundName, QueryProfileType> types = new HashMap<>();
+
+ public AllTypesQueryProfileVisitor(CompoundName prefix) {
+ super(prefix);
+ }
+
+ @Override
+ public void onValue(String name, Object value, DimensionBinding binding, QueryProfile owner) {}
+
+
+ @Override
+ public void onQueryProfileInsidePrefix(QueryProfile profile, DimensionBinding binding, QueryProfile owner) {
+ if (profile.getType() != null)
+ addReachableTypes(currentPrefix, profile.getType());
+ }
+
+ private void addReachableTypes(CompoundName name, QueryProfileType type) {
+ types.put(name, type);
+ for (FieldDescription fieldDescription : type.fields().values()) {
+ if ( ! (fieldDescription.getType() instanceof QueryProfileFieldType)) continue;
+ QueryProfileFieldType fieldType = (QueryProfileFieldType)fieldDescription.getType();
+ if (fieldType.getQueryProfileType() !=null) {
+ addReachableTypes(name.append(fieldDescription.getName()), fieldType.getQueryProfileType());
+ }
+ }
+ }
+
+ /** Returns the values resulting from this visiting */
+ public Map<CompoundName, QueryProfileType> getResult() { return types; }
+
+ /** Returns false - we are not done until we have seen all */
+ public boolean isDone() { return false; }
+
+}