incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Munteanu (Confluence)" <conflue...@apache.org>
Subject [CONF] Apache Sling > Sling IDE tooling Roadmap
Date Tue, 24 Sep 2013 22:39:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/en/2176/1/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+Roadmap">Sling
IDE tooling Roadmap</a></h2>
    <h4>Page  <b>added</b> by             <a href="https://cwiki.apache.org/confluence/display/~rombert">Robert
Munteanu</a>
    </h4>
         <br/>
    <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.rbtoc1380062286775 {margin-left: 1.5em;padding: 0px;}
div.rbtoc1380062286775 ul {margin-left: 0px;padding-left: 10px;}
div.rbtoc1380062286775 li {margin-left: 0px;padding-left: 0px;}

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

<h1><a name="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-Platformsupport"></a>Platform support</h2>

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

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

<h3><a name="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-TransportAPI"></a>Transport API</h4>

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

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

<h4><a name="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-Eclipseimplementation"></a>Eclipse implementation</h2>

<h3><a name="SlingIDEtoolingRoadmap-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>
	<li>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</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="SlingIDEtoolingRoadmap-IntellijImplementation"></a>Intellij
Implementation</h2>

<h3><a name="SlingIDEtoolingRoadmap-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>
	<li>Manual Import/Export process</li>
</ul>


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

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

<h3><a name="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-SlingIDE2.x"></a>Sling IDE 2.x</h1>

<p>Instant feedback on changes</p>

<ul>
	<li>look into <a href="http://livereload.com/" class="external-link" rel="nofollow">http://livereload.com/</a>
for frontend-related modifications</li>
	<li>look into <a href="https://github.com/SpringSource/spring-loaded" class="external-link"
rel="nofollow">https://github.com/SpringSource/spring-loaded</a> for Java-related
modifications</li>
</ul>


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

<h2><a name="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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="SlingIDEtoolingRoadmap-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;" class="grey">
                        <a href="https://cwiki.apache.org/confluence/users/removespacenotification.action?spaceKey=SLING">Stop
watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="https://cwiki.apache.org/confluence/users/editmyemailsettings.action">Change
email notification preferences</a>
</div>
       <a href="https://cwiki.apache.org/confluence/display/SLING/Sling+IDE+tooling+Roadmap">View
Online</a>
              |
       <a href="https://cwiki.apache.org/confluence/display/SLING/Sling+IDE+tooling+Roadmap?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
           </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message