Browse Source

fix #1205 virtual host support for labels

Shinsuke Sugaya 8 years ago
parent
commit
4a92032c9f
26 changed files with 457 additions and 36 deletions
  1. 3 0
      src/main/config/es/fess_config.json
  2. 1 1
      src/main/java/org/codelibs/fess/app/web/admin/design/AdminDesignAction.java
  3. 3 0
      src/main/java/org/codelibs/fess/app/web/admin/labeltype/CreateForm.java
  4. 0 1
      src/main/java/org/codelibs/fess/app/web/admin/searchlist/EditForm.java
  5. 1 0
      src/main/java/org/codelibs/fess/es/config/bsbhv/BsLabelTypeBhv.java
  6. 17 0
      src/main/java/org/codelibs/fess/es/config/bsentity/BsLabelType.java
  7. 9 0
      src/main/java/org/codelibs/fess/es/config/bsentity/dbmeta/LabelTypeDbm.java
  8. 4 0
      src/main/java/org/codelibs/fess/es/config/cbean/bs/BsLabelTypeCB.java
  9. 131 0
      src/main/java/org/codelibs/fess/es/config/cbean/ca/bs/BsLabelTypeCA.java
  10. 222 0
      src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsLabelTypeCQ.java
  11. 23 2
      src/main/java/org/codelibs/fess/helper/LabelTypeHelper.java
  12. 1 1
      src/main/java/org/codelibs/fess/helper/SystemHelper.java
  13. 3 9
      src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java
  14. 14 7
      src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java
  15. 3 0
      src/main/resources/fess_indices/.fess_config/label_type.json
  16. 1 3
      src/main/resources/fess_label.properties
  17. 1 3
      src/main/resources/fess_label_en.properties
  18. 1 3
      src/main/resources/fess_label_ja.properties
  19. 1 1
      src/main/webapp/WEB-INF/view/admin/keymatch/admin_keymatch_details.jsp
  20. 1 1
      src/main/webapp/WEB-INF/view/admin/keymatch/admin_keymatch_edit.jsp
  21. 5 0
      src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_details.jsp
  22. 8 0
      src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_edit.jsp
  23. 1 1
      src/main/webapp/WEB-INF/view/admin/relatedcontent/admin_relatedcontent_details.jsp
  24. 1 1
      src/main/webapp/WEB-INF/view/admin/relatedcontent/admin_relatedcontent_edit.jsp
  25. 1 1
      src/main/webapp/WEB-INF/view/admin/relatedquery/admin_relatedquery_details.jsp
  26. 1 1
      src/main/webapp/WEB-INF/view/admin/relatedquery/admin_relatedquery_edit.jsp

+ 3 - 0
src/main/config/es/fess_config.json

@@ -834,6 +834,9 @@
           "permissions" : {
             "type": "keyword"
           },
+          "virtualHost" : {
+            "type": "keyword"
+          },
           "sortOrder" : {
             "type" : "integer"
           },

+ 1 - 1
src/main/java/org/codelibs/fess/app/web/admin/design/AdminDesignAction.java

@@ -85,7 +85,7 @@ public class AdminDesignAction extends FessAdminAction {
         for (final Pair<String, String> p : systemHelper.getDesignJspFileNames()) {
             jspItems.add(new Pair<>(":" + p.getFirst(), "/" + p.getSecond()));
         }
-        for (String key : fessConfig.getVirtualHostKeys()) {
+        for (String key : fessConfig.getVirtualHostPaths()) {
             if (StringUtil.isBlank(key)) {
                 key = "/";
             }

+ 3 - 0
src/main/java/org/codelibs/fess/app/web/admin/labeltype/CreateForm.java

@@ -54,6 +54,9 @@ public class CreateForm {
     @CustomSize(maxKey = "form.admin.max.input.size")
     public String permissions;
 
+    @Size(max = 1000)
+    public String virtualHost;
+
     @Min(value = 0)
     @Max(value = 2147483647)
     @ValidateTypeFailure

+ 0 - 1
src/main/java/org/codelibs/fess/app/web/admin/searchlist/EditForm.java

@@ -15,7 +15,6 @@
  */
 package org.codelibs.fess.app.web.admin.searchlist;
 
-import org.lastaflute.web.validation.Required;
 import org.lastaflute.web.validation.theme.conversion.ValidateTypeFailure;
 
 /**

+ 1 - 0
src/main/java/org/codelibs/fess/es/config/bsbhv/BsLabelTypeBhv.java

@@ -79,6 +79,7 @@ public abstract class BsLabelTypeBhv extends EsAbstractBehavior<LabelType, Label
             result.setIncludedPaths(DfTypeUtil.toString(source.get("includedPaths")));
             result.setName(DfTypeUtil.toString(source.get("name")));
             result.setPermissions(toStringArray(source.get("permissions")));
+            result.setVirtualHost(DfTypeUtil.toString(source.get("virtualHost")));
             result.setSortOrder(DfTypeUtil.toInteger(source.get("sortOrder")));
             result.setUpdatedBy(DfTypeUtil.toString(source.get("updatedBy")));
             result.setUpdatedTime(DfTypeUtil.toLong(source.get("updatedTime")));

+ 17 - 0
src/main/java/org/codelibs/fess/es/config/bsentity/BsLabelType.java

@@ -55,6 +55,9 @@ public class BsLabelType extends EsAbstractEntity {
     /** permissions */
     protected String[] permissions;
 
+    /** virtualHost */
+    protected String virtualHost;
+
     /** sortOrder */
     protected Integer sortOrder;
 
@@ -106,6 +109,9 @@ public class BsLabelType extends EsAbstractEntity {
         if (permissions != null) {
             addFieldToSource(sourceMap, "permissions", permissions);
         }
+        if (virtualHost != null) {
+            addFieldToSource(sourceMap, "virtualHost", virtualHost);
+        }
         if (sortOrder != null) {
             addFieldToSource(sourceMap, "sortOrder", sortOrder);
         }
@@ -137,6 +143,7 @@ public class BsLabelType extends EsAbstractEntity {
         sb.append(dm).append(includedPaths);
         sb.append(dm).append(name);
         sb.append(dm).append(permissions);
+        sb.append(dm).append(virtualHost);
         sb.append(dm).append(sortOrder);
         sb.append(dm).append(updatedBy);
         sb.append(dm).append(updatedTime);
@@ -211,6 +218,16 @@ public class BsLabelType extends EsAbstractEntity {
         this.permissions = value;
     }
 
+    public String getVirtualHost() {
+        checkSpecifiedProperty("virtualHost");
+        return convertEmptyToNull(virtualHost);
+    }
+
+    public void setVirtualHost(String value) {
+        registerModifiedProperty("virtualHost");
+        this.virtualHost = value;
+    }
+
     public Integer getSortOrder() {
         checkSpecifiedProperty("sortOrder");
         return sortOrder;

+ 9 - 0
src/main/java/org/codelibs/fess/es/config/bsentity/dbmeta/LabelTypeDbm.java

@@ -90,6 +90,8 @@ public class LabelTypeDbm extends AbstractDBMeta {
         setupEpg(_epgMap, et -> ((LabelType) et).getName(), (et, vl) -> ((LabelType) et).setName(DfTypeUtil.toString(vl)), "name");
         setupEpg(_epgMap, et -> ((LabelType) et).getPermissions(), (et, vl) -> ((LabelType) et).setPermissions((String[]) vl),
                 "permissions");
+        setupEpg(_epgMap, et -> ((LabelType) et).getVirtualHost(), (et, vl) -> ((LabelType) et).setVirtualHost(DfTypeUtil.toString(vl)),
+                "virtualHost");
         setupEpg(_epgMap, et -> ((LabelType) et).getSortOrder(), (et, vl) -> ((LabelType) et).setSortOrder(DfTypeUtil.toInteger(vl)),
                 "sortOrder");
         setupEpg(_epgMap, et -> ((LabelType) et).getUpdatedBy(), (et, vl) -> ((LabelType) et).setUpdatedBy(DfTypeUtil.toString(vl)),
@@ -145,6 +147,8 @@ public class LabelTypeDbm extends AbstractDBMeta {
             0, null, false, null, null, null, null, null, false);
     protected final ColumnInfo _columnPermissions = cci("permissions", "permissions", null, null, String[].class, "permissions", null,
             false, false, false, "keyword", 0, 0, null, false, null, null, null, null, null, false);
+    protected final ColumnInfo _columnVirtualHost = cci("virtualHost", "virtualHost", null, null, String.class, "virtualHost", null, false,
+            false, false, "keyword", 0, 0, null, false, null, null, null, null, null, false);
     protected final ColumnInfo _columnSortOrder = cci("sortOrder", "sortOrder", null, null, Integer.class, "sortOrder", null, false, false,
             false, "Integer", 0, 0, null, false, null, null, null, null, null, false);
     protected final ColumnInfo _columnUpdatedBy = cci("updatedBy", "updatedBy", null, null, String.class, "updatedBy", null, false, false,
@@ -178,6 +182,10 @@ public class LabelTypeDbm extends AbstractDBMeta {
         return _columnPermissions;
     }
 
+    public ColumnInfo columnVirtualHost() {
+        return _columnVirtualHost;
+    }
+
     public ColumnInfo columnSortOrder() {
         return _columnSortOrder;
     }
@@ -202,6 +210,7 @@ public class LabelTypeDbm extends AbstractDBMeta {
         ls.add(columnIncludedPaths());
         ls.add(columnName());
         ls.add(columnPermissions());
+        ls.add(columnVirtualHost());
         ls.add(columnSortOrder());
         ls.add(columnUpdatedBy());
         ls.add(columnUpdatedTime());

+ 4 - 0
src/main/java/org/codelibs/fess/es/config/cbean/bs/BsLabelTypeCB.java

@@ -200,6 +200,10 @@ public class BsLabelTypeCB extends EsAbstractConditionBean {
             doColumn("permissions");
         }
 
+        public void columnVirtualHost() {
+            doColumn("virtualHost");
+        }
+
         public void columnSortOrder() {
             doColumn("sortOrder");
         }

+ 131 - 0
src/main/java/org/codelibs/fess/es/config/cbean/ca/bs/BsLabelTypeCA.java

@@ -983,6 +983,137 @@ public abstract class BsLabelTypeCA extends EsAbstractConditionAggregation {
         }
     }
 
+    public void setVirtualHost_Terms() {
+        setVirtualHost_Terms(null);
+    }
+
+    public void setVirtualHost_Terms(ConditionOptionCall<TermsAggregationBuilder> opLambda) {
+        setVirtualHost_Terms("virtualHost", opLambda, null);
+    }
+
+    public void setVirtualHost_Terms(ConditionOptionCall<TermsAggregationBuilder> opLambda, OperatorCall<BsLabelTypeCA> aggsLambda) {
+        setVirtualHost_Terms("virtualHost", opLambda, aggsLambda);
+    }
+
+    public void setVirtualHost_Terms(String name, ConditionOptionCall<TermsAggregationBuilder> opLambda,
+            OperatorCall<BsLabelTypeCA> aggsLambda) {
+        TermsAggregationBuilder builder = regTermsA(name, "virtualHost");
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+        if (aggsLambda != null) {
+            LabelTypeCA ca = new LabelTypeCA();
+            aggsLambda.callback(ca);
+            ca.getAggregationBuilderList().forEach(builder::subAggregation);
+        }
+    }
+
+    public void setVirtualHost_SignificantTerms() {
+        setVirtualHost_SignificantTerms(null);
+    }
+
+    public void setVirtualHost_SignificantTerms(ConditionOptionCall<SignificantTermsAggregationBuilder> opLambda) {
+        setVirtualHost_SignificantTerms("virtualHost", opLambda, null);
+    }
+
+    public void setVirtualHost_SignificantTerms(ConditionOptionCall<SignificantTermsAggregationBuilder> opLambda,
+            OperatorCall<BsLabelTypeCA> aggsLambda) {
+        setVirtualHost_SignificantTerms("virtualHost", opLambda, aggsLambda);
+    }
+
+    public void setVirtualHost_SignificantTerms(String name, ConditionOptionCall<SignificantTermsAggregationBuilder> opLambda,
+            OperatorCall<BsLabelTypeCA> aggsLambda) {
+        SignificantTermsAggregationBuilder builder = regSignificantTermsA(name, "virtualHost");
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+        if (aggsLambda != null) {
+            LabelTypeCA ca = new LabelTypeCA();
+            aggsLambda.callback(ca);
+            ca.getAggregationBuilderList().forEach(builder::subAggregation);
+        }
+    }
+
+    public void setVirtualHost_IpRange() {
+        setVirtualHost_IpRange(null);
+    }
+
+    public void setVirtualHost_IpRange(ConditionOptionCall<IpRangeAggregationBuilder> opLambda) {
+        setVirtualHost_IpRange("virtualHost", opLambda, null);
+    }
+
+    public void setVirtualHost_IpRange(ConditionOptionCall<IpRangeAggregationBuilder> opLambda, OperatorCall<BsLabelTypeCA> aggsLambda) {
+        setVirtualHost_IpRange("virtualHost", opLambda, aggsLambda);
+    }
+
+    public void setVirtualHost_IpRange(String name, ConditionOptionCall<IpRangeAggregationBuilder> opLambda,
+            OperatorCall<BsLabelTypeCA> aggsLambda) {
+        IpRangeAggregationBuilder builder = regIpRangeA(name, "virtualHost");
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+        if (aggsLambda != null) {
+            LabelTypeCA ca = new LabelTypeCA();
+            aggsLambda.callback(ca);
+            ca.getAggregationBuilderList().forEach(builder::subAggregation);
+        }
+    }
+
+    public void setVirtualHost_Count() {
+        setVirtualHost_Count(null);
+    }
+
+    public void setVirtualHost_Count(ConditionOptionCall<ValueCountAggregationBuilder> opLambda) {
+        setVirtualHost_Count("virtualHost", opLambda);
+    }
+
+    public void setVirtualHost_Count(String name, ConditionOptionCall<ValueCountAggregationBuilder> opLambda) {
+        ValueCountAggregationBuilder builder = regCountA(name, "virtualHost");
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_Cardinality() {
+        setVirtualHost_Cardinality(null);
+    }
+
+    public void setVirtualHost_Cardinality(ConditionOptionCall<CardinalityAggregationBuilder> opLambda) {
+        setVirtualHost_Cardinality("virtualHost", opLambda);
+    }
+
+    public void setVirtualHost_Cardinality(String name, ConditionOptionCall<CardinalityAggregationBuilder> opLambda) {
+        CardinalityAggregationBuilder builder = regCardinalityA(name, "virtualHost");
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_Missing() {
+        setVirtualHost_Missing(null);
+    }
+
+    public void setVirtualHost_Missing(ConditionOptionCall<MissingAggregationBuilder> opLambda) {
+        setVirtualHost_Missing("virtualHost", opLambda, null);
+    }
+
+    public void setVirtualHost_Missing(ConditionOptionCall<MissingAggregationBuilder> opLambda, OperatorCall<BsLabelTypeCA> aggsLambda) {
+        setVirtualHost_Missing("virtualHost", opLambda, aggsLambda);
+    }
+
+    public void setVirtualHost_Missing(String name, ConditionOptionCall<MissingAggregationBuilder> opLambda,
+            OperatorCall<BsLabelTypeCA> aggsLambda) {
+        MissingAggregationBuilder builder = regMissingA(name, "virtualHost");
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+        if (aggsLambda != null) {
+            LabelTypeCA ca = new LabelTypeCA();
+            aggsLambda.callback(ca);
+            ca.getAggregationBuilderList().forEach(builder::subAggregation);
+        }
+    }
+
     public void setSortOrder_Avg() {
         setSortOrder_Avg(null);
     }

+ 222 - 0
src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsLabelTypeCQ.java

@@ -1473,6 +1473,228 @@ public abstract class BsLabelTypeCQ extends EsAbstractConditionQuery {
         return this;
     }
 
+    public void setVirtualHost_Equal(String virtualHost) {
+        setVirtualHost_Term(virtualHost, null);
+    }
+
+    public void setVirtualHost_Equal(String virtualHost, ConditionOptionCall<TermQueryBuilder> opLambda) {
+        setVirtualHost_Term(virtualHost, opLambda);
+    }
+
+    public void setVirtualHost_Term(String virtualHost) {
+        setVirtualHost_Term(virtualHost, null);
+    }
+
+    public void setVirtualHost_Term(String virtualHost, ConditionOptionCall<TermQueryBuilder> opLambda) {
+        TermQueryBuilder builder = regTermQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_NotEqual(String virtualHost) {
+        setVirtualHost_NotTerm(virtualHost, null);
+    }
+
+    public void setVirtualHost_NotTerm(String virtualHost) {
+        setVirtualHost_NotTerm(virtualHost, null);
+    }
+
+    public void setVirtualHost_NotEqual(String virtualHost, ConditionOptionCall<BoolQueryBuilder> opLambda) {
+        setVirtualHost_NotTerm(virtualHost, opLambda);
+    }
+
+    public void setVirtualHost_NotTerm(String virtualHost, ConditionOptionCall<BoolQueryBuilder> opLambda) {
+        not(not -> not.setVirtualHost_Term(virtualHost), opLambda);
+    }
+
+    public void setVirtualHost_Terms(Collection<String> virtualHostList) {
+        setVirtualHost_Terms(virtualHostList, null);
+    }
+
+    public void setVirtualHost_Terms(Collection<String> virtualHostList, ConditionOptionCall<TermsQueryBuilder> opLambda) {
+        TermsQueryBuilder builder = regTermsQ("virtualHost", virtualHostList);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_InScope(Collection<String> virtualHostList) {
+        setVirtualHost_Terms(virtualHostList, null);
+    }
+
+    public void setVirtualHost_InScope(Collection<String> virtualHostList, ConditionOptionCall<TermsQueryBuilder> opLambda) {
+        setVirtualHost_Terms(virtualHostList, opLambda);
+    }
+
+    public void setVirtualHost_Match(String virtualHost) {
+        setVirtualHost_Match(virtualHost, null);
+    }
+
+    public void setVirtualHost_Match(String virtualHost, ConditionOptionCall<MatchQueryBuilder> opLambda) {
+        MatchQueryBuilder builder = regMatchQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_MatchPhrase(String virtualHost) {
+        setVirtualHost_MatchPhrase(virtualHost, null);
+    }
+
+    public void setVirtualHost_MatchPhrase(String virtualHost, ConditionOptionCall<MatchPhraseQueryBuilder> opLambda) {
+        MatchPhraseQueryBuilder builder = regMatchPhraseQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_MatchPhrasePrefix(String virtualHost) {
+        setVirtualHost_MatchPhrasePrefix(virtualHost, null);
+    }
+
+    public void setVirtualHost_MatchPhrasePrefix(String virtualHost, ConditionOptionCall<MatchPhrasePrefixQueryBuilder> opLambda) {
+        MatchPhrasePrefixQueryBuilder builder = regMatchPhrasePrefixQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_Fuzzy(String virtualHost) {
+        setVirtualHost_Fuzzy(virtualHost, null);
+    }
+
+    public void setVirtualHost_Fuzzy(String virtualHost, ConditionOptionCall<MatchQueryBuilder> opLambda) {
+        MatchQueryBuilder builder = regFuzzyQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_Prefix(String virtualHost) {
+        setVirtualHost_Prefix(virtualHost, null);
+    }
+
+    public void setVirtualHost_Prefix(String virtualHost, ConditionOptionCall<PrefixQueryBuilder> opLambda) {
+        PrefixQueryBuilder builder = regPrefixQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_Wildcard(String virtualHost) {
+        setVirtualHost_Wildcard(virtualHost, null);
+    }
+
+    public void setVirtualHost_Wildcard(String virtualHost, ConditionOptionCall<WildcardQueryBuilder> opLambda) {
+        WildcardQueryBuilder builder = regWildcardQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_Regexp(String virtualHost) {
+        setVirtualHost_Regexp(virtualHost, null);
+    }
+
+    public void setVirtualHost_Regexp(String virtualHost, ConditionOptionCall<RegexpQueryBuilder> opLambda) {
+        RegexpQueryBuilder builder = regRegexpQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_SpanTerm(String virtualHost) {
+        setVirtualHost_SpanTerm("virtualHost", null);
+    }
+
+    public void setVirtualHost_SpanTerm(String virtualHost, ConditionOptionCall<SpanTermQueryBuilder> opLambda) {
+        SpanTermQueryBuilder builder = regSpanTermQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_GreaterThan(String virtualHost) {
+        setVirtualHost_GreaterThan(virtualHost, null);
+    }
+
+    public void setVirtualHost_GreaterThan(String virtualHost, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        final Object _value = virtualHost;
+        RangeQueryBuilder builder = regRangeQ("virtualHost", ConditionKey.CK_GREATER_THAN, _value);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_LessThan(String virtualHost) {
+        setVirtualHost_LessThan(virtualHost, null);
+    }
+
+    public void setVirtualHost_LessThan(String virtualHost, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        final Object _value = virtualHost;
+        RangeQueryBuilder builder = regRangeQ("virtualHost", ConditionKey.CK_LESS_THAN, _value);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_GreaterEqual(String virtualHost) {
+        setVirtualHost_GreaterEqual(virtualHost, null);
+    }
+
+    public void setVirtualHost_GreaterEqual(String virtualHost, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        final Object _value = virtualHost;
+        RangeQueryBuilder builder = regRangeQ("virtualHost", ConditionKey.CK_GREATER_EQUAL, _value);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_LessEqual(String virtualHost) {
+        setVirtualHost_LessEqual(virtualHost, null);
+    }
+
+    public void setVirtualHost_LessEqual(String virtualHost, ConditionOptionCall<RangeQueryBuilder> opLambda) {
+        final Object _value = virtualHost;
+        RangeQueryBuilder builder = regRangeQ("virtualHost", ConditionKey.CK_LESS_EQUAL, _value);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_Exists() {
+        setVirtualHost_Exists(null);
+    }
+
+    public void setVirtualHost_Exists(ConditionOptionCall<ExistsQueryBuilder> opLambda) {
+        ExistsQueryBuilder builder = regExistsQ("virtualHost");
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public void setVirtualHost_CommonTerms(String virtualHost) {
+        setVirtualHost_CommonTerms(virtualHost, null);
+    }
+
+    public void setVirtualHost_CommonTerms(String virtualHost, ConditionOptionCall<CommonTermsQueryBuilder> opLambda) {
+        CommonTermsQueryBuilder builder = regCommonTermsQ("virtualHost", virtualHost);
+        if (opLambda != null) {
+            opLambda.callback(builder);
+        }
+    }
+
+    public BsLabelTypeCQ addOrderBy_VirtualHost_Asc() {
+        regOBA("virtualHost");
+        return this;
+    }
+
+    public BsLabelTypeCQ addOrderBy_VirtualHost_Desc() {
+        regOBD("virtualHost");
+        return this;
+    }
+
     public void setSortOrder_Equal(Integer sortOrder) {
         setSortOrder_Term(sortOrder, null);
     }

+ 23 - 2
src/main/java/org/codelibs/fess/helper/LabelTypeHelper.java

@@ -35,6 +35,7 @@ import org.codelibs.fess.Constants;
 import org.codelibs.fess.app.service.LabelTypeService;
 import org.codelibs.fess.entity.SearchRequestParams.SearchRequestType;
 import org.codelibs.fess.es.config.exentity.LabelType;
+import org.codelibs.fess.mylasta.direction.FessConfig;
 import org.codelibs.fess.util.ComponentUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -66,6 +67,7 @@ public class LabelTypeHelper {
             item.setLabel(labelType.getName());
             item.setValue(labelType.getValue());
             item.setPermissions(labelType.getPermissions());
+            item.setVirtualHost(labelType.getVirtualHost());
             itemList.add(item);
         }
         labelTypeItemList = itemList;
@@ -76,10 +78,19 @@ public class LabelTypeHelper {
             init();
         }
 
+        final String virtualHostKey = ComponentUtil.getFessConfig().getVirtualHostKey();
+        final List<LabelTypeItem> labelList;
+        if (StringUtil.isBlank(virtualHostKey)) {
+            labelList = labelTypeItemList;
+        } else {
+            labelList =
+                    labelTypeItemList.stream().filter(item -> virtualHostKey.equals(item.getVirtualHost())).collect(Collectors.toList());
+        }
+
         final List<Map<String, String>> itemList = new ArrayList<>();
         final Set<String> roleSet = roleQueryHelper.build(searchRequestType);
         if (roleSet.isEmpty()) {
-            for (final LabelTypeItem item : labelTypeItemList) {
+            for (final LabelTypeItem item : labelList) {
                 if (item.getPermissions().length == 0) {
                     final Map<String, String> map = new HashMap<>(2);
                     map.put(Constants.ITEM_LABEL, item.getLabel());
@@ -88,7 +99,7 @@ public class LabelTypeHelper {
                 }
             }
         } else {
-            for (final LabelTypeItem item : labelTypeItemList) {
+            for (final LabelTypeItem item : labelList) {
                 final Set<String> permissions = stream(item.getPermissions()).get(stream -> stream.collect(Collectors.toSet()));
                 for (final String roleValue : roleSet) {
                     if (permissions.contains(roleValue)) {
@@ -148,6 +159,8 @@ public class LabelTypeHelper {
 
         private String[] permissions;
 
+        private String virtualHost;
+
         public String getLabel() {
             return label;
         }
@@ -171,6 +184,14 @@ public class LabelTypeHelper {
         public void setPermissions(final String[] permissions) {
             this.permissions = permissions;
         }
+
+        public String getVirtualHost() {
+            return virtualHost;
+        }
+
+        public void setVirtualHost(String virtualHost) {
+            this.virtualHost = virtualHost;
+        }
     }
 
     public static class LabelTypePattern {

+ 1 - 1
src/main/java/org/codelibs/fess/helper/SystemHelper.java

@@ -221,7 +221,7 @@ public class SystemHelper {
 
     public void refreshDesignJspFiles() {
         final ServletContext servletContext = LaServletContextUtil.getServletContext();
-        stream(ComponentUtil.getFessConfig().getVirtualHostKeys()).of(
+        stream(ComponentUtil.getFessConfig().getVirtualHostPaths()).of(
                 stream -> stream.filter(s -> s != null && !s.equals("/")).forEach(
                         key -> {
                             designJspFileNameMap

+ 3 - 9
src/main/java/org/codelibs/fess/mylasta/action/FessLabels.java

@@ -1055,6 +1055,9 @@ public class FessLabels extends UserMessages {
     /** The key of the message: Virtual Hosts */
     public static final String LABELS_virtual_hosts = "{labels.virtual_hosts}";
 
+    /** The key of the message: Virtual Host */
+    public static final String LABELS_virtual_host = "{labels.virtual_host}";
+
     /** The key of the message: Label */
     public static final String LABELS_label_type = "{labels.label_type}";
 
@@ -1463,9 +1466,6 @@ public class FessLabels extends UserMessages {
     /** The key of the message: Key Match */
     public static final String LABELS_key_match_title_details = "{labels.key_match_title_details}";
 
-    /** The key of the message: Virtual Host */
-    public static final String LABELS_key_match_virtual_host = "{labels.key_match_virtual_host}";
-
     /** The key of the message: Page Design */
     public static final String LABELS_design_configuration = "{labels.design_configuration}";
 
@@ -2265,9 +2265,6 @@ public class FessLabels extends UserMessages {
     /** The key of the message: Related Content */
     public static final String LABELS_related_content_title_details = "{labels.related_content_title_details}";
 
-    /** The key of the message: Virtual Host */
-    public static final String LABELS_related_content_virtual_host = "{labels.related_content_virtual_host}";
-
     /** The key of the message: Related Query */
     public static final String LABELS_related_query_configuration = "{labels.related_query_configuration}";
 
@@ -2283,9 +2280,6 @@ public class FessLabels extends UserMessages {
     /** The key of the message: Related Query */
     public static final String LABELS_related_query_title_details = "{labels.related_query_title_details}";
 
-    /** The key of the message: Virtual Host */
-    public static final String LABELS_related_query_virtual_host = "{labels.related_query_virtual_host}";
-
     /** The key of the message: Create */
     public static final String LABELS_crud_button_create = "{labels.crud_button_create}";
 

+ 14 - 7
src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java

@@ -1598,7 +1598,10 @@ public interface FessProp {
     String getVirtualHostHeaders();
 
     public default HtmlNext getVirtualHostPath(final HtmlNext page) {
-        return processVirtualHost(s -> new HtmlNext(s + page.getRoutingPath()), page);
+        return processVirtualHost(s -> {
+            final String basePath = StringUtil.isBlank(s) ? StringUtil.EMPTY : "/" + s;
+            return new HtmlNext(basePath + page.getRoutingPath());
+        }, page);
     }
 
     public default String getVirtualHostKey() {
@@ -1634,6 +1637,10 @@ public interface FessProp {
         return stream(getVirtualHosts()).get(stream -> stream.map(h -> h.getValue3()).toArray(n -> new String[n]));
     }
 
+    public default String[] getVirtualHostPaths() {
+        return stream(getVirtualHosts()).get(stream -> stream.map(h -> "/" + h.getValue3()).toArray(n -> new String[n]));
+    }
+
     @SuppressWarnings("unchecked")
     public default Tuple3<String, String, String>[] getVirtualHosts() {
         Tuple3<String, String, String>[] hosts = (Tuple3<String, String, String>[]) propMap.get(VIRTUAL_HOST_HEADERS);
@@ -1644,10 +1651,10 @@ public interface FessProp {
                                     .map(s -> {
                                         final String[] v1 = s.split("=");
                                         if (v1.length == 2) {
-                                            final String[] v2 = v1[0].split(":");
+                                            final String[] v2 = v1[0].split(":", 2);
                                             if (v2.length == 2) {
-                                                return new Tuple3<>(v2[0].trim(), v2[0].trim(), "/"
-                                                        + v1[1].replaceAll("[^a-zA-Z0-9_]", StringUtil.EMPTY).trim());
+                                                return new Tuple3<>(v2[0].trim(), v2[1].trim(), v1[1].replaceAll("[^a-zA-Z0-9_]",
+                                                        StringUtil.EMPTY).trim());
                                             }
                                         }
                                         return null;
@@ -1656,9 +1663,9 @@ public interface FessProp {
                                         if (v == null) {
                                             return false;
                                         }
-                                        if ("/admin".equalsIgnoreCase(v.getValue3()) || "/common".equalsIgnoreCase(v.getValue3())
-                                                || "/error".equalsIgnoreCase(v.getValue3()) || "/login".equalsIgnoreCase(v.getValue3())
-                                                || "/profile".equalsIgnoreCase(v.getValue3())) {
+                                        if ("admin".equalsIgnoreCase(v.getValue3()) || "common".equalsIgnoreCase(v.getValue3())
+                                                || "error".equalsIgnoreCase(v.getValue3()) || "login".equalsIgnoreCase(v.getValue3())
+                                                || "profile".equalsIgnoreCase(v.getValue3())) {
                                             return false;
                                         }
                                         return true;

+ 3 - 0
src/main/resources/fess_indices/.fess_config/label_type.json

@@ -22,6 +22,9 @@
       "permissions": {
         "type": "keyword"
       },
+      "virtualHost": {
+        "type": "keyword"
+      },
       "sortOrder": {
         "type": "integer"
       },

+ 1 - 3
src/main/resources/fess_label.properties

@@ -342,6 +342,7 @@ labels.interval_time=Interval time
 labels.millisec=ms
 labels.permissions=Permissions
 labels.virtual_hosts=Virtual Hosts
+labels.virtual_host=Virtual Host
 labels.label_type=Label
 labels.file_crawling_button_create=Create
 labels.file_crawling_button_create_job=Create new job
@@ -478,7 +479,6 @@ labels.key_match_size=Size
 labels.key_match_boost=Boost
 labels.key_match_urls=Urls
 labels.key_match_title_details=Key Match
-labels.key_match_virtual_host=Virtual Host
 labels.design_configuration=Page Design
 labels.design_title_file_upload=File Upload
 labels.design_title_file=File Manager
@@ -745,13 +745,11 @@ labels.related_content_content=Content
 labels.related_content_list_term=Term
 labels.related_content_term=Term
 labels.related_content_title_details=Related Content
-labels.related_content_virtual_host=Virtual Host
 labels.related_query_configuration=Related Query
 labels.related_query_list_term=Term
 labels.related_query_queries=Queries
 labels.related_query_term=Term
 labels.related_query_title_details=Related Query
-labels.related_query_virtual_host=Virtual Host
 labels.crud_button_create=Create
 labels.crud_button_update=Update
 labels.crud_button_delete=Delete

+ 1 - 3
src/main/resources/fess_label_en.properties

@@ -342,6 +342,7 @@ labels.interval_time=Interval time
 labels.millisec=ms
 labels.permissions=Permissions
 labels.virtual_hosts=Virtual Hosts
+labels.virtual_host=Virtual Host
 labels.label_type=Label
 labels.file_crawling_button_create=Create
 labels.file_crawling_button_create_job=Create new job
@@ -478,7 +479,6 @@ labels.key_match_size=Size
 labels.key_match_boost=Boost
 labels.key_match_urls=Urls
 labels.key_match_title_details=Key Match
-labels.key_match_virtual_host=Virtual Host
 labels.design_configuration=Page Design
 labels.design_title_file_upload=File Upload
 labels.design_title_file=File Manager
@@ -745,13 +745,11 @@ labels.related_content_content=Content
 labels.related_content_list_term=Term
 labels.related_content_term=Term
 labels.related_content_title_details=Related Content
-labels.related_content_virtual_host=Virtual Host
 labels.related_query_configuration=Related Query
 labels.related_query_list_term=Term
 labels.related_query_queries=Queries
 labels.related_query_term=Term
 labels.related_query_title_details=Related Query
-labels.related_query_virtual_host=Virtual Host
 labels.crud_button_create=Create
 labels.crud_button_update=Update
 labels.crud_button_delete=Delete

+ 1 - 3
src/main/resources/fess_label_ja.properties

@@ -335,6 +335,7 @@ labels.interval_time=\u9593\u9694
 labels.millisec=\u30df\u30ea\u79d2
 labels.permissions=\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3
 labels.virtual_hosts=\u4eee\u60f3\u30db\u30b9\u30c8
+labels.virtual_host=\u4eee\u60f3\u30db\u30b9\u30c8
 labels.label_type=\u30e9\u30d9\u30eb
 labels.file_crawling_button_create=\u4f5c\u6210
 labels.file_crawling_button_create_job=\u65b0\u3057\u3044\u30b8\u30e7\u30d6\u306e\u4f5c\u6210
@@ -471,7 +472,6 @@ labels.key_match_size=\u30b5\u30a4\u30ba
 labels.key_match_boost=\u30d6\u30fc\u30b9\u30c8\u5024
 labels.key_match_urls=URL
 labels.key_match_title_details=\u30ad\u30fc\u30de\u30c3\u30c1
-labels.key_match_virtual_host=\u4eee\u60f3\u30db\u30b9\u30c8
 labels.design_configuration=\u30da\u30fc\u30b8\u306e\u30c7\u30b6\u30a4\u30f3
 labels.design_title_file_upload=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb
 labels.design_title_file=\u30d5\u30a1\u30a4\u30eb\u30de\u30cd\u30fc\u30b8\u30e3\u30fc
@@ -740,13 +740,11 @@ labels.related_content_content=\u30b3\u30f3\u30c6\u30f3\u30c4
 labels.related_content_list_term=\u691c\u7d22\u8a9e
 labels.related_content_term=\u691c\u7d22\u8a9e
 labels.related_content_title_details=\u95a2\u9023\u30b3\u30f3\u30c6\u30f3\u30c4
-labels.related_content_virtual_host=\u4eee\u60f3\u30db\u30b9\u30c8
 labels.related_query_configuration=\u95a2\u9023\u30af\u30a8\u30ea\u30fc
 labels.related_query_list_term=\u691c\u7d22\u8a9e
 labels.related_query_queries=\u30af\u30a8\u30ea\u30fc
 labels.related_query_term=\u691c\u7d22\u8a9e
 labels.related_query_title_details=\u95a2\u9023\u30af\u30a8\u30ea\u30fc
-labels.related_query_virtual_host=\u4eee\u60f3\u30db\u30b9\u30c8
 labels.crud_button_create=\u4f5c\u6210
 labels.crud_button_update=\u66f4\u65b0
 labels.crud_button_delete=\u524a\u9664

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/keymatch/admin_keymatch_details.jsp

@@ -74,7 +74,7 @@
 											</tr>
 											<tr>
 												<th class="col-xs-2"><la:message
-														key="labels.key_match_virtual_host" /></th>
+														key="labels.virtual_host" /></th>
 												<td>${f:h(virtualHost)}<la:hidden property="virtualHost" /></td>
 											</tr>
 										</tbody>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/keymatch/admin_keymatch_edit.jsp

@@ -80,7 +80,7 @@
 									</div>
 									<div class="form-group">
 										<label for="virtualHost" class="col-sm-3 control-label"><la:message
-												key="labels.key_match_virtual_host" /></label>
+												key="labels.virtual_host" /></label>
 										<div class="col-sm-9">
 											<la:errors property="virtualHost" />
 											<la:text styleId="virtualHost" property="virtualHost" styleClass="form-control" />

+ 5 - 0
src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_details.jsp

@@ -73,6 +73,11 @@
 												<td>${f:br(f:h(permissions))}<la:hidden
 														property="permissions" /></td>
 											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message
+														key="labels.virtual_host" /></th>
+												<td>${f:h(virtualHost)}<la:hidden property="virtualHost" /></td>
+											</tr>
 											<tr>
 												<th><la:message key="labels.sortOrder" /></th>
 												<td>${f:h(sortOrder)}<la:hidden property="sortOrder" /></td>

+ 8 - 0
src/main/webapp/WEB-INF/view/admin/labeltype/admin_labeltype_edit.jsp

@@ -87,6 +87,14 @@
 												rows="5" />
 										</div>
 									</div>
+									<div class="form-group">
+										<label for="virtualHost" class="col-sm-3 control-label"><la:message
+												key="labels.virtual_host" /></label>
+										<div class="col-sm-9">
+											<la:errors property="virtualHost" />
+											<la:text styleId="virtualHost" property="virtualHost" styleClass="form-control" />
+										</div>
+									</div>
 									<div class="form-group">
 										<label for="sortOrder" class="col-sm-3 control-label"><la:message
 												key="labels.sortOrder" /></label>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/relatedcontent/admin_relatedcontent_details.jsp

@@ -61,7 +61,7 @@
 											</tr>
 											<tr>
 												<th class="col-xs-2"><la:message
-														key="labels.related_content_virtual_host" /></th>
+														key="labels.virtual_host" /></th>
 												<td>${f:h(virtualHost)}<la:hidden property="virtualHost" /></td>
 											</tr>
 										</tbody>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/relatedcontent/admin_relatedcontent_edit.jsp

@@ -62,7 +62,7 @@
 									</div>
 									<div class="form-group">
 										<label for="virtualHost" class="col-sm-3 control-label"><la:message
-												key="labels.related_query_virtual_host" /></label>
+												key="labels.virtual_host" /></label>
 										<div class="col-sm-9">
 											<la:errors property="virtualHost" />
 											<la:text styleId="virtualHost" property="virtualHost" styleClass="form-control" />

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/relatedquery/admin_relatedquery_details.jsp

@@ -61,7 +61,7 @@
 											</tr>
 											<tr>
 												<th class="col-xs-2"><la:message
-														key="labels.related_query_virtual_host" /></th>
+														key="labels.virtual_host" /></th>
 												<td>${f:h(virtualHost)}<la:hidden property="virtualHost" /></td>
 											</tr>
 										</tbody>

+ 1 - 1
src/main/webapp/WEB-INF/view/admin/relatedquery/admin_relatedquery_edit.jsp

@@ -62,7 +62,7 @@
 									</div>
 									<div class="form-group">
 										<label for="virtualHost" class="col-sm-3 control-label"><la:message
-												key="labels.related_query_virtual_host" /></label>
+												key="labels.virtual_host" /></label>
 										<div class="col-sm-9">
 											<la:errors property="virtualHost" />
 											<la:text styleId="virtualHost" property="virtualHost" styleClass="form-control" />