diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/HeliumRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/HeliumRestApi.java index 5afcab9a22..29bc8fb5f5 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/HeliumRestApi.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/HeliumRestApi.java @@ -195,7 +195,7 @@ public class HeliumRestApi { @Path("config") public Response getAllPackageConfigs() { try { - Map>> config = helium.getAllPackageConfig(); + Map> config = helium.getAllPackageConfig(); return new JsonResponse(Response.Status.OK, config).build(); } catch (RuntimeException e) { logger.error(e.getMessage(), e); @@ -204,18 +204,17 @@ public class HeliumRestApi { } @GET - @Path("config/{packageName}/{packageVersion}") - public Response getPackageConfig(@PathParam("packageName") String packageName, - @PathParam("packageVersion") String packageVersion) { + @Path("config/{artifact}") + public Response getPackageConfig(@PathParam("artifact") String artifact) { - if (StringUtils.isEmpty(packageName) || StringUtils.isEmpty(packageVersion)) { + if (StringUtils.isEmpty(artifact)) { return new JsonResponse(Response.Status.BAD_REQUEST, "package name or version is empty" ).build(); } try { - Map config = helium.getPackageConfig(packageName, packageVersion); + Map config = helium.getPackageConfig(artifact); return new JsonResponse(Response.Status.OK, config).build(); } catch (RuntimeException e) { logger.error(e.getMessage(), e); @@ -224,9 +223,8 @@ public class HeliumRestApi { } @POST - @Path("config/{packageName}/{packageVersion}") - public Response updatePackageConfig(@PathParam("packageName") String packageName, - @PathParam("packageVersion") String packageVersion, + @Path("config/{artifact}") + public Response updatePackageConfig(@PathParam("artifact") String artifact, String rawConfig) { Map packageConfig = null; @@ -234,7 +232,7 @@ public class HeliumRestApi { try { packageConfig = gson.fromJson( rawConfig, new TypeToken>(){}.getType()); - helium.updatePackageConfig(packageName, packageVersion, packageConfig); + helium.updatePackageConfig(artifact, packageConfig); } catch (JsonParseException e) { logger.error(e.getMessage(), e); return new JsonResponse(Response.Status.BAD_REQUEST, diff --git a/zeppelin-web/src/app/helium/helium.controller.js b/zeppelin-web/src/app/helium/helium.controller.js index 81702982a4..2ecd8f52cd 100644 --- a/zeppelin-web/src/app/helium/helium.controller.js +++ b/zeppelin-web/src/app/helium/helium.controller.js @@ -211,16 +211,10 @@ export default function HeliumCtrl($scope, $rootScope, $sce, const pkg = pkgSearchResult.pkg; const pkgName = pkg.name; - const pkgVersion = pkg.version; - if (!pkgName || !pkgVersion) { - console.error(`Failed to fetch config for '${pkgSearchResult}@${pkgVersion}'`); - return; - } - - heliumService.getSinglePackageConfigs(pkgName, pkgVersion) - .then(conf => { - $scope.defaultPackageConfigs[pkgName] = conf; + heliumService.getSinglePackageConfigs(pkg) + .then(confs => { + $scope.defaultPackageConfigs[pkgName] = confs; pkgSearchResult.configOpened = true; $scope.$digest(); // to trigger view update }); @@ -228,10 +222,9 @@ export default function HeliumCtrl($scope, $rootScope, $sce, $scope.saveConfig = function(pkgSearchResult) { const pkgName = pkgSearchResult.pkg.name; - const pkgVersion = pkgSearchResult.pkg.version; const currentConf = $scope.defaultPackageConfigs[pkgName]; - heliumService.saveConfig(pkgName, pkgVersion, currentConf); + heliumService.saveConfig(pkgSearchResult.pkg, currentConf); }; init(); diff --git a/zeppelin-web/src/components/helium/helium-conf.js b/zeppelin-web/src/components/helium/helium-conf.js index 7eab9326ee..01947dc8f5 100644 --- a/zeppelin-web/src/components/helium/helium-conf.js +++ b/zeppelin-web/src/components/helium/helium-conf.js @@ -65,9 +65,12 @@ export function createAllPackageConfigs(defaultPackages, persistedConfs) { const version = pkgSearchResult.pkg.version; if (!version) { continue; } + const artifact = pkgSearchResult.pkg.artifact; + if (!artifact) { continue; } + let persistedConf = {}; - if (persistedConfs[name] && persistedConfs[name][version]) { - persistedConf = persistedConfs[name][version]; + if (persistedConfs[artifact]) { + persistedConf = persistedConfs[artifact]; } const confs = mergePersistedConfWithSpec(persistedConf, spec); @@ -106,5 +109,3 @@ export function createPersistableConfig(currentConfs) { return filtered; } - - diff --git a/zeppelin-web/src/components/helium/helium.service.js b/zeppelin-web/src/components/helium/helium.service.js index f8969b58c7..7295a1bbf4 100644 --- a/zeppelin-web/src/components/helium/helium.service.js +++ b/zeppelin-web/src/components/helium/helium.service.js @@ -129,16 +129,20 @@ export default function heliumService($http, $sce, baseUrlSrv) { return $http.post(baseUrlSrv.getRestApiBase() + '/helium/disable/' + name); }; - this.saveConfig = function(pkgName, pkgVersion, defaultPackageConfig) { + this.saveConfig = function(pkg , defaultPackageConfig) { + let pkgArtifact = pkg.artifact; const filtered = createPersistableConfig(defaultPackageConfig); - if (!pkgName || !pkgVersion || !filtered) { + if (!pkgArtifact|| !filtered) { console.error( - `Can't save helium package '${pkgName}@${pkgVersion}' config`, filtered); + `Can't save config for helium package '${pkgArtifact}'`, filtered); return; } - const url = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgName}/${pkgVersion}`; + // in case of local package, it will include `/` + pkgArtifact = encodeURIComponent(pkgArtifact); + + const url = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgArtifact}`; return $http.post(url, filtered); }; @@ -219,10 +223,22 @@ export default function heliumService($http, $sce, baseUrlSrv) { * get the package config which is persisted in server. * @return { Promise> } */ - this.getSinglePackageConfigs = function(pkgName, pkgVersion) { + this.getSinglePackageConfigs = function(pkg) { + const pkgName = pkg.name; + const pkgVersion = pkg.version; + let pkgArtifact = pkg.artifact; + + if (!pkgName || !pkgVersion || !pkgArtifact) { + console.error(`Failed to fetch config for \n`, pkg); + return; + } + const promisedPkgSearchResult = this.getSinglePackageInfo(pkgName, pkgVersion); - const confUrl = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgName}/${pkgVersion}`; + // in case of local package, it will include `/` + pkgArtifact = encodeURIComponent(pkgArtifact); + + const confUrl = `${baseUrlSrv.getRestApiBase()}/helium/config/${pkgArtifact}`; const promisedConf = $http.get(confUrl) .then(function(response, status) { return response.data.body; @@ -246,15 +262,11 @@ export default function heliumService($http, $sce, baseUrlSrv) { .then(defaultPackages => { const pkgSearchResult = findPackageByMagic(defaultPackages, magic) - // return empty conf if failed to find pkg + // return empty confs if failed to find pkg if (!pkgSearchResult) { - return {}; + return []; } - - const pkgVersion = pkgSearchResult.pkg.version; - const pkgName = pkgSearchResult.pkg.name; - - return this.getSinglePackageConfigs(pkgName, pkgVersion); + return this.getSinglePackageConfigs(pkgSearchResult.pkg); }); return promised; diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java index b393bcf3ff..7aac5e03de 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/Helium.java @@ -304,19 +304,19 @@ public class Helium { save(); } - public void updatePackageConfig(String pkgName, String pkgVersion, - Map pkgConfig) throws IOException { - heliumConf.updatePackageConfig(pkgName, pkgVersion, pkgConfig); + public void updatePackageConfig(String artifact, Map pkgConfig) + throws IOException { + heliumConf.updatePackageConfig(artifact, pkgConfig); save(); } - public Map>> getAllPackageConfig() { + public Map> getAllPackageConfig() { return heliumConf.getAllPackageConfigs(); } - public Map getPackageConfig(String pkgName, String pkgVersion) { - return heliumConf.getPackageConfig(pkgName, pkgVersion); + public Map getPackageConfig(String artifact) { + return heliumConf.getPackageConfig(artifact); } public HeliumPackageSuggestion suggestApp(Paragraph paragraph) { diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumConf.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumConf.java index 201d38d1f8..d0c4c9694e 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumConf.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/helium/HeliumConf.java @@ -25,10 +25,10 @@ public class HeliumConf { // enabled packages {name, version} private Map enabled = Collections.synchronizedMap(new HashMap()); - // config for versioned package {name {version {configKey configValue}}} - private Map>> packageConfig = + // {artifact, {configKey, configValue}} + private Map> packageConfig = Collections.synchronizedMap( - new HashMap>>()); + new HashMap>()); // enabled visualization package display order private List bundleDisplayOrder = new LinkedList<>(); @@ -45,41 +45,30 @@ public class HeliumConf { enabled.put(name, artifact); } - public void updatePackageConfig(String pkgName, String pkgVersion, + public void updatePackageConfig(String artifact, Map newConfig) { - if (!packageConfig.containsKey(pkgName)) { - packageConfig.put(pkgName, - Collections.synchronizedMap(new HashMap>())); - } - - Map> versionedConfig = packageConfig.get(pkgName); - - versionedConfig.put(pkgVersion, newConfig); - } - - /** - * @return versioned package config `{name, {version, {configKey, configVal}}}` - */ - public Map>> getAllPackageConfigs () { - return packageConfig; - } - - public Map getPackageConfig (String pkgName, String pkgVersion) { - if (!packageConfig.containsKey(pkgName)) { - packageConfig.put(pkgName, - Collections.synchronizedMap(new HashMap>())); - } - - Map> versionedConfig = packageConfig.get(pkgName); - - if (!versionedConfig.containsKey(pkgVersion)) { - versionedConfig.put(pkgVersion, + if (!packageConfig.containsKey(artifact)) { + packageConfig.put(artifact, Collections.synchronizedMap(new HashMap())); } - Map config = versionedConfig.get(pkgVersion); + packageConfig.put(artifact, newConfig); + } - return config; + /** + * @return versioned package config `{artifact, {configKey, configVal}}` + */ + public Map> getAllPackageConfigs () { + return packageConfig; + } + + public Map getPackageConfig (String artifact) { + if (!packageConfig.containsKey(artifact)) { + packageConfig.put(artifact, + Collections.synchronizedMap(new HashMap())); + } + + return packageConfig.get(artifact); } public void disablePackage(HeliumPackage pkg) {