aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server/src/main/java/org/sonar/server/rule2/RuleIndex.java
diff options
context:
space:
mode:
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.java170
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;
}
}