aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-06-15 23:09:44 +0200
commit72231250ed81e10d66bfe70701e64fa5fe50f712 (patch)
tree2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java
Publish
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java97
1 files changed, 97 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java
new file mode 100644
index 00000000000..5d8121b6ef8
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java
@@ -0,0 +1,97 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.application.validation.change.search;
+
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.document.Matching;
+import com.yahoo.searchdefinition.document.NormalizeLevel;
+import com.yahoo.searchdefinition.document.SDField;
+import com.yahoo.searchdefinition.document.Stemming;
+import com.yahoo.vespa.documentmodel.SummaryField;
+import com.yahoo.vespa.documentmodel.SummaryTransform;
+
+/**
+ * Class used to build a message describing the usual field changes causing changes in the indexing script.
+ * This message should be more descriptive for the end-user than just seeing the changed indexing script.
+ *
+ * @author <a href="mailto:geirst@yahoo-inc.com">Geir Storli</a>
+ * @since 2014-12-09
+ */
+public class IndexingScriptChangeMessageBuilder {
+
+ private final Search currentSearch;
+ private final SDField currentField;
+ private final Search nextSearch;
+ private final SDField nextField;
+
+ public IndexingScriptChangeMessageBuilder(Search currentSearch, SDField currentField,
+ Search nextSearch, SDField nextField) {
+ this.currentSearch = currentSearch;
+ this.currentField = currentField;
+ this.nextSearch = nextSearch;
+ this.nextField = nextField;
+ }
+
+ public void populate(ChangeMessageBuilder builder) {
+ checkIndexing(builder);
+ checkMatching(builder);
+ checkStemming(builder);
+ checkNormalizing(builder);
+ checkSummaryTransform(builder);
+ }
+
+ private void checkIndexing(ChangeMessageBuilder builder) {
+ if (currentField.doesIndexing() != nextField.doesIndexing()) {
+ String change = nextField.doesIndexing() ? "add" : "remove";
+ builder.addChange(change + " index aspect");
+ }
+ }
+
+ private void checkMatching(ChangeMessageBuilder builder) {
+ Matching currentMatching = currentField.getMatching();
+ Matching nextMatching = nextField.getMatching();
+ if (!currentMatching.equals(nextMatching)) {
+ builder.addChange("matching", toString(currentMatching), toString(nextMatching));
+ }
+ }
+
+ private void checkStemming(ChangeMessageBuilder builder) {
+ Stemming currentStemming = currentField.getStemming(currentSearch);
+ Stemming nextStemming = nextField.getStemming(nextSearch);
+ if (!currentStemming.equals(nextStemming)) {
+ builder.addChange("stemming", currentStemming.getName(), nextStemming.getName());
+ }
+ }
+
+ private void checkNormalizing(ChangeMessageBuilder builder) {
+ NormalizeLevel.Level currentLevel = currentField.getNormalizing().getLevel();
+ NormalizeLevel.Level nextLevel = nextField.getNormalizing().getLevel();
+ if (!currentLevel.equals(nextLevel)) {
+ builder.addChange("normalizing", currentLevel.toString(), nextLevel.toString());
+ }
+ }
+
+ private void checkSummaryTransform(ChangeMessageBuilder builder) {
+ for (SummaryField nextSummaryField : nextField.getSummaryFields()) {
+ String fieldName = nextSummaryField.getName();
+ SummaryField currentSummaryField = currentField.getSummaryField(fieldName);
+ if (currentSummaryField != null) {
+ SummaryTransform currentTransform = currentSummaryField.getTransform();
+ SummaryTransform nextTransform = nextSummaryField.getTransform();
+ if (!currentSummaryField.getTransform().equals(nextSummaryField.getTransform())) {
+ builder.addChange("summary field '" + fieldName + "' transform",
+ currentTransform.getName(), nextTransform.getName());
+ }
+ }
+ }
+ }
+
+ private static String toString(Matching matching) {
+ Matching.Type type = matching.getType();
+ String retval = type.getName();
+ if (type.equals(Matching.Type.GRAM)) {
+ retval += " (size " + matching.getGramSize() + ")";
+ }
+ return retval;
+ }
+
+}