diff options
Diffstat (limited to 'sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java')
-rw-r--r-- | sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java | 170 |
1 files changed, 105 insertions, 65 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java index 9b794a6f939..16171b74395 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java @@ -19,11 +19,8 @@ */ package org.sonar.server.rule2; -import org.elasticsearch.common.settings.ImmutableSettings; -import org.elasticsearch.common.settings.Settings; +import org.apache.commons.beanutils.BeanUtils; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.index.query.QueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.api.rule.RuleKey; @@ -31,16 +28,18 @@ import org.sonar.core.cluster.WorkQueue; import org.sonar.core.profiling.Profiling; import org.sonar.core.rule.RuleConstants; import org.sonar.core.rule.RuleDao; +import org.sonar.core.rule.RuleDto; import org.sonar.server.es.ESNode; import org.sonar.server.search.BaseIndex; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; import java.util.Map; +import java.util.Map.Entry; import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; - -public class RuleIndex extends BaseIndex<RuleKey> { +public class RuleIndex extends BaseIndex<RuleKey, RuleDto> { private static final Logger LOG = LoggerFactory.getLogger(RuleIndex.class); @@ -58,37 +57,32 @@ public class RuleIndex extends BaseIndex<RuleKey> { return RuleConstants.ES_TYPE; } - protected QueryBuilder getKeyQuery(RuleKey key){ - return QueryBuilders.boolQuery() - .must(QueryBuilders.termQuery("repositoryKey", key.repository())) - .must(QueryBuilders.termQuery("ruleKey", key.rule())); + protected String getKeyValue(RuleKey key) { + return key.toString(); } @Override - protected Settings getIndexSettings() { + protected XContentBuilder getIndexSettings() { try { - return ImmutableSettings.builder() - .loadFromSource( - jsonBuilder().startObject() - .startObject("index") - .field("number_of_replicas", 0) - .field("number_of_shards",4) - .startObject("mapper") - .field("dynamic", true) - .endObject() - .startObject("analysis") - .startObject("analyzer") - .startObject("path_analyzer") - .field("type", "custom") - .field("tokenizer", "path_hierarchy") - .endObject() - .endObject() - .endObject() - .endObject().toString()) - .build(); + return jsonBuilder().startObject() + .startObject("index") + .field("number_of_replicas", 0) + .field("number_of_shards", 3) + .startObject("mapper") + .field("dynamic", true) + .endObject() + .startObject("analysis") + .startObject("analyzer") + .startObject("path_analyzer") + .field("type", "custom") + .field("tokenizer", "path_hierarchy") + .endObject() + .endObject() + .endObject() + .endObject().endObject(); } catch (IOException e) { - LOG.error("Could not create index settings for {}",this.getIndexName()); - return ImmutableSettings.builder().build(); + LOG.error("Could not create index settings for {}", this.getIndexName()); + return null; } } @@ -96,45 +90,91 @@ public class RuleIndex extends BaseIndex<RuleKey> { protected XContentBuilder getMapping() { try { return jsonBuilder().startObject() - .startObject(this.getType()).endObject() - .endObject(); - -// return jsonBuilder().startObject() -// .startObject("issue") -// .startObject("properties") -// .startObject("component.path") -// .field("type", "string") -// .field("index_analyzer", "path_analyzer") -// .field("search_analyzer", "keyword") -// .endObject() -// .startObject("rule.name") -// .field("type", "string") -// .field("analyzer", "keyword") -// .endObject() -// .startObject("root.id") -// .field("type", "multi_field") -// .startObject("fields") -// .startObject("str") -// .field("type", "string") -// .field("index","analyzed") -// .field("analyzer", "default") -// .endObject() -// .startObject("num") -// .field("type", "long") -// .field("index","analyzed") -// .endObject() -// .endObject() -// .endObject() -// .endObject().endObject(); + .startObject(this.getType()) + .field("dynamic",true) + .startObject("properties") + .startObject("id") + .field("type", "string") + .field("index", "not_analyzed") + .endObject() + .startObject("key") + .field("type", "string") + .field("index", "not_analyzed") + .endObject() + .startObject("repositoryKey") + .field("type", "string") + .field("index", "not_analyzed") + .endObject() + .startObject("severity") + .field("type", "string") + .field("index", "not_analyzed") + .endObject() + .endObject() + .endObject().endObject(); + + // return jsonBuilder().startObject() + // .startObject("issue") + // .startObject("properties") + // .startObject("component.path") + // .field("type", "string") + // .field("index_analyzer", "path_analyzer") + // .field("search_analyzer", "keyword") + // .endObject() + // .startObject("rule.name") + // .field("type", "string") + // .field("analyzer", "keyword") + // .endObject() + // .startObject("root.id") + // .field("type", "multi_field") + // .startObject("fields") + // .startObject("str") + // .field("type", "string") + // .field("index","analyzed") + // .field("analyzer", "default") + // .endObject() + // .startObject("num") + // .field("type", "long") + // .field("index","analyzed") + // .endObject() + // .endObject() + // .endObject() + // .endObject().endObject(); } catch (IOException e) { - LOG.error("Could not create mapping for {}",this.getIndexName()); + LOG.error("Could not create mapping for {}", this.getIndexName()); return null; } } @Override - public Map<String, Object> normalize(RuleKey key) { - //Use a MyBatis to normalize the Rule form multiple Table + public XContentBuilder normalize(RuleKey key) { + + RuleDto rule = dao.getByKey(key); + + try { + + XContentBuilder document = jsonBuilder().startObject(); + + Map<String, Object> properties = BeanUtils.describe(rule); + + for (Entry<String, Object> property : properties.entrySet()) { + LOG.trace("NORMALIZING: {} -> {}",property.getKey(), property.getValue()); + document.field(property.getKey(), property.getValue()); + } + + return document.endObject(); + } catch (IOException e) { + LOG.error("Could not normalize {} in {}", key, this.getClass().getSimpleName()); + e.printStackTrace(); + } catch (IllegalAccessException e) { + LOG.error("Could not normalize {} in {}", key, this.getClass().getSimpleName()); + e.printStackTrace(); + } catch (InvocationTargetException e) { + LOG.error("Could not normalize {} in {}", key, this.getClass().getSimpleName()); + e.printStackTrace(); + } catch (NoSuchMethodException e) { + LOG.error("Could not normalize {} in {}", key, this.getClass().getSimpleName()); + e.printStackTrace(); + } return null; } } |