KYLIN-2222 web ui uses rest api to decide which dim encoding is valid for 
different typed columns


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/722efb82
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/722efb82
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/722efb82

Branch: refs/heads/KYLIN-2428
Commit: 722efb82357e0ebcf7853a813272bd960044dd52
Parents: 570ab42
Author: Hongbin Ma <mahong...@apache.org>
Authored: Wed Feb 8 21:41:41 2017 +0800
Committer: Hongbin Ma <mahong...@apache.org>
Committed: Wed Feb 8 21:41:57 2017 +0800

----------------------------------------------------------------------
 .../rest/controller/EncodingController.java     | 73 ++++++++++++++++++++
 .../kylin/rest/service/EncodingService.java     | 54 +++++++++++++++
 2 files changed, 127 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/722efb82/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java
 
b/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java
new file mode 100644
index 0000000..2f532e2
--- /dev/null
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/controller/EncodingController.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.kylin.rest.controller;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.kylin.metadata.datatype.DataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+import org.apache.kylin.rest.service.EncodingService;
+
+@Controller
+@RequestMapping(value = "/encodings")
+public class EncodingController extends BasicController {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(EncodingController.class);
+
+    @Autowired
+    private EncodingService encodingService;
+
+    /**
+     * Get valid encodings for the datatype, if no datatype parameter, return 
all encodings.
+     *
+     * @return suggestion map
+     */
+    @RequestMapping(value = "valid_encodings", method = { RequestMethod.GET })
+    @ResponseBody
+    public Map<String, Object> getValidEncodings() {
+
+        Set<String> allDatatypes = Sets.newHashSet();
+        allDatatypes.addAll(DataType.DATETIME_FAMILY);
+        allDatatypes.addAll(DataType.INTEGER_FAMILY);
+        allDatatypes.addAll(DataType.NUMBER_FAMILY);
+        allDatatypes.addAll(DataType.STRING_FAMILY);
+
+        Map<String, List<String>> datatypeValidEncodings = Maps.newHashMap();
+        for (String dataTypeStr : allDatatypes) {
+            datatypeValidEncodings.put(dataTypeStr, 
encodingService.getValidEncodings(DataType.getType(dataTypeStr)));
+        }
+
+        Map<String, Object> ret = Maps.newHashMap();
+        ret.put("code", "000");
+        ret.put("data", datatypeValidEncodings);
+        return ret;
+    }
+}

http://git-wip-us.apache.org/repos/asf/kylin/blob/722efb82/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java
----------------------------------------------------------------------
diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java
new file mode 100644
index 0000000..7d7d016
--- /dev/null
+++ 
b/server-base/src/main/java/org/apache/kylin/rest/service/EncodingService.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+
+package org.apache.kylin.rest.service;
+
+import java.util.List;
+
+import org.apache.kylin.dimension.BooleanDimEnc;
+import org.apache.kylin.dimension.DateDimEnc;
+import org.apache.kylin.dimension.DictionaryDimEnc;
+import org.apache.kylin.dimension.FixedLenDimEnc;
+import org.apache.kylin.dimension.FixedLenHexDimEnc;
+import org.apache.kylin.dimension.IntegerDimEnc;
+import org.apache.kylin.dimension.TimeDimEnc;
+import org.apache.kylin.metadata.datatype.DataType;
+import org.springframework.stereotype.Component;
+
+import com.google.common.collect.Lists;
+
+@Component("encodingService")
+public class EncodingService extends BasicService {
+
+    public List<String> getValidEncodings(DataType dataType) {
+        if (dataType.isIntegerFamily()) {
+            return Lists.newArrayList(BooleanDimEnc.ENCODING_NAME, 
DateDimEnc.ENCODING_NAME, TimeDimEnc.ENCODING_NAME, 
DictionaryDimEnc.ENCODING_NAME, IntegerDimEnc.ENCODING_NAME);
+        } else if (dataType.isNumberFamily()) { //numbers include integers
+            return Lists.newArrayList(DictionaryDimEnc.ENCODING_NAME);
+        } else if (dataType.isDateTimeFamily()) {
+            return Lists.newArrayList(DateDimEnc.ENCODING_NAME, 
TimeDimEnc.ENCODING_NAME, DictionaryDimEnc.ENCODING_NAME);
+        } else if (dataType.isStringFamily()) {
+            return Lists.newArrayList(BooleanDimEnc.ENCODING_NAME, 
DateDimEnc.ENCODING_NAME, TimeDimEnc.ENCODING_NAME, 
DictionaryDimEnc.ENCODING_NAME, FixedLenDimEnc.ENCODING_NAME, //
+                FixedLenHexDimEnc.ENCODING_NAME, IntegerDimEnc.ENCODING_NAME);
+        } else {
+            throw new IllegalArgumentException("can't provide valid encodings 
for datatype:" + dataType);
+        }
+    }
+
+}

Reply via email to