Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added more details
Wiki Markup
{float:right|background: #F0F0F0|border: solid navy}
*Table of contents*
{toc:indent=10px}
{float}

h1. Sling IDE tooling 1.0

...



The 1.0 release will be a release with minimal release which will allow users to sync content between their IDE and the repository.

h2.

...

 Naming

...



Our IDE tooling should not focus on a single IDE and the naming should reflect that. Possible names

...



* Sling Developer Tools

...


* Sling IDE

...



h2. Platform support

...



We will aim to support Eclipse and IntelliJ with a first 1.0 release.

...



h2. High-level architecture

...



h3. Core services

...



The core services will be IDE-agnostic and aim to support all platforms. As such, they will be constrained to not use specific APIs. Eclipse mandates that all I/O operations be done using its resource layer.

...



h4. Server control

...



The server control service will handle communication with a Sling Launchpad instance, including

...



* connecting ( validating credentials )

...


* starting and stopping ( only possible for JAR-based launchpad )

...



h4. Transport API

...



Contains the APIs needed to connect to Sling launchpad and import/export content.

...



h3. Transport implementations

...



h4. VLT transport

...



File vault is in process of being [donated to to ASF|http://mail-archives.apache.org/mod_mbox/jackrabbit-dev/201305.mbox/%3CCAB+dfi=O_cZm9_BUnSZMcvwrSeWLL6gaos0582+sQwu2PksWdg@mail.gmail.com%3E] and is a good candidate for a transport implementation.

...

Pros

  1. Mature application and library
  2. Already used to import, export and sync content

Cons

  1. Works at JCR, not at resource level

Lightweight HTTP-based transport

The current implementation is based on the Sling DefaultGetServlet and DefaultPostServlet and is another candidate for a transport implementation.

Pros

  1. Works at resource level

Cons

  1. Does not work reliably if the DefaultGetServlet is not active for a certain resource

Eclipse implementation

High-level pieces

  • WST Server - we will use the Eclipse web tools platform to provide UI elements ( server definition, start/stop actions, module deployments )
  • Content module - we will define a content module which uses the transport API to sync content from the workspace into the repository. The mechanism is controlled by the WST server definitions
  • Transport API bridge - links between the core transport APIs and the Eclipse build/resource APIs

We will inherit some code from the current implementation, and need to work out a way to export content from the repository into the workspace with the proposed UI flow.

Intellij Implementation

High-level pieces

...



Pros

# Mature application and library
# Already used to import, export and sync content

Cons

# Works at JCR, not at resource level

h4. Lightweight HTTP-based transport

The current implementation is based on the Sling DefaultGetServlet and DefaultPostServlet and is another candidate for a transport implementation.

Pros

# Works at resource level

Cons

# Does not work reliably if the DefaultGetServlet is not active for a certain resource

h2. Eclipse implementation

h3. High-level pieces

* WST Server - we will use the Eclipse web tools platform to provide UI elements ( server definition, start/stop actions, module deployments )
* Content module - we will define a content module which uses the transport API to sync content from the workspace into the repository. The mechanism is controlled by the WST server definitions
* Transport API bridge - links between the core transport APIs and the Eclipse build/resource APIs

We will inherit some code from the current implementation, and need to work out a way to export content from the repository into the workspace with the proposed UI flow.

h2. Intellij Implementation

h3. High-level pieces

* Application server - uses the IntelliJ application server framework
* Transport API bridge - links between the core transport APIs and the IntelliJ build/resource APIs

h1. Sling IDE tooling 1.x

h2. Eclipse implementation

h3. Bundle module

Once we have the content module nailed down we can focus on deploying Java code changes quickly into a Sling launchpad, using a bundle module.

h4. Libra implementation

One possibility is reusing the Eclipse Libra stuff. However, AFAIK Libra works with Apache Felix, not over JCR, and this can be problematic.

h4. Sling-based implementation

Another possibility is to mount a virtual FS provider at {{/system/ide/install}} and mount each target directory at /system/ide/install/${bundle-symbolicname}-${version}.jar using a custom resource provider . The jar can be refreshed on each incremental change. 

Bonus points for (somehow?) refreshing  only java classes or only affected SCR components. An idea is to use a special /META-INF/last-session-changes.xml file which records what files have changed ; this file is only available when generated by the IDE ( maven plugin? ) and the JCR installer ( or someone else ) is smart enough to take it into account.

h2. CLI implementation

If there is interest, we can also build a CLI-only implementation, although for the initial release we can defer to the vlt command-line tool.

h1. Sling IDE 2.x

* look into http://livereload.com/