Author: fdesbois Date: 2010-01-17 19:32:26 +0000 (Sun, 17 Jan 2010) New Revision: 220 Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceNewsImpl.java trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Index.properties trunk/suiviobsmer-ui/src/main/webapp/js/FCKConf.js Modified: trunk/pom.xml trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceNewsMock.java trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo trunk/suiviobsmer-ui/pom.xml trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.java trunk/suiviobsmer-ui/src/main/webapp/Index.tml trunk/suiviobsmer-ui/src/main/webapp/css/news.css Log: - Add news managment, use of EasyFCKEditor - Use last mavenpom and eugene releases Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-01-17 18:27:15 UTC (rev 219) +++ trunk/pom.xml 2010-01-17 19:32:26 UTC (rev 220) @@ -81,6 +81,11 @@ <version>${tapestry.version}</version> </dependency> <dependency> + <groupId>com.orientimport</groupId> + <artifactId>t5-easy-fckeditor</artifactId> + <version>1.0.4</version> + </dependency> + <dependency> <groupId>org.chenillekit</groupId> <artifactId>chenillekit-tapestry</artifactId> <version>1.2.0</version> @@ -207,7 +212,7 @@ <!-- libraries version --> <nuitonutils.version>1.1.3</nuitonutils.version> <topia.version>2.3.0-beta-4-SNAPSHOT</topia.version> - <eugene.version>2.0.0-beta-3-SNAPSHOT</eugene.version> + <eugene.version>2.0.0-beta-3</eugene.version> <tapestry.version>5.1.0.5</tapestry.version> </properties> @@ -310,6 +315,13 @@ </releases> </repository> + <repository> + <id>m2-release-repository.orientimport.kenai.com</id> + <name>Orient Import Oy Maven Release Repository</name> + <url>http://kenai.com/svn/t5-easy-fckeditor~maven-release-repository</url> + <layout>default</layout> + </repository> + </repositories> <pluginRepositories> Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceNewsImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceNewsImpl.java (rev 0) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceNewsImpl.java 2010-01-17 19:32:26 UTC (rev 220) @@ -0,0 +1,80 @@ + +package fr.ifremer.suiviobsmer.impl; + +import fr.ifremer.suiviobsmer.SuiviObsmerContext; +import fr.ifremer.suiviobsmer.SuiviObsmerException; +import fr.ifremer.suiviobsmer.SuiviObsmerModelDAOHelper; +import fr.ifremer.suiviobsmer.entity.News; +import fr.ifremer.suiviobsmer.entity.NewsDAO; +import fr.ifremer.suiviobsmer.services.ServiceNews; +import java.util.ArrayList; +import java.util.List; +import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.persistence.TopiaEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * ServiceNews + * + * Created: 17 janv. 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class ServiceNewsImpl implements ServiceNews { + + private static final Logger log = LoggerFactory.getLogger(ServiceNewsImpl.class); + + protected TopiaContext rootContext; + + public ServiceNewsImpl() throws SuiviObsmerException { + rootContext = SuiviObsmerContext.getTopiaRootContext(); + } + + @Override + public List<News> getNews() throws SuiviObsmerException { + TopiaContext transaction = null; + List<News> results = new ArrayList<News>(); + try { + transaction = rootContext.beginTransaction(); + + NewsDAO dao = SuiviObsmerModelDAOHelper.getNewsDAO(transaction); + + results = dao.findAllWithOrder(TopiaEntity.TOPIA_CREATE_DATE + " DESC"); + + transaction.closeContext(); + } catch (Exception eee) { + SuiviObsmerContext.serviceException(transaction, + "Impossible de récupérer l'ensemble des news", eee); + } + return results; + } + + @Override + public void saveNews(News news, boolean delete) throws SuiviObsmerException { + TopiaContext transaction = null; + try { + transaction = rootContext.beginTransaction(); + + NewsDAO dao = SuiviObsmerModelDAOHelper.getNewsDAO(transaction); + + if (delete) { + dao.delete(news); + } else { + SuiviObsmerContext.prepareTopiaId(News.class, news); + dao.update(news); + } + + transaction.commitTransaction(); + transaction.closeContext(); + } catch (Exception eee) { + SuiviObsmerContext.serviceException(transaction, + "Impossible de récupérer l'ensemble des news", eee); + } + } + +} Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceNewsImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceNewsMock.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceNewsMock.java 2010-01-17 18:27:15 UTC (rev 219) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/mock/ServiceNewsMock.java 2010-01-17 19:32:26 UTC (rev 220) @@ -105,4 +105,9 @@ return results; } + @Override + public void saveNews(News news, boolean delete) throws SuiviObsmerException { + throw new UnsupportedOperationException("Not supported yet."); + } + } Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo =================================================================== (Binary files differ) Modified: trunk/suiviobsmer-ui/pom.xml =================================================================== --- trunk/suiviobsmer-ui/pom.xml 2010-01-17 18:27:15 UTC (rev 219) +++ trunk/suiviobsmer-ui/pom.xml 2010-01-17 19:32:26 UTC (rev 220) @@ -44,6 +44,10 @@ <artifactId>chenillekit-tapestry</artifactId> </dependency> <dependency> + <groupId>com.orientimport</groupId> + <artifactId>t5-easy-fckeditor</artifactId> + </dependency> + <dependency> <groupId>jfree</groupId> <artifactId>jfreechart</artifactId> </dependency> Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java 2010-01-17 18:27:15 UTC (rev 219) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/Index.java 2010-01-17 19:32:26 UTC (rev 220) @@ -23,16 +23,23 @@ import fr.ifremer.suiviobsmer.SuiviObsmerException; import fr.ifremer.suiviobsmer.entity.News; +import fr.ifremer.suiviobsmer.entity.NewsImpl; +import fr.ifremer.suiviobsmer.entity.User; import fr.ifremer.suiviobsmer.services.ServiceNews; import fr.ifremer.suiviobsmer.ui.base.SuiviObsmerPage; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.List; +import org.apache.tapestry5.Asset2; import org.apache.tapestry5.annotations.IncludeStylesheet; import org.apache.tapestry5.annotations.Log; +import org.apache.tapestry5.annotations.Path; import org.apache.tapestry5.annotations.Persist; import org.apache.tapestry5.annotations.Property; +import org.apache.tapestry5.annotations.SessionState; import org.apache.tapestry5.ioc.annotations.Inject; +import org.slf4j.Logger; /** * Index @@ -56,6 +63,13 @@ @Inject private ServiceNews serviceNews; + @Inject + private Logger log; + + @SessionState + @Property + private User user; + @Persist private List<News> newsList; @@ -64,28 +78,92 @@ private DateFormat dateFormat; + @Persist("flash") + private String editedId; + + @Property + private int rowIndex; + + @Property + @Inject + @Path("context:js/FCKConf.js") + private Asset2 fckconf; + + @Log - void setupRender() { - newsList = null; - getNewsList(); + void setupRender() throws SuiviObsmerException { + if (editedId == null || !"NEW".equals(editedId)) { + newsList = null; + getNewsList(); + } } - public List<News> getNewsList() { +// void onActivate(EventContext ec) { +// if (ec.getCount() > 0) { +// this.editedId = ec.get(String.class, 0); +// } +// } +// +// String onPassivate() { +// return editedId; +// } + + public List<News> getNewsList() throws SuiviObsmerException { if (newsList == null) { - try { - newsList = serviceNews.getNews(); - } catch (SuiviObsmerException eee) { - // error db, ... - } + newsList = serviceNews.getNews(); } return newsList; } + public boolean isEditionMode() { + return isCreateMode() || news.getTopiaId().equals(editedId); + } + + public boolean isCreateMode() { + return news.getTopiaId() == null; + } + public DateFormat getDateFormat() { if (dateFormat == null) { dateFormat = new SimpleDateFormat("dd/MM/yyyy"); } return dateFormat; } + + void onActionFromAddNews() throws SuiviObsmerException { + news = new NewsImpl(); + // Create a new list with the new news in first position + List<News> list = new ArrayList<News>(); + list.add(news); + list.addAll(getNewsList()); + newsList = list; + editedId = "NEW"; + } + + void onActionFromEditNews(int rowIndex) throws SuiviObsmerException { + news = getNewsList().get(rowIndex); + this.editedId = news.getTopiaId(); + } + + void onActionFromDeleteNews(int rowIndex) throws SuiviObsmerException { + news = getNewsList().get(rowIndex); + serviceNews.saveNews(news, true); + //newsList = null; + } + + void onActionFromCancelEdit() { + } + + void onSelectedFromSaveNews(int rowIndex) throws SuiviObsmerException { + news = getNewsList().get(rowIndex); + } + + void onSuccessFromNewsForm() throws SuiviObsmerException { + serviceNews.saveNews(news, false); + //this.editedId = null; + if (log.isDebugEnabled()) { + log.debug(news.getContent()); + } + } } Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.java 2010-01-17 18:27:15 UTC (rev 219) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/services/AppModule.java 2010-01-17 19:32:26 UTC (rev 220) @@ -50,7 +50,7 @@ // Use service builder methods (example below) when the implementation // is provided inline, or requires more initialization than simply // invoking the constructor. - binder.bind(ServiceNews.class, ServiceNewsMock.class); + binder.bind(ServiceNews.class, ServiceNewsImpl.class); binder.bind(ServiceUser.class, ServiceUserImpl.class); binder.bind(ServiceSampling.class, ServiceSamplingImpl.class); binder.bind(ServiceReferential.class, ServiceReferentialImpl.class); Added: trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Index.properties =================================================================== --- trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Index.properties (rev 0) +++ trunk/suiviobsmer-ui/src/main/resources/fr/ifremer/suiviobsmer/ui/pages/Index.properties 2010-01-17 19:32:26 UTC (rev 220) @@ -0,0 +1,2 @@ +title-label: Titre +content-label: Texte : \ No newline at end of file Modified: trunk/suiviobsmer-ui/src/main/webapp/Index.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/Index.tml 2010-01-17 18:27:15 UTC (rev 219) +++ trunk/suiviobsmer-ui/src/main/webapp/Index.tml 2010-01-17 19:32:26 UTC (rev 220) @@ -1,11 +1,63 @@ -<t:layout t:pageTitle="News" t:contentId="so-news" - xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"> - <t:loop t:source="newsList" value="news"> - <div class="item"> - <p class="date">Publiée le <t:output value="news.topiaCreateDate" format="dateFormat" /></p> - <h2>${news.title}</h2> - <p class="content">${news.content}</p> - </div> - <div class="sep"><hr /></div> - </t:loop> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<t:layout t:pageTitle="News" t:contentId="so-news" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> + + <form t:type="form" t:id="newsForm"> + <p class="aright"> + <a t:type="actionlink" t:id="addNews"> + <img src="${asset:context:}/img/add-32px.png" alt="Ajouter" title="Ajouter un nouvel article"/> + </a> + </p> + <t:loop t:source="newsList" value="news" t:index="rowIndex" t:volatile="true"> + <div class="item" > + <p class="date"> + <t:unless t:test="createMode"> + Publiée le <t:output value="news.topiaCreateDate" format="dateFormat" /> + <p:else> + En cours de création... + </p:else> + </t:unless> + </p> + <h2> + <t:if t:test="editionMode"> + <t:label t:for="title" /> : <input t:type="textfield" t:id="title" value="news.title" class="width200" t:validate="required"/> + <p:else> + ${news.title} + </p:else> + </t:if> + </h2> + <t:if t:test="user.admin"> + <p class="aright"> + <t:if t:test="editionMode"> + <input t:type="submitContext" t:context="rowIndex" t:id="saveNews" class="ico22px save22px" value="Save" + title="Enregistrer les modifications" /> + <a t:type="actionlink" t:id="cancelEdit"> + <img src="${asset:context:}/img/undo-22px.png" title="Annuler les modifications"/> + </a> + <p:else> + <a t:type="actionlink" t:id="editNews" t:context="rowIndex" title="Modifier l'article"> + <img src="${asset:context:}/img/edit.png" alt="Edit" /> + </a> + <a t:type="actionlink" t:id="deleteNews" t:context="rowIndex" title="Supprimer l'article" + t:mixins="confirm" t:message="Etes-vous sûr de vouloir supprimer définitivement cet article ?"> + <img src="${asset:context:}/img/delete2.png" alt="Delete" /> + </a> + </p:else> + </t:if> + </p> + </t:if> + <div class="content"> + <t:if t:test="editionMode"> + <t:label t:for="content" /><br /> + <!--<input t:type="textarea" t:id="content" value="news.content" t:validate="required" />--> + <textarea t:type="easyfck/fckeditor" t:id="content" width="800px" height="200px" value="news.content" t:configuration="fckconf" t:validate="required" /> + <p:else> + <t:outputraw t:value="news.content"/> + </p:else> + </t:if> + </div> + </div> + <div class="sep"><hr /></div> + </t:loop> + </form> + </t:layout> Modified: trunk/suiviobsmer-ui/src/main/webapp/css/news.css =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/css/news.css 2010-01-17 18:27:15 UTC (rev 219) +++ trunk/suiviobsmer-ui/src/main/webapp/css/news.css 2010-01-17 19:32:26 UTC (rev 220) @@ -26,7 +26,7 @@ padding: 5px; } -div#so-news div.item p.content { +div#so-news div.item div.content { margin: 5px; text-align: justify; border-left: 3px solid #133852; Added: trunk/suiviobsmer-ui/src/main/webapp/js/FCKConf.js =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/js/FCKConf.js (rev 0) +++ trunk/suiviobsmer-ui/src/main/webapp/js/FCKConf.js 2010-01-17 19:32:26 UTC (rev 220) @@ -0,0 +1,7 @@ +FCKConfig.ToolbarCanCollapse = false; +FCKConfig.ContextMenu = ["Link"]; +FCKConfig.ToolbarSets["Default"] = [ +['Bold','Italic','Underline'], +['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], +['Link','Unlink','Anchor'] +]; \ No newline at end of file