incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Sling > Sling IDE tooling
Date Mon, 10 Jun 2013 16:35:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/2042/9/1/_/styles/combined.css?spaceKey=SLING&amp;forWysiwyg=true"
type="text/css">
    </head>
<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="https://cwiki.apache.org/confluence/display/SLING/Sling+IDE+tooling">Sling
IDE tooling</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~rombert">Robert
Munteanu</a>
    </h4>
        <div id="versionComment">
        <b>Comment:</b>
        Added some of the issues discussed on Sling-dev, not yet complete<br />
    </div>
        <br/>
                         <h4>Changes (3)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >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></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">See
also the [Moving forward with IDE tooling|http://sling.markmail.org/thread/6afd6soqruscjwx4#query:+page:1+mid:yexh6hr2nzqbwtqo+state:results]
discussion on the Sling dev mailing list for a more in-depth discussion on some of the technical
issues. <br> <br></td></tr>
            <tr><td class="diff-unchanged" >h2. Naming <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" ># {{.content.xml}} for all nodes which
have attributes which are not representable with files and directories <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >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. <span class="diff-added-words"style="background-color:
#dfd;">Auto-sync is also not possible for .content.xml files for now , possibly for performance
reasons</span> <br></td></tr>
            <tr><td class="diff-unchanged" > <br>We can ( and probably should
) define our own resource serialization format. One proposal is  <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" ># Does not work reliably if the DefaultGetServlet
is not active for a certain resource <br> <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">h2.
Resource editor <br> <br>Include a basic resource editor which works with the
files defined by our serialization format. <br> <br></td></tr>
            <tr><td class="diff-unchanged" >h2. Eclipse implementation <br>
<br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <div class='navmenu' style='float:right; background:white; margin:3px; padding:3px'><p><b>Table
of contents</b></p>
<style type='text/css'>/*<![CDATA[*/
div.rbtoc1370882068291 {margin-left: 1.5em;padding: 0px;}
div.rbtoc1370882068291 ul {margin-left: 0px;padding-left: 10px;}
div.rbtoc1370882068291 li {margin-left: 0px;padding-left: 0px;}

/*]]>*/</style><div class='rbtoc1370882068291'>
<ul>
    <li><a href='#SlingIDEtooling-SlingIDEtooling1.0'>Sling IDE tooling 1.0</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Naming'>Naming</a></li>
    <li><a href='#SlingIDEtooling-Platformsupport'>Platform support</a></li>
    <li><a href='#SlingIDEtooling-Highlevelarchitecture'>High-level architecture</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Coreservices'>Core services</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Servercontrol'>Server control</a></li>
    <li><a href='#SlingIDEtooling-Resourceserializationformat'>Resource serialization
format</a></li>
    <li><a href='#SlingIDEtooling-TransportAPI'>Transport API</a></li>
</ul>
    <li><a href='#SlingIDEtooling-Transportimplementations'>Transport implementations</a></li>
<ul>
    <li><a href='#SlingIDEtooling-VLTtransport'>VLT transport</a></li>
    <li><a href='#SlingIDEtooling-LightweightHTTPbasedtransport'>Lightweight HTTP-based
transport</a></li>
</ul>
</ul>
    <li><a href='#SlingIDEtooling-Resourceeditor'>Resource editor</a></li>
    <li><a href='#SlingIDEtooling-Eclipseimplementation'>Eclipse implementation</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Highlevelpieces'>High-level pieces</a></li>
</ul>
    <li><a href='#SlingIDEtooling-IntellijImplementation'>Intellij Implementation</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Highlevelpieces'>High-level pieces</a></li>
</ul>
</ul>
    <li><a href='#SlingIDEtooling-SlingIDEtooling1.x'>Sling IDE tooling 1.x</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Eclipseimplementation'>Eclipse implementation</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Bundlemodule'>Bundle module</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Libraimplementation'>Libra implementation</a></li>
    <li><a href='#SlingIDEtooling-Slingbasedimplementation'>Sling-based implementation</a></li>
</ul>
</ul>
    <li><a href='#SlingIDEtooling-CLIimplementation'>CLI implementation</a></li>
</ul>
    <li><a href='#SlingIDEtooling-SlingIDE2.x'>Sling IDE 2.x</a></li>
    <li><a href='#SlingIDEtooling-UIconcepts'>UI concepts</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Eclipse'>Eclipse</a></li>
<ul>
    <li><a href='#SlingIDEtooling-Serverdefinition'>Server definition</a></li>
    <li><a href='#SlingIDEtooling-Contentmoduledefinition'>Content module definition</a></li>
</ul>
</ul>
</ul></div></div>


<h1><a name="SlingIDEtooling-SlingIDEtooling1.0"></a>Sling IDE tooling 1.0</h1>

<p>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 <a href="/confluence/display/SLING/Use+Cases"
title="Use Cases">Use Cases</a> page for a list of use cases we want to support,
either in the initial or in the subsequent releases.</p>

<p>See also the <a href="http://sling.markmail.org/thread/6afd6soqruscjwx4#query:+page:1+mid:yexh6hr2nzqbwtqo+state:results"
class="external-link" rel="nofollow">Moving forward with IDE tooling</a> discussion
on the Sling dev mailing list for a more in-depth discussion on some of the technical issues.</p>

<h2><a name="SlingIDEtooling-Naming"></a>Naming</h2>

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

<ul>
	<li>Sling Developer Tools</li>
	<li>Sling IDE</li>
</ul>


<h2><a name="SlingIDEtooling-Platformsupport"></a>Platform support</h2>

<p>We will aim to support Eclipse and IntelliJ with a first 1.0 release.</p>

<h2><a name="SlingIDEtooling-Highlevelarchitecture"></a>High-level architecture</h2>

<h3><a name="SlingIDEtooling-Coreservices"></a>Core services</h3>

<p>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.</p>

<h4><a name="SlingIDEtooling-Servercontrol"></a>Server control</h4>

<p>The server control service will handle communication with a Sling Launchpad instance,
including</p>

<ul>
	<li>connecting ( validating credentials )</li>
	<li>starting and stopping ( only possible for JAR-based launchpad )</li>
</ul>


<h4><a name="SlingIDEtooling-Resourceserializationformat"></a>Resource serialization
format</h4>

<p>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.</p>

<p>One serialization format is defined by VLT </p>

<ol>
	<li>files or all file-like nodes</li>
	<li>directories for all directory-like folders</li>
	<li><tt>.content.xml</tt> for all nodes which have attributes which are
not representable with files and directories</li>
</ol>


<p>This may or may not be the ideal format for our IDE tooling. One serious drawback
is that 'dot-files' 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</p>

<p>We can ( and probably should ) define our own resource serialization format. One
proposal is </p>

<ol>
	<li>if a resource is a file, it is represented as a file with the same name</li>
	<li>if a resource is not a file, it is represented as a directory</li>
	<li>properties of a non-file resource, and all additional metadata of a file is stored
in a [content].xml (or json)</li>
</ol>



<h4><a name="SlingIDEtooling-TransportAPI"></a>Transport API</h4>

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

<h3><a name="SlingIDEtooling-Transportimplementations"></a>Transport implementations</h3>

<h4><a name="SlingIDEtooling-VLTtransport"></a>VLT transport</h4>

<p>File vault is in process of being <a href="http://mail-archives.apache.org/mod_mbox/jackrabbit-dev/201305.mbox/%3CCAB+dfi=O_cZm9_BUnSZMcvwrSeWLL6gaos0582+sQwu2PksWdg@mail.gmail.com%3E"
class="external-link" rel="nofollow">donated to to ASF</a> and is a good candidate
for a transport implementation.</p>

<p>Pros</p>

<ol>
	<li>Mature application and library</li>
	<li>Already used to import, export and sync content</li>
</ol>


<p>Cons</p>

<ol>
	<li>Works at JCR, not at resource level</li>
</ol>


<h4><a name="SlingIDEtooling-LightweightHTTPbasedtransport"></a>Lightweight
HTTP-based transport</h4>

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

<p>Pros</p>

<ol>
	<li>Works at resource level</li>
</ol>


<p>Cons</p>

<ol>
	<li>Does not work reliably if the DefaultGetServlet is not active for a certain resource</li>
</ol>


<h2><a name="SlingIDEtooling-Resourceeditor"></a>Resource editor</h2>

<p>Include a basic resource editor which works with the files defined by our serialization
format.</p>

<h2><a name="SlingIDEtooling-Eclipseimplementation"></a>Eclipse implementation</h2>

<h3><a name="SlingIDEtooling-Highlevelpieces"></a>High-level pieces</h3>

<ul>
	<li>WST Server - we will use the Eclipse web tools platform to provide UI elements
( server definition, start/stop actions, module deployments )</li>
	<li>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</li>
	<li>Transport API bridge - links between the core transport APIs and the Eclipse build/resource
APIs</li>
</ul>


<p>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.</p>

<h2><a name="SlingIDEtooling-IntellijImplementation"></a>Intellij Implementation</h2>

<h3><a name="SlingIDEtooling-Highlevelpieces"></a>High-level pieces</h3>

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


<h1><a name="SlingIDEtooling-SlingIDEtooling1.x"></a>Sling IDE tooling 1.x</h1>

<h2><a name="SlingIDEtooling-Eclipseimplementation"></a>Eclipse implementation</h2>

<h3><a name="SlingIDEtooling-Bundlemodule"></a>Bundle module</h3>

<p>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.</p>

<h4><a name="SlingIDEtooling-Libraimplementation"></a>Libra implementation</h4>

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

<h4><a name="SlingIDEtooling-Slingbasedimplementation"></a>Sling-based implementation</h4>

<p>Another possibility is to mount a virtual FS provider at <tt>/system/ide/install</tt>
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.</p>

<p>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.</p>

<h2><a name="SlingIDEtooling-CLIimplementation"></a>CLI implementation</h2>

<p>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.</p>

<h1><a name="SlingIDEtooling-SlingIDE2.x"></a>Sling IDE 2.x</h1>

<ul>
	<li>look into <a href="http://livereload.com/" class="external-link" rel="nofollow">http://livereload.com/</a></li>
</ul>


<h1><a name="SlingIDEtooling-UIconcepts"></a>UI concepts</h1>

<h2><a name="SlingIDEtooling-Eclipse"></a>Eclipse</h2>

<p>These mockups are based on a work-in-progress version of Slingclipse. Since it doesn't
actually work I haven't pushed it to SVN yet.</p>

<h3><a name="SlingIDEtooling-Serverdefinition"></a>Server definition</h3>

<p><span class="image-wrap" style=""><img src="http://i.imgur.com/yV6AdWU.png"
style="border: 1px solid black" /></span></p>

<h3><a name="SlingIDEtooling-Contentmoduledefinition"></a>Content module
definition</h3>

<p><span class="image-wrap" style=""><img src="http://i.imgur.com/00rR1Rx.png"
style="border: 1px solid black" /></span></p>
    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href="https://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
        </div>
        <a href="https://cwiki.apache.org/confluence/display/SLING/Sling+IDE+tooling">View
Online</a>
        |
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=31822549&revisedVersion=13&originalVersion=12">View
Changes</a>
                |
        <a href="https://cwiki.apache.org/confluence/display/SLING/Sling+IDE+tooling?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message