GitHub user Leemoonsoo opened a pull request: https://github.com/apache/incubator-zeppelin/pull/836
[WIP] [ZEPPELIN-732] Helium Application ### What is this PR for? This PR implements pluggable Application Framework. Here's summary of the change. **Applicaiton** Base class of user application. User application should extends `org.apache.zeppelin.helium.Application`. It looks like ```java public abstract class Application { /** * When application loaded * @params context Application context */ public Application(ApplicationContext context) { this.context = context; } /** * This method can be invoked multiple times before unload(), * Invoked just after application loaded or when paragraph output is updated * @param args Required resources from paragraph */ public abstract void run(ResourceSet args) throws ApplicationException, IOException; /** * this method is invoked just before application is removed */ public abstract void unload() throws ApplicationException; } ``` **HeliumPackage** `org.apache.zeppelin.helium.HeliumPackage` keeps information of application package. Package informations includes ``` { type : "APPLICATION", // type of this package name : "zeppelin.app", // application name. [organizationName].[appName] format description : "App description", // description artifact : "groupId:artifactId:version", // artifact name for maven repository className : "org.apache.zeppelin.helium.MyApp", // application class that extends org.apache.zeppelin.helium.Application resources : [[]], // required resource icon : '<i class="fa fa-clock-o"></i>' // icon } ``` `resources` field defines what kind of data this application requires, from ResourcePool. "resourceName" and ":className" works in the array. inner array combines each resourceName, :className with 'AND' outer array combines inner array with 'OR'. For example, ``` resources : [ [ "name1", ":java.util.Date"], [ "name1", "name2"] ] ``` Then Zeppelin searches ResourcePool, first for resource name "name1" and resource type "java.util.Date" from resourcePool then resource name "name1" and "name2". Once resources are found, they'll be passed to `Application.run()` method **Package Registry** `org.apache.zeppelin.helium.HeliumRegistry` provides list of available HeliumPackages. Currently `HeliumLocalRegistry` is implemented and it provides list by reading HeliumPackage json files under ./helium directory in the file system. Later there will be some class like `HeliumOnlineRegistry' which reads available package from a community managed online central registry. **Development mode** `org.apache.zeppelin.interpreter.dev.*` package is provided for development support. Developer can run their app inside of their IDE, that connects to running Zeppelin instance and display output. **Application Suggestion** Once paragraph becomes FINISHED status after run, Zeppelin searches resources from ResourcesPool that belongs to current paragraph. And compare all HeliumPackage if these resources satisfies their requirements ('resources' field). If there're available app, Helium button will be displayed.  User can see and select available application for this paragraph.  **Application selection** After application is loaded, application icon will be displayed. So user can select and switch between apps.  if built-in visualization is available, application icon will be displayed next to built-in visualizations  **Experimental** While this is new feature and API and specification may change, i'd suggest mark this feature as a experimental for a while. ### What type of PR is it? Feature ### Todos * [x] - Helium Application framework * [x] - App launcher * [x] - App display and selectors * [x] - Package registry * [x] - Development mode * [ ] - Make CI green * [ ] - Improve comment in source codes * [ ] - Documentation * [ ] - Examples * [ ] - Mark experimental * [ ] - Review ### What is the Jira issue? https://issues.apache.org/jira/browse/ZEPPELIN-732 ### How should this be tested? Will be updated with examples ### Screenshots (if appropriate)  ### Questions: * Does the licenses files need update? no * Is there breaking changes for older versions? no * Does this needs documentation? yes You can merge this pull request into a Git repository by running: $ git pull https://github.com/Leemoonsoo/incubator-zeppelin ZEPPELIN-732-up Alternatively you can review and apply these changes as the patch at: https://github.com/apache/incubator-zeppelin/pull/836.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #836 ---- commit 7424af247b08afabbd9d080a288a88a7de4b7a1c Author: Lee moon soo <m...@apache.org> Date: 2016-03-05T06:08:19Z Remove resource on note / paragraph removal commit 568ee541db31133ccd8f2d99d16ede60cb9433c1 Author: Lee moon soo <m...@apache.org> Date: 2016-03-07T02:55:17Z ApplicationLoader commit b891b98ee5a3bd9dde8c044b32c0dc09074cdcb0 Author: Lee moon soo <m...@apache.org> Date: 2016-03-13T23:13:49Z HeliumRegistry commit b239f1b96b01264b4f92aef0d5d05d5173794c3b Author: Lee moon soo <m...@apache.org> Date: 2016-03-19T15:25:30Z Helium application factory commit 9f5c493e414e7c240abb08f2fa8600761514d63f Author: Lee moon soo <m...@apache.org> Date: 2016-04-01T18:41:57Z Application output commit 4eaeea720561962766f25438b19d7a334a8cb0bc Author: Lee moon soo <m...@apache.org> Date: 2016-04-02T20:18:54Z sync -> async api commit 7aeb64addf55e0712aa270e131f4af39d06f470c Author: Lee moon soo <m...@apache.org> Date: 2016-04-03T03:14:23Z Unload app on paragraph / note removal as well as interpreter unbind commit 134bbe640ae2636bb847d9844b28f87409027d08 Author: Lee moon soo <m...@apache.org> Date: 2016-04-06T01:32:47Z Change HeliumRegistry constructor argument type commit 94b490d76c7875a8d2f1a30232a762ec374664b4 Author: Lee moon soo <m...@apache.org> Date: 2016-04-06T01:35:37Z initial rest api impl commit bd0f467d23aecd32adf0152b939d8ed8eea6f56f Author: Lee moon soo <m...@apache.org> Date: 2016-04-09T00:38:24Z Style commit 6223cd44d9fb3b7190c2cf7e817a031e38b5eb6f Author: Lee moon soo <m...@apache.org> Date: 2016-04-12T01:10:58Z App output display commit 16f68871daaf98b4d3d4ca759b3f750e597bf5a4 Author: Lee moon soo <m...@apache.org> Date: 2016-04-12T04:53:34Z Angular object update for helium app commit 412480a2d222e31c7bd74198c5a4249dfea7ba8b Author: Lee moon soo <m...@apache.org> Date: 2016-04-12T05:33:45Z Fix style commit be3a1fa7b3da908051605945926790e1342ffd0a Author: Lee moon soo <m...@apache.org> Date: 2016-04-12T05:52:15Z Add license header commit 5503f9c100bfde93f5c3eb2f12bf88e6e18ab65b Author: Lee moon soo <m...@apache.org> Date: 2016-04-12T12:13:16Z Improved commit b47ca744b989d8644e7cafe4ec3f2d336b890f92 Author: Lee moon soo <m...@apache.org> Date: 2016-04-12T22:46:45Z Fix tests commit 98f3872c6a27e8699717b9fc20b353b8fe9a1d2d Author: Lee moon soo <m...@apache.org> Date: 2016-04-13T00:13:49Z Managed interpreter process and Running interpreter process commit 024d7fc2c52c54a6b5925598330d6326194fa8b4 Author: Lee moon soo <m...@apache.org> Date: 2016-04-13T08:37:40Z Dev mode commit 71f814dce41113f71fdcfff4c7d468604cd35f4b Author: Lee moon soo <m...@apache.org> Date: 2016-04-13T12:29:34Z Better way to find resource dir for InterpreterOutput watcher commit f2ab95dcd37e2968c9c7c75f595d32bc2ef56dee Author: Lee moon soo <m...@apache.org> Date: 2016-04-13T22:22:45Z Prevent unnecessary output update commit b4ff52fbcf7f0d7dbeac3d56f8ab4f4c283cdeba Author: Lee moon soo <m...@apache.org> Date: 2016-04-14T00:05:54Z Put last value of scala repl into resource pool commit ec2fdea60bcd7e10438e2cc8d888d6995a2151f8 Author: Lee moon soo <m...@apache.org> Date: 2016-04-14T00:26:33Z Match classname correctly commit 0e4d81c841791ea4a4bd580478e57051d61a8b10 Author: Lee moon soo <m...@apache.org> Date: 2016-04-14T00:26:51Z Remove unnecessary log commit fade3c1f0f04603d28ce594a672f35e9558b7499 Author: Lee moon soo <m...@apache.org> Date: 2016-04-14T02:48:10Z Handle output update in angular mode commit 03be3a12056ae96e47de128d32a00860ac0786a3 Author: Lee moon soo <m...@apache.org> Date: 2016-04-14T04:24:43Z Pass required resource to run() method commit c30f53c7bb77c84c9fc07bf72674811bae04a064 Author: Lee moon soo <m...@apache.org> Date: 2016-04-14T05:03:35Z null check commit 864bea14025465d6f98bdc854ccf2c007f57b0d1 Author: Lee moon soo <m...@apache.org> Date: 2016-04-14T05:23:19Z Merge branch 'master' into ZEPPELIN-732-up ---- --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---