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 Mon, 05 Aug 2013 11:05: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-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >h1. Sling IDE 2.x <br> <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">*
look into [] <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">Instant
feedback on changes <br></td></tr>
            <tr><td class="diff-unchanged" > <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">*
look into [] for frontend-related modifications <br>* look into
[] for Java-related modifications <br>
            <tr><td class="diff-unchanged" >h1. UI concepts <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    </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.rbtoc1375700669502 {margin-left: 1.5em;padding: 0px;}
div.rbtoc1375700669502 ul {margin-left: 0px;padding-left: 10px;}
div.rbtoc1375700669502 li {margin-left: 0px;padding-left: 0px;}

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

<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=""
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>

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

<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,

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

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

<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>

	<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>

<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>

	<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>

<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=""
class="external-link" rel="nofollow">donated to to ASF</a> and is a good candidate
for a transport implementation.</p>


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


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

<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>


	<li>Works at resource level</li>


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

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

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

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

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

	<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
	<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>

<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>

	<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
	<li>Manual Import/Export process</li>

<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>

<p>Instant feedback on changes</p>

	<li>look into <a href="" class="external-link" rel="nofollow"></a>
for frontend-related modifications</li>
	<li>look into <a href="" class="external-link"
rel="nofollow"></a> for Java-related

<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=""
style="border: 1px solid black" /></span></p>

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

<p><span class="image-wrap" style=""><img src=""
style="border: 1px solid black" /></span></p>
        <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