sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject [CONF] Apache Sling > GSoC 2010 mini-CMS project
Date Mon, 09 Aug 2010 17:00:00 GMT
    <base href="">
            <link rel="stylesheet" href="/confluence/s/1810/9/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="">GSoC
2010 mini-CMS project</a></h2>
    <h4>Page <b>edited</b> by             <a href="">Federico
                         <h4>Changes (1)</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" >These JSON files are loaded using
the [Maven Bundle Plugin|]
, as you can see in the David [core/pom.xml|]
file&amp;nbsp; <br> <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">&lt;\!-\-
initial content to be loaded on bundle installation \--&gt; <br>&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;Sling-Initial-Content&gt;
<br>&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp;initial-content;overwrite:=true;uninstall:=true
<br>&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp;&lt;/Sling-Initial-Content&gt; <br> <br></td></tr>
            <tr><td class="diff-unchanged" >{code} <br>&lt;!-- initial
content to be loaded on bundle installation --&gt; <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
</div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <h1><a name="GSoC2010mini-CMSproject-Overview%28fromSLING1438%29"></a>Overview
(from SLING-1438)</h1>

<p>This is a Google Summer of Code 2010, Federico Paparoni has been accepted as a student
to work on it, mentored by Bertrand Delacretaz</p>

<p>The goal is to create a mini-CMS with Sling, that demonstrates Sling best practices.</p>

<p>See <a href="" class="external-link" rel="nofollow"></a>
for the full list of GSoC 2010 projects at the ASF, and <a href=""
class="external-link" rel="nofollow"></a> for general
GSoC information.</p>

<h1><a name="GSoC2010mini-CMSproject-"></a><font color="#003366"><b>Introduction</b></font></h1>

<p>Apache Sling is an opensource project with a lot of technologies and features. The
goal of this project is to create a mini-CMS, that developers can use to understand how to
develop a simple application with Sling.&nbsp;</p>

<p>So it is necessary to know a little about two main topics: OSGi and JCR. The following
links are useful resources to read something about these technologies.</p>

	<li><a href="" class="external-link" rel="nofollow"></a></li>
	<li><a href="" class="external-link" rel="nofollow"></a></li>
	<li><a href="" class="external-link" rel="nofollow"></a></li>

	<li><a href="" class="external-link" rel="nofollow"></a></li>
	<li><a href="" class="external-link"
	<li><a href="" class="external-link"

<p>The repository for this project can be found at&nbsp;<a href=""
class="external-link" rel="nofollow"></a>.</p>

<h1><a name="GSoC2010mini-CMSproject-"></a><font color="#003366"><b>Some
words about David Mini CMS</b></font></h1>

<p>This project shows some features of Apache Sling and can be used for educational
purpose to move your first steps with this framework.</p>

<p>David uses the following opensource library/technologies:</p>

<p><font color="#000000">&nbsp;</font></p>

	<li><font color="#003366"><a href="" class="external-link"
rel="nofollow">jQuery&nbsp;</a></font> <font color="">1.4.2</font></li>
	<li><font color=""><a href="" class="external-link" rel="nofollow">jQueryUI&nbsp;</a></font>
<font color="">1.8</font></li>
	<li><font color=""><a href="" class="external-link"
rel="nofollow">LavaLamp </a></font> <font color="">&#45; A menu plugin
for jQuery with cool hover effects&nbsp;</font></li>
	<li><font color=""><a href=""
class="external-link" rel="nofollow">WP-Cumulus SWF</a></font> <font color="">&#45;&nbsp;</font><font
color="">used to display tag cloud</font></li>
	<li><font color=""><a href="" class="external-link" rel="nofollow">iText&nbsp;</a></font></li>
	<li><font color=""><a href="" class="external-link" rel="nofollow">CKEditor&nbsp;</a></font></li>

<p>The available features are</p>
	<li>CRUD (Create, Read, Update and Delete) for the content</li>
	<li>Full HTML creation of article</li>
	<li>Creation of PDF rappresentation of a single post or the entire list of contents
	<li>Tagging system</li>
	<li>Search by title,text,tag</li>
	<li>Send email to someone with the link of article</li>
	<li>Background service that checks number of articles/tags in the repository</li>

<p>These aren't space age features, but are useful to understand how to create an application
using Apache Sling</p>

<h1><a name="GSoC2010mini-CMSproject-FirststepsintoSling"></a><b>First
steps into Sling</b></h1>

<p>Firstly you must setup the environment for Sling, so you can follow the guide at&nbsp;<a
href="" class="external-link"

<p>Now that you created your environment, you can setup some other tools that can be
useful during the development:</p>
	<li><a href="" class="external-link" rel="nofollow">cURL</a>
: Command line tool to send HTTP request</li>
	<li><a href=""
class="external-link" rel="nofollow">JCR Explorer</a> : Extension that create a useful
explorer for the JCR repository you are working in</li>
	<li><a href="" class="external-link" rel="nofollow">BitKinex</a>
:&nbsp;FTP/SFTP/HTTP/WebDAV Client that can be used to manage the files you uploaded in

<p>It's time to make our "Hello world" in Apache Sling.&nbsp;<br/>
Open a console and simply launch the next command:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">curl -F<span class="code-quote">"sling:resourceType=foo/bar"</span>
-F<span class="code-quote">"title=Hello world"</span> http:<span class="code-comment">//admin:admin@localhost:8080/content/myfirstnode</span>

<p>This is a simple HTTP request, where you pass some parameters and values. Using it
you have created a first resource under Sling.&nbsp;<br/>
The resource is a JCR node, as every resource in Sling, put under folder /content. This node
has two parameters, title and sling:resourceType.&nbsp;</p>

<p>Node creation is a simple task, but you must understand how you can render the information
stored in the nodes using Sling.<br/>
The first document you can read is the next one:&nbsp;<a href=""
class="external-link" rel="nofollow"></a><br/>
It simply describes how content resolution works in Sling.&nbsp;</p>

<p>Another important information to better understand Sling, is that a resource is rendered
by a script.<br/>
Script files are stored under the folders /apps or /libs and there is a wide choice of possible
scripting engine:&nbsp;</p>
	<li>Java Servlet</li>

<p>To select a script, Sling uses the node's sling:resourceType property. So if we say
that&nbsp;sling:resourceType is foo/bar, Sling will search under the /apps/foo/bar/ folder.<br/>
The following links describes how the scripts work and what type of variables we have during
the script execution:</p>
	<li><a href="" class="external-link"
	<li><a href="" class="external-link"

<h1><a name="GSoC2010mini-CMSproject-"></a><font color="#003366"><b>Content

<p>You can setup some initial contents that can be used in your application. It is a
useful thing, because with a simple configuration you have some nodes already created when
your application starts.</p>

<p>In David there are two different nodes created when you deploy your application:
<a href=""
class="external-link" rel="nofollow">/content/david</a> and <a href=""
class="external-link" rel="nofollow">/content/tags</a> .</p>

<p>These nodes are defined in the application folders, using a JSON format. Every information
stored in these JSON will be a property of the created nodes.&nbsp;</p>

<p>The most important property is the next one</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-quote">"sling:resourceType"</span>:
<span class="code-quote">"david"</span>
<p>This property defines "david" as resource type, so Sling knows that it will search
under the folder /apps/david to find the scripts that will be called on this node.</p>

<p>These JSON files are loaded using the <a href=""
class="external-link" rel="nofollow">Maven Bundle Plugin</a> , as you can see in
the David <a href=""
class="external-link" rel="nofollow">core/pom.xml</a> file&nbsp;</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;!-- initial content to be loaded on bundle installation
	initial-content;overwrite:=<span class="code-keyword">true</span>;uninstall:=<span
<p>JSON isn't the only way to load initial content. Further informations about content
loading can be found in the <a href=""
class="external-link" rel="nofollow">Content Loading Bundle Documentation</a></p>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href=""
class="grey">Change Notification Preferences</a>
        <a href="">View
        <a href="">View
        <a href=";showCommentArea=true#addcomment">Add

View raw message