aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/profile/types/PrimitiveFieldType.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/profile/types/PrimitiveFieldType.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/profile/types/PrimitiveFieldType.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/types/PrimitiveFieldType.java b/container-search/src/main/java/com/yahoo/search/query/profile/types/PrimitiveFieldType.java
new file mode 100644
index 00000000000..76b3f78ac2f
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/search/query/profile/types/PrimitiveFieldType.java
@@ -0,0 +1,86 @@
+// 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.types;
+
+import com.yahoo.search.query.profile.QueryProfileRegistry;
+import com.yahoo.search.query.profile.compiled.CompiledQueryProfileRegistry;
+
+import static com.yahoo.text.Lowercase.toLowerCase;
+
+/**
+ * Represents a query field type which is a primitive - String, Integer, Float, Double or Long.
+ *
+ * @author bratseth
+ */
+@SuppressWarnings("rawtypes")
+public class PrimitiveFieldType extends FieldType {
+
+ private Class primitiveClass;
+
+ PrimitiveFieldType(Class primitiveClass) {
+ this.primitiveClass=primitiveClass;
+ }
+
+ public @Override Class getValueClass() { return primitiveClass; }
+
+ public @Override String stringValue() {
+ return toLowerCase(primitiveClass.getSimpleName());
+ }
+
+ public @Override String toString() { return "field type " + stringValue(); }
+
+ public @Override String toInstanceDescription() {
+ return toLowerCase(primitiveClass.getSimpleName());
+ }
+
+ @Override
+ public Object convertFrom(Object object, CompiledQueryProfileRegistry registry) {
+ return convertFrom(object, (QueryProfileRegistry)null);
+ }
+
+ public @Override Object convertFrom(Object object, QueryProfileRegistry registry) {
+ if (primitiveClass == object.getClass()) return object;
+
+ if (object.getClass() == String.class) return convertFromString((String)object);
+ if (object instanceof Number) return convertFromNumber((Number)object);
+
+ return null;
+ }
+
+ private Object convertFromString(String string) {
+ try {
+ if (primitiveClass==Integer.class) return Integer.valueOf(string);
+ if (primitiveClass==Double.class) return Double.valueOf(string);
+ if (primitiveClass==Float.class) return Float.valueOf(string);
+ if (primitiveClass==Long.class) return Long.valueOf(string);
+ if (primitiveClass==Boolean.class) return Boolean.valueOf(string);
+ }
+ catch (NumberFormatException e) {
+ return null; // Handled in caller
+ }
+ throw new RuntimeException("Programming error");
+ }
+
+ private Object convertFromNumber(Number number) {
+ if (primitiveClass==Integer.class) return number.intValue();
+ if (primitiveClass==Double.class) return number.doubleValue();
+ if (primitiveClass==Float.class) return number.floatValue();
+ if (primitiveClass==Long.class) return number.longValue();
+ if (primitiveClass==String.class) return String.valueOf(number);
+ throw new RuntimeException("Programming error: Input type is " + number.getClass() +
+ " primitiveClass is " + primitiveClass);
+ }
+
+ @Override
+ public int hashCode() {
+ return primitiveClass.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) return true;
+ if ( ! (o instanceof PrimitiveFieldType)) return false;
+ PrimitiveFieldType other = (PrimitiveFieldType)o;
+ return other.primitiveClass.equals(this.primitiveClass);
+ }
+
+}