http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/common/src/test/java/org/apache/kylin/common/util/InstallJarIntoMavenTest.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/kylin/common/util/InstallJarIntoMavenTest.java b/common/src/test/java/org/apache/kylin/common/util/InstallJarIntoMavenTest.java deleted file mode 100644 index 63e412f..0000000 --- a/common/src/test/java/org/apache/kylin/common/util/InstallJarIntoMavenTest.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.common.util; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.junit.Ignore; - -/** - * Created by honma on 6/6/14. - */ -public class InstallJarIntoMavenTest { - - @Ignore("convenient trial tool for dev") - public void testInstall() throws IOException { - File folder = new File("/export/home/b_kylin/tmp"); - File out = new File("/export/home/b_kylin/tmp/out.sh"); - out.createNewFile(); - FileWriter fw = new FileWriter(out); - - for (File file : folder.listFiles()) { - String name = file.getName(); - - if (!name.endsWith(".jar")) - continue; - - int firstSlash = name.indexOf('-'); - int lastDot = name.lastIndexOf('.'); - String groupId = name.substring(0, firstSlash); - - Pattern pattern = Pattern.compile("-\\d"); - Matcher match = pattern.matcher(name); - match.find(); - String artifactId = name.substring(0, match.start()); - String version = name.substring(match.start() + 1, lastDot); - - fw.write(String.format("mvn install:install-file -Dfile=%s -DgroupId=%s -DartifactId=%s -Dversion=%s -Dpackaging=jar", name, "org.apache." + groupId, artifactId, version)); - fw.write("\n"); - } - fw.close(); - } - -}
http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java b/common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java deleted file mode 100644 index 1777923..0000000 --- a/common/src/test/java/org/apache/kylin/common/util/LocalFileMetadataTestCase.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * 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.common.util; - -import java.io.File; -import java.io.IOException; - -import org.apache.commons.io.FileUtils; -import org.apache.kylin.common.KylinConfig; -import org.apache.kylin.common.persistence.ResourceStore; - -/** - * @author ysong1 - */ -public class LocalFileMetadataTestCase extends AbstractKylinTestCase { - - @Override - public void createTestMetadata() { - createTestMetadata(LOCALMETA_TEST_DATA); - } - - public static void createTestMetadata(String testDataFolder) { - KylinConfig.destoryInstance(); - - String tempTestMetadataUrl = "../examples/test_metadata"; - try { - FileUtils.deleteDirectory(new File(tempTestMetadataUrl)); - FileUtils.copyDirectory(new File(testDataFolder), new File(tempTestMetadataUrl)); - } catch (IOException e) { - e.printStackTrace(); - } - - if (System.getProperty(KylinConfig.KYLIN_CONF) == null && System.getenv(KylinConfig.KYLIN_CONF) == null) - System.setProperty(KylinConfig.KYLIN_CONF, tempTestMetadataUrl); - - KylinConfig.getInstanceFromEnv().setMetadataUrl(tempTestMetadataUrl); - } - - public static void cleanAfterClass() { - String tempTestMetadataUrl = "../examples/test_metadata"; - try { - FileUtils.deleteDirectory(new File(tempTestMetadataUrl)); - } catch (IOException e) { - throw new IllegalStateException("Can't delete directory " + tempTestMetadataUrl, e); - } - staticCleanupTestMetadata(); - } - - @Override - public void cleanupTestMetadata() { - cleanAfterClass(); - } - - protected ResourceStore getStore() { - return ResourceStore.getStore(KylinConfig.getInstanceFromEnv()); - } -} http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/common/src/test/java/org/apache/kylin/common/util/MailServiceTest.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/kylin/common/util/MailServiceTest.java b/common/src/test/java/org/apache/kylin/common/util/MailServiceTest.java deleted file mode 100644 index dabf238..0000000 --- a/common/src/test/java/org/apache/kylin/common/util/MailServiceTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.common.util; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import org.apache.kylin.common.KylinConfig; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; - -@Ignore("convenient trial tool for dev") -public class MailServiceTest extends LocalFileMetadataTestCase { - - @Before - public void setup() throws Exception { - this.createTestMetadata(); - - } - - @After - public void after() throws Exception { - this.cleanupTestMetadata(); - } - - @Test - public void testSendEmail() throws IOException { - - KylinConfig config = KylinConfig.getInstanceFromEnv(); - - MailService mailservice = new MailService(config); - boolean sent = sendTestEmail(mailservice); - assert sent; - - // set mail.enabled=false, and run again, this time should be no mail delviered - config.setProperty(KylinConfig.MAIL_ENABLED, "false"); - mailservice = new MailService(config); - sent = sendTestEmail(mailservice); - assert !sent; - - } - - private boolean sendTestEmail(MailService mailservice) { - - List<String> receivers = new ArrayList<String>(1); - receivers.add("[email protected]"); - try { - return mailservice.sendMail(receivers, "A test email from Kylin", "Hello!"); - } catch (IOException e) { - e.printStackTrace(); - } - - return false; - } -} http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/common/src/test/java/org/apache/kylin/common/util/PartialSorterTest.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/kylin/common/util/PartialSorterTest.java b/common/src/test/java/org/apache/kylin/common/util/PartialSorterTest.java deleted file mode 100644 index b603100..0000000 --- a/common/src/test/java/org/apache/kylin/common/util/PartialSorterTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.common.util; - -import static org.junit.Assert.assertArrayEquals; - -import java.util.Comparator; -import java.util.List; - -import org.junit.Test; - -import com.google.common.collect.Lists; - -/** - * Created by Hongbin Ma(Binmahone) on 1/5/15. - */ -public class PartialSorterTest { - @Test - public void basicTest() { - List<Integer> a = Lists.newArrayList(); - a.add(100); - a.add(2); - a.add(92); - a.add(1); - a.add(0); - PartialSorter.partialSort(a, Lists.newArrayList(1, 3, 4), new Comparator<Integer>() { - @Override - public int compare(Integer o1, Integer o2) { - return o1.compareTo(o2); - } - }); - assertArrayEquals(a.toArray(), new Integer[] { 100, 0, 92, 1, 2 }); - } - -} http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/common/src/test/java/org/apache/kylin/common/util/RandomSamplerTest.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/kylin/common/util/RandomSamplerTest.java b/common/src/test/java/org/apache/kylin/common/util/RandomSamplerTest.java deleted file mode 100644 index 67f4e1d..0000000 --- a/common/src/test/java/org/apache/kylin/common/util/RandomSamplerTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.common.util; - -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.hadoop.io.Text; -import org.junit.Test; - -/** - * @author ysong1 - * - */ -public class RandomSamplerTest { - - @Test - public void test() { - RandomSampler<Text> s = new RandomSampler<Text>(); - List<Text> data = new ArrayList<Text>(); - for (int i = 0; i < 1000; i++) { - data.add(new Text(String.valueOf(i))); - } - - List<Text> result = s.sample(data, 50); - System.out.println(result); - assertEquals(50, result.size()); - } - -} http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java b/common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java deleted file mode 100644 index 1141831..0000000 --- a/common/src/test/java/org/apache/kylin/common/util/SSHClientTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.common.util; - -import static org.junit.Assert.assertEquals; - -import java.io.File; -import java.io.IOException; - -import org.apache.hadoop.fs.FileUtil; -import org.apache.kylin.common.KylinConfig; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -/** - * @author ysong1 - * - */ -public class SSHClientTest extends LocalFileMetadataTestCase { - - private boolean isRemote; - private String hostname; - private String username; - private String password; - - private void loadPropertiesFile() throws IOException { - - KylinConfig cfg = KylinConfig.getInstanceFromEnv(); - - this.isRemote = cfg.getRunAsRemoteCommand(); - this.hostname = cfg.getRemoteHadoopCliHostname(); - this.username = cfg.getRemoteHadoopCliUsername(); - this.password = cfg.getRemoteHadoopCliPassword(); - } - - @Before - public void before() throws Exception { - this.createTestMetadata(); - loadPropertiesFile(); - } - - @After - public void after() throws Exception { - this.cleanupTestMetadata(); - } - - @Test - public void testCmd() throws Exception { - if (isRemote == false) - return; - - SSHClient ssh = new SSHClient(this.hostname, this.username, this.password); - SSHClientOutput output = ssh.execCommand("echo hello"); - assertEquals(0, output.getExitCode()); - assertEquals("hello\n", output.getText()); - } - - @Test - public void testScp() throws Exception { - if (isRemote == false) - return; - - SSHClient ssh = new SSHClient(this.hostname, this.username, this.password); - File tmpFile = FileUtil.createLocalTempFile(new File("/tmp/test_scp"), "temp_", false); - ssh.scpFileToRemote(tmpFile.getAbsolutePath(), "/tmp"); - } -} http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/conf/kylin.properties ---------------------------------------------------------------------- diff --git a/conf/kylin.properties b/conf/kylin.properties deleted file mode 100644 index e0727ed..0000000 --- a/conf/kylin.properties +++ /dev/null @@ -1,149 +0,0 @@ -# -# 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. -# - -## Config for Kylin Engine ## - -# List of web servers in use, this enables one web server instance to sync up with other servers. -kylin.rest.servers=localhost:7070 - -#set display timezone on UI,format like[GMT+N or GMT-N] -kylin.rest.timezone=GMT-8 - -# The metadata store in hbase -kylin.metadata.url=kylin_metadata@hbase - -# The storage for final cube file in hbase -kylin.storage.url=hbase - -# Temp folder in hdfs, make sure user has the right access to the hdfs directory -kylin.hdfs.working.dir=/kylin - -# HBase Cluster FileSystem, which serving hbase, format as hdfs://hbase-cluster:8020 -# leave empty if hbase running on same cluster with hive and mapreduce -kylin.hbase.cluster.fs= - -kylin.job.mapreduce.default.reduce.input.mb=500 - -kylin.server.mode=all - -# If true, job engine will not assume that hadoop CLI reside on the same server as it self -# you will have to specify kylin.job.remote.cli.hostname, kylin.job.remote.cli.username and kylin.job.remote.cli.password -# It should not be set to "true" unless you're NOT running Kylin.sh on a hadoop client machine -# (Thus kylin instance has to ssh to another real hadoop client machine to execute hbase,hive,hadoop commands) -kylin.job.run.as.remote.cmd=false - -# Only necessary when kylin.job.run.as.remote.cmd=true -kylin.job.remote.cli.hostname= - -# Only necessary when kylin.job.run.as.remote.cmd=true -kylin.job.remote.cli.username= - -# Only necessary when kylin.job.run.as.remote.cmd=true -kylin.job.remote.cli.password= - -# Used by test cases to prepare synthetic data for sample cube -kylin.job.remote.cli.working.dir=/tmp/kylin - -# Max count of concurrent jobs running -kylin.job.concurrent.max.limit=10 - -# Time interval to check hadoop job status -kylin.job.yarn.app.rest.check.interval.seconds=10 - -#if you should getting job status from RM with kerberos, set it true.. -kylin.job.status.with.kerberos=false - -# Hive database name for putting the intermediate flat tables -kylin.job.hive.database.for.intermediatetable=default - -#default compression codec for htable,snappy,lzo,gzip,lz4 -kylin.hbase.default.compression.codec=snappy - -# The cut size for hbase region, in GB. -# E.g, for cube whose capacity be marked as "SMALL", split region per 10GB by default -kylin.hbase.region.cut.small=10 -kylin.hbase.region.cut.medium=20 -kylin.hbase.region.cut.large=100 - -# HBase min and max region count -kylin.hbase.region.count.min=1 -kylin.hbase.region.count.max=500 - -# Enable/disable ACL check for cube query -kylin.query.security.enabled=true - -## Config for Restful APP ## -# database connection settings: -ldap.server= -ldap.username= -ldap.password= -ldap.user.searchBase= -ldap.user.searchPattern= -ldap.user.groupSearchBase= -ldap.service.searchBase=OU= -ldap.service.searchPattern= -ldap.service.groupSearchBase= -acl.adminRole= -acl.defaultRole= -ganglia.group= -ganglia.port=8664 - -## Config for mail service - -# If true, will send email notification; -mail.enabled=false -mail.host= -mail.username= -mail.password= -mail.sender= - -###########################config info for web####################### - -#help info ,format{name|displayName|link} ,optional -kylin.web.help.length=4 -kylin.web.help.0=start|Getting Started| -kylin.web.help.1=odbc|ODBC Driver| -kylin.web.help.2=tableau|Tableau Guide| -kylin.web.help.3=onboard|Cube Design Tutorial| -#hadoop url link ,optional -kylin.web.hadoop= -#job diagnostic url link ,optional -kylin.web.diagnostic= -#contact mail on web page ,optional -kylin.web.contact_mail= -#set the number of databases and tables of each database shown on the hive tree -kylin.web.hive.limit=20 -###########################config info for front####################### - -#env DEV|QA|PROD -deploy.env=DEV - -###########################config info for sandbox####################### -kylin.sandbox=true - - -###########################config info for kylin monitor####################### -# hive jdbc url -kylin.monitor.hive.jdbc.connection.url= - -#config where to parse query log,split with comma ,will also read $KYLIN_HOME/tomcat/logs/ by default -kylin.monitor.ext.log.base.dir = /tmp/kylin_log1,/tmp/kylin_log2 - -#will create external hive table to query result csv file -#will set to kylin_query_log by default if not config here -kylin.monitor.query.log.parse.result.table = kylin_query_log - http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/conf/kylin_job_conf.xml ---------------------------------------------------------------------- diff --git a/conf/kylin_job_conf.xml b/conf/kylin_job_conf.xml deleted file mode 100644 index 2276a7c..0000000 --- a/conf/kylin_job_conf.xml +++ /dev/null @@ -1,93 +0,0 @@ -<?xml version="1.0"?> -<!-- -Licensed 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. See accompanying LICENSE file. ---> - -<configuration> - - <property> - <name>mapreduce.job.split.metainfo.maxsize</name> - <value>-1</value> - <description>The maximum permissible size of the split metainfo file. - The JobTracker won't attempt to read split metainfo files bigger than - the configured value. No limits if set to -1. - </description> - </property> - - <property> - <name>mapred.compress.map.output</name> - <value>true</value> - <description>Compress map outputs</description> - </property> - - <property> - <name>mapred.map.output.compression.codec</name> - <value>org.apache.hadoop.io.compress.SnappyCodec</value> - <description>The compression codec to use for map outputs - </description> - </property> - - <property> - <name>mapred.output.compress</name> - <value>true</value> - <description>Compress the output of a MapReduce job</description> - </property> - - <property> - <name>mapred.output.compression.codec</name> - <value>org.apache.hadoop.io.compress.SnappyCodec</value> - <description>The compression codec to use for job outputs - </description> - </property> - - <property> - <name>mapred.output.compression.type</name> - <value>BLOCK</value> - <description>The compression type to use for job outputs</description> - </property> - - <property> - <name>mapreduce.job.max.split.locations</name> - <value>2000</value> - <description>No description</description> - </property> - - <property> - <name>dfs.replication</name> - <value>2</value> - <description>Block replication</description> - </property> - - - <property> - <name>hive.merge.mapfiles</name> - <value>true</value> - <description>Enable hive file merge on mapper only job</description> - </property> - <property> - <name>hive.merge.mapredfiles</name> - <value>true</value> - <description>Enable hive file merge on map-reduce job</description> - </property> - <property> - <name>hive.merge.size.per.task</name> - <value>268435456</value> - <description>Size for the merged file: 256M</description> - </property> - - <property> - <name>hive.support.concurrency</name> - <value>false</value> - <description>Hive concurrency lock</description> - </property> -</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/cube/.settings/org.eclipse.core.resources.prefs ---------------------------------------------------------------------- diff --git a/cube/.settings/org.eclipse.core.resources.prefs b/cube/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 04cfa2c..0000000 --- a/cube/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,6 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/main/java=UTF-8 -encoding//src/main/resources=UTF-8 -encoding//src/test/java=UTF-8 -encoding//src/test/resources=UTF-8 -encoding/<project>=UTF-8 http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/cube/.settings/org.eclipse.jdt.core.prefs ---------------------------------------------------------------------- diff --git a/cube/.settings/org.eclipse.jdt.core.prefs b/cube/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index a903301..0000000 --- a/cube/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,379 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.7 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=false -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=false -org.eclipse.jdt.core.formatter.comment.format_line_comments=false -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=80 -org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=true -org.eclipse.jdt.core.formatter.join_wrapped_lines=true -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=999 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=space -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_on_off_tags=false -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true -org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/cube/.settings/org.eclipse.jdt.ui.prefs ---------------------------------------------------------------------- diff --git a/cube/.settings/org.eclipse.jdt.ui.prefs b/cube/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index dece0e6..0000000 --- a/cube/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -formatter_profile=_Space Indent & Long Lines -formatter_settings_version=12 -org.eclipse.jdt.ui.ignorelowercasenames=true -org.eclipse.jdt.ui.importorder=java;javax;org;com; -org.eclipse.jdt.ui.ondemandthreshold=99 -org.eclipse.jdt.ui.staticondemandthreshold=1 http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/cube/pom.xml ---------------------------------------------------------------------- diff --git a/cube/pom.xml b/cube/pom.xml deleted file mode 100644 index b4fa9da..0000000 --- a/cube/pom.xml +++ /dev/null @@ -1,190 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - 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. ---> - -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <artifactId>kylin-cube</artifactId> - <packaging>jar</packaging> - <name>Kylin:Cube</name> - - <parent> - <groupId>org.apache.kylin</groupId> - <artifactId>kylin</artifactId> - <version>1.3-SNAPSHOT</version> - </parent> - - <dependencies> - - <dependency> - <groupId>org.apache.kylin</groupId> - <artifactId>kylin-common</artifactId> - <type>test-jar</type> - <scope>test</scope> - <version>${project.parent.version}</version> - </dependency> - - <!--Kylin Jar --> - <dependency> - <groupId>org.apache.kylin</groupId> - <artifactId>kylin-metadata</artifactId> - <version>${project.parent.version}</version> - </dependency> - <dependency> - <groupId>org.apache.kylin</groupId> - <artifactId>kylin-dictionary</artifactId> - <version>${project.parent.version}</version> - </dependency> - - <dependency> - <groupId>commons-cli</groupId> - <artifactId>commons-cli</artifactId> - </dependency> - <dependency> - <groupId>commons-lang</groupId> - <artifactId>commons-lang</artifactId> - </dependency> - <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </dependency> - <dependency> - <groupId>commons-configuration</groupId> - <artifactId>commons-configuration</artifactId> - </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.core</groupId> - <artifactId>jackson-databind</artifactId> - </dependency> - <dependency> - <groupId>commons-httpclient</groupId> - <artifactId>commons-httpclient</artifactId> - </dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - </dependency> - <dependency> - <groupId>com.ning</groupId> - <artifactId>compress-lzf</artifactId> - </dependency> - <dependency> - <groupId>org.roaringbitmap</groupId> - <artifactId>RoaringBitmap</artifactId> - </dependency> - <!--<dependency> - <groupId>com.n3twork.druid</groupId> - <artifactId>extendedset</artifactId> - </dependency>--> - - <!-- Env & Test --> - - <dependency> - <groupId>org.apache.hadoop</groupId> - <artifactId>hadoop-common</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.apache.hadoop</groupId> - <artifactId>hadoop-annotations</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.apache.hadoop</groupId> - <artifactId>hadoop-mapreduce-client-core</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.apache.hadoop</groupId> - <artifactId>hadoop-minicluster</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.mrunit</groupId> - <artifactId>mrunit</artifactId> - <classifier>hadoop2</classifier> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.hbase</groupId> - <artifactId>hbase-hadoop2-compat</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.apache.hbase</groupId> - <artifactId>hbase-common</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.apache.hbase</groupId> - <artifactId>hbase-client</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.apache.hbase</groupId> - <artifactId>hbase-server</artifactId> - <scope>provided</scope> - <!-- version conflict with hadoop2.2 --> - <exclusions> - <exclusion> - <groupId>org.apache.hadoop</groupId> - <artifactId>hadoop-mapreduce-client-jobclient</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.apache.hadoop</groupId> - <artifactId>hadoop-mapreduce-client-jobclient</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - </dependency> - </dependencies> - - <!-- - <build> - <plugins> - <plugin> - <artifactId>maven-assembly-plugin</artifactId> - <executions> - <execution> - <id>jar-with-dependencies</id> - <phase>package</phase> - <goals> - <goal>single</goal> - </goals> - <configuration> - <descriptors> - <descriptor>src/main/assembly/assemble.xml</descriptor> - </descriptors> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - --> -</project> http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/cube/src/main/assembly/assemble.xml ---------------------------------------------------------------------- diff --git a/cube/src/main/assembly/assemble.xml b/cube/src/main/assembly/assemble.xml deleted file mode 100644 index 2596603..0000000 --- a/cube/src/main/assembly/assemble.xml +++ /dev/null @@ -1,33 +0,0 @@ -<!-- - Licensed 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. See accompanying LICENSE file. ---> - -<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> - <id>jar-with-dependencies</id> - <formats> - <format>jar</format> - </formats> - <includeBaseDirectory>false</includeBaseDirectory> - <dependencySets> - <dependencySet> - <outputDirectory>/</outputDirectory> - <useProjectArtifact>true</useProjectArtifact> - <unpack>true</unpack> - <scope>runtime</scope> - <excludes> - <exclude>javax.servlet*:*</exclude> - </excludes> - </dependencySet> - </dependencySets> -</assembly> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java ---------------------------------------------------------------------- diff --git a/cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java b/cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java deleted file mode 100644 index 5668030..0000000 --- a/cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - * 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.cube; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import org.apache.kylin.cube.model.CubeDesc; -import org.apache.kylin.cube.model.DimensionDesc; -import org.apache.kylin.measure.MeasureType; -import org.apache.kylin.measure.basic.BasicMeasureType; -import org.apache.kylin.metadata.model.FunctionDesc; -import org.apache.kylin.metadata.model.JoinDesc; -import org.apache.kylin.metadata.model.MeasureDesc; -import org.apache.kylin.metadata.model.TblColRef; -import org.apache.kylin.metadata.realization.CapabilityResult; -import org.apache.kylin.metadata.realization.CapabilityResult.CapabilityInfluence; -import org.apache.kylin.metadata.realization.SQLDigest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.collect.Sets; - -/** - */ -public class CubeCapabilityChecker { - private static final Logger logger = LoggerFactory.getLogger(CubeCapabilityChecker.class); - - public static CapabilityResult check(CubeInstance cube, SQLDigest digest) { - CapabilityResult result = new CapabilityResult(); - result.capable = false; - - // match joins - boolean isJoinMatch = isJoinMatch(digest.joinDescs, cube); - if (!isJoinMatch) { - logger.info("Exclude cube " + cube.getName() + " because unmatched joins"); - return result; - } - - // dimensions & measures - Collection<TblColRef> dimensionColumns = getDimensionColumns(digest); - Collection<FunctionDesc> aggrFunctions = digest.aggregations; - Collection<TblColRef> unmatchedDimensions = unmatchedDimensions(dimensionColumns, cube); - Collection<FunctionDesc> unmatchedAggregations = unmatchedAggregations(aggrFunctions, cube); - - // try custom measure types - if (!unmatchedDimensions.isEmpty() || !unmatchedAggregations.isEmpty()) { - tryCustomMeasureTypes(unmatchedDimensions, unmatchedAggregations, digest, cube, result); - } - - // try dimension-as-measure - if (!unmatchedAggregations.isEmpty()) { - tryDimensionAsMeasures(unmatchedAggregations, digest, cube, result); - } - - if (!unmatchedDimensions.isEmpty()) { - logger.info("Exclude cube " + cube.getName() + " because unmatched dimensions"); - return result; - } - - if (!unmatchedAggregations.isEmpty()) { - logger.info("Exclude cube " + cube.getName() + " because unmatched aggregations"); - return result; - } - - // cost will be minded by caller - result.capable = true; - return result; - } - - private static Collection<TblColRef> getDimensionColumns(SQLDigest sqlDigest) { - Collection<TblColRef> groupByColumns = sqlDigest.groupbyColumns; - Collection<TblColRef> filterColumns = sqlDigest.filterColumns; - - Collection<TblColRef> dimensionColumns = new HashSet<TblColRef>(); - dimensionColumns.addAll(groupByColumns); - dimensionColumns.addAll(filterColumns); - return dimensionColumns; - } - - private static Set<TblColRef> unmatchedDimensions(Collection<TblColRef> dimensionColumns, CubeInstance cube) { - HashSet<TblColRef> result = Sets.newHashSet(dimensionColumns); - CubeDesc cubeDesc = cube.getDescriptor(); - result.removeAll(cubeDesc.listDimensionColumnsIncludingDerived()); - return result; - } - - private static Set<FunctionDesc> unmatchedAggregations(Collection<FunctionDesc> aggregations, CubeInstance cube) { - HashSet<FunctionDesc> result = Sets.newHashSet(aggregations); - CubeDesc cubeDesc = cube.getDescriptor(); - result.removeAll(cubeDesc.listAllFunctions()); - return result; - } - - private static boolean isJoinMatch(Collection<JoinDesc> joins, CubeInstance cube) { - CubeDesc cubeDesc = cube.getDescriptor(); - - List<JoinDesc> cubeJoins = new ArrayList<JoinDesc>(cubeDesc.getDimensions().size()); - for (DimensionDesc d : cubeDesc.getDimensions()) { - if (d.getJoin() != null) { - cubeJoins.add(d.getJoin()); - } - } - for (JoinDesc j : joins) { - // optiq engine can't decide which one is fk or pk - String pTable = j.getPrimaryKeyColumns()[0].getTable(); - String factTable = cubeDesc.getFactTable(); - if (factTable.equals(pTable)) { - j.swapPKFK(); - } - - // check primary key, all PK column should refer to same tale, the Fact Table of cube. - // Using first column's table name to check. - String fTable = j.getForeignKeyColumns()[0].getTable(); - if (!factTable.equals(fTable)) { - logger.info("Fact Table" + factTable + " not matched in join: " + j + " on cube " + cube.getName()); - return false; - } - - // The hashcode() function of JoinDesc has been overwritten, - // which takes into consideration: pk,fk,jointype - if (!cubeJoins.contains(j)) { - logger.info("Query joins don't macth on cube " + cube.getName()); - return false; - } - } - return true; - } - - private static void tryDimensionAsMeasures(Collection<FunctionDesc> unmatchedAggregations, SQLDigest digest, CubeInstance cube, CapabilityResult result) { - CubeDesc cubeDesc = cube.getDescriptor(); - Collection<FunctionDesc> cubeFuncs = cubeDesc.listAllFunctions(); - - Iterator<FunctionDesc> it = unmatchedAggregations.iterator(); - while (it.hasNext()) { - FunctionDesc functionDesc = it.next(); - - if (cubeFuncs.contains(functionDesc)) { - it.remove(); - continue; - } - - // let calcite handle count - if (functionDesc.isCount()) { - it.remove(); - continue; - } - - // calcite can do aggregation from columns on-the-fly - List<TblColRef> neededCols = functionDesc.getParameter().getColRefs(); - if (neededCols.size() > 0 && cubeDesc.listDimensionColumnsIncludingDerived().containsAll(neededCols)) { - result.influences.add(new CapabilityResult.DimensionAsMeasure(functionDesc)); - it.remove(); - continue; - } - } - } - - // custom measure types can cover unmatched dimensions or measures - private static void tryCustomMeasureTypes(Collection<TblColRef> unmatchedDimensions, Collection<FunctionDesc> unmatchedAggregations, SQLDigest digest, CubeInstance cube, CapabilityResult result) { - CubeDesc cubeDesc = cube.getDescriptor(); - for (MeasureDesc measure : cubeDesc.getMeasures()) { - if (unmatchedDimensions.isEmpty() && unmatchedAggregations.isEmpty()) - break; - - MeasureType<?> measureType = measure.getFunction().getMeasureType(); - if (measureType instanceof BasicMeasureType) - continue; - - CapabilityInfluence inf = measureType.influenceCapabilityCheck(unmatchedDimensions, unmatchedAggregations, digest, measure); - if (inf != null) - result.influences.add(inf); - } - } - -} http://git-wip-us.apache.org/repos/asf/kylin/blob/6b6aa313/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java ---------------------------------------------------------------------- diff --git a/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java b/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java deleted file mode 100644 index 89f8b01..0000000 --- a/cube/src/main/java/org/apache/kylin/cube/CubeDescManager.java +++ /dev/null @@ -1,280 +0,0 @@ -/* - * 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.cube; - -import java.io.IOException; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.commons.lang.StringUtils; -import org.apache.kylin.common.KylinConfig; -import org.apache.kylin.common.persistence.JsonSerializer; -import org.apache.kylin.common.persistence.ResourceStore; -import org.apache.kylin.common.persistence.Serializer; -import org.apache.kylin.common.restclient.Broadcaster; -import org.apache.kylin.common.restclient.CaseInsensitiveStringCache; -import org.apache.kylin.cube.cuboid.Cuboid; -import org.apache.kylin.cube.model.CubeDesc; -import org.apache.kylin.cube.model.validation.CubeMetadataValidator; -import org.apache.kylin.cube.model.validation.ValidateContext; -import org.apache.kylin.metadata.MetadataConstants; -import org.apache.kylin.metadata.MetadataManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Manager class for CubeDesc; extracted from #CubeManager - * @author shaoshi - * - */ -public class CubeDescManager { - - private static final Logger logger = LoggerFactory.getLogger(CubeDescManager.class); - - public static final Serializer<CubeDesc> CUBE_DESC_SERIALIZER = new JsonSerializer<CubeDesc>(CubeDesc.class); - - // static cached instances - private static final ConcurrentHashMap<KylinConfig, CubeDescManager> CACHE = new ConcurrentHashMap<KylinConfig, CubeDescManager>(); - - // ============================================================================ - - private KylinConfig config; - // name ==> CubeDesc - private CaseInsensitiveStringCache<CubeDesc> cubeDescMap = new CaseInsensitiveStringCache<CubeDesc>(Broadcaster.TYPE.CUBE_DESC); - - public static CubeDescManager getInstance(KylinConfig config) { - CubeDescManager r = CACHE.get(config); - if (r != null) { - return r; - } - - synchronized (CubeDescManager.class) { - r = CACHE.get(config); - if (r != null) { - return r; - } - try { - r = new CubeDescManager(config); - CACHE.put(config, r); - if (CACHE.size() > 1) { - logger.warn("More than one singleton exist"); - } - return r; - } catch (IOException e) { - throw new IllegalStateException("Failed to init CubeDescManager from " + config, e); - } - } - } - - public static void clearCache() { - CACHE.clear(); - Cuboid.clearCache(); - } - - private CubeDescManager(KylinConfig config) throws IOException { - logger.info("Initializing CubeDescManager with config " + config); - this.config = config; - reloadAllCubeDesc(); - } - - public CubeDesc getCubeDesc(String name) { - return cubeDescMap.get(name); - } - - /** - * Reload CubeDesc from resource store It will be triggered by an desc - * update event. - * - * @param name - * @throws IOException - */ - public CubeDesc reloadCubeDesc(String name) throws IOException { - - // Save Source - String path = CubeDesc.getCubeDescResourcePath(name); - - // Reload the CubeDesc - CubeDesc ndesc = loadCubeDesc(path); - - // Here replace the old one - cubeDescMap.putLocal(ndesc.getName(), ndesc); - Cuboid.reloadCache(ndesc.getName()); - return ndesc; - } - - private CubeDesc loadCubeDesc(String path) throws IOException { - ResourceStore store = getStore(); - CubeDesc ndesc = store.getResource(path, CubeDesc.class, CUBE_DESC_SERIALIZER); - - if (StringUtils.isBlank(ndesc.getName())) { - throw new IllegalStateException("CubeDesc name must not be blank"); - } - - ndesc.init(config, getMetadataManager().getAllTablesMap()); - - if (ndesc.getError().isEmpty() == false) { - throw new IllegalStateException("Cube desc at " + path + " has issues: " + ndesc.getError()); - } - - return ndesc; - } - - /** - * Create a new CubeDesc - * - * @param cubeDesc - * @return - * @throws IOException - */ - public CubeDesc createCubeDesc(CubeDesc cubeDesc) throws IOException { - if (cubeDesc.getUuid() == null || cubeDesc.getName() == null) - throw new IllegalArgumentException(); - if (cubeDescMap.containsKey(cubeDesc.getName())) - throw new IllegalArgumentException("CubeDesc '" + cubeDesc.getName() + "' already exists"); - - try { - cubeDesc.init(config, getMetadataManager().getAllTablesMap()); - } catch (IllegalStateException e) { - cubeDesc.addError(e.getMessage(), true); - } - // Check base validation - if (!cubeDesc.getError().isEmpty()) { - return cubeDesc; - } - // Semantic validation - CubeMetadataValidator validator = new CubeMetadataValidator(); - ValidateContext context = validator.validate(cubeDesc, true); - if (!context.ifPass()) { - return cubeDesc; - } - - cubeDesc.setSignature(cubeDesc.calculateSignature()); - - String path = cubeDesc.getResourcePath(); - getStore().putResource(path, cubeDesc, CUBE_DESC_SERIALIZER); - cubeDescMap.put(cubeDesc.getName(), cubeDesc); - - return cubeDesc; - } - - // remove cubeDesc - public void removeCubeDesc(CubeDesc cubeDesc) throws IOException { - String path = cubeDesc.getResourcePath(); - getStore().deleteResource(path); - cubeDescMap.remove(cubeDesc.getName()); - Cuboid.reloadCache(cubeDesc.getName()); - } - - // remove cubeDesc - public void removeLocalCubeDesc(String name) throws IOException { - cubeDescMap.removeLocal(name); - Cuboid.reloadCache(name); - } - - private void reloadAllCubeDesc() throws IOException { - ResourceStore store = getStore(); - logger.info("Reloading Cube Metadata from folder " + store.getReadableResourcePath(ResourceStore.CUBE_DESC_RESOURCE_ROOT)); - - cubeDescMap.clear(); - - List<String> paths = store.collectResourceRecursively(ResourceStore.CUBE_DESC_RESOURCE_ROOT, MetadataConstants.FILE_SURFIX); - for (String path : paths) { - CubeDesc desc; - try { - desc = loadCubeDesc(path); - } catch (Exception e) { - logger.error("Error loading cube desc " + path, e); - continue; - } - if (path.equals(desc.getResourcePath()) == false) { - logger.error("Skip suspicious desc at " + path + ", " + desc + " should be at " + desc.getResourcePath()); - continue; - } - if (cubeDescMap.containsKey(desc.getName())) { - logger.error("Dup CubeDesc name '" + desc.getName() + "' on path " + path); - continue; - } - - cubeDescMap.putLocal(desc.getName(), desc); - } - - logger.debug("Loaded " + cubeDescMap.size() + " Cube(s)"); - } - - /** - * Update CubeDesc with the input. Broadcast the event into cluster - * - * @param desc - * @return - * @throws IOException - */ - public CubeDesc updateCubeDesc(CubeDesc desc) throws IOException { - // Validate CubeDesc - if (desc.getUuid() == null || desc.getName() == null) { - throw new IllegalArgumentException(); - } - String name = desc.getName(); - if (!cubeDescMap.containsKey(name)) { - throw new IllegalArgumentException("CubeDesc '" + name + "' does not exist."); - } - - try { - desc.init(config, getMetadataManager().getAllTablesMap()); - } catch (IllegalStateException e) { - desc.addError(e.getMessage(), true); - return desc; - } catch (IllegalArgumentException e) { - desc.addError(e.getMessage(), true); - return desc; - } - - // Semantic validation - CubeMetadataValidator validator = new CubeMetadataValidator(); - ValidateContext context = validator.validate(desc, true); - if (!context.ifPass()) { - return desc; - } - - desc.setSignature(desc.calculateSignature()); - - // Save Source - String path = desc.getResourcePath(); - getStore().putResource(path, desc, CUBE_DESC_SERIALIZER); - - // Reload the CubeDesc - CubeDesc ndesc = loadCubeDesc(path); - // Here replace the old one - cubeDescMap.put(ndesc.getName(), desc); - - return ndesc; - } - - private MetadataManager getMetadataManager() { - return MetadataManager.getInstance(config); - } - - private CubeManager getCubeManager() { - return CubeManager.getInstance(config); - } - - private ResourceStore getStore() { - return ResourceStore.getStore(this.config); - } - -}
