http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-web/app/views/popover-html-unsafe-popup.html ---------------------------------------------------------------------- diff --git a/zeppelin-web/app/views/popover-html-unsafe-popup.html b/zeppelin-web/app/views/popover-html-unsafe-popup.html index 5b7002d..e36b041 100644 --- a/zeppelin-web/app/views/popover-html-unsafe-popup.html +++ b/zeppelin-web/app/views/popover-html-unsafe-popup.html @@ -1,3 +1,17 @@ +<!-- +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. +--> + <div class="popover {{placement}}" ng-class="{ in: isOpen(), fade: animation() }"> <div class="arrow"></div> @@ -5,4 +19,4 @@ <h3 class="popover-title" ng-bind="title" ng-show="title"></h3> <div class="popover-content" bind-html-unsafe="content"></div> </div> -</div> \ No newline at end of file +</div>
http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-web/bower ---------------------------------------------------------------------- diff --git a/zeppelin-web/bower b/zeppelin-web/bower index 80814b4..ed00320 100755 --- a/zeppelin-web/bower +++ b/zeppelin-web/bower @@ -1 +1,17 @@ +# +# 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. +# "node/node" "./node_modules/bower/bin/bower" "$@" http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-web/grunt ---------------------------------------------------------------------- diff --git a/zeppelin-web/grunt b/zeppelin-web/grunt index 8ac5c06..759cae7 100755 --- a/zeppelin-web/grunt +++ b/zeppelin-web/grunt @@ -1,2 +1,18 @@ +# +# 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. +# "node/node" "./node_modules/.bin/grunt" "$@" http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-web/pom.xml ---------------------------------------------------------------------- diff --git a/zeppelin-web/pom.xml b/zeppelin-web/pom.xml index a3f59f2..0cb0d5b 100644 --- a/zeppelin-web/pom.xml +++ b/zeppelin-web/pom.xml @@ -1,15 +1,31 @@ <?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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> -<!-- - This is commented because somehow this force zeppelin-webb to be build 2 times. + <parent> <artifactId>zeppelin</artifactId> - <groupId>com.nflabs.zeppelin</groupId> + <groupId>org.apache.zeppelin</groupId> <version>0.5.0-SNAPSHOT</version> </parent> ---> - <groupId>com.nflabs.zeppelin</groupId> + + <groupId>org.apache.zeppelin</groupId> <artifactId>zeppelin-web</artifactId> <packaging>war</packaging> <version>0.5.0-SNAPSHOT</version> @@ -18,6 +34,42 @@ <build> <plugins> <plugin> + <groupId>org.apache.rat</groupId> + <artifactId>apache-rat-plugin</artifactId> + <version>0.11</version> + <configuration> + <excludes> + <exclude>**/.idea/</exclude> + <exclude>**/*.iml</exclude> + <exclude>.git/</exclude> + <exclude>.gitignore</exclude> + <exclude>.bowerrc</exclude> + <exclude>.editorconfig</exclude> + <exclude>.jshintrc</exclude> + <exclude>.tmp/**</exclude> + <exclude>**/.settings/*</exclude> + <exclude>**/.classpath</exclude> + <exclude>**/.project</exclude> + <exclude>**/target/**</exclude> + <exclude>node/**</exclude> + <exclude>node_modules/**</exclude> + <exclude>bower_components/**</exclude> + <exclude>test/**</exclude> + <exclude>src/main/webapp/**</exclude> + <exclude>app/.buildignore</exclude> + <exclude>app/fonts/fontawesome*</exclude> + <exclude>app/fonts/font-awesome*</exclude> + <exclude>app/styles/font-awesome*</exclude> + <exclude>app/fonts/Simple-Line*</exclude> + <exclude>app/fonts/simple-line*</exclude> + <exclude>app/styles/simple-line*</exclude> + <exclude>bower.json</exclude> + <exclude>package.json</exclude> + <exclude>README.md</exclude> + </excludes> + </configuration> + </plugin> + <plugin> <groupId>com.github.eirslett</groupId> <artifactId>frontend-maven-plugin</artifactId> <version>0.0.23</version> http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/pom.xml ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/pom.xml b/zeppelin-zengine/pom.xml index 019c4be..b90847b 100644 --- a/zeppelin-zengine/pom.xml +++ b/zeppelin-zengine/pom.xml @@ -1,15 +1,32 @@ <?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> <parent> <artifactId>zeppelin</artifactId> - <groupId>com.nflabs.zeppelin</groupId> + <groupId>org.apache.zeppelin</groupId> <version>0.5.0-SNAPSHOT</version> </parent> - <groupId>com.nflabs.zeppelin</groupId> + <groupId>org.apache.zeppelin</groupId> <artifactId>zeppelin-zengine</artifactId> <packaging>jar</packaging> <version>0.5.0-SNAPSHOT</version> http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/conf/ZeppelinConfiguration.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/conf/ZeppelinConfiguration.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/conf/ZeppelinConfiguration.java deleted file mode 100644 index 476a464..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/conf/ZeppelinConfiguration.java +++ /dev/null @@ -1,514 +0,0 @@ -package com.nflabs.zeppelin.conf; - -import java.net.URL; -import java.util.List; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; -import org.apache.commons.configuration.tree.ConfigurationNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -/** - * Zeppelin configuration. - * - * @author Leemoonsoo - * - */ -public class ZeppelinConfiguration extends XMLConfiguration { - private static final String ZEPPELIN_SITE_XML = "zeppelin-site.xml"; - private static final long serialVersionUID = 4749305895693848035L; - private static final Logger LOG = LoggerFactory.getLogger(ZeppelinConfiguration.class); - private static ZeppelinConfiguration conf; - - public ZeppelinConfiguration(URL url) throws ConfigurationException { - setDelimiterParsingDisabled(true); - load(url); - } - - public ZeppelinConfiguration() { - ConfVars[] vars = ConfVars.values(); - for (ConfVars v : vars) { - if (v.getType() == ConfVars.VarType.BOOLEAN) { - this.setProperty(v.getVarName(), v.getBooleanValue()); - } else if (v.getType() == ConfVars.VarType.LONG) { - this.setProperty(v.getVarName(), v.getLongValue()); - } else if (v.getType() == ConfVars.VarType.INT) { - this.setProperty(v.getVarName(), v.getIntValue()); - } else if (v.getType() == ConfVars.VarType.FLOAT) { - this.setProperty(v.getVarName(), v.getFloatValue()); - } else if (v.getType() == ConfVars.VarType.STRING) { - this.setProperty(v.getVarName(), v.getStringValue()); - } else { - throw new RuntimeException("Unsupported VarType"); - } - } - - } - - - /** - * Load from resource. - * - * @throws ConfigurationException - */ - public static ZeppelinConfiguration create() { - if (conf != null) { - return conf; - } - - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - URL url; - - url = ZeppelinConfiguration.class.getResource(ZEPPELIN_SITE_XML); - if (url == null) { - ClassLoader cl = ZeppelinConfiguration.class.getClassLoader(); - if (cl != null) { - url = cl.getResource(ZEPPELIN_SITE_XML); - } - } - if (url == null) { - url = classLoader.getResource(ZEPPELIN_SITE_XML); - } - - if (url == null) { - LOG.warn("Failed to load configuration, proceeding with a default"); - conf = new ZeppelinConfiguration(); - } else { - try { - LOG.info("Load configuration from " + url); - conf = new ZeppelinConfiguration(url); - } catch (ConfigurationException e) { - LOG.warn("Failed to load configuration from " + url + " proceeding with a default", e); - conf = new ZeppelinConfiguration(); - } - } - - return conf; - } - - - private String getStringValue(String name, String d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.size() == 0) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && p.getChildren("name").size() > 0 - && name.equals(p.getChildren("name").get(0).getValue())) { - return (String) p.getChildren("value").get(0).getValue(); - } - } - return d; - } - - private int getIntValue(String name, int d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.size() == 0) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && p.getChildren("name").size() > 0 - && name.equals(p.getChildren("name").get(0).getValue())) { - return Integer.parseInt((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - private long getLongValue(String name, long d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.size() == 0) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && p.getChildren("name").size() > 0 - && name.equals(p.getChildren("name").get(0).getValue())) { - return Long.parseLong((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - private float getFloatValue(String name, float d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.size() == 0) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && p.getChildren("name").size() > 0 - && name.equals(p.getChildren("name").get(0).getValue())) { - return Float.parseFloat((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - private boolean getBooleanValue(String name, boolean d) { - List<ConfigurationNode> properties = getRootNode().getChildren(); - if (properties == null || properties.size() == 0) { - return d; - } - for (ConfigurationNode p : properties) { - if (p.getChildren("name") != null && p.getChildren("name").size() > 0 - && name.equals(p.getChildren("name").get(0).getValue())) { - return Boolean.parseBoolean((String) p.getChildren("value").get(0).getValue()); - } - } - return d; - } - - public String getString(ConfVars c) { - return getString(c.name(), c.getVarName(), c.getStringValue()); - } - - public String getString(String envName, String propertyName, String defaultValue) { - if (System.getenv(envName) != null) { - return System.getenv(envName); - } - if (System.getProperty(propertyName) != null) { - return System.getProperty(propertyName); - } - - return getStringValue(propertyName, defaultValue); - } - - public int getInt(ConfVars c) { - return getInt(c.name(), c.getVarName(), c.getIntValue()); - } - - public int getInt(String envName, String propertyName, int defaultValue) { - if (System.getenv(envName) != null) { - return Integer.parseInt(System.getenv(envName)); - } - - if (System.getProperty(propertyName) != null) { - return Integer.parseInt(System.getProperty(propertyName)); - } - return getIntValue(propertyName, defaultValue); - } - - public long getLong(ConfVars c) { - return getLong(c.name(), c.getVarName(), c.getLongValue()); - } - - public long getLong(String envName, String propertyName, long defaultValue) { - if (System.getenv(envName) != null) { - return Long.parseLong(System.getenv(envName)); - } - - if (System.getProperty(propertyName) != null) { - return Long.parseLong(System.getProperty(propertyName)); - } - return getLongValue(propertyName, defaultValue); - } - - public float getFloat(ConfVars c) { - return getFloat(c.name(), c.getVarName(), c.getFloatValue()); - } - - public float getFloat(String envName, String propertyName, float defaultValue) { - if (System.getenv(envName) != null) { - return Float.parseFloat(System.getenv(envName)); - } - if (System.getProperty(propertyName) != null) { - return Float.parseFloat(System.getProperty(propertyName)); - } - return getFloatValue(propertyName, defaultValue); - } - - public boolean getBoolean(ConfVars c) { - return getBoolean(c.name(), c.getVarName(), c.getBooleanValue()); - } - - public boolean getBoolean(String envName, String propertyName, boolean defaultValue) { - if (System.getenv(envName) != null) { - return Boolean.parseBoolean(System.getenv(envName)); - } - - if (System.getProperty(propertyName) != null) { - return Boolean.parseBoolean(System.getProperty(propertyName)); - } - return getBooleanValue(propertyName, defaultValue); - } - - public boolean useSsl() { - return getBoolean(ConfVars.ZEPPELIN_SSL); - } - - public boolean useClientAuth() { - return getBoolean(ConfVars.ZEPPELIN_SSL_CLIENT_AUTH); - } - - public int getServerPort() { - return getInt(ConfVars.ZEPPELIN_PORT); - } - - public int getWebSocketPort() { - int port = getInt(ConfVars.ZEPPELIN_WEBSOCKET_PORT); - if (port < 0) { - return getServerPort() + 1; - } else { - return port; - } - } - - public String getKeyStorePath() { - return getRelativeDir(ConfVars.ZEPPELIN_SSL_KEYSTORE_PATH); - } - - public String getKeyStoreType() { - return getString(ConfVars.ZEPPELIN_SSL_KEYSTORE_TYPE); - } - - public String getKeyStorePassword() { - return getString(ConfVars.ZEPPELIN_SSL_KEYSTORE_PASSWORD); - } - - public String getKeyManagerPassword() { - String password = getString(ConfVars.ZEPPELIN_SSL_KEY_MANAGER_PASSWORD); - if (password == null) { - return getKeyStorePassword(); - } else { - return password; - } - } - - public String getTrustStorePath() { - String path = getString(ConfVars.ZEPPELIN_SSL_TRUSTSTORE_PATH); - if (path == null) { - return getKeyStorePath(); - } else { - return getRelativeDir(path); - } - } - - public String getTrustStoreType() { - String type = getString(ConfVars.ZEPPELIN_SSL_TRUSTSTORE_TYPE); - if (type == null) { - return getKeyStoreType(); - } else { - return type; - } - } - - public String getTrustStorePassword() { - String password = getString(ConfVars.ZEPPELIN_SSL_TRUSTSTORE_PASSWORD); - if (password == null) { - return getKeyStorePassword(); - } else { - return password; - } - } - - public String getNotebookDir() { - return getRelativeDir(ConfVars.ZEPPELIN_NOTEBOOK_DIR); - } - - public String getInterpreterDir() { - return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_DIR); - } - - public String getInterpreterSettingPath() { - return getRelativeDir("conf/interpreter.json"); - } - - public String getInterpreterRemoteRunnerPath() { - return getRelativeDir(ConfVars.ZEPPELIN_INTERPRETER_REMOTE_RUNNER); - } - - public String getRelativeDir(ConfVars c) { - return getRelativeDir(getString(c)); - } - - public String getRelativeDir(String path) { - if (path != null && path.startsWith("/")) { - return path; - } else { - return getString(ConfVars.ZEPPELIN_HOME) + "/" + path; - } - } - - - /** - * Wrapper class. - * - * @author Leemoonsoo - * - */ - public static enum ConfVars { - ZEPPELIN_HOME("zeppelin.home", "../"), - ZEPPELIN_PORT("zeppelin.server.port", 8080), - // negative websocket port denotes that server port + 1 should be used - ZEPPELIN_WEBSOCKET_PORT("zeppelin.websocket.port", -1), - ZEPPELIN_SSL("zeppelin.ssl", false), - ZEPPELIN_SSL_CLIENT_AUTH("zeppelin.ssl.client.auth", false), - ZEPPELIN_SSL_KEYSTORE_PATH("zeppelin.ssl.keystore.path", "conf/keystore"), - ZEPPELIN_SSL_KEYSTORE_TYPE("zeppelin.ssl.keystore.type", "JKS"), - ZEPPELIN_SSL_KEYSTORE_PASSWORD("zeppelin.ssl.keystore.password", ""), - ZEPPELIN_SSL_KEY_MANAGER_PASSWORD("zeppelin.ssl.key.manager.password", null), - ZEPPELIN_SSL_TRUSTSTORE_PATH("zeppelin.ssl.truststore.path", null), - ZEPPELIN_SSL_TRUSTSTORE_TYPE("zeppelin.ssl.truststore.type", null), - ZEPPELIN_SSL_TRUSTSTORE_PASSWORD("zeppelin.ssl.truststore.password", null), - ZEPPELIN_WAR("zeppelin.war", "../zeppelin-web/src/main/webapp"), - ZEPPELIN_API_WAR("zeppelin.api.war", "../zeppelin-docs/src/main/swagger"), - ZEPPELIN_INTERPRETERS("zeppelin.interpreters", "com.nflabs.zeppelin.spark.SparkInterpreter," - + "com.nflabs.zeppelin.spark.PySparkInterpreter," - + "com.nflabs.zeppelin.spark.SparkSqlInterpreter," - + "com.nflabs.zeppelin.spark.DepInterpreter," - + "com.nflabs.zeppelin.markdown.Markdown," - + "com.nflabs.zeppelin.shell.ShellInterpreter"), - ZEPPELIN_INTERPRETER_DIR("zeppelin.interpreter.dir", "interpreter"), - ZEPPELIN_ENCODING("zeppelin.encoding", "UTF-8"), - ZEPPELIN_NOTEBOOK_DIR("zeppelin.notebook.dir", "notebook"), - ZEPPELIN_INTERPRETER_REMOTE_RUNNER("zeppelin.interpreter.remoterunner", "bin/interpreter.sh"), - // Decide when new note is created, interpreter settings will be binded automatically or not. - ZEPPELIN_NOTEBOOK_AUTO_INTERPRETER_BINDING("zeppelin.notebook.autoInterpreterBinding", true); - - private String varName; - @SuppressWarnings("rawtypes") - private Class varClass; - private String stringValue; - private VarType type; - private int intValue; - private float floatValue; - private boolean booleanValue; - private long longValue; - - - ConfVars(String varName, String varValue) { - this.varName = varName; - this.varClass = String.class; - this.stringValue = varValue; - this.intValue = -1; - this.floatValue = -1; - this.longValue = -1; - this.booleanValue = false; - this.type = VarType.STRING; - } - - ConfVars(String varName, int intValue) { - this.varName = varName; - this.varClass = Integer.class; - this.stringValue = null; - this.intValue = intValue; - this.floatValue = -1; - this.longValue = -1; - this.booleanValue = false; - this.type = VarType.INT; - } - - ConfVars(String varName, long longValue) { - this.varName = varName; - this.varClass = Integer.class; - this.stringValue = null; - this.intValue = -1; - this.floatValue = -1; - this.longValue = longValue; - this.booleanValue = false; - this.type = VarType.INT; - } - - ConfVars(String varName, float floatValue) { - this.varName = varName; - this.varClass = Float.class; - this.stringValue = null; - this.intValue = -1; - this.longValue = -1; - this.floatValue = floatValue; - this.booleanValue = false; - this.type = VarType.FLOAT; - } - - ConfVars(String varName, boolean booleanValue) { - this.varName = varName; - this.varClass = Boolean.class; - this.stringValue = null; - this.intValue = -1; - this.longValue = -1; - this.floatValue = -1; - this.booleanValue = booleanValue; - this.type = VarType.BOOLEAN; - } - - public String getVarName() { - return varName; - } - - @SuppressWarnings("rawtypes") - public Class getVarClass() { - return varClass; - } - - public int getIntValue() { - return intValue; - } - - public long getLongValue() { - return longValue; - } - - public float getFloatValue() { - return floatValue; - } - - public String getStringValue() { - return stringValue; - } - - public boolean getBooleanValue() { - return booleanValue; - } - - public VarType getType() { - return type; - } - - enum VarType { - STRING { - @Override - void checkType(String value) throws Exception {} - }, - INT { - @Override - void checkType(String value) throws Exception { - Integer.valueOf(value); - } - }, - LONG { - @Override - void checkType(String value) throws Exception { - Long.valueOf(value); - } - }, - FLOAT { - @Override - void checkType(String value) throws Exception { - Float.valueOf(value); - } - }, - BOOLEAN { - @Override - void checkType(String value) throws Exception { - Boolean.valueOf(value); - } - }; - - boolean isType(String value) { - try { - checkType(value); - } catch (Exception e) { - return false; - } - return true; - } - - String typeString() { - return name().toUpperCase(); - } - - abstract void checkType(String value) throws Exception; - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterFactory.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterFactory.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterFactory.java deleted file mode 100644 index 5d65405..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterFactory.java +++ /dev/null @@ -1,596 +0,0 @@ -package com.nflabs.zeppelin.interpreter; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; - -import org.apache.commons.lang.ArrayUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.nflabs.zeppelin.conf.ZeppelinConfiguration; -import com.nflabs.zeppelin.conf.ZeppelinConfiguration.ConfVars; -import com.nflabs.zeppelin.interpreter.Interpreter.RegisteredInterpreter; -import com.nflabs.zeppelin.interpreter.remote.RemoteInterpreter; - -/** - * Manage interpreters. - * - */ -public class InterpreterFactory { - Logger logger = LoggerFactory.getLogger(InterpreterFactory.class); - - private Map<String, URLClassLoader> cleanCl = Collections - .synchronizedMap(new HashMap<String, URLClassLoader>()); - - private ZeppelinConfiguration conf; - String[] interpreterClassList; - - private Map<String, InterpreterSetting> interpreterSettings = - new HashMap<String, InterpreterSetting>(); - - private Map<String, List<String>> interpreterBindings = new HashMap<String, List<String>>(); - - private Gson gson; - - private InterpreterOption defaultOption; - - public InterpreterFactory(ZeppelinConfiguration conf) throws InterpreterException, IOException { - this(conf, new InterpreterOption(true)); - } - - - public InterpreterFactory(ZeppelinConfiguration conf, InterpreterOption defaultOption) - throws InterpreterException, IOException { - this.conf = conf; - this.defaultOption = defaultOption; - String replsConf = conf.getString(ConfVars.ZEPPELIN_INTERPRETERS); - interpreterClassList = replsConf.split(","); - - GsonBuilder builder = new GsonBuilder(); - builder.setPrettyPrinting(); - builder.registerTypeAdapter(Interpreter.class, new InterpreterSerializer()); - gson = builder.create(); - - init(); - } - - private void init() throws InterpreterException, IOException { - ClassLoader oldcl = Thread.currentThread().getContextClassLoader(); - - // Load classes - File[] interpreterDirs = new File(conf.getInterpreterDir()).listFiles(); - if (interpreterDirs != null) { - for (File path : interpreterDirs) { - logger.info("Reading " + path.getAbsolutePath()); - URL[] urls = null; - try { - urls = recursiveBuildLibList(path); - } catch (MalformedURLException e1) { - logger.error("Can't load jars ", e1); - } - URLClassLoader ccl = new URLClassLoader(urls, oldcl); - - for (String className : interpreterClassList) { - try { - Class.forName(className, true, ccl); - Set<String> keys = Interpreter.registeredInterpreters.keySet(); - for (String intName : keys) { - if (className.equals( - Interpreter.registeredInterpreters.get(intName).getClassName())) { - Interpreter.registeredInterpreters.get(intName).setPath(path.getAbsolutePath()); - logger.info("Interpreter " + intName + " found. class=" + className); - cleanCl.put(path.getAbsolutePath(), ccl); - } - } - } catch (ClassNotFoundException e) { - // nothing to do - } - } - } - } - - loadFromFile(); - - // if no interpreter settings are loaded, create default set - synchronized (interpreterSettings) { - if (interpreterSettings.size() == 0) { - HashMap<String, List<RegisteredInterpreter>> groupClassNameMap = - new HashMap<String, List<RegisteredInterpreter>>(); - - for (String k : Interpreter.registeredInterpreters.keySet()) { - RegisteredInterpreter info = Interpreter.registeredInterpreters.get(k); - - if (!groupClassNameMap.containsKey(info.getGroup())) { - groupClassNameMap.put(info.getGroup(), new LinkedList<RegisteredInterpreter>()); - } - - groupClassNameMap.get(info.getGroup()).add(info); - } - - for (String className : interpreterClassList) { - for (String groupName : groupClassNameMap.keySet()) { - List<RegisteredInterpreter> infos = groupClassNameMap.get(groupName); - - boolean found = false; - Properties p = new Properties(); - for (RegisteredInterpreter info : infos) { - if (found == false && info.getClassName().equals(className)) { - found = true; - } - - for (String k : info.getProperties().keySet()) { - p.put(k, info.getProperties().get(k).getDefaultValue()); - } - } - - if (found) { - // add all interpreters in group - add(groupName, groupName, defaultOption, p); - groupClassNameMap.remove(groupName); - break; - } - } - } - } - } - - for (String settingId : interpreterSettings.keySet()) { - InterpreterSetting setting = interpreterSettings.get(settingId); - logger.info("Interpreter setting group {} : id={}, name={}", - setting.getGroup(), settingId, setting.getName()); - for (Interpreter interpreter : setting.getInterpreterGroup()) { - logger.info(" className = {}", interpreter.getClassName()); - } - } - } - - private void loadFromFile() throws IOException { - GsonBuilder builder = new GsonBuilder(); - builder.setPrettyPrinting(); - builder.registerTypeAdapter(Interpreter.class, new InterpreterSerializer()); - Gson gson = builder.create(); - - File settingFile = new File(conf.getInterpreterSettingPath()); - if (!settingFile.exists()) { - // nothing to read - return; - } - FileInputStream fis = new FileInputStream(settingFile); - InputStreamReader isr = new InputStreamReader(fis); - BufferedReader bufferedReader = new BufferedReader(isr); - StringBuilder sb = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - sb.append(line); - } - isr.close(); - fis.close(); - - String json = sb.toString(); - InterpreterInfoSaving info = gson.fromJson(json, InterpreterInfoSaving.class); - - for (String k : info.interpreterSettings.keySet()) { - InterpreterSetting setting = info.interpreterSettings.get(k); - - // Always use separate interpreter process - // While we decided to turn this feature on always (without providing - // enable/disable option on GUI). - // previously created setting should turn this feature on here. - setting.getOption().setRemote(true); - - InterpreterGroup interpreterGroup = createInterpreterGroup( - setting.getGroup(), - setting.getOption(), - setting.getProperties()); - - InterpreterSetting intpSetting = new InterpreterSetting( - setting.id(), - setting.getName(), - setting.getGroup(), - setting.getOption(), - interpreterGroup); - - interpreterSettings.put(k, intpSetting); - } - - this.interpreterBindings = info.interpreterBindings; - } - - - private void saveToFile() throws IOException { - String jsonString; - - synchronized (interpreterSettings) { - InterpreterInfoSaving info = new InterpreterInfoSaving(); - info.interpreterBindings = interpreterBindings; - info.interpreterSettings = interpreterSettings; - - jsonString = gson.toJson(info); - } - - File settingFile = new File(conf.getInterpreterSettingPath()); - if (!settingFile.exists()) { - settingFile.createNewFile(); - } - - FileOutputStream fos = new FileOutputStream(settingFile, false); - OutputStreamWriter out = new OutputStreamWriter(fos); - out.append(jsonString); - out.close(); - fos.close(); - } - - private RegisteredInterpreter getRegisteredReplInfoFromClassName(String clsName) { - Set<String> keys = Interpreter.registeredInterpreters.keySet(); - for (String intName : keys) { - RegisteredInterpreter info = Interpreter.registeredInterpreters.get(intName); - if (clsName.equals(info.getClassName())) { - return info; - } - } - return null; - } - - /** - * Return ordered interpreter setting list. - * The list does not contain more than one setting from the same interpreter class. - * Order by InterpreterClass (order defined by ZEPPELIN_INTERPRETERS), Interpreter setting name - * @return - */ - public List<String> getDefaultInterpreterSettingList() { - // this list will contain default interpreter setting list - List<String> defaultSettings = new LinkedList<String>(); - - // to ignore the same interpreter group - Map<String, Boolean> interpreterGroupCheck = new HashMap<String, Boolean>(); - - List<InterpreterSetting> sortedSettings = get(); - - for (InterpreterSetting setting : sortedSettings) { - if (defaultSettings.contains(setting.id())) { - continue; - } - - if (!interpreterGroupCheck.containsKey(setting.getGroup())) { - defaultSettings.add(setting.id()); - interpreterGroupCheck.put(setting.getGroup(), true); - } - } - return defaultSettings; - } - - public List<RegisteredInterpreter> getRegisteredInterpreterList() { - List<RegisteredInterpreter> registeredInterpreters = new LinkedList<RegisteredInterpreter>(); - - for (String className : interpreterClassList) { - registeredInterpreters.add(Interpreter.findRegisteredInterpreterByClassName(className)); - } - - return registeredInterpreters; - } - - /** - * @param name user defined name - * @param groupName interpreter group name to instantiate - * @param properties - * @return - * @throws InterpreterException - * @throws IOException - */ - public InterpreterGroup add(String name, String groupName, - InterpreterOption option, Properties properties) - throws InterpreterException, IOException { - synchronized (interpreterSettings) { - InterpreterGroup interpreterGroup = createInterpreterGroup(groupName, option, properties); - - InterpreterSetting intpSetting = new InterpreterSetting( - name, - groupName, - option, - interpreterGroup); - interpreterSettings.put(intpSetting.id(), intpSetting); - - saveToFile(); - return interpreterGroup; - } - } - - private InterpreterGroup createInterpreterGroup(String groupName, - InterpreterOption option, - Properties properties) - throws InterpreterException { - InterpreterGroup interpreterGroup = new InterpreterGroup(); - - for (String className : interpreterClassList) { - Set<String> keys = Interpreter.registeredInterpreters.keySet(); - for (String intName : keys) { - RegisteredInterpreter info = Interpreter.registeredInterpreters - .get(intName); - if (info.getClassName().equals(className) - && info.getGroup().equals(groupName)) { - Interpreter intp; - - if (option.isRemote()) { - intp = createRemoteRepl(info.getPath(), - info.getClassName(), - properties); - } else { - intp = createRepl(info.getPath(), - info.getClassName(), - properties); - } - interpreterGroup.add(intp); - intp.setInterpreterGroup(interpreterGroup); - break; - } - } - } - return interpreterGroup; - } - - public void remove(String id) throws IOException { - synchronized (interpreterSettings) { - if (interpreterSettings.containsKey(id)) { - InterpreterSetting intp = interpreterSettings.get(id); - intp.getInterpreterGroup().close(); - intp.getInterpreterGroup().destroy(); - - interpreterSettings.remove(id); - for (List<String> settings : interpreterBindings.values()) { - Iterator<String> it = settings.iterator(); - while (it.hasNext()) { - String settingId = it.next(); - if (settingId.equals(id)) { - it.remove(); - } - } - } - saveToFile(); - } - } - } - - /** - * Get loaded interpreters - * @return - */ - public List<InterpreterSetting> get() { - synchronized (interpreterSettings) { - List<InterpreterSetting> orderedSettings = new LinkedList<InterpreterSetting>(); - List<InterpreterSetting> settings = new LinkedList<InterpreterSetting>( - interpreterSettings.values()); - Collections.sort(settings, new Comparator<InterpreterSetting>(){ - @Override - public int compare(InterpreterSetting o1, InterpreterSetting o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - - for (String className : interpreterClassList) { - for (InterpreterSetting setting : settings) { - for (InterpreterSetting orderedSetting : orderedSettings) { - if (orderedSetting.id().equals(setting.id())) { - continue; - } - } - - for (Interpreter intp : setting.getInterpreterGroup()) { - if (className.equals(intp.getClassName())) { - boolean alreadyAdded = false; - for (InterpreterSetting st : orderedSettings) { - if (setting.id().equals(st.id())) { - alreadyAdded = true; - } - } - if (alreadyAdded == false) { - orderedSettings.add(setting); - } - } - } - } - } - return orderedSettings; - } - } - - public InterpreterSetting get(String name) { - synchronized (interpreterSettings) { - return interpreterSettings.get(name); - } - } - - public void putNoteInterpreterSettingBinding(String noteId, - List<String> settingList) throws IOException { - synchronized (interpreterSettings) { - interpreterBindings.put(noteId, settingList); - saveToFile(); - } - } - - public void removeNoteInterpreterSettingBinding(String noteId) { - synchronized (interpreterSettings) { - interpreterBindings.remove(noteId); - } - } - - public List<String> getNoteInterpreterSettingBinding(String noteId) { - LinkedList<String> bindings = new LinkedList<String>(); - synchronized (interpreterSettings) { - List<String> settingIds = interpreterBindings.get(noteId); - if (settingIds != null) { - bindings.addAll(settingIds); - } - } - return bindings; - } - - /** - * Change interpreter property and restart - * @param name - * @param properties - * @throws IOException - */ - public void setPropertyAndRestart(String id, InterpreterOption option, - Properties properties) throws IOException { - synchronized (interpreterSettings) { - InterpreterSetting intpsetting = interpreterSettings.get(id); - if (intpsetting != null) { - intpsetting.getInterpreterGroup().close(); - intpsetting.getInterpreterGroup().destroy(); - - intpsetting.setOption(option); - - InterpreterGroup interpreterGroup = createInterpreterGroup( - intpsetting.getGroup(), option, properties); - intpsetting.setInterpreterGroup(interpreterGroup); - saveToFile(); - } else { - throw new InterpreterException("Interpreter setting id " + id - + " not found"); - } - } - } - - public void restart(String id) { - synchronized (interpreterSettings) { - synchronized (interpreterSettings) { - InterpreterSetting intpsetting = interpreterSettings.get(id); - if (intpsetting != null) { - intpsetting.getInterpreterGroup().close(); - intpsetting.getInterpreterGroup().destroy(); - - InterpreterGroup interpreterGroup = createInterpreterGroup( - intpsetting.getGroup(), intpsetting.getOption(), intpsetting.getProperties()); - intpsetting.setInterpreterGroup(interpreterGroup); - } else { - throw new InterpreterException("Interpreter setting id " + id - + " not found"); - } - } - } - } - - - public void close() { - synchronized (interpreterSettings) { - synchronized (interpreterSettings) { - Collection<InterpreterSetting> intpsettings = interpreterSettings.values(); - for (InterpreterSetting intpsetting : intpsettings) { - intpsetting.getInterpreterGroup().close(); - intpsetting.getInterpreterGroup().destroy(); - } - } - } - } - - private Interpreter createRepl(String dirName, String className, - Properties property) - throws InterpreterException { - logger.info("Create repl {} from {}", className, dirName); - - ClassLoader oldcl = Thread.currentThread().getContextClassLoader(); - try { - - URLClassLoader ccl = cleanCl.get(dirName); - if (ccl == null) { - // classloader fallback - ccl = URLClassLoader.newInstance(new URL[] {}, oldcl); - } - - boolean separateCL = true; - try { // check if server's classloader has driver already. - Class cls = this.getClass().forName(className); - if (cls != null) { - separateCL = false; - } - } catch (Exception e) { - // nothing to do. - } - - URLClassLoader cl; - - if (separateCL == true) { - cl = URLClassLoader.newInstance(new URL[] {}, ccl); - } else { - cl = ccl; - } - Thread.currentThread().setContextClassLoader(cl); - - Class<Interpreter> replClass = (Class<Interpreter>) cl.loadClass(className); - Constructor<Interpreter> constructor = - replClass.getConstructor(new Class[] {Properties.class}); - Interpreter repl = constructor.newInstance(property); - repl.setClassloaderUrls(ccl.getURLs()); - LazyOpenInterpreter intp = new LazyOpenInterpreter( - new ClassloaderInterpreter(repl, cl)); - return intp; - } catch (SecurityException e) { - throw new InterpreterException(e); - } catch (NoSuchMethodException e) { - throw new InterpreterException(e); - } catch (IllegalArgumentException e) { - throw new InterpreterException(e); - } catch (InstantiationException e) { - throw new InterpreterException(e); - } catch (IllegalAccessException e) { - throw new InterpreterException(e); - } catch (InvocationTargetException e) { - throw new InterpreterException(e); - } catch (ClassNotFoundException e) { - throw new InterpreterException(e); - } finally { - Thread.currentThread().setContextClassLoader(oldcl); - } - } - - - private Interpreter createRemoteRepl(String interpreterPath, String className, - Properties property) { - - LazyOpenInterpreter intp = new LazyOpenInterpreter(new RemoteInterpreter( - property, className, conf.getInterpreterRemoteRunnerPath(), interpreterPath)); - return intp; - } - - - private URL[] recursiveBuildLibList(File path) throws MalformedURLException { - URL[] urls = new URL[0]; - if (path == null || path.exists() == false) { - return urls; - } else if (path.getName().startsWith(".")) { - return urls; - } else if (path.isDirectory()) { - File[] files = path.listFiles(); - if (files != null) { - for (File f : files) { - urls = (URL[]) ArrayUtils.addAll(urls, recursiveBuildLibList(f)); - } - } - return urls; - } else { - return new URL[] {path.toURI().toURL()}; - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterInfoSaving.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterInfoSaving.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterInfoSaving.java deleted file mode 100644 index 02335ae..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterInfoSaving.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.nflabs.zeppelin.interpreter; - -import java.util.List; -import java.util.Map; - -/** - * - */ -public class InterpreterInfoSaving { - public Map<String, InterpreterSetting> interpreterSettings; - public Map<String, List<String>> interpreterBindings; -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterOption.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterOption.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterOption.java deleted file mode 100644 index 614cc79..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterOption.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.nflabs.zeppelin.interpreter; - -/** - * - */ -public class InterpreterOption { - boolean remote; - - public InterpreterOption() { - remote = false; - } - - public InterpreterOption(boolean remote) { - this.remote = remote; - } - - public boolean isRemote() { - return remote; - } - - public void setRemote(boolean remote) { - this.remote = remote; - } -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSerializer.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSerializer.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSerializer.java deleted file mode 100644 index 4d70ccd..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSerializer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.nflabs.zeppelin.interpreter; - -import java.lang.reflect.Type; - -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; - - -/** - * Interpreter class serializer for gson - * - */ -public class InterpreterSerializer implements JsonSerializer<Interpreter>, - JsonDeserializer<Interpreter> { - - @Override - public JsonElement serialize(Interpreter interpreter, Type type, - JsonSerializationContext context) { - JsonObject json = new JsonObject(); - json.addProperty("class", interpreter.getClassName()); - json.addProperty( - "name", - Interpreter.findRegisteredInterpreterByClassName( - interpreter.getClassName()).getName()); - return json; - } - - @Override - public Interpreter deserialize(JsonElement json, Type typeOfT, - JsonDeserializationContext context) throws JsonParseException { - return null; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSetting.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSetting.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSetting.java deleted file mode 100644 index 3d0a017..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/interpreter/InterpreterSetting.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.nflabs.zeppelin.interpreter; - -import java.util.Properties; -import java.util.Random; - -import com.nflabs.zeppelin.notebook.utility.IdHashes; - -/** - * Interpreter settings - */ -public class InterpreterSetting { - private String id; - private String name; - private String group; - private String description; - private Properties properties; - private InterpreterGroup interpreterGroup; - private InterpreterOption option; - - public InterpreterSetting(String id, String name, - String group, - InterpreterOption option, - InterpreterGroup interpreterGroup) { - this.id = id; - this.name = name; - this.group = group; - this.properties = interpreterGroup.getProperty(); - this.option = option; - this.interpreterGroup = interpreterGroup; - } - - public InterpreterSetting(String name, - String group, - InterpreterOption option, - InterpreterGroup interpreterGroup) { - this(generateId(), name, group, option, interpreterGroup); - } - - public String id() { - return id; - } - - private static String generateId() { - return IdHashes.encode(System.currentTimeMillis() + new Random().nextInt()); - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String desc) { - this.description = desc; - } - - public String getGroup() { - return group; - } - - public InterpreterGroup getInterpreterGroup() { - return interpreterGroup; - } - - public void setInterpreterGroup(InterpreterGroup interpreterGroup) { - this.interpreterGroup = interpreterGroup; - this.properties = interpreterGroup.getProperty(); - } - - public Properties getProperties() { - return properties; - } - - public InterpreterOption getOption() { - if (option == null) { - option = new InterpreterOption(); - } - - return option; - } - - public void setOption(InterpreterOption option) { - this.option = option; - } -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/JobListenerFactory.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/JobListenerFactory.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/JobListenerFactory.java deleted file mode 100644 index ef69b2a..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/JobListenerFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.nflabs.zeppelin.notebook; - -import com.nflabs.zeppelin.scheduler.JobListener; - -/** - * TODO(moon): provide description. - * - * @author Leemoonsoo - * - */ -public interface JobListenerFactory { - public JobListener getParagraphJobListener(Note note); -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Note.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Note.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Note.java deleted file mode 100644 index df0a91d..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Note.java +++ /dev/null @@ -1,350 +0,0 @@ -package com.nflabs.zeppelin.notebook; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import com.nflabs.zeppelin.interpreter.InterpreterException; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.nflabs.zeppelin.conf.ZeppelinConfiguration; -import com.nflabs.zeppelin.conf.ZeppelinConfiguration.ConfVars; -import com.nflabs.zeppelin.interpreter.Interpreter; -import com.nflabs.zeppelin.notebook.utility.IdHashes; -import com.nflabs.zeppelin.scheduler.Job; -import com.nflabs.zeppelin.scheduler.Job.Status; -import com.nflabs.zeppelin.scheduler.JobListener; -import com.nflabs.zeppelin.scheduler.Scheduler; - -/** - * Binded interpreters for a note - */ -public class Note implements Serializable, JobListener { - transient Logger logger = LoggerFactory.getLogger(Note.class); - List<Paragraph> paragraphs = new LinkedList<Paragraph>(); - private String name; - private String id; - - private transient NoteInterpreterLoader replLoader; - private transient ZeppelinConfiguration conf; - private transient JobListenerFactory jobListenerFactory; - - /** - * note configurations. - * - * - looknfeel - cron - */ - private Map<String, Object> config = new HashMap<String, Object>(); - - /** - * note information. - * - * - cron : cron expression validity. - */ - private Map<String, Object> info = new HashMap<String, Object>(); - - public Note() {} - - public Note(ZeppelinConfiguration conf, NoteInterpreterLoader replLoader, - JobListenerFactory jobListenerFactory, org.quartz.Scheduler quartzSched) { - this.conf = conf; - this.replLoader = replLoader; - this.jobListenerFactory = jobListenerFactory; - generateId(); - } - - private void generateId() { - id = IdHashes.encode(System.currentTimeMillis() + new Random().nextInt()); - } - - public String id() { - return id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public NoteInterpreterLoader getNoteReplLoader() { - return replLoader; - } - - public void setReplLoader(NoteInterpreterLoader replLoader) { - this.replLoader = replLoader; - } - - public void setZeppelinConfiguration(ZeppelinConfiguration conf) { - this.conf = conf; - } - - /** - * Add paragraph last. - * - * @param p - */ - public Paragraph addParagraph() { - Paragraph p = new Paragraph(this, replLoader); - synchronized (paragraphs) { - paragraphs.add(p); - } - return p; - } - - /** - * Insert paragraph in given index. - * - * @param index - * @param p - */ - public Paragraph insertParagraph(int index) { - Paragraph p = new Paragraph(this, replLoader); - synchronized (paragraphs) { - paragraphs.add(index, p); - } - return p; - } - - /** - * Remove paragraph by id. - * - * @param paragraphId - * @return - */ - public Paragraph removeParagraph(String paragraphId) { - synchronized (paragraphs) { - for (int i = 0; i < paragraphs.size(); i++) { - Paragraph p = paragraphs.get(i); - if (p.getId().equals(paragraphId)) { - paragraphs.remove(i); - return p; - } - } - } - return null; - } - - /** - * Move paragraph into the new index (order from 0 ~ n-1). - * - * @param paragraphId - * @param index new index - */ - public void moveParagraph(String paragraphId, int index) { - synchronized (paragraphs) { - int oldIndex = -1; - Paragraph p = null; - - if (index < 0 || index >= paragraphs.size()) { - return; - } - - for (int i = 0; i < paragraphs.size(); i++) { - if (paragraphs.get(i).getId().equals(paragraphId)) { - oldIndex = i; - if (oldIndex == index) { - return; - } - p = paragraphs.remove(i); - } - } - - if (p == null) { - return; - } else { - if (oldIndex < index) { - paragraphs.add(index, p); - } else { - paragraphs.add(index, p); - } - } - } - } - - public boolean isLastParagraph(String paragraphId) { - if (!paragraphs.isEmpty()) { - synchronized (paragraphs) { - if (paragraphId.equals(paragraphs.get(paragraphs.size() - 1).getId())) { - return true; - } - } - return false; - } - /** because empty list, cannot remove nothing right? */ - return true; - } - - public Paragraph getParagraph(String paragraphId) { - synchronized (paragraphs) { - for (Paragraph p : paragraphs) { - if (p.getId().equals(paragraphId)) { - return p; - } - } - } - return null; - } - - public Paragraph getLastParagraph() { - synchronized (paragraphs) { - return paragraphs.get(paragraphs.size() - 1); - } - } - - /** - * Run all paragraphs sequentially. - * - * @param jobListener - */ - public void runAll() { - synchronized (paragraphs) { - for (Paragraph p : paragraphs) { - p.setNoteReplLoader(replLoader); - p.setListener(jobListenerFactory.getParagraphJobListener(this)); - Interpreter intp = replLoader.get(p.getRequiredReplName()); - intp.getScheduler().submit(p); - } - } - } - - /** - * Run a single paragraph. - * - * @param paragraphId - */ - public void run(String paragraphId) { - Paragraph p = getParagraph(paragraphId); - p.setNoteReplLoader(replLoader); - p.setListener(jobListenerFactory.getParagraphJobListener(this)); - Interpreter intp = replLoader.get(p.getRequiredReplName()); - if (intp == null) { - throw new InterpreterException("Interpreter " + p.getRequiredReplName() + " not found"); - } - intp.getScheduler().submit(p); - } - - public List<String> completion(String paragraphId, String buffer, int cursor) { - Paragraph p = getParagraph(paragraphId); - p.setNoteReplLoader(replLoader); - p.setListener(jobListenerFactory.getParagraphJobListener(this)); - return p.completion(buffer, cursor); - } - - public List<Paragraph> getParagraphs() { - synchronized (paragraphs) { - return new LinkedList<Paragraph>(paragraphs); - } - } - - public void persist() throws IOException { - GsonBuilder gsonBuilder = new GsonBuilder(); - gsonBuilder.setPrettyPrinting(); - Gson gson = gsonBuilder.create(); - - File dir = new File(conf.getNotebookDir() + "/" + id); - if (!dir.exists()) { - dir.mkdirs(); - } else if (dir.isFile()) { - throw new RuntimeException("File already exists" + dir.toString()); - } - - File file = new File(conf.getNotebookDir() + "/" + id + "/note.json"); - logger().info("Persist note {} into {}", id, file.getAbsolutePath()); - - String json = gson.toJson(this); - FileOutputStream out = new FileOutputStream(file); - out.write(json.getBytes(conf.getString(ConfVars.ZEPPELIN_ENCODING))); - out.close(); - } - - public void unpersist() throws IOException { - File dir = new File(conf.getNotebookDir() + "/" + id); - - FileUtils.deleteDirectory(dir); - } - - public static Note load(String id, ZeppelinConfiguration conf, NoteInterpreterLoader replLoader, - Scheduler scheduler, JobListenerFactory jobListenerFactory, org.quartz.Scheduler quartzSched) - throws IOException { - GsonBuilder gsonBuilder = new GsonBuilder(); - gsonBuilder.setPrettyPrinting(); - Gson gson = gsonBuilder.create(); - - File file = new File(conf.getNotebookDir() + "/" + id + "/note.json"); - logger().info("Load note {} from {}", id, file.getAbsolutePath()); - - if (!file.isFile()) { - return null; - } - - FileInputStream ins = new FileInputStream(file); - String json = IOUtils.toString(ins, conf.getString(ConfVars.ZEPPELIN_ENCODING)); - Note note = gson.fromJson(json, Note.class); - note.setZeppelinConfiguration(conf); - note.setReplLoader(replLoader); - note.jobListenerFactory = jobListenerFactory; - for (Paragraph p : note.paragraphs) { - if (p.getStatus() == Status.PENDING || p.getStatus() == Status.RUNNING) { - p.setStatus(Status.ABORT); - } - } - - return note; - } - - public Map<String, Object> getConfig() { - if (config == null) { - config = new HashMap<String, Object>(); - } - return config; - } - - public void setConfig(Map<String, Object> config) { - this.config = config; - } - - public Map<String, Object> getInfo() { - if (info == null) { - info = new HashMap<String, Object>(); - } - return info; - } - - public void setInfo(Map<String, Object> info) { - this.info = info; - } - - @Override - public void beforeStatusChange(Job job, Status before, Status after) { - Paragraph p = (Paragraph) job; - } - - @Override - public void afterStatusChange(Job job, Status before, Status after) { - Paragraph p = (Paragraph) job; - } - - private static Logger logger() { - Logger logger = LoggerFactory.getLogger(Note.class); - return logger; - } - - @Override - public void onProgressUpdate(Job job, int progress) {} - -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/NoteInterpreterLoader.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/NoteInterpreterLoader.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/NoteInterpreterLoader.java deleted file mode 100644 index ba570f6..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/NoteInterpreterLoader.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.nflabs.zeppelin.notebook; - -import java.io.IOException; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import com.nflabs.zeppelin.interpreter.Interpreter; -import com.nflabs.zeppelin.interpreter.InterpreterException; -import com.nflabs.zeppelin.interpreter.InterpreterFactory; -import com.nflabs.zeppelin.interpreter.InterpreterGroup; -import com.nflabs.zeppelin.interpreter.InterpreterSetting; - -/** - * Repl loader per note. - */ -public class NoteInterpreterLoader { - private transient InterpreterFactory factory; - String noteId; - - public NoteInterpreterLoader(InterpreterFactory factory) { - this.factory = factory; - } - - public void setNoteId(String noteId) { - this.noteId = noteId; - } - - /** - * set interpreter ids - * @param ids InterpreterSetting id list - * @throws IOException - */ - public void setInterpreters(List<String> ids) throws IOException { - factory.putNoteInterpreterSettingBinding(noteId, ids); - } - - public List<String> getInterpreters() { - return factory.getNoteInterpreterSettingBinding(noteId); - } - - public List<InterpreterSetting> getInterpreterSettings() { - List<String> interpreterSettingIds = factory.getNoteInterpreterSettingBinding(noteId); - LinkedList<InterpreterSetting> settings = new LinkedList<InterpreterSetting>(); - synchronized (interpreterSettingIds) { - for (String id : interpreterSettingIds) { - InterpreterSetting setting = factory.get(id); - if (setting == null) { - // interpreter setting is removed from factory. remove id from here, too - interpreterSettingIds.remove(id); - } else { - settings.add(setting); - } - } - } - return settings; - } - - public Interpreter get(String replName) { - List<InterpreterSetting> settings = getInterpreterSettings(); - - if (settings == null || settings.size() == 0) { - return null; - } - - if (replName == null) { - return settings.get(0).getInterpreterGroup().getFirst(); - } - - if (Interpreter.registeredInterpreters == null) { - return null; - } - Interpreter.RegisteredInterpreter registeredInterpreter - = Interpreter.registeredInterpreters.get(replName); - if (registeredInterpreter == null || registeredInterpreter.getClassName() == null) { - throw new InterpreterException(replName + " interpreter not found"); - } - String interpreterClassName = registeredInterpreter.getClassName(); - for (InterpreterSetting setting : settings) { - InterpreterGroup intpGroup = setting.getInterpreterGroup(); - for (Interpreter interpreter : intpGroup) { - if (interpreterClassName.equals(interpreter.getClassName())) { - return interpreter; - } - } - } - - return null; - } -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Notebook.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Notebook.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Notebook.java deleted file mode 100644 index fb92964..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Notebook.java +++ /dev/null @@ -1,283 +0,0 @@ -package com.nflabs.zeppelin.notebook; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import org.quartz.CronScheduleBuilder; -import org.quartz.CronTrigger; -import org.quartz.JobBuilder; -import org.quartz.JobDetail; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.quartz.JobKey; -import org.quartz.SchedulerException; -import org.quartz.TriggerBuilder; -import org.quartz.impl.StdSchedulerFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.nflabs.zeppelin.conf.ZeppelinConfiguration; -import com.nflabs.zeppelin.conf.ZeppelinConfiguration.ConfVars; -import com.nflabs.zeppelin.interpreter.InterpreterFactory; -import com.nflabs.zeppelin.interpreter.InterpreterSetting; -import com.nflabs.zeppelin.scheduler.Scheduler; -import com.nflabs.zeppelin.scheduler.SchedulerFactory; - -/** - * Collection of Notes. - */ -public class Notebook { - Logger logger = LoggerFactory.getLogger(Notebook.class); - private SchedulerFactory schedulerFactory; - private InterpreterFactory replFactory; - /** Keep the order. */ - Map<String, Note> notes = new LinkedHashMap<String, Note>(); - private ZeppelinConfiguration conf; - private StdSchedulerFactory quertzSchedFact; - private org.quartz.Scheduler quartzSched; - private JobListenerFactory jobListenerFactory; - - public Notebook(ZeppelinConfiguration conf, SchedulerFactory schedulerFactory, - InterpreterFactory replFactory, JobListenerFactory jobListenerFactory) throws IOException, - SchedulerException { - this.conf = conf; - this.schedulerFactory = schedulerFactory; - this.replFactory = replFactory; - this.jobListenerFactory = jobListenerFactory; - quertzSchedFact = new org.quartz.impl.StdSchedulerFactory(); - quartzSched = quertzSchedFact.getScheduler(); - quartzSched.start(); - CronJob.notebook = this; - - loadAllNotes(); - } - - /** - * Create new note. - * - * @return - * @throws IOException - */ - public Note createNote() throws IOException { - if (conf.getBoolean(ConfVars.ZEPPELIN_NOTEBOOK_AUTO_INTERPRETER_BINDING)) { - return createNote(replFactory.getDefaultInterpreterSettingList()); - } else { - return createNote(null); - } - } - - /** - * Create new note. - * - * @return - * @throws IOException - */ - public Note createNote(List<String> interpreterIds) throws IOException { - NoteInterpreterLoader intpLoader = new NoteInterpreterLoader(replFactory); - Note note = new Note(conf, intpLoader, jobListenerFactory, quartzSched); - intpLoader.setNoteId(note.id()); - synchronized (notes) { - notes.put(note.id(), note); - } - if (interpreterIds != null) { - bindInterpretersToNote(note.id(), interpreterIds); - } - - return note; - } - - public void bindInterpretersToNote(String id, - List<String> interpreterSettingIds) throws IOException { - Note note = getNote(id); - if (note != null) { - note.getNoteReplLoader().setInterpreters(interpreterSettingIds); - replFactory.putNoteInterpreterSettingBinding(id, interpreterSettingIds); - } - } - - public List<String> getBindedInterpreterSettingsIds(String id) { - Note note = getNote(id); - if (note != null) { - return note.getNoteReplLoader().getInterpreters(); - } else { - return new LinkedList<String>(); - } - } - - public List<InterpreterSetting> getBindedInterpreterSettings(String id) { - Note note = getNote(id); - if (note != null) { - return note.getNoteReplLoader().getInterpreterSettings(); - } else { - return new LinkedList<InterpreterSetting>(); - } - } - - public Note getNote(String id) { - synchronized (notes) { - return notes.get(id); - } - } - - public void removeNote(String id) { - Note note; - synchronized (notes) { - note = notes.remove(id); - } - try { - note.unpersist(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - private void loadAllNotes() throws IOException { - File notebookDir = new File(conf.getNotebookDir()); - File[] dirs = notebookDir.listFiles(); - if (dirs == null) { - return; - } - for (File f : dirs) { - boolean isHidden = f.getName().startsWith("."); - if (f.isDirectory() && !isHidden) { - Scheduler scheduler = - schedulerFactory.createOrGetFIFOScheduler("note_" + System.currentTimeMillis()); - logger.info("Loading note from " + f.getName()); - NoteInterpreterLoader noteInterpreterLoader = new NoteInterpreterLoader(replFactory); - Note note = Note.load(f.getName(), - conf, - noteInterpreterLoader, - scheduler, - jobListenerFactory, quartzSched); - noteInterpreterLoader.setNoteId(note.id()); - - synchronized (notes) { - notes.put(note.id(), note); - refreshCron(note.id()); - } - } - } - } - - public List<Note> getAllNotes() { - synchronized (notes) { - List<Note> noteList = new ArrayList<Note>(notes.values()); - logger.info("" + noteList.size()); - Collections.sort(noteList, new Comparator() { - @Override - public int compare(Object one, Object two) { - Note note1 = (Note) one; - Note note2 = (Note) two; - - String name1 = note1.id(); - if (note1.getName() != null) { - name1 = note1.getName(); - } - String name2 = note2.id(); - if (note2.getName() != null) { - name2 = note2.getName(); - } - ((Note) one).getName(); - return name1.compareTo(name2); - } - }); - return noteList; - } - } - - public JobListenerFactory getJobListenerFactory() { - return jobListenerFactory; - } - - public void setJobListenerFactory(JobListenerFactory jobListenerFactory) { - this.jobListenerFactory = jobListenerFactory; - } - - /** - * Cron task for the note. - * - * @author Leemoonsoo - * - */ - public static class CronJob implements org.quartz.Job { - public static Notebook notebook; - - @Override - public void execute(JobExecutionContext context) throws JobExecutionException { - - String noteId = context.getJobDetail().getJobDataMap().getString("noteId"); - Note note = notebook.getNote(noteId); - note.runAll(); - } - } - - public void refreshCron(String id) { - removeCron(id); - synchronized (notes) { - - Note note = notes.get(id); - if (note == null) { - return; - } - Map<String, Object> config = note.getConfig(); - if (config == null) { - return; - } - - String cronExpr = (String) note.getConfig().get("cron"); - if (cronExpr == null || cronExpr.trim().length() == 0) { - return; - } - - - JobDetail newJob = - JobBuilder.newJob(CronJob.class).withIdentity(id, "note").usingJobData("noteId", id) - .build(); - - Map<String, Object> info = note.getInfo(); - info.put("cron", null); - - CronTrigger trigger = null; - try { - trigger = - TriggerBuilder.newTrigger().withIdentity("trigger_" + id, "note") - .withSchedule(CronScheduleBuilder.cronSchedule(cronExpr)).forJob(id, "note") - .build(); - } catch (Exception e) { - logger.error("Error", e); - info.put("cron", e.getMessage()); - } - - - try { - if (trigger != null) { - quartzSched.scheduleJob(newJob, trigger); - } - } catch (SchedulerException e) { - logger.error("Error", e); - info.put("cron", "Scheduler Exception"); - } - } - } - - private void removeCron(String id) { - try { - quartzSched.deleteJob(new JobKey(id, "note")); - } catch (SchedulerException e) { - logger.error("Can't remove quertz " + id, e); - } - } - - public InterpreterFactory getInterpreterFactory() { - return replFactory; - } - - -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Paragraph.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Paragraph.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Paragraph.java deleted file mode 100644 index aabd5de..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/Paragraph.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.nflabs.zeppelin.notebook; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.nflabs.zeppelin.display.GUI; -import com.nflabs.zeppelin.display.Input; -import com.nflabs.zeppelin.interpreter.Interpreter; -import com.nflabs.zeppelin.interpreter.Interpreter.FormType; -import com.nflabs.zeppelin.interpreter.InterpreterContext; -import com.nflabs.zeppelin.interpreter.InterpreterResult; -import com.nflabs.zeppelin.scheduler.Job; -import com.nflabs.zeppelin.scheduler.JobListener; - -/** - * Paragraph is a representation of an execution unit. - * - * @author Leemoonsoo - */ -public class Paragraph extends Job implements Serializable { - private static final transient long serialVersionUID = -6328572073497992016L; - private transient NoteInterpreterLoader replLoader; - - String title; - String text; - private Map<String, Object> config; // paragraph configs like isOpen, colWidth, etc - public final GUI settings; // form and parameter settings - - public Paragraph(JobListener listener, NoteInterpreterLoader replLoader) { - super(generateId(), listener); - this.replLoader = replLoader; - title = null; - text = null; - settings = new GUI(); - config = new HashMap<String, Object>(); - } - - private static String generateId() { - return "paragraph_" + System.currentTimeMillis() + "_" - + new Random(System.currentTimeMillis()).nextInt(); - } - - public String getText() { - return text; - } - - public void setText(String newText) { - this.text = newText; - } - - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getRequiredReplName() { - return getRequiredReplName(text); - } - - public static String getRequiredReplName(String text) { - if (text == null) { - return null; - } - - // get script head - int scriptHeadIndex = 0; - for (int i = 0; i < text.length(); i++) { - char ch = text.charAt(i); - if (ch == ' ' || ch == '\n') { - scriptHeadIndex = i; - break; - } - } - if (scriptHeadIndex == 0) { - return null; - } - String head = text.substring(0, scriptHeadIndex); - if (head.startsWith("%")) { - return head.substring(1); - } else { - return null; - } - } - - private String getScriptBody() { - return getScriptBody(text); - } - - public static String getScriptBody(String text) { - if (text == null) { - return null; - } - - String magic = getRequiredReplName(text); - if (magic == null) { - return text; - } - if (magic.length() + 2 >= text.length()) { - return ""; - } - return text.substring(magic.length() + 2); - } - - public NoteInterpreterLoader getNoteReplLoader() { - return replLoader; - } - - public Interpreter getRepl(String name) { - return replLoader.get(name); - } - - public List<String> completion(String buffer, int cursor) { - String replName = getRequiredReplName(buffer); - if (replName != null) { - cursor -= replName.length() + 1; - } - String body = getScriptBody(buffer); - Interpreter repl = getRepl(replName); - if (repl == null) { - return null; - } - - return repl.completion(body, cursor); - } - - public void setNoteReplLoader(NoteInterpreterLoader repls) { - this.replLoader = repls; - } - - public InterpreterResult getResult() { - return (InterpreterResult) getReturn(); - } - - @Override - public int progress() { - String replName = getRequiredReplName(); - Interpreter repl = getRepl(replName); - if (repl != null) { - return repl.getProgress(getInterpreterContext()); - } else { - return 0; - } - } - - @Override - public Map<String, Object> info() { - return null; - } - - @Override - protected Object jobRun() throws Throwable { - String replName = getRequiredReplName(); - Interpreter repl = getRepl(replName); - logger().info("run paragraph {} using {} " + repl, getId(), replName); - if (repl == null) { - logger().error("Can not find interpreter name " + repl); - throw new RuntimeException("Can not find interpreter for " + getRequiredReplName()); - } - - String script = getScriptBody(); - // inject form - if (repl.getFormType() == FormType.NATIVE) { - settings.clear(); - } else if (repl.getFormType() == FormType.SIMPLE) { - String scriptBody = getScriptBody(); - Map<String, Input> inputs = Input.extractSimpleQueryParam(scriptBody); // inputs will be built - // from script body - settings.setForms(inputs); - script = Input.getSimpleQuery(settings.getParams(), scriptBody); - } - logger().info("RUN : " + script); - InterpreterResult ret = repl.interpret(script, getInterpreterContext()); - return ret; - } - - @Override - protected boolean jobAbort() { - Interpreter repl = getRepl(getRequiredReplName()); - repl.cancel(getInterpreterContext()); - return true; - } - - private InterpreterContext getInterpreterContext() { - InterpreterContext interpreterContext = new InterpreterContext(getId(), - this.getTitle(), - this.getText(), - this.getConfig(), - this.settings); - return interpreterContext; - } - - private Logger logger() { - Logger logger = LoggerFactory.getLogger(Paragraph.class); - return logger; - } - - - public Map<String, Object> getConfig() { - return config; - } - - public void setConfig(Map<String, Object> config) { - this.config = config; - } - - public void setReturn(InterpreterResult value, Throwable t) { - setResult(value); - setException(t); - - } -} http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/669d408d/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/utility/IdHashes.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/utility/IdHashes.java b/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/utility/IdHashes.java deleted file mode 100644 index 65229bb..0000000 --- a/zeppelin-zengine/src/main/java/com/nflabs/zeppelin/notebook/utility/IdHashes.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.nflabs.zeppelin.notebook.utility; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; - -/** - * Generate Tiny ID. - * - * @author anthonycorbacho - * - */ -public class IdHashes { - public static final char[] DICTIONARY = new char[] {'1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', - 'V', 'W', 'X', 'Y', 'Z'}; - - /** - * encodes the given string into the base of the dictionary provided in the constructor. - * - * @param value the number to encode. - * @return the encoded string. - */ - public static String encode(Long value) { - - List<Character> result = new ArrayList<Character>(); - BigInteger base = new BigInteger("" + DICTIONARY.length); - int exponent = 1; - BigInteger remaining = new BigInteger(value.toString()); - while (true) { - BigInteger a = base.pow(exponent); // 16^1 = 16 - BigInteger b = remaining.mod(a); // 119 % 16 = 7 | 112 % 256 = 112 - BigInteger c = base.pow(exponent - 1); - BigInteger d = b.divide(c); - - // if d > dictionary.length, we have a problem. but BigInteger doesnt have - // a greater than method :-( hope for the best. theoretically, d is always - // an index of the dictionary! - result.add(DICTIONARY[d.intValue()]); - remaining = remaining.subtract(b); // 119 - 7 = 112 | 112 - 112 = 0 - - // finished? - if (remaining.equals(BigInteger.ZERO)) { - break; - } - - exponent++; - } - - // need to reverse it, since the start of the list contains the least significant values - StringBuffer sb = new StringBuffer(); - for (int i = result.size() - 1; i >= 0; i--) { - sb.append(result.get(i)); - } - return sb.toString(); - } -}
