incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Munteanu (Confluence)" <>
Subject [CONF] Apache Sling > Sling IDE tooling
Date Tue, 24 Sep 2013 22:40:00 GMT
    <base href="">
            <link rel="stylesheet" href="/confluence/s/en/2176/1/1/_/styles/combined.css?spaceKey=SLING&amp;forWysiwyg=true"
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="">Sling
IDE tooling</a></h2>
    <h4>Page <b>edited</b> by             <a href="">Robert
                         <h4>Changes (3)</h4>
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{float:right|background:
#F0F0F0|border: solid navy} <br>*Table of contents* <br></td></tr>
            <tr><td class="diff-changed-lines" ><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">{toc:indent=10px}</span>
<span class="diff-added-words"style="background-color: #dfd;">{pagetree:root=@self}</span>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{float}
<br> <br> <br>h1. Sling IDE tooling 1.0 <br> <br>The 1.0 release
will be a release with minimal release which will allow users to sync content between their
IDE and the repository. Also see the [Use Cases] page for a list of use cases we want to support,
either in the initial or in the subsequent releases. <br> <br>See also the [Moving
forward with IDE tooling|]
discussion on the Sling dev mailing list for a more in-depth discussion on some of the technical
issues. <br> <br>h2. Naming <br> <br>Our IDE tooling should not focus
on a single IDE and the naming should reflect that. Possible names <br> <br>*
Sling Developer Tools <br>* Sling IDE <br> <br>h2. Platform support <br>
<br>We will aim to support Eclipse and IntelliJ with a first 1.0 release. <br>
<br>h2. High-level architecture <br> <br>h3. Core services <br> <br>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. <br> <br>h4. Server control <br> <br>The server
control service will handle communication with a Sling Launchpad instance, including <br>
<br>* connecting ( validating credentials ) <br>* starting and stopping ( only
possible for JAR-based launchpad ) <br> <br>h4. Resource serialization format
<br> <br>The way resources are serialized to disk is outside the scope of the
Transport API. As such, we need to define a standard serialization format. <br> <br>One
serialization format is defined by VLT  <br> <br># files or all file-like nodes
<br># directories for all directory-like folders <br># {{.content.xml}} for all
nodes which have attributes which are not representable with files and directories <br>
<br>This may or may not be the ideal format for our IDE tooling. One serious drawback
is that &#39;dot-files&#39; are hidden by default in IDEs and the command-line. Auto-sync
is also not possible for .content.xml files for now , possibly for performance reasons <br>
<br>We can ( and probably should ) define our own resource serialization format. One
proposal is  <br> <br># if a resource is a file, it is represented as a file with
the same name <br># if a resource is not a file, it is represented as a directory <br>#
properties of a non-file resource, and all additional metadata of a file is stored in a \[content\].xml
(or json) <br> <br> <br>h4. Transport API <br> <br>Contains
the APIs needed to connect to Sling launchpad and import/export content. <br> <br>h3.
Transport implementations <br> <br>h4. VLT transport <br> <br>File
vault is in process of being [donated to to ASF|]
and is a good candidate for a transport implementation. <br> <br>Pros <br>
<br># Mature application and library <br># Already used to import, export and
sync content <br> <br>Cons <br> <br># Works at JCR, not at resource
level <br> <br>h4. Lightweight HTTP-based transport <br> <br>The current
implementation is based on the Sling DefaultGetServlet and DefaultPostServlet and is another
candidate for a transport implementation. <br> <br>Pros <br> <br>#
Works at resource level <br> <br>Cons <br> <br># Does not work reliably
if the DefaultGetServlet is not active for a certain resource <br> <br>h2. Resource
editor <br> <br>Include a basic resource editor which works with the files defined
by our serialization format. <br> <br>h2. Eclipse implementation <br> <br>h3.
High-level pieces <br> <br>* WST Server - we will use the Eclipse web tools platform
to provide UI elements ( server definition, start/stop actions, module deployments ) <br>*
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
<br>* Transport API bridge - links between the core transport APIs and the Eclipse build/resource
APIs <br>* Manual Import/Export process, integrated with the IDE process.  This would
allow, for example export of sample or other project code or importing of non-synced content/code
<br> <br>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. <br> <br>h2. Intellij Implementation <br> <br>h3. High-level
pieces <br> <br>* Application server - uses the IntelliJ application server framework
<br>* Transport API bridge - links between the core transport APIs and the IntelliJ
build/resource APIs <br>* Manual Import/Export process <br> <br>h1. Sling
IDE tooling 1.x <br> <br>h2. Eclipse implementation <br> <br>h3. Bundle
module <br> <br>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. <br> <br>h4.
Libra implementation <br> <br>One possibility is reusing the Eclipse Libra stuff.
However, AFAIK Libra works with Apache Felix, not over JCR, and this can be problematic. <br>
<br>h4. Sling-based implementation <br> <br>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. <br>
<br>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. <br>
<br>h2. CLI implementation <br> <br>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. <br> <br>h1. Sling IDE 2.x <br> <br>Instant feedback on changes
<br> <br>* look into [] for frontend-related modifications
<br>* look into [] for Java-related modifications
<br> <br>h1. UI concepts <br> <br>h2. Eclipse <br> <br>These
mockups are based on a work-in-progress version of Slingclipse. Since it doesn&#39;t actually
work I haven&#39;t pushed it to SVN yet. <br> <br>h3. Server definition <br>
<br>!|border=1! <br> <br>h3. Content module
definition <br> <br>!|border=1! <br></td></tr>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">

<div class="plugin_pagetree">

    <ul class="plugin_pagetree_children_list plugin_pagetree_children_list_noleftspace">
        <div class="plugin_pagetree_children">

    <fieldset class="hidden">
        <input type="hidden" name="treeId" value="">
        <input type="hidden" name="treeRequestId" value="/confluence/plugins/pagetree/naturalchildren.action?decorator=none&amp;excerpt=false&amp;sort=position&amp;reverse=false&amp;disableLinks=false">
        <input type="hidden" name="treePageId" value="31822549">

        <input type="hidden" name="noRoot" value="false">
        <input type="hidden" name="rootPageId" value="31822549">

        <input type="hidden" name="rootPage" value="">
        <input type="hidden" name="startDepth" value="0">
        <input type="hidden" name="spaceKey" value="SLING" >

        <input type="hidden" name="i18n-pagetree.loading" value="Loading...">
        <input type="hidden" name="i18n-pagetree.error.permission" value="Unable to load
page tree. It seems that you do not have permission to view the root page.">
        <input type="hidden" name="i18n-pagetree.eeror.general" value="There was a problem
retrieving the page tree. Please check the server log file for more information.">
        <input type="hidden" name="loginUrl" value="/confluence/login.action?os_destination=%2Fpages%2Fdoeditpage.action%3FpageId%3D31822549">

                <fieldset class="hidden">
                            <input type="hidden" name="ancestorId" value="31822549">

        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;" class="grey">
                        <a href="">Stop
watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="">Change
email notification preferences</a>
        <a href="">View
        <a href="">View
        <a href=";showCommentArea=true#addcomment">Add

View raw message