Index: /extensions/jiwigo/release-0.12/logs/jiwigo.log.29-08-2010
===================================================================
--- /extensions/jiwigo/release-0.12/logs/jiwigo.log.29-08-2010	(revision 6845)
+++ /extensions/jiwigo/release-0.12/logs/jiwigo.log.29-08-2010	(revision 6845)
@@ -0,0 +1,1297 @@
+18:50:02,916 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+18:59:51,601 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+19:25:14,155 ERROR [fr.mael.jiwigo.transverse.util.Outil] Resultat : fail
+Document retourné : 
+<?xml version="1.0" encoding="UTF-8"?>
+<rsp stat="fail">
+	<err code="999" msg="Invalid username/password" />
+</rsp>
+
+19:37:36,193 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] java.lang.IllegalArgumentException: host parameter is null
+	at org.apache.commons.httpclient.HttpConnection.<init>(HttpConnection.java:206)
+	at org.apache.commons.httpclient.HttpConnection.<init>(HttpConnection.java:155)
+	at org.apache.commons.httpclient.SimpleHttpConnectionManager.getConnectionWithTimeout(SimpleHttpConnectionManager.java:175)
+	at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)
+	at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
+	at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnString(SessionManager.java:115)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+19:37:37,605 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] java.lang.NullPointerException
+	at java.io.StringReader.<init>(StringReader.java:33)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:10:29,664 ERROR [fr.mael.jiwigo.transverse.util.Outil] Resultat : fail
+Document retourné : 
+<?xml version="1.0" encoding="UTF-8"?>
+<rsp stat="fail">
+	<err code="500" msg="file already exists" />
+</rsp>
+
+20:27:58,155 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:28:43,529 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:142)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:90)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:40:36,865 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:41:22,386 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:41:22,401 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] java.lang.NullPointerException
+	at fr.mael.jiwigo.transverse.util.Outil.checkOk(Outil.java:190)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:93)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:42:32,730 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:42:32,731 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] java.lang.NullPointerException
+	at fr.mael.jiwigo.transverse.util.Outil.checkOk(Outil.java:190)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:93)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:42:34,248 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.dao.CategoryDao.lister(CategoryDao.java:85)
+	at fr.mael.jiwigo.service.CategoryService.construireArbre(CategoryService.java:86)
+	at fr.mael.jiwigo.ui.CategoriesTree.createNodes(CategoriesTree.java:134)
+	at fr.mael.jiwigo.ui.CategoriesTree.<init>(CategoriesTree.java:92)
+	at fr.mael.jiwigo.ui.MainFrame.<init>(MainFrame.java:93)
+	at fr.mael.jiwigo.ui.MainFrame.getInstance(MainFrame.java:79)
+	at fr.mael.jiwigo.Main.showFrame(Main.java:70)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:146)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 36 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:152)
+	at fr.mael.jiwigo.dao.CategoryDao.lister(CategoryDao.java:85)
+	at fr.mael.jiwigo.service.CategoryService.construireArbre(CategoryService.java:86)
+	at fr.mael.jiwigo.ui.CategoriesTree.createNodes(CategoriesTree.java:134)
+	at fr.mael.jiwigo.ui.CategoriesTree.<init>(CategoriesTree.java:92)
+	at fr.mael.jiwigo.ui.MainFrame.<init>(MainFrame.java:93)
+	at fr.mael.jiwigo.ui.MainFrame.getInstance(MainFrame.java:79)
+	at fr.mael.jiwigo.Main.showFrame(Main.java:70)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:146)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:42:34,249 ERROR [fr.mael.jiwigo.ui.CategoriesTree] java.lang.NullPointerException
+	at fr.mael.jiwigo.dao.CategoryDao.lister(CategoryDao.java:87)
+	at fr.mael.jiwigo.service.CategoryService.construireArbre(CategoryService.java:86)
+	at fr.mael.jiwigo.ui.CategoriesTree.createNodes(CategoriesTree.java:134)
+	at fr.mael.jiwigo.ui.CategoriesTree.<init>(CategoriesTree.java:92)
+	at fr.mael.jiwigo.ui.MainFrame.<init>(MainFrame.java:93)
+	at fr.mael.jiwigo.ui.MainFrame.getInstance(MainFrame.java:79)
+	at fr.mael.jiwigo.Main.showFrame(Main.java:70)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:146)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:43:00,732 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 1: White spaces are required between publicId and systemId.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:150)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 30 more
+Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanExternalID(XMLScanner.java:1026)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.scanDoctypeDecl(XMLDocumentScannerImpl.java:688)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:968)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:150)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:92)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+20:43:00,748 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] java.lang.NullPointerException
+	at fr.mael.jiwigo.transverse.util.Outil.checkOk(Outil.java:190)
+	at fr.mael.jiwigo.transverse.session.SessionManager.processLogin(SessionManager.java:93)
+	at fr.mael.jiwigo.ui.ConnexionDialog.actionPerformed(ConnexionDialog.java:141)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+21:36:28,116 ERROR [fr.mael.jiwigo.transverse.util.Outil] Resultat : fail
+Document retourné : 
+<?xml version="1.0" encoding="UTF-8"?>
+<rsp stat="fail">
+	<err code="500" msg="file already exists" />
+</rsp>
+
+21:36:31,103 ERROR [fr.mael.jiwigo.transverse.util.Outil] Resultat : fail
+Document retourné : 
+<?xml version="1.0" encoding="UTF-8"?>
+<rsp stat="fail">
+	<err code="500" msg="file already exists" />
+</rsp>
+
+21:36:31,920 ERROR [fr.mael.jiwigo.transverse.util.Outil] Resultat : fail
+Document retourné : 
+<?xml version="1.0" encoding="UTF-8"?>
+<rsp stat="fail">
+	<err code="500" msg="file already exists" />
+</rsp>
+
+23:45:30,010 ERROR [fr.mael.jiwigo.ui.CommentsDialog] java.lang.NullPointerException
+	at fr.mael.jiwigo.dao.CommentDao.lister(CommentDao.java:85)
+	at fr.mael.jiwigo.service.CommentService.lister(CommentService.java:75)
+	at fr.mael.jiwigo.ui.CommentsDialog.rafraichir(CommentsDialog.java:123)
+	at fr.mael.jiwigo.ui.CommentsDialog.<init>(CommentsDialog.java:113)
+	at fr.mael.jiwigo.ui.NavigateurFrame.actionPerformed(NavigateurFrame.java:148)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+23:46:13,851 ERROR [fr.mael.jiwigo.ui.CommentsDialog] java.lang.NullPointerException
+	at fr.mael.jiwigo.dao.CommentDao.lister(CommentDao.java:87)
+	at fr.mael.jiwigo.service.CommentService.lister(CommentService.java:75)
+	at fr.mael.jiwigo.ui.CommentsDialog.rafraichir(CommentsDialog.java:123)
+	at fr.mael.jiwigo.ui.CommentsDialog.<init>(CommentsDialog.java:113)
+	at fr.mael.jiwigo.ui.NavigateurFrame.actionPerformed(NavigateurFrame.java:148)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
+23:51:43,729 ERROR [fr.mael.jiwigo.transverse.util.Outil] Resultat : fail
+Document retourné : 
+<?xml version="1.0" encoding="UTF-8"?>
+<rsp stat="fail">
+	<err code="403" msg="Votre commentaire n'a pas été enregistré parce qu'il ne satisfait aux règles de validation" />
+</rsp>
+
+23:53:21,158 ERROR [fr.mael.jiwigo.transverse.util.Outil] Resultat : fail
+Document retourné : 
+<?xml version="1.0" encoding="UTF-8"?>
+<rsp stat="fail">
+	<err code="403" msg="Votre commentaire n'a pas été enregistré parce qu'il ne satisfait aux règles de validation" />
+</rsp>
+
+23:57:19,746 ERROR [fr.mael.jiwigo.transverse.session.SessionManager] org.jdom.input.JDOMParseException: Error on line 2: The markup in the document following the root element must be well-formed.
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:150)
+	at fr.mael.jiwigo.dao.CommentDao.creer(CommentDao.java:116)
+	at fr.mael.jiwigo.service.CommentService.creer(CommentService.java:83)
+	at fr.mael.jiwigo.ui.CommentsDialog.actionPerformed(CommentsDialog.java:168)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+Caused by: org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$TrailingMiscDriver.next(XMLDocumentScannerImpl.java:1423)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	... 31 more
+Caused by: org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
+	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
+	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
+	at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$TrailingMiscDriver.next(XMLDocumentScannerImpl.java:1423)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
+	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
+	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
+	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
+	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
+	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
+	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
+	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
+	at fr.mael.jiwigo.transverse.util.Outil.stringToDocument(Outil.java:85)
+	at fr.mael.jiwigo.transverse.session.SessionManager.executerReturnDocument(SessionManager.java:150)
+	at fr.mael.jiwigo.dao.CommentDao.creer(CommentDao.java:116)
+	at fr.mael.jiwigo.service.CommentService.creer(CommentService.java:83)
+	at fr.mael.jiwigo.ui.CommentsDialog.actionPerformed(CommentsDialog.java:168)
+	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
+	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
+	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
+	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
+	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
+	at java.awt.Component.processMouseEvent(Component.java:6263)
+	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
+	at java.awt.Component.processEvent(Component.java:6028)
+	at java.awt.Container.processEvent(Container.java:2041)
+	at java.awt.Component.dispatchEventImpl(Component.java:4630)
+	at java.awt.Container.dispatchEventImpl(Container.java:2099)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
+	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
+	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
+	at java.awt.Container.dispatchEventImpl(Container.java:2085)
+	at java.awt.Window.dispatchEventImpl(Window.java:2478)
+	at java.awt.Component.dispatchEvent(Component.java:4460)
+	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
+	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
+	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
+	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
+	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
+	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
+
Index: /extensions/jiwigo/release-0.12/pom.xml
===================================================================
--- /extensions/jiwigo/release-0.12/pom.xml	(revision 6845)
+++ /extensions/jiwigo/release-0.12/pom.xml	(revision 6845)
@@ -0,0 +1,43 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>Jiwigo</groupId>
+  <artifactId>Jiwigo</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  
+
+  
+  <dependencies>
+
+		
+	<dependency>
+	    <groupId>org.jdom</groupId>
+	    <artifactId>jdom</artifactId>
+	    <version>1.1</version>
+	</dependency>
+	<dependency>
+	    <groupId>commons-lang</groupId>
+	    <artifactId>commons-lang</artifactId>
+	    <version>2.5</version>
+	</dependency>
+	<dependency>
+	    <groupId>commons-httpclient</groupId>
+	    <artifactId>commons-httpclient</artifactId>
+	    <version>3.1</version>
+	</dependency>
+	<dependency>
+		<groupId>commons-logging</groupId>
+		<artifactId>commons-logging</artifactId>
+		<version>1.1</version>
+	</dependency>
+	<dependency>
+	    <groupId>log4j</groupId>
+	    <artifactId>log4j</artifactId>
+	    <version>1.2.16</version>
+	</dependency>
+	<dependency>
+	    <groupId>org.apache.sanselan</groupId>
+	    <artifactId>sanselan</artifactId>
+	    <version>0.97-incubator</version>
+	</dependency>
+  </dependencies>
+</project>
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/Main.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/Main.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/Main.java	(revision 6845)
@@ -0,0 +1,91 @@
+package fr.mael.jiwigo;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.UIManager;
+
+import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
+
+import fr.mael.jiwigo.transverse.session.SessionManager;
+import fr.mael.jiwigo.transverse.util.Outil;
+import fr.mael.jiwigo.transverse.util.preferences.PreferencesManagement;
+import fr.mael.jiwigo.ui.ConnexionDialog;
+import fr.mael.jiwigo.ui.mainframe.MainFrame;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Classe principale de lancement de l'interface.
+ * @author mael
+ *
+ */
+public class Main {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory.getLog(Main.class);
+    /**
+     * Le manager de login, qui permet de se connecter et 
+     * de lancer les requetes vers les méthodes du webservice
+     */
+    public static SessionManager sessionManager;
+
+    /**
+     *  La fenetre principale
+     */
+    private static MainFrame mainFrame;
+
+    public static void main(String[] args) {
+	try {
+	    UIManager.setLookAndFeel(new NimbusLookAndFeel());
+	} catch (Exception e) {
+	}
+	File dossierConfig = new File(System.getProperty("user.home") + "/.jiwigo");
+	if (!dossierConfig.exists()) {
+	    dossierConfig.mkdir();
+	}
+	try {
+	    PreferencesManagement.creerFichierParDefaut();
+	    //dialog de connexion
+	    ConnexionDialog dialog = new ConnexionDialog();
+	    dialog.showDialog();
+	} catch (IOException e) {
+	    LOG.error(Outil.getStackTrace(e));
+	}
+
+    }
+
+    public static void showFrame() {
+
+	if (mainFrame == null) {
+	    mainFrame = MainFrame.getInstance();
+	}
+	if (!mainFrame.isVisible()) {
+	    mainFrame.showUi();
+	}
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/CategoryDao.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/CategoryDao.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/CategoryDao.java	(revision 6845)
@@ -0,0 +1,107 @@
+package fr.mael.jiwigo.dao;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jdom.Document;
+import org.jdom.Element;
+
+import fr.mael.jiwigo.Main;
+import fr.mael.jiwigo.om.Category;
+import fr.mael.jiwigo.transverse.enumeration.MethodsEnum;
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Dao des catégories
+ * @author mael
+ *
+ */
+public class CategoryDao {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory.getLog(Main.class);
+    /**
+     * Instance, afin d'utiliser un singleton
+     */
+    private static CategoryDao instance;
+
+    /**
+     * Constructeur privé, afin que seule l'instance soit accessible
+     */
+    private CategoryDao() {
+
+    }
+
+    /**
+     * @return l'instance
+     */
+    public static CategoryDao getInstance() {
+	if (instance == null) {
+	    instance = new CategoryDao();
+	}
+	return instance;
+    }
+
+    /**
+     * Lister les catégorie
+     * @param rafraichir permet de dire si on utilise les catégories présentes dans le cache ou pas
+     * @param recursive listing récursif des catégories
+     * @return la liste des catégories
+     * @throws IOException 
+     */
+    public List<Category> lister(boolean recursive) throws IOException {
+	Document doc = Main.sessionManager.executerReturnDocument(MethodsEnum.LISTER_CATEGORIES.getLabel(),
+		"recursive", String.valueOf(recursive));
+	Element element = doc.getRootElement().getChild("categories");
+	List<Element> listElement = (List<Element>) element.getChildren("category");
+	ArrayList<Category> categories = new ArrayList<Category>();
+	for (Element cat : listElement) {
+	    Category myCat = new Category(cat);
+	    categories.add(myCat);
+	}
+	return categories;
+    }
+
+    /**
+     * Création d'une catégorie
+     * @param category la catégorie à créer
+     * @return true si la catégorie a bien été créée
+     */
+    public boolean creer(Category category) {
+	try {
+	    return Outil.checkOk(Main.sessionManager.executerReturnDocument(MethodsEnum.AJOUTER_CATEGORIE.getLabel(),
+		    "name", category.getNom(), "parent", String.valueOf(category.getParentDirect())));
+	} catch (IOException e) {
+	    LOG.error(Outil.getStackTrace(e));
+	}
+	return false;
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/CommentDao.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/CommentDao.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/CommentDao.java	(revision 6845)
@@ -0,0 +1,121 @@
+package fr.mael.jiwigo.dao;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jdom.Document;
+import org.jdom.Element;
+
+import fr.mael.jiwigo.Main;
+import fr.mael.jiwigo.om.Comment;
+import fr.mael.jiwigo.transverse.enumeration.MethodsEnum;
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Dao des commentaires
+ * @author mael
+ *
+ */
+public class CommentDao {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(CommentDao.class);
+    /**
+     *  Instance qui permet d'utiliser un singleton
+     */
+    private static CommentDao instance;
+
+    /**
+     * Constructeur privé, pour n'avoir accès qu'au singleton
+     */
+    private CommentDao() {
+
+    }
+
+    /**
+     * @return le singleton
+     */
+    public static CommentDao getInstance() {
+	if (instance == null) {
+	    instance = new CommentDao();
+	}
+	return instance;
+    }
+
+    /**
+     * Listing des commentaires pour une image donnée
+     * @param idImage identifiant de l'image
+     * @return liste des commentaires
+     * @throws IOException 
+     */
+    public List<Comment> lister(Integer idImage) throws IOException {
+	Document doc = (Main.sessionManager.executerReturnDocument(MethodsEnum.GET_INFO.getLabel(), "image_id", String
+		.valueOf(idImage)));
+	Element element = doc.getRootElement().getChild("image").getChild("comments");
+	List<Element> listElement = (List<Element>) element.getChildren("comment");
+	ArrayList<Comment> comments = new ArrayList<Comment>();
+	for (Element com : listElement) {
+	    Comment myCom = new Comment();
+	    myCom.setIdentifiant(Integer.valueOf(com.getAttributeValue("id")));
+	    myCom.setDate(com.getAttributeValue("date"));
+	    myCom.setAuthor(com.getChildText("author"));
+	    myCom.setContent(com.getChildText("content"));
+	    comments.add(myCom);
+	}
+	return comments;
+    }
+
+    /**
+     * Recupération de la clé pour l'ajout d'un com
+     * @param idImage
+     * @return
+     * @throws IOException 
+     */
+    public String getKey(Integer idImage) throws IOException {
+	Document doc = (Main.sessionManager.executerReturnDocument(MethodsEnum.GET_INFO.getLabel(), "image_id", String
+		.valueOf(idImage)));
+	String key = doc.getRootElement().getChild("image").getChild("comment_post").getAttributeValue("key");
+	return key;
+    }
+
+    public boolean creer(Comment commentaire) throws IOException {
+	String key = getKey(commentaire.getImageId());
+	try {
+	    Thread.sleep(2200);
+	} catch (InterruptedException e) {
+	    e.printStackTrace();
+	}
+	return Outil.checkOk(Main.sessionManager.executerReturnDocument(MethodsEnum.AJOUTER_COMMENTAIRE.getLabel(),
+		"image_id", String.valueOf(commentaire.getImageId()), "author", commentaire.getAuthor(), "content",
+		commentaire.getContent(), "key", key));
+
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/ImageDao.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/ImageDao.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/dao/ImageDao.java	(revision 6845)
@@ -0,0 +1,214 @@
+package fr.mael.jiwigo.dao;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.jdom.Document;
+import org.jdom.Element;
+
+import sun.misc.BASE64Encoder;
+import fr.mael.jiwigo.Main;
+import fr.mael.jiwigo.om.Image;
+import fr.mael.jiwigo.transverse.enumeration.MethodsEnum;
+import fr.mael.jiwigo.transverse.enumeration.PreferencesEnum;
+import fr.mael.jiwigo.transverse.util.Outil;
+import fr.mael.jiwigo.transverse.util.preferences.PreferencesManagement;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Dao des images
+ * @author mael
+ *
+ */
+public class ImageDao {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(ImageDao.class);
+
+    /**
+     * Singleton
+     */
+    private static ImageDao instance;
+
+    /**
+     * cache
+     */
+    private HashMap<Integer, ArrayList<Image>> cache;
+
+    /**
+     * 
+     */
+    private Integer firstCatInCache;
+
+    /**
+     * Constructeur privé, pour n'avoir accès qu'au singleton
+     */
+    private ImageDao() {
+	cache = new HashMap<Integer, ArrayList<Image>>();
+    }
+
+    /**
+     * @return le singleton
+     */
+    public static ImageDao getInstance() {
+	if (instance == null) {
+	    instance = new ImageDao();
+	}
+	return instance;
+    }
+
+    /**
+     * Lister toutes les images
+     * @return la liste des images
+     * @throws IOException 
+     */
+    public List<Image> lister(boolean rafraichir) throws IOException {
+	return listerParCategory(null, rafraichir);
+    }
+
+    /**
+     * Listing des images d'une catégorie
+     * @param categoryId l'id de la catégorie
+     * @return la liste des images
+     * @throws IOException 
+     */
+    public List<Image> listerParCategory(Integer categoryId, boolean rafraichir) throws IOException {
+	if (rafraichir || cache.get(categoryId) == null) {
+	    Document doc = null;
+	    if (categoryId != null) {
+		doc = Main.sessionManager.executerReturnDocument(MethodsEnum.LISTER_IMAGES.getLabel(), "cat_id", String
+			.valueOf(categoryId));
+	    } else {
+		doc = Main.sessionManager.executerReturnDocument(MethodsEnum.LISTER_IMAGES.getLabel());
+	    }
+	    Element element = doc.getRootElement().getChild("images");
+	    List<Element> listElement = (List<Element>) element.getChildren("image");
+	    ArrayList<Image> images = new ArrayList<Image>();
+	    for (Element im : listElement) {
+		Image myImage = new Image();
+		myImage.setMiniature(im.getAttributeValue("tn_url"));
+		myImage.setUrl(im.getAttributeValue("element_url"));
+		myImage.setWidth(Integer.valueOf(im.getAttributeValue("width")));
+		myImage.setHeight(Integer.valueOf(im.getAttributeValue("height")));
+		myImage.setFile(im.getAttributeValue("file"));
+		myImage.setVue(Integer.valueOf(im.getAttributeValue("hit")));
+		myImage.setIdentifiant(Integer.valueOf(im.getAttributeValue("id")));
+		myImage.setName(im.getChildText("name"));
+		if (myImage.getName() == null) {
+		    myImage.setName(myImage.getFile());
+		}
+		images.add(myImage);
+
+	    }
+	    cache.remove(categoryId);
+	    cache.put(categoryId, images);
+	    if (firstCatInCache == null) {
+		firstCatInCache = categoryId;
+	    }
+	    return images;
+	} else {
+	    return cache.get(categoryId);
+	}
+    }
+
+    /**
+     * Creation d'une image.<br/>
+     * Dans l'ordre : <br/>
+     * <li>
+     * <ul>envoi de la miniature en base64, grace à la méthode addchunk.</ul>
+     * <ul>envoi de l'image originale en base64, grace à la méthode addchunk</ul>
+     * <ul>utilisation de la methode add pour ajouter l'image dans la base<ul>
+     * </li>
+     * Pour finir, on vérifie les réponses du webservice.
+     * 
+     * @param image l'image à créer
+     * @return true si l'insertiopn de l'image s'est bien passée
+     * @throws Exception
+     */
+    //TODO ne pas continuer si une des réponses précédentes est négative
+    public boolean creer(Image image) throws Exception {
+	//on convertit la miniature en string base64
+	BASE64Encoder base64 = new BASE64Encoder();
+
+	String thumbnailBase64 = base64.encode(Outil.getBytesFromFile(image.getThumbnail()));
+	//on envoie la miniature et on recupere la reponse
+	Document reponseThumb = (Main.sessionManager.executerReturnDocument("pwg.images.addChunk", "data",
+		thumbnailBase64, "type", "thumb", "position", "1", "original_sum", Outil.getMD5Checksum(image
+			.getOriginale().getAbsolutePath())));
+
+	//begin feature:0001827
+	Double doubleChunk = Double.parseDouble(PreferencesManagement.getValue(PreferencesEnum.CHUNK_SIZE.getLabel())) * 1000 * 1024;
+	int chunk = doubleChunk.intValue();
+	ArrayList<File> fichiersAEnvoyer = Outil.splitFile(image.getOriginale(), chunk);
+	boolean echec = false;
+	for (int i = 0; i < fichiersAEnvoyer.size(); i++) {
+	    File fichierAEnvoyer = fichiersAEnvoyer.get(i);
+	    String originaleBase64 = base64.encode(Outil.getBytesFromFile(fichierAEnvoyer));
+	    Document reponseOriginale = (Main.sessionManager.executerReturnDocument("pwg.images.addChunk", "data",
+		    originaleBase64, "type", "file", "position", String.valueOf(i), "original_sum", Outil
+			    .getMD5Checksum(image.getOriginale().getAbsolutePath())));
+	    if (!Outil.checkOk(reponseOriginale)) {
+		echec = true;
+		break;
+	    }
+	}
+	//end
+
+	//on ajoute l'image en base et on recupere la reponse
+	Document reponseAjout = (Main.sessionManager.executerReturnDocument("pwg.images.add", "file_sum", Outil
+		.getMD5Checksum(image.getOriginale().getAbsolutePath()), "thumbnail_sum", Outil.getMD5Checksum(image
+		.getThumbnail().getCanonicalPath()), "position", "1", "original_sum", Outil.getMD5Checksum(image
+		.getOriginale().getAbsolutePath()), "categories", String.valueOf(image.getIdCategory()), "name", image
+		.getName(), "author", Main.sessionManager.getLogin()));
+	//	System.out.println(Main.sessionManager.executerReturnString("pwg.images.add", "file_sum", Outil
+	//		.getMD5Checksum(image.getOriginale().getAbsolutePath()), "thumbnail_sum", Outil.getMD5Checksum(image
+	//		.getThumbnail().getCanonicalPath()), "position", "1", "original_sum", Outil.getMD5Checksum(image
+	//		.getOriginale().getAbsolutePath()), "categories", String.valueOf(image.getIdCategory()), "name", image
+	//		.getName(), "author", Main.sessionManager.getLogin()));
+	boolean reussite = true;
+	if (!Outil.checkOk(reponseThumb) || echec || !Outil.checkOk(reponseAjout)) {
+	    reussite = false;
+	}
+	suppressionFichierTemporaires();
+	return reussite;
+
+    }
+
+    private void suppressionFichierTemporaires() {
+	File file = new File(System.getProperty("java.io.tmpdir") + "/originale.jpg");
+	file.delete();
+	file = new File(System.getProperty("java.io.tmpdir") + "/thumb.jpg");
+	file.delete();
+
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Category.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Category.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Category.java	(revision 6845)
@@ -0,0 +1,220 @@
+package fr.mael.jiwigo.om;
+
+import java.util.ArrayList;
+
+import org.jdom.Element;
+
+import fr.mael.jiwigo.transverse.enumeration.CategoryEnum;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public class Category {
+
+    private ArrayList<Integer> idCategoriesMeres;
+    private Integer identifiant;
+    private String urlCategory;
+    private Integer nbImages;
+    private Integer nbTotalImages;
+    private ArrayList<Category> categoriesFilles;
+    private ArrayList<Category> categoriesMeres;
+    private String nom;
+    private Element element;
+    private Integer parentDirect;
+
+    /**
+     * Constructeur. Une categorie est cree a partir de son element xml
+     * @param element
+     */
+    public Category(Element element) {
+	this.element = element;
+	this.identifiant = Integer.valueOf(element.getAttributeValue(CategoryEnum.ID.getLabel()));
+	this.urlCategory = element.getAttributeValue(CategoryEnum.URL.getLabel());
+	this.nbImages = Integer.valueOf(element.getAttributeValue(CategoryEnum.NB_IMAGES.getLabel()));
+	this.nbTotalImages = Integer.valueOf(element.getAttributeValue(CategoryEnum.NB_TOTAL_IMAGES.getLabel()));
+	this.nom = element.getChildText(CategoryEnum.NAME.getLabel());
+	String catMeres = element.getChildText(CategoryEnum.CAT_MERES.getLabel());
+	idCategoriesMeres = new ArrayList<Integer>();
+	for (String cat : catMeres.split(",")) {
+	    idCategoriesMeres.add(Integer.valueOf(cat));
+	}
+	categoriesFilles = new ArrayList<Category>();
+	categoriesMeres = new ArrayList<Category>();
+    }
+
+    public Category() {
+	// TODO Auto-generated constructor stub
+    }
+
+    @Override
+    public String toString() {
+	return nom;
+    }
+
+    /**
+     * @return the idCategoriesMeres
+     */
+    public ArrayList<Integer> getIdCategoriesMeres() {
+	return idCategoriesMeres;
+    }
+
+    /**
+     * @param idCategoriesMeres the idCategoriesMeres to set
+     */
+    public void setIdCategoriesMeres(ArrayList<Integer> idCategoriesMeres) {
+	this.idCategoriesMeres = idCategoriesMeres;
+    }
+
+    /**
+     * @return the identifiant
+     */
+    public Integer getIdentifiant() {
+	return identifiant;
+    }
+
+    /**
+     * @param identifiant the identifiant to set
+     */
+    public void setIdentifiant(Integer identifiant) {
+	this.identifiant = identifiant;
+    }
+
+    /**
+     * @return the urlCategory
+     */
+    public String getUrlCategory() {
+	return urlCategory;
+    }
+
+    /**
+     * @param urlCategory the urlCategory to set
+     */
+    public void setUrlCategory(String urlCategory) {
+	this.urlCategory = urlCategory;
+    }
+
+    /**
+     * @return the nbImages
+     */
+    public Integer getNbImages() {
+	return nbImages;
+    }
+
+    /**
+     * @param nbImages the nbImages to set
+     */
+    public void setNbImages(Integer nbImages) {
+	this.nbImages = nbImages;
+    }
+
+    /**
+     * @return the nbTotalImages
+     */
+    public Integer getNbTotalImages() {
+	return nbTotalImages;
+    }
+
+    /**
+     * @param nbTotalImages the nbTotalImages to set
+     */
+    public void setNbTotalImages(Integer nbTotalImages) {
+	this.nbTotalImages = nbTotalImages;
+    }
+
+    /**
+     * @return the categoriesFilles
+     */
+    public ArrayList<Category> getCategoriesFilles() {
+	return categoriesFilles;
+    }
+
+    /**
+     * @param categoriesFilles the categoriesFilles to set
+     */
+    public void setCategoriesFilles(ArrayList<Category> categoriesFilles) {
+	this.categoriesFilles = categoriesFilles;
+    }
+
+    /**
+     * @return the categoriesMeres
+     */
+    public ArrayList<Category> getCategoriesMeres() {
+	return categoriesMeres;
+    }
+
+    /**
+     * @param categoriesMeres the categoriesMeres to set
+     */
+    public void setCategoriesMeres(ArrayList<Category> categoriesMeres) {
+	this.categoriesMeres = categoriesMeres;
+    }
+
+    /**
+     * @return the nom
+     */
+    public String getNom() {
+	return nom;
+    }
+
+    /**
+     * @param nom the nom to set
+     */
+    public void setNom(String nom) {
+	this.nom = nom;
+    }
+
+    /**
+     * @return the element
+     */
+    public Element getElement() {
+	return element;
+    }
+
+    /**
+     * @param element the element to set
+     */
+    public void setElement(Element element) {
+	this.element = element;
+    }
+
+    /**
+     * @return the parentDirect
+     */
+    public Integer getParentDirect() {
+	return parentDirect;
+    }
+
+    /**
+     * @param parentDirect the parentDirect to set
+     */
+    public void setParentDirect(Integer parentDirect) {
+	this.parentDirect = parentDirect;
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Comment.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Comment.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Comment.java	(revision 6845)
@@ -0,0 +1,139 @@
+package fr.mael.jiwigo.om;
+
+import org.jdom.Element;
+
+/**
+ * 
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public class Comment {
+    private Integer imageId;
+    private String author;
+    private String content;
+    private String key;
+    private Integer identifiant;
+    private String date;
+
+    public Comment(Element element) {
+	this.identifiant = Integer.valueOf(element.getAttributeValue("id"));
+	this.date = element.getAttributeValue("date");
+	this.author = element.getChildText("author");
+	this.content = element.getChildText("content");
+
+    }
+
+    public Comment() {
+
+    }
+
+    /**
+     * @return the imageId
+     */
+    public Integer getImageId() {
+	return imageId;
+    }
+
+    /**
+     * @param imageId the imageId to set
+     */
+    public void setImageId(Integer imageId) {
+	this.imageId = imageId;
+    }
+
+    /**
+     * @return the author
+     */
+    public String getAuthor() {
+	return author;
+    }
+
+    /**
+     * @param author the author to set
+     */
+    public void setAuthor(String author) {
+	this.author = author;
+    }
+
+    /**
+     * @return the content
+     */
+    public String getContent() {
+	return content;
+    }
+
+    /**
+     * @param content the content to set
+     */
+    public void setContent(String content) {
+	this.content = content;
+    }
+
+    /**
+     * @return the key
+     */
+    public String getKey() {
+	return key;
+    }
+
+    /**
+     * @param key the key to set
+     */
+    public void setKey(String key) {
+	this.key = key;
+    }
+
+    /**
+     * @return the identifiant
+     */
+    public Integer getIdentifiant() {
+	return identifiant;
+    }
+
+    /**
+     * @param identifiant the identifiant to set
+     */
+    public void setIdentifiant(Integer identifiant) {
+	this.identifiant = identifiant;
+    }
+
+    /**
+     * @return the date
+     */
+    public String getDate() {
+	return date;
+    }
+
+    /**
+     * @param date the date to set
+     */
+    public void setDate(String date) {
+	this.date = date;
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Image.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Image.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/om/Image.java	(revision 6845)
@@ -0,0 +1,224 @@
+package fr.mael.jiwigo.om;
+
+import java.io.File;
+
+/**
+ * 
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public class Image {
+    private String miniature;
+    private String url;
+    private Integer width;
+    private Integer height;
+    private String file;
+    private Integer identifiant;
+    private Integer vue;
+    private String name;
+    private Integer idCategory;
+    private String auteur;
+    private File thumbnail;
+
+    /**
+     * @return the auteur
+     */
+    public String getAuteur() {
+	return auteur;
+    }
+
+    /**
+     * @param auteur the auteur to set
+     */
+    public void setAuteur(String auteur) {
+	this.auteur = auteur;
+    }
+
+    /**
+     * @return the thumbnail
+     */
+    public File getThumbnail() {
+	return thumbnail;
+    }
+
+    /**
+     * @param thumbnail the thumbnail to set
+     */
+    public void setThumbnail(File thumbnail) {
+	this.thumbnail = thumbnail;
+    }
+
+    /**
+     * @return the originale
+     */
+    public File getOriginale() {
+	return originale;
+    }
+
+    /**
+     * @param originale the originale to set
+     */
+    public void setOriginale(File originale) {
+	this.originale = originale;
+    }
+
+    private File originale;
+
+    @Override
+    public String toString() {
+	// TODO Auto-generated method stub
+	return name;
+    }
+
+    /**
+     * @return the miniature
+     */
+    public String getMiniature() {
+	return miniature;
+    }
+
+    /**
+     * @param miniature the miniature to set
+     */
+    public void setMiniature(String miniature) {
+	this.miniature = miniature;
+    }
+
+    /**
+     * @return the url
+     */
+    public String getUrl() {
+	return url;
+    }
+
+    /**
+     * @param url the url to set
+     */
+    public void setUrl(String url) {
+	this.url = url;
+    }
+
+    /**
+     * @return the width
+     */
+    public Integer getWidth() {
+	return width;
+    }
+
+    /**
+     * @param width the width to set
+     */
+    public void setWidth(Integer width) {
+	this.width = width;
+    }
+
+    /**
+     * @return the height
+     */
+    public Integer getHeight() {
+	return height;
+    }
+
+    /**
+     * @param height the height to set
+     */
+    public void setHeight(Integer height) {
+	this.height = height;
+    }
+
+    /**
+     * @return the file
+     */
+    public String getFile() {
+	return file;
+    }
+
+    /**
+     * @param file the file to set
+     */
+    public void setFile(String file) {
+	this.file = file;
+    }
+
+    /**
+     * @return the identifiant
+     */
+    public Integer getIdentifiant() {
+	return identifiant;
+    }
+
+    /**
+     * @param identifiant the identifiant to set
+     */
+    public void setIdentifiant(Integer identifiant) {
+	this.identifiant = identifiant;
+    }
+
+    /**
+     * @return the vue
+     */
+    public Integer getVue() {
+	return vue;
+    }
+
+    /**
+     * @param vue the vue to set
+     */
+    public void setVue(Integer vue) {
+	this.vue = vue;
+    }
+
+    /**
+     * @return the name
+     */
+    public String getName() {
+	return name;
+    }
+
+    /**
+     * @param name the name to set
+     */
+    public void setName(String name) {
+	this.name = name;
+    }
+
+    /**
+     * @return the idCategory
+     */
+    public Integer getIdCategory() {
+	return idCategory;
+    }
+
+    /**
+     * @param idCategory the idCategory to set
+     */
+    public void setIdCategory(Integer idCategory) {
+	this.idCategory = idCategory;
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/CategoryService.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/CategoryService.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/CategoryService.java	(revision 6845)
@@ -0,0 +1,115 @@
+package fr.mael.jiwigo.service;
+
+import java.io.IOException;
+import java.util.List;
+
+import fr.mael.jiwigo.dao.CategoryDao;
+import fr.mael.jiwigo.om.Category;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Service des catégories
+ * @author mael
+ *
+ */
+public class CategoryService {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(CategoryService.class);
+
+    /**
+     * singleton
+     */
+    private static CategoryService instance;
+
+    /**
+     * @return le singleton
+     */
+    public static CategoryService getInstance() {
+	if (instance == null) {
+	    instance = new CategoryService();
+	}
+	return instance;
+    }
+
+    /**
+     * Constructeur privé, pour n'avoir accès qu'au singleton
+     */
+    private CategoryService() {
+
+    }
+
+    /**
+     * Listing des categories
+     * @param rafraichir utilisation du cache ou non
+     * @param recursive
+     * @return la liste des catégories
+     * @throws IOException 
+     */
+    public List<Category> lister(boolean recursive) throws IOException {
+	return CategoryDao.getInstance().lister(recursive);
+    }
+
+    /**
+     * Fonction qui permet de construire l'arbre des categorie
+     * En association catégories mères/catégories filles
+     * @return la liste des catégories
+     * @throws IOException 
+     */
+    public List<Category> construireArbre() throws IOException {
+	List<Category> list = CategoryDao.getInstance().lister(true);
+	for (Category category : list) {
+	    for (Category category2 : list) {
+		if (category2.getIdCategoriesMeres().size() != 1
+			&& category.getIdentifiant().equals(
+				category2.getIdCategoriesMeres().get(category2.getIdCategoriesMeres().size() - 2))) {
+		    category.getCategoriesFilles().add(category2);
+		    category2.getCategoriesMeres().add(category);
+		}
+
+	    }
+	}
+
+	return list;
+
+    }
+
+    /**
+     * Création d'une catégorie
+     * @param nom nom de la catégorie
+     * @param parent catégorie parent
+     * @return true si la catégorie a bien été créée
+     */
+    public boolean creer(String nom, Integer parent) {
+	Category category = new Category();
+	category.setParentDirect(parent);
+	category.setNom(nom);
+	return CategoryDao.getInstance().creer(category);
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/CommentService.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/CommentService.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/CommentService.java	(revision 6845)
@@ -0,0 +1,86 @@
+package fr.mael.jiwigo.service;
+
+import java.io.IOException;
+import java.util.List;
+
+import fr.mael.jiwigo.dao.CommentDao;
+import fr.mael.jiwigo.om.Comment;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Service des commentaires
+ * @author mael
+ *
+ */
+public class CommentService {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(CommentService.class);
+
+    /**
+     * singleton
+     */
+    private static CommentService instance;
+
+    /**
+     * @return le singleton
+     */
+    public static CommentService getInstance() {
+	if (instance == null) {
+	    instance = new CommentService();
+	}
+	return instance;
+    }
+
+    /**
+     * Constructeur privé, pour n'avoir accès qu'au singleton
+     */
+    private CommentService() {
+
+    }
+
+    /**
+     * Listing des commentaires pour une image
+     * @param imageId id de l'image
+     * @return la liste des commentaires
+     * @throws IOException 
+     */
+    public List<Comment> lister(Integer imageId) throws IOException {
+	return CommentDao.getInstance().lister(imageId);
+    }
+
+    public boolean creer(String content, Integer imageId, String auteur) throws IOException {
+	Comment commentaire = new Comment();
+	commentaire.setContent(content);
+	commentaire.setImageId(imageId);
+	commentaire.setAuthor(auteur);
+	return CommentDao.getInstance().creer(commentaire);
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/ImageService.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/ImageService.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/service/ImageService.java	(revision 6845)
@@ -0,0 +1,134 @@
+package fr.mael.jiwigo.service;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import fr.mael.jiwigo.dao.ImageDao;
+import fr.mael.jiwigo.om.Image;
+import fr.mael.jiwigo.transverse.enumeration.PreferencesEnum;
+import fr.mael.jiwigo.transverse.util.ImagesUtil;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.Outil;
+import fr.mael.jiwigo.transverse.util.preferences.PreferencesManagement;
+import fr.mael.jiwigo.ui.mainframe.MainFrame;
+
+/**
+ * 
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public class ImageService {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(ImageService.class);
+
+    private static ImageService instance;
+
+    public static ImageService getInstance() {
+	if (instance == null) {
+	    instance = new ImageService();
+	}
+	return instance;
+    }
+
+    private ImageService() {
+
+    }
+
+    public List<Image> listerParCategory(Integer categoryId, boolean rafraichir) throws IOException {
+	return ImageDao.getInstance().listerParCategory(categoryId, rafraichir);
+    }
+
+    /**
+     * Method called to send an image to the server.
+     
+     * @param filePath
+     * @param idCategory
+     * @return
+     * @throws Exception
+     */
+    public boolean creer(String filePath, Integer idCategory) throws Exception {
+	MainFrame.getInstance().setReussiteMessage(Messages.getMessage("mainFrame_resizing") + " " + filePath);
+	//get the byte array of the original file, to keep metadata
+	byte[] bytesFichierOriginal = Outil.getBytesFromFile(new File(filePath));
+
+	//size taken from the user's preferences
+	int widthOriginale = Integer
+		.valueOf(PreferencesManagement.getValue(PreferencesEnum.WIDTH_ORIGINALE.getLabel()));
+	int heightOriginale = Integer.valueOf(PreferencesManagement
+		.getValue(PreferencesEnum.HEIGHT_ORIGINAL.getLabel()));
+	//resize the picture (or not)
+	boolean originaleRedimensionnee = ImagesUtil.scale(filePath, "originale.jpg", widthOriginale, heightOriginale);
+	//create the thumbnail
+	ImagesUtil.scale(filePath, "thumb.jpg", 120, 90);
+	//get the thumbnail
+	File thumbnail = new File(System.getProperty("java.io.tmpdir") + "/thumb.jpg");
+	File originale = null;
+	if (originaleRedimensionnee) {
+	    originale = new File(System.getProperty("java.io.tmpdir") + "/originale.jpg");
+	    //if the original file has been resized, we put the metadata in the resized file
+	    //I use here a try catch because if the original file isn't a jpeg
+	    //the methode Outil.enrich will fail, but the procedure has to continue
+	    MainFrame.getInstance().setReussiteMessage(Messages.getMessage("mainFrame_addMetadata") + " " + filePath);
+	    try {
+		byte[] fichierEnrichi = Outil.enrich(bytesFichierOriginal, Outil.getBytesFromFile(new File(System
+			.getProperty("java.io.tmpdir")
+			+ "/originale.jpg")));
+		Outil.byteToFile(System.getProperty("java.io.tmpdir") + "/originale.jpg", fichierEnrichi);
+	    } catch (Exception e) {
+	    }
+	} else {
+	    originale = new File(filePath);
+
+	}
+	Image image = new Image();
+	image.setName(getImageName(filePath));
+	image.setThumbnail(thumbnail);
+	image.setOriginale(originale);
+	image.setIdCategory(idCategory);
+	MainFrame.getInstance().setReussiteMessage(Messages.getMessage("mainFrame_sendingFiles") + " " + filePath);
+	//now we call the dao to send the image to the webservice
+	return ImageDao.getInstance().creer(image);
+    }
+
+    /**
+     * Deletes the file extension
+     * @param path
+     * @return
+     */
+    private String getImageName(String path) {
+	File fichier = new File(path);
+	StringBuffer name = new StringBuffer(fichier.getName());
+	return (name.delete(name.lastIndexOf("."), name.length())).toString();
+
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/CacheEnum.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/CacheEnum.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/CacheEnum.java	(revision 6845)
@@ -0,0 +1,49 @@
+/**
+ * 
+ */
+package fr.mael.jiwigo.transverse.enumeration;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public enum CacheEnum {
+
+    MAX_IMAGES_IN_IMAGE_DAO(10);
+
+    protected Integer nb;
+
+    /** Constructeur */
+    CacheEnum(Integer pNb) {
+	this.nb = pNb;
+    }
+
+    public Integer getNb() {
+	return this.nb;
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/CategoryEnum.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/CategoryEnum.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/CategoryEnum.java	(revision 6845)
@@ -0,0 +1,50 @@
+/**
+ * 
+ */
+package fr.mael.jiwigo.transverse.enumeration;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public enum CategoryEnum {
+
+    ID("id"), NB_IMAGES("nb_images"), NB_TOTAL_IMAGES("total_nb_images"), URL("url"), NAME("name"), CAT_MERES(
+	    "uppercats");
+
+    protected String label;
+
+    /** Constructeur */
+    CategoryEnum(String pLabel) {
+	this.label = pLabel;
+    }
+
+    public String getLabel() {
+	return this.label;
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/MethodsEnum.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/MethodsEnum.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/MethodsEnum.java	(revision 6845)
@@ -0,0 +1,51 @@
+/**
+ * 
+ */
+package fr.mael.jiwigo.transverse.enumeration;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Listing des méthodes du webservice
+ * @author mael
+ *
+ */
+public enum MethodsEnum {
+
+    LOGIN("pwg.session.login"), LISTER_CATEGORIES("pwg.categories.getList"), LISTER_IMAGES("pwg.categories.getImages"), GET_INFO(
+	    "pwg.images.getInfo"), AJOUTER_CATEGORIE("pwg.categories.add"), AJOUTER_COMMENTAIRE("pwg.images.addComment");
+
+    protected String label;
+
+    /** Constructeur */
+    MethodsEnum(String pLabel) {
+	this.label = pLabel;
+    }
+
+    public String getLabel() {
+	return this.label;
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/PreferencesEnum.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/PreferencesEnum.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/enumeration/PreferencesEnum.java	(revision 6845)
@@ -0,0 +1,50 @@
+/**
+ * 
+ */
+package fr.mael.jiwigo.transverse.enumeration;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public enum PreferencesEnum {
+
+    CHUNK_SIZE("chunk_size"), WIDTH_ORIGINALE("width_original"), HEIGHT_ORIGINAL("height_original"), PASSWORD(
+	    "password"), LOGIN("login"), URL_SITE("url");
+
+    protected String label;
+
+    /** Constructeur */
+    PreferencesEnum(String pLabel) {
+	this.label = pLabel;
+    }
+
+    public String getLabel() {
+	return this.label;
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/session/SessionManager.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/session/SessionManager.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/session/SessionManager.java	(revision 6845)
@@ -0,0 +1,230 @@
+package fr.mael.jiwigo.transverse.session;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.swing.JOptionPane;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.jdom.Document;
+import org.jdom.JDOMException;
+
+import fr.mael.jiwigo.transverse.enumeration.MethodsEnum;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Gestionnaire de connexion
+ */
+public class SessionManager {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(SessionManager.class);
+    /**
+     * Le login entré
+     */
+    private String login;
+    /**
+     * Le mot de passe entré
+     */
+    private String motDePasse;
+    /**
+     * l'url du site
+     */
+    private String url;
+    /**
+     * le client http
+     */
+    private HttpClient client;
+
+    /**
+     * Constructeur
+     * @param login le login
+     * @param motDePasse le mot de passe
+     * @param url l'url du site
+     */
+    public SessionManager(String login, String motDePasse, String url) {
+	this.login = login;
+	this.motDePasse = motDePasse;
+	this.url = url + "/ws.php";
+	client = new HttpClient();
+	//utilisation d'un useragent linux, parce que c'est mieux 8)
+	client.getParams().setParameter("http.useragent",
+		"Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1");
+    }
+
+    /**
+     * Methode de connexion
+     * @return true si la connexion s'est bien deroulee
+     */
+    public boolean processLogin() {
+	Document doc;
+	try {
+	    doc = executerReturnDocument(MethodsEnum.LOGIN.getLabel(), "username", login, "password", motDePasse);
+	    return Outil.checkOk(doc);
+	} catch (Exception e) {
+	    LOG.error(Outil.getStackTrace(e));
+	}
+	return false;
+
+    }
+
+    /**
+     * Execute une methode sur le web service et retourne le resultat sous forme de string
+     * @param methode la methode a executer
+     * @param parametres les parametres a  ajouter a la methode. doit etre un nombre pair : la cle suivie de sa valeur
+     * @return le resultat
+     */
+    public String executerReturnString(String methode, String... parametres) {
+	if (parametres.length % 2 != 0 && !(parametres == null)) {
+	    try {
+		throw new Exception("Le nombre de parametres doit etre pair");
+	    } catch (Exception e) {
+		LOG.error(Outil.getStackTrace(e));
+		return null;
+	    }
+	}
+	PostMethod method = new PostMethod(url);
+	method.addParameter("method", methode);
+	for (int i = 0; i < parametres.length; i += 2) {
+	    method.addParameter(parametres[i], parametres[i + 1]);
+	}
+	//begin bug:0001833
+	method.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
+	//end
+
+	try {
+	    client.executeMethod(method);
+	    InputStream streamResponse = method.getResponseBodyAsStream();
+	    //	    System.out.println(Outil.readInputStreamAsString(streamResponse));
+	    //	    String toReturn = method.getResponseBodyAsString();
+	    String toReturn = Outil.readInputStreamAsString(streamResponse);
+	    LOG.debug(toReturn);
+	    return toReturn;
+	} catch (HttpException e) {
+	    // TODO Auto-generated catch block
+	    LOG.error(Outil.getStackTrace(e));
+	} catch (IOException e) {
+	    // TODO Auto-generated catch block
+	    LOG.error(Outil.getStackTrace(e));
+	} catch (IllegalArgumentException e) {
+	    LOG.error(Outil.getStackTrace(e));
+	    JOptionPane.showMessageDialog(null, Messages.getMessage("connexionDialog_connexionError"), Messages
+		    .getMessage("error"), JOptionPane.ERROR_MESSAGE);
+	} finally {
+	    method.releaseConnection();
+	}
+	return null;
+
+    }
+
+    /**
+     * Execute une methode sur le webservice et renvoie le resultat sous form de document jdom
+     * @param methode la methode a executer
+     * @param parametres les parametres a  ajouter a la methode. doit etre un nombre pair : la cle suivie de sa valeur
+     * @return le resultat
+     * @throws IOException 
+     */
+    public Document executerReturnDocument(String methode, String... parametres) throws IOException {
+	try {
+	    return Outil.stringToDocument(executerReturnString(methode, parametres));
+	} catch (JDOMException e) {
+	    // TODO Auto-generated catch block
+	    LOG.error(Outil.getStackTrace(e));
+	}
+	return null;
+
+    }
+
+    /**
+     * Execute une methode sur le webservice et renvoie le resultat sous form de document jdom
+     * @param methode la methode a executer
+     * @return le resultat
+     */
+    public Document executerReturnDocument(String methode) {
+	try {
+	    return Outil.stringToDocument(executerReturnString(methode));
+	} catch (JDOMException e) {
+	    // TODO Auto-generated catch block
+	    LOG.error(Outil.getStackTrace(e));
+	} catch (IOException e) {
+	    // TODO Auto-generated catch block
+	    LOG.error(Outil.getStackTrace(e));
+	}
+	return null;
+
+    }
+
+    /**
+     * @return the login
+     */
+    public String getLogin() {
+	return login;
+    }
+
+    /**
+     * @param login the login to set
+     */
+    public void setLogin(String login) {
+	this.login = login;
+    }
+
+    /**
+     * @return the motDePasse
+     */
+    public String getMotDePasse() {
+	return motDePasse;
+    }
+
+    /**
+     * @param motDePasse the motDePasse to set
+     */
+    public void setMotDePasse(String motDePasse) {
+	this.motDePasse = motDePasse;
+    }
+
+    /**
+     * @return the url
+     */
+    public String getUrl() {
+	return url;
+    }
+
+    /**
+     * @param url the url to set
+     */
+    public void setUrl(String url) {
+	this.url = url;
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/ImagesUtil.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/ImagesUtil.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/ImagesUtil.java	(revision 6845)
@@ -0,0 +1,129 @@
+package fr.mael.jiwigo.transverse.util;
+
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.imageio.ImageIO;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public class ImagesUtil {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(ImagesUtil.class);
+
+    /**
+     * Fonction de rotation d'une image
+     * @param image l'image à tourner
+     * @param angle l'angle de rotation
+     * @return l'image pivotée
+     */
+    public static BufferedImage rotate(BufferedImage image, double angle) {
+	GraphicsConfiguration gc = getDefaultConfiguration();
+	double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
+	int w = image.getWidth(), h = image.getHeight();
+	int neww = (int) Math.floor(w * cos + h * sin), newh = (int) Math.floor(h * cos + w * sin);
+	int transparency = image.getColorModel().getTransparency();
+	BufferedImage result = gc.createCompatibleImage(neww, newh, transparency);
+	Graphics2D g = result.createGraphics();
+	g.translate((neww - w) / 2, (newh - h) / 2);
+	g.rotate(angle, w / 2, h / 2);
+	g.drawRenderedImage(image, null);
+	return result;
+    }
+
+    /**
+     * @return
+     */
+    public static GraphicsConfiguration getDefaultConfiguration() {
+	GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
+	GraphicsDevice gd = ge.getDefaultScreenDevice();
+	return gd.getDefaultConfiguration();
+    }
+
+    /**
+     * Ecriture d'une image dans un fichier png
+     * @param file le fichier
+     * @param bufferedImage l'image
+     * @throws IOException
+     */
+    public static void writeImageToPNG(File file, BufferedImage bufferedImage) throws IOException {
+	ImageIO.write(bufferedImage, "png", file);
+    }
+
+    /**
+     * Mise à l'échelle d'une image
+     * @param filePath le chemin vers le fichier de l'image
+     * @param tempName le nom du fichier résultat
+     * @param width la largeur
+     * @param height la hauteur
+     * @return true si l'image a effectivement ete redimensionnee
+     * @throws Exception
+     */
+    public static boolean scale(String filePath, String tempName, int width, int height) throws Exception {
+	File file = new File(filePath);
+	InputStream imageStream = new BufferedInputStream(new FileInputStream(filePath));
+	Image image = (Image) ImageIO.read(imageStream);
+
+	double thumbRatio = (double) width / (double) height;
+	int imageWidth = image.getWidth(null);
+	int imageHeight = image.getHeight(null);
+	//on n'agrandit pas l'image
+	if (imageWidth < width || imageHeight < height) {
+	    return false;
+	}
+	double imageRatio = (double) imageWidth / (double) imageHeight;
+	if (thumbRatio < imageRatio) {
+	    height = (int) (width / imageRatio);
+	} else {
+	    width = (int) (height * imageRatio);
+	}
+	BufferedImage thumbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+	Graphics2D graphics2D = thumbImage.createGraphics();
+	graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+	graphics2D.drawImage(image, 0, 0, width, height, null);
+	ImageIO.write(thumbImage, "jpg", new FileOutputStream(System.getProperty("java.io.tmpdir") + "/" + tempName));
+	return true;
+
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/Messages.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/Messages.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/Messages.java	(revision 6845)
@@ -0,0 +1,48 @@
+package fr.mael.jiwigo.transverse.util;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Gestion des messages pour les traductions
+ */
+public class Messages {
+
+    public static Locale usedLocale = Locale.getDefault();
+
+    /**
+     * Recuperation d'un message
+     * @param key clé du message
+     * @return le message
+     */
+    public static String getMessage(String key) {
+	return ResourceBundle.getBundle("fr.mael.jiwigo.trad.messages", usedLocale).getString(key);
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/MetadataUtil.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/MetadataUtil.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/MetadataUtil.java	(revision 6845)
@@ -0,0 +1,224 @@
+package fr.mael.jiwigo.transverse.util;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import com.drew.imaging.jpeg.JpegMetadataReader;
+import com.drew.imaging.jpeg.JpegProcessingException;
+import com.drew.metadata.Directory;
+import com.drew.metadata.Metadata;
+import com.drew.metadata.MetadataException;
+import com.drew.metadata.Tag;
+
+public class MetadataUtil {
+    public static HashMap<Integer, String> getIptcMap() {
+	HashMap<Integer, String> tagNameMap = new HashMap<Integer, String>();
+	//	tagNameMap.put(new Integer(512), "Directory Version");
+	tagNameMap.put(new Integer(632), "iptc_Caption_Abstract");
+	tagNameMap.put(new Integer(634), "iptc_Writer_Editor");
+	tagNameMap.put(new Integer(617), "iptc_Headline");
+	tagNameMap.put(new Integer(552), "iptc_Special_Instructions");
+	tagNameMap.put(new Integer(592), "iptc_By_line");
+	tagNameMap.put(new Integer(597), "iptc_By_line_Title");
+	tagNameMap.put(new Integer(622), "iptc_Credit");
+	tagNameMap.put(new Integer(627), "iptc_Source");
+	tagNameMap.put(new Integer(517), "iptc_Object");
+	tagNameMap.put(new Integer(567), "iptc_Date_Created");
+	tagNameMap.put(new Integer(602), "iptc_City");
+	tagNameMap.put(new Integer(607), "iptc_Province_State");
+	tagNameMap.put(new Integer(613), "iptc_Country_Primary_Location_Code");
+	tagNameMap.put(new Integer(615), "iptc_Original_Transmission_Reference");
+	tagNameMap.put(new Integer(527), "iptc_Category");
+	tagNameMap.put(new Integer(532), "iptc_Supplemental_Category");
+	tagNameMap.put(new Integer(522), "iptc_Urgency");
+	tagNameMap.put(new Integer(537), "iptc_Keywords");
+	tagNameMap.put(new Integer(628), "iptc_Copyright_Notice");
+	tagNameMap.put(new Integer(542), "iptc_Release_Date");
+	tagNameMap.put(new Integer(547), "iptc_Release_Time");
+	tagNameMap.put(new Integer(572), "iptc_Time_Created");
+	tagNameMap.put(new Integer(577), "iptc_Originating_Program");
+	return tagNameMap;
+    }
+
+    public static HashMap<Integer, String> getExifMap() {
+	HashMap<Integer, String> tagNameMap = new HashMap<Integer, String>();
+	tagNameMap.put(new Integer(266), "exif_field_FillOrder");
+	tagNameMap.put(new Integer(269), "exif_field_DocumentName");
+	tagNameMap.put(new Integer(4096), "exif_field_RelatedImageFileFormat");
+	tagNameMap.put(new Integer(4097), "exif_field_RelatedImageWidth");
+	tagNameMap.put(new Integer(4098), "exif_field_RelatedImageLength");
+	tagNameMap.put(new Integer(342), "exif_field_TransferRange");
+	tagNameMap.put(new Integer(512), "exif_field_JPEGProc");
+	tagNameMap.put(new Integer(34665), "exif_field_ExifOffset");
+	tagNameMap.put(new Integer(37122), "exif_field_CompressedBitsPerPixel");
+	//	tagNameMap.put(new Integer(37500), "Maker Note");
+	tagNameMap.put(new Integer(40965), "exif_field_InteropOffset");
+	//	tagNameMap.put(new Integer(254), "New Subfile Type");
+	tagNameMap.put(new Integer(255), "exif_field_SubfileType");
+	//	tagNameMap.put(new Integer(256), "Thumbnail Image Width");
+	//	tagNameMap.put(new Integer(257), "Thumbnail Image Height");
+	tagNameMap.put(new Integer(258), "exif_field_BitsPerSample");
+	tagNameMap.put(new Integer(259), "exif_field_Compression");
+	tagNameMap.put(new Integer(262), "exif_field_PhotometricInterpretation");
+	tagNameMap.put(new Integer(263), "exif_field_Thresholding");
+	tagNameMap.put(new Integer(270), "exif_field_ImageDescription");
+	tagNameMap.put(new Integer(271), "exif_field_Make");
+	tagNameMap.put(new Integer(272), "exif_field_Model");
+	tagNameMap.put(new Integer(273), "exif_field_StripOffsets");
+	tagNameMap.put(new Integer(274), "exif_field_Orientation");
+	tagNameMap.put(new Integer(277), "exif_field_SamplesPerPixel");
+	tagNameMap.put(new Integer(278), "exif_field_RowsPerStrip");
+	tagNameMap.put(new Integer(279), "exif_field_StripByteCounts");
+	tagNameMap.put(new Integer(282), "exif_field_XResolution");
+	tagNameMap.put(new Integer(283), "exif_field_YResolution");
+	tagNameMap.put(new Integer(285), "exif_field_PageName");
+	tagNameMap.put(new Integer(284), "exif_field_PlanarConfiguration");
+	tagNameMap.put(new Integer(296), "exif_field_ResolutionUnit");
+	tagNameMap.put(new Integer(301), "exif_field_TransferFunction");
+	tagNameMap.put(new Integer(305), "exif_field_Software");
+	tagNameMap.put(new Integer(306), "exif_field_TakenDate");
+	tagNameMap.put(new Integer(315), "exif_field_Artist");
+	tagNameMap.put(new Integer(317), "exif_field_Predictor");
+	tagNameMap.put(new Integer(318), "exif_field_WhitePoint");
+	tagNameMap.put(new Integer(319), "exif_field_PrimaryChromaticities");
+	tagNameMap.put(new Integer(322), "exif_field_TileWidth");
+	tagNameMap.put(new Integer(323), "exif_field_TileLength");
+	tagNameMap.put(new Integer(324), "exif_field_TileOffsets");
+	tagNameMap.put(new Integer(325), "exif_field_TileByteCounts");
+	tagNameMap.put(new Integer(330), "exif_field_SubIFD");
+	tagNameMap.put(new Integer(347), "exif_field_JPEGTables");
+	tagNameMap.put(new Integer(513), "exif_field_ThumbnailOffset");
+	tagNameMap.put(new Integer(514), "exif_field_ThumbnailLength");
+	//	tagNameMap.put(new Integer(61441), "Thumbnail Data");
+	tagNameMap.put(new Integer(529), "exif_field_YCbCrCoefficients");
+	tagNameMap.put(new Integer(530), "exif_field_YCbCrSubSampling");
+	tagNameMap.put(new Integer(531), "exif_field_YCbCrPositioning");
+	tagNameMap.put(new Integer(532), "exif_field_ReferenceBlackWhite");
+	tagNameMap.put(new Integer(33421), "exif_field_CFARepeatPatternDim");
+	tagNameMap.put(new Integer(33422), "exif_field_CFAPattern2");
+	tagNameMap.put(new Integer(33423), "exif_field_BatteryLevel");
+	tagNameMap.put(new Integer(33432), "exif_field_Copyright");
+	tagNameMap.put(new Integer(33434), "exif_field_ExposureTime");
+	tagNameMap.put(new Integer(33437), "exif_field_FNumber");
+	tagNameMap.put(new Integer(33723), "exif_field_IPTC-NAA");
+	tagNameMap.put(new Integer(34675), "exif_field_ICC_Profile");
+	tagNameMap.put(new Integer(34850), "exif_field_ExposureProgram");
+	tagNameMap.put(new Integer(34852), "exif_field_SpectralSensitivity");
+	tagNameMap.put(new Integer(34853), "exif_field_GPSInfo");
+	tagNameMap.put(new Integer(34855), "exif_field_ISOSpeedRatings");
+	tagNameMap.put(new Integer(34856), "exif_field_Opto-ElectricConvFactor");
+	tagNameMap.put(new Integer(34857), "exif_field_Interlace");
+	tagNameMap.put(new Integer(34858), "exif_field_TimeZoneOffset");
+	tagNameMap.put(new Integer(34859), "exif_field_SelfTimer");
+	tagNameMap.put(new Integer(36864), "exif_field_ExifVersion");
+	tagNameMap.put(new Integer(36867), "exif_field_DateTimeOriginal");
+	//	tagNameMap.put(new Integer(36868), "Date/Time Digitized");
+	tagNameMap.put(new Integer(37121), "exif_field_ComponentsConfiguration");
+	tagNameMap.put(new Integer(37377), "exif_field_ShutterSpeedValue");
+	tagNameMap.put(new Integer(37378), "exif_field_ApertureValue");
+	tagNameMap.put(new Integer(37379), "exif_field_BrightnessValue");
+	tagNameMap.put(new Integer(37380), "exif_field_ExposureBiasValue");
+	tagNameMap.put(new Integer(37381), "exif_field_MaxApertureValue");
+	tagNameMap.put(new Integer(37382), "exif_field_SubjectDistance");
+	tagNameMap.put(new Integer(37383), "exif_field_MeteringMode");
+	tagNameMap.put(new Integer(37384), "exif_field_LightSource");
+	tagNameMap.put(new Integer(37385), "exif_field_Flash");
+	tagNameMap.put(new Integer(37386), "exif_field_FocalLength");
+	tagNameMap.put(new Integer(37387), "exif_field_FlashActivity");
+	tagNameMap.put(new Integer(37388), "exif_field_SpatialFrequencyResponse");
+	tagNameMap.put(new Integer(37389), "exif_field_Noise");
+	tagNameMap.put(new Integer(37393), "exif_field_ImageNumber");
+	tagNameMap.put(new Integer(37394), "exif_field_SecurityClassification");
+	tagNameMap.put(new Integer(37395), "exif_field_ImageHistory");
+	tagNameMap.put(new Integer(37396), "exif_field_SubjectLocation");
+	tagNameMap.put(new Integer(41493), "exif_field_ExposureIndex");
+	tagNameMap.put(new Integer(37398), "exif_field_TIFF-EPStandardID");
+	tagNameMap.put(new Integer(37510), "exif_field_UserComment");
+	tagNameMap.put(new Integer(37520), "exif_field_SubSecTime");
+	tagNameMap.put(new Integer(37521), "exif_field_SubSecTimeOriginal");
+	tagNameMap.put(new Integer(37522), "exif_field_SubSecTimeDigitized");
+	tagNameMap.put(new Integer(40960), "exif_field_FlashpixVersion");
+	tagNameMap.put(new Integer(40961), "exif_field_ColorSpace");
+	tagNameMap.put(new Integer(40962), "exif_field_ExifImageWidth");
+	//	tagNameMap.put(new Integer(40963), "Exif Image Height");
+	tagNameMap.put(new Integer(40964), "exif_field_RelatedSoundFile");
+	tagNameMap.put(new Integer(41483), "exif_field_FlashEnergy");
+	tagNameMap.put(new Integer(41484), "exif_field_SpatialFrequencyResponse");
+	tagNameMap.put(new Integer(41486), "exif_field_FocalPlaneXResolution");
+	tagNameMap.put(new Integer(41487), "exif_field_FocalPlaneYResolution");
+	tagNameMap.put(new Integer(41488), "exif_field_FocalPlaneResolutionUnit");
+	tagNameMap.put(new Integer(41492), "exif_field_SubjectLocation");
+	tagNameMap.put(new Integer(37397), "exif_field_ExposureIndex");
+	tagNameMap.put(new Integer(41495), "exif_field_SensingMethod");
+	tagNameMap.put(new Integer(41728), "exif_field_FileSource");
+	tagNameMap.put(new Integer(41729), "exif_field_SceneType");
+	tagNameMap.put(new Integer(41730), "exif_field_CFAPattern");
+	tagNameMap.put(new Integer(41985), "exif_field_CustomRendered");
+	tagNameMap.put(new Integer(41986), "exif_field_ExposureMode");
+	tagNameMap.put(new Integer(41987), "exif_field_WhiteBalance");
+	tagNameMap.put(new Integer(41988), "exif_field_DigitalZoomRatio");
+	tagNameMap.put(new Integer(41989), "exif_field_FocalLengthIn35mmFormat");
+	tagNameMap.put(new Integer(41990), "exif_field_SceneCaptureType");
+	tagNameMap.put(new Integer(41991), "exif_field_GainControl");
+	tagNameMap.put(new Integer(41992), "exif_field_Contrast");
+	tagNameMap.put(new Integer(41993), "exif_field_Saturation");
+	tagNameMap.put(new Integer(41994), "exif_field_Sharpness");
+	tagNameMap.put(new Integer(41995), "exif_field_DeviceSettingDescription");
+	tagNameMap.put(new Integer(41996), "exif_field_SubjectDistanceRange");
+	//	tagNameMap.put(new Integer(40093), "Windows XP Author");
+	//	tagNameMap.put(new Integer(40092), "Windows XP Comment");
+	//	tagNameMap.put(new Integer(40094), "Windows XP Keywords");
+	//	tagNameMap.put(new Integer(40095), "Windows XP Subject");
+	//	tagNameMap.put(new Integer(40091), "Windows XP Title");
+	tagNameMap.put(new Integer(280), "exif_field_MinSampleValue");
+	tagNameMap.put(new Integer(281), "exif_field_MaxSampleValue");
+	return tagNameMap;
+    }
+
+    public static HashMap<String, String> getTagsHashMap(String fichier) throws JpegProcessingException,
+	    MetadataException {
+	File jpegFile = new File(fichier);
+	Metadata metadata = JpegMetadataReader.readMetadata(jpegFile);
+	Iterator directories = metadata.getDirectoryIterator();
+	HashMap<String, String> mapTags = new HashMap<String, String>();
+	while (directories.hasNext()) {
+	    Directory directory = (Directory) directories.next();
+	    Iterator tags = directory.getTagIterator();
+	    if (directory.getName().equals("Exif") || directory.getName().equals("Iptc")) {
+		while (tags.hasNext()) {
+		    Tag tag = (Tag) tags.next();
+		    if (tag.getDirectoryName().equals("Exif")) {
+			for (Integer key : MetadataUtil.getExifMap().keySet()) {
+			    if (tag.getTagType() == key) {
+				mapTags.put(MetadataUtil.getExifMap().get(key), tag.getDescription());
+			    }
+			}
+		    } else {
+			for (Integer key : MetadataUtil.getIptcMap().keySet()) {
+			    if (tag.getTagType() == key) {
+				mapTags.put(MetadataUtil.getIptcMap().get(key), tag.getDescription());
+			    }
+			}
+		    }
+		}
+	    }
+	}
+	return mapTags;
+    }
+
+    public static void main(String[] args) {
+	try {
+	    HashMap<String, String> map = getTagsHashMap("/home/mael/Images/exif.JPG");
+	    for (String key : getTagsHashMap("/home/mael/Images/exif.JPG").keySet()) {
+		System.out.println(key + " -> " + map.get(key));
+	    }
+	} catch (JpegProcessingException e) {
+	    // TODO Auto-generated catch block
+	    e.printStackTrace();
+	} catch (MetadataException e) {
+	    // TODO Auto-generated catch block
+	    e.printStackTrace();
+	}
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/Outil.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/Outil.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/Outil.java	(revision 6845)
@@ -0,0 +1,306 @@
+package fr.mael.jiwigo.transverse.util;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+
+import org.apache.sanselan.Sanselan;
+import org.apache.sanselan.common.IImageMetadata;
+import org.apache.sanselan.formats.jpeg.JpegImageMetadata;
+import org.apache.sanselan.formats.jpeg.JpegPhotoshopMetadata;
+import org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriter;
+import org.apache.sanselan.formats.jpeg.iptc.JpegIptcRewriter;
+import org.apache.sanselan.formats.jpeg.iptc.PhotoshopApp13Data;
+import org.apache.sanselan.formats.tiff.write.TiffOutputSet;
+import org.jdom.Document;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.XMLOutputter;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ 
+ * @author mael
+ *
+ */
+public class Outil {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory.getLog(Outil.class);
+
+    /**
+     * Transformation d'un inputstream en string.<br/>
+     * Util pour lire la réponse du webservice
+     * @param input le stream
+     * @return la string
+     * @throws IOException
+     */
+    public static String readInputStreamAsString(InputStream input) throws IOException {
+	//	DataInputStream dis = new DataInputStream(new BufferedInputStream(input));
+	//
+	//	String temp;
+	//	StringBuffer buffer = new StringBuffer();
+	//	while ((temp = dis.readLine()) != null) {
+	//	    buffer.append(temp);
+	//	}
+	//	return buffer.toString();
+	StringWriter writer = new StringWriter();
+	InputStreamReader streamReader = new InputStreamReader(input);
+	//le buffer permet le readline
+	BufferedReader buffer = new BufferedReader(streamReader);
+	String line = "";
+	while (null != (line = buffer.readLine())) {
+	    writer.write(line);
+	}
+	// Sortie finale dans le String
+	return writer.toString();
+    }
+
+    /**
+     * Transformation d'une string en document
+     * @param string la string
+     * @return le document correspondant
+     * @throws JDOMException
+     * @throws IOException
+     */
+    public static Document stringToDocument(String string) throws JDOMException, IOException {
+	SAXBuilder sb = new SAXBuilder();
+	Document doc = sb.build(new StringReader(string));
+	return doc;
+
+    }
+
+    /**
+     * Transformation d'un inputstream en document
+     * @param input l'inputstream
+     * @return le document
+     * @throws JDOMException
+     * @throws IOException
+     */
+    public static Document readInputStreamAsDocument(InputStream input) throws JDOMException, IOException {
+	return stringToDocument(readInputStreamAsString(input));
+    }
+
+    /**
+     * Transformation d'un document en string
+     * @param doc le document à transformer
+     * @return la string
+     */
+    public static String documentToString(Document doc) {
+	return new XMLOutputter().outputString(doc);
+
+    }
+
+    /**
+     * Fonction qui retour l'url d'un fichier donné.
+     * Utile pour récupérer le chemin des images à l'intérieur du jar
+     * @param fileName le chemin du fichier
+     * @return l'url
+     */
+    public static URL getURL(String fileName) {
+	URLClassLoader urlLoader = (URLClassLoader) Outil.class.getClassLoader();
+	URL fileLocation = urlLoader.findResource(fileName);
+	return fileLocation;
+    }
+
+    /**
+     * Fonction qui retourne la somme de controle MD5 d'un fichier donné
+     * @param filename le chemin du fichier
+     * @return la somme de controle
+     * @throws Exception
+     */
+    public static String getMD5Checksum(String filename) throws Exception {
+	byte[] b = createChecksum(filename);
+	String result = "";
+	for (int i = 0; i < b.length; i++) {
+	    result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1);
+	}
+	return result;
+    }
+
+    /**
+     * Creation de la somme de controle d'un fichier
+     * @param filename le chemin du fichier
+     * @return la somme de controle sous forme de byte[]
+     * @throws Exception
+     */
+    private static byte[] createChecksum(String filename) throws Exception {
+	InputStream fis = new FileInputStream(filename);
+
+	byte[] buffer = new byte[1024];
+	MessageDigest complete = MessageDigest.getInstance("MD5");
+	int numRead;
+	do {
+	    numRead = fis.read(buffer);
+	    if (numRead > 0) {
+		complete.update(buffer, 0, numRead);
+	    }
+	} while (numRead != -1);
+	fis.close();
+	return complete.digest();
+    }
+
+    /**
+     * Fonction qui transforme un fichier en tableau de bytes
+     * @param file le fichier
+     * @return le tableau de bytes
+     * @throws IOException
+     */
+    public static byte[] getBytesFromFile(File file) throws IOException {
+	InputStream is = new FileInputStream(file);
+	long length = file.length();
+
+	byte[] bytes = new byte[(int) length];
+	int offset = 0;
+	int numRead = 0;
+	while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
+	    offset += numRead;
+	}
+
+	if (offset < bytes.length) {
+	    throw new IOException("Could not completely read file " + file.getName());
+	}
+	is.close();
+	return bytes;
+    }
+
+    /**
+     * Fonction qui vérifie que si la réponse du webservice est positive
+     * @param doc le document que retourne le webservice
+     * @return true si c'est ok
+     */
+    public static boolean checkOk(Document doc) {
+	if (doc.getRootElement().getAttributeValue("stat").equals("ok")) {
+	    return true;
+	} else {
+	    LOG.error("Resultat : " + doc.getRootElement().getAttributeValue("stat") + "\nDocument retourné : \n"
+		    + Outil.documentToString(doc));
+	    return false;
+	}
+
+    }
+
+    /**
+     * Exception to string
+     * @param aThrowable exception
+     * @return l'exception en string
+     */
+    public static String getStackTrace(Throwable aThrowable) {
+	final Writer result = new StringWriter();
+	final PrintWriter printWriter = new PrintWriter(result);
+	aThrowable.printStackTrace(printWriter);
+	return result.toString();
+    }
+
+    /**
+     * Function that splits a file 
+     * @param fichier the file to split
+     * @param size the size of the resulting chunks
+     * @return the list of files
+     * @throws IOException
+     */
+    //feature:0001827
+    public static ArrayList<File> splitFile(File fichier, int size) throws IOException {
+	FileInputStream fis = new FileInputStream(fichier);
+	byte buffer[] = new byte[size];
+	ArrayList<File> listFichiers = new ArrayList<File>();
+	int count = 0;
+	while (true) {
+	    int i = fis.read(buffer, 0, size);
+	    if (i == -1)
+		break;
+	    File file = new File(System.getProperty("java.io.tmpdir") + "/tempcut" + count);
+	    listFichiers.add(file);
+	    FileOutputStream fos = new FileOutputStream(file);
+	    fos.write(buffer, 0, i);
+	    fos.flush();
+	    fos.close();
+
+	    ++count;
+	}
+	return listFichiers;
+    }
+
+    /**
+     * Function used to put the exif and iptc metadata from one image to another
+     * @param enriched original image where the metadata comes from
+     * @param naked image where to put metadata
+     * @return enriched image
+     * @throws Exception
+     */
+    public static byte[] enrich(byte[] enriched, byte[] naked) throws Exception {
+
+	// read IPTC metadata from the original enriched image
+	IImageMetadata metadata = Sanselan.getMetadata(enriched);
+	JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
+	JpegPhotoshopMetadata photoshopMetadata = jpegMetadata.getPhotoshop();
+	if (photoshopMetadata == null) {
+	    return naked;
+	}
+
+	PhotoshopApp13Data data = photoshopMetadata.photoshopApp13Data;
+
+	// read the EXIF metadata from the parsed JPEG metadata
+	TiffOutputSet outputSet = jpegMetadata.getExif().getOutputSet();
+
+	// enrich the naked byte[] with EXIF metadata
+	ExifRewriter writer = new ExifRewriter();
+	ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+	writer.updateExifMetadataLossless(naked, outputStream, outputSet);
+
+	// enrich the partially clothed byte[] with IPTC metadata
+	InputStream src = new ByteArrayInputStream(outputStream.toByteArray());
+	ByteArrayOutputStream dest = new ByteArrayOutputStream();
+	new JpegIptcRewriter().writeIPTC(src, dest, data);
+
+	// return the fully clothed image as a byte[]
+	return dest.toByteArray();
+    }
+
+    public static void byteToFile(String fichier, byte[] bytes) throws IOException {
+	FileOutputStream fos = new FileOutputStream(fichier);
+	fos.write(bytes);
+	fos.flush();
+	fos.close();
+
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/filedrop/FileDrop.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/filedrop/FileDrop.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/filedrop/FileDrop.java	(revision 6845)
@@ -0,0 +1,783 @@
+package fr.mael.jiwigo.transverse.util.filedrop;
+
+import java.awt.datatransfer.DataFlavor;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.Reader;
+
+import net.iharder.dnd.FileDropListener;
+
+/**
+ * This class makes it easy to drag and drop files from the operating
+ * system to a Java program. Any <tt>java.awt.Component</tt> can be
+ * dropped onto, but only <tt>javax.swing.JComponent</tt>s will indicate
+ * the drop event with a changed border.
+ * <p/>
+ * To use this class, construct a new <tt>FileDrop</tt> by passing
+ * it the target component and a <tt>Listener</tt> to receive notification
+ * when file(s) have been dropped. Here is an example:
+ * <p/>
+ * <code><pre>
+ *      JPanel myPanel = new JPanel();
+ *      new FileDrop( myPanel, new FileDrop.Listener()
+ *      {   public void filesDropped( java.io.File[] files )
+ *          {   
+ *              // handle file drop
+ *              ...
+ *          }   // end filesDropped
+ *      }); // end FileDrop.Listener
+ * </pre></code>
+ * <p/>
+ * You can specify the border that will appear when files are being dragged by
+ * calling the constructor with a <tt>javax.swing.border.Border</tt>. Only
+ * <tt>JComponent</tt>s will show any indication with a border.
+ * <p/>
+ * You can turn on some debugging features by passing a <tt>PrintStream</tt>
+ * object (such as <tt>System.out</tt>) into the full constructor. A <tt>null</tt>
+ * value will result in no extra debugging information being output.
+ * <p/>
+ *
+ * <p>I'm releasing this code into the Public Domain. Enjoy.
+ * </p>
+ * <p><em>Original author: Robert Harder, rharder@usa.net</em></p>
+ * <p>2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.</p>
+ *
+ * @author  Robert Harder
+ * @author  rharder@users.sf.net
+ * @version 1.0.1
+ */
+public class FileDrop {
+    private transient javax.swing.border.Border normalBorder;
+    private transient java.awt.dnd.DropTargetListener dropListener;
+
+    /** Discover if the running JVM is modern enough to have drag and drop. */
+    private static Boolean supportsDnD;
+
+    // Default border color
+    private static java.awt.Color defaultBorderColor = new java.awt.Color(0f, 0f, 1f, 0.25f);
+
+    /**
+     * Constructs a {@link FileDrop} with a default light-blue border
+     * and, if <var>c</var> is a {@link java.awt.Container}, recursively
+     * sets all elements contained within as drop targets, though only
+     * the top level container will change borders.
+     *
+     * @param c Component on which files will be dropped.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.awt.Component c, final Listener listener) {
+	this(null, // Logging stream
+		c, // Drop target
+		javax.swing.BorderFactory.createMatteBorder(2, 2, 2, 2, defaultBorderColor), // Drag border
+		true, // Recursive
+		listener);
+    } // end constructor
+
+    /**
+     * Constructor with a default border and the option to recursively set drop targets.
+     * If your component is a <tt>java.awt.Container</tt>, then each of its children
+     * components will also listen for drops, though only the parent will change borders.
+     *
+     * @param c Component on which files will be dropped.
+     * @param recursive Recursively set children as drop targets.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.awt.Component c, final boolean recursive, final Listener listener) {
+	this(null, // Logging stream
+		c, // Drop target
+		javax.swing.BorderFactory.createMatteBorder(2, 2, 2, 2, defaultBorderColor), // Drag border
+		recursive, // Recursive
+		listener);
+    } // end constructor
+
+    /**
+     * Constructor with a default border and debugging optionally turned on.
+     * With Debugging turned on, more status messages will be displayed to
+     * <tt>out</tt>. A common way to use this constructor is with
+     * <tt>System.out</tt> or <tt>System.err</tt>. A <tt>null</tt> value for
+     * the parameter <tt>out</tt> will result in no debugging output.
+     *
+     * @param out PrintStream to record debugging info or null for no debugging.
+     * @param out 
+     * @param c Component on which files will be dropped.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.io.PrintStream out, final java.awt.Component c, final Listener listener) {
+	this(out, // Logging stream
+		c, // Drop target
+		javax.swing.BorderFactory.createMatteBorder(2, 2, 2, 2, defaultBorderColor), false, // Recursive
+		listener);
+    } // end constructor
+
+    /**
+     * Constructor with a default border, debugging optionally turned on
+     * and the option to recursively set drop targets.
+     * If your component is a <tt>java.awt.Container</tt>, then each of its children
+     * components will also listen for drops, though only the parent will change borders.
+     * With Debugging turned on, more status messages will be displayed to
+     * <tt>out</tt>. A common way to use this constructor is with
+     * <tt>System.out</tt> or <tt>System.err</tt>. A <tt>null</tt> value for
+     * the parameter <tt>out</tt> will result in no debugging output.
+     *
+     * @param out PrintStream to record debugging info or null for no debugging.
+     * @param out 
+     * @param c Component on which files will be dropped.
+     * @param recursive Recursively set children as drop targets.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.io.PrintStream out, final java.awt.Component c, final boolean recursive,
+	    final Listener listener) {
+	this(out, // Logging stream
+		c, // Drop target
+		javax.swing.BorderFactory.createMatteBorder(2, 2, 2, 2, defaultBorderColor), // Drag border
+		recursive, // Recursive
+		listener);
+    } // end constructor
+
+    /**
+     * Constructor with a specified border 
+     *
+     * @param c Component on which files will be dropped.
+     * @param dragBorder Border to use on <tt>JComponent</tt> when dragging occurs.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.awt.Component c, final javax.swing.border.Border dragBorder, final Listener listener) {
+	this(null, // Logging stream
+		c, // Drop target
+		dragBorder, // Drag border
+		false, // Recursive
+		listener);
+    } // end constructor
+
+    /**
+     * Constructor with a specified border and the option to recursively set drop targets.
+     * If your component is a <tt>java.awt.Container</tt>, then each of its children
+     * components will also listen for drops, though only the parent will change borders.
+     *
+     * @param c Component on which files will be dropped.
+     * @param dragBorder Border to use on <tt>JComponent</tt> when dragging occurs.
+     * @param recursive Recursively set children as drop targets.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.awt.Component c, final javax.swing.border.Border dragBorder, final boolean recursive,
+	    final Listener listener) {
+	this(null, c, dragBorder, recursive, listener);
+    } // end constructor
+
+    /**
+     * Constructor with a specified border and debugging optionally turned on.
+     * With Debugging turned on, more status messages will be displayed to
+     * <tt>out</tt>. A common way to use this constructor is with
+     * <tt>System.out</tt> or <tt>System.err</tt>. A <tt>null</tt> value for
+     * the parameter <tt>out</tt> will result in no debugging output.
+     *
+     * @param out PrintStream to record debugging info or null for no debugging.
+     * @param c Component on which files will be dropped.
+     * @param dragBorder Border to use on <tt>JComponent</tt> when dragging occurs.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.io.PrintStream out, final java.awt.Component c,
+	    final javax.swing.border.Border dragBorder, final Listener listener) {
+	this(out, // Logging stream
+		c, // Drop target
+		dragBorder, // Drag border
+		false, // Recursive
+		listener);
+    } // end constructor
+
+    /**
+     * Full constructor with a specified border and debugging optionally turned on.
+     * With Debugging turned on, more status messages will be displayed to
+     * <tt>out</tt>. A common way to use this constructor is with
+     * <tt>System.out</tt> or <tt>System.err</tt>. A <tt>null</tt> value for
+     * the parameter <tt>out</tt> will result in no debugging output.
+     *
+     * @param out PrintStream to record debugging info or null for no debugging.
+     * @param c Component on which files will be dropped.
+     * @param dragBorder Border to use on <tt>JComponent</tt> when dragging occurs.
+     * @param recursive Recursively set children as drop targets.
+     * @param listener Listens for <tt>filesDropped</tt>.
+     * @since 1.0
+     */
+    public FileDrop(final java.io.PrintStream out, final java.awt.Component c,
+	    final javax.swing.border.Border dragBorder, final boolean recursive, final Listener listener) {
+
+	if (supportsDnD()) { // Make a drop listener
+	    dropListener = new java.awt.dnd.DropTargetListener() {
+		public void dragEnter(java.awt.dnd.DropTargetDragEvent evt) {
+
+		    // Is this an acceptable drag event?
+		    if (isDragOk(out, evt)) {
+			// If it's a Swing component, set its border
+			if (c instanceof javax.swing.JComponent) {
+			    javax.swing.JComponent jc = (javax.swing.JComponent) c;
+			    normalBorder = jc.getBorder();
+			    jc.setBorder(dragBorder);
+			} // end if: JComponent   
+
+			// Acknowledge that it's okay to enter
+			//evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
+			evt.acceptDrag(java.awt.dnd.DnDConstants.ACTION_COPY);
+		    } // end if: drag ok
+		    else { // Reject the drag event
+			evt.rejectDrag();
+		    } // end else: drag not ok
+		} // end dragEnter
+
+		public void dragOver(java.awt.dnd.DropTargetDragEvent evt) { // This is called continually as long as the mouse is
+		    // over the drag target.
+		} // end dragOver
+
+		public void drop(java.awt.dnd.DropTargetDropEvent evt) {
+		    try { // Get whatever was dropped
+			java.awt.datatransfer.Transferable tr = evt.getTransferable();
+
+			// Is it a file list?
+			if (tr.isDataFlavorSupported(java.awt.datatransfer.DataFlavor.javaFileListFlavor)) {
+			    // Say we'll take it.
+			    //evt.acceptDrop ( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
+			    evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
+
+			    // Get a useful list
+			    java.util.List fileList = (java.util.List) tr
+				    .getTransferData(java.awt.datatransfer.DataFlavor.javaFileListFlavor);
+			    java.util.Iterator iterator = fileList.iterator();
+
+			    // Convert list to array
+			    java.io.File[] filesTemp = new java.io.File[fileList.size()];
+			    fileList.toArray(filesTemp);
+			    final java.io.File[] files = filesTemp;
+
+			    // Alert listener to drop.
+			    if (listener != null)
+				listener.filesDropped(files);
+
+			    // Mark that drop is completed.
+			    evt.getDropTargetContext().dropComplete(true);
+			} // end if: file list
+			else // this section will check for a reader flavor.
+			{
+			    // Thanks, Nathan!
+			    // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+			    DataFlavor[] flavors = tr.getTransferDataFlavors();
+			    boolean handled = false;
+			    for (int zz = 0; zz < flavors.length; zz++) {
+				if (flavors[zz].isRepresentationClassReader()) {
+				    // Say we'll take it.
+				    //evt.acceptDrop ( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
+				    evt.acceptDrop(java.awt.dnd.DnDConstants.ACTION_COPY);
+
+				    Reader reader = flavors[zz].getReaderForText(tr);
+
+				    BufferedReader br = new BufferedReader(reader);
+
+				    if (listener != null)
+					listener.filesDropped(createFileArray(br, out));
+
+				    // Mark that drop is completed.
+				    evt.getDropTargetContext().dropComplete(true);
+				    handled = true;
+				    break;
+				}
+			    }
+			    if (!handled) {
+				evt.rejectDrop();
+			    }
+			    // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+			} // end else: not a file list
+		    } // end try
+		    catch (java.io.IOException io) {
+			io.printStackTrace(out);
+			evt.rejectDrop();
+		    } // end catch IOException
+		    catch (java.awt.datatransfer.UnsupportedFlavorException ufe) {
+			ufe.printStackTrace(out);
+			evt.rejectDrop();
+		    } // end catch: UnsupportedFlavorException
+		    finally {
+			// If it's a Swing component, reset its border
+			if (c instanceof javax.swing.JComponent) {
+			    javax.swing.JComponent jc = (javax.swing.JComponent) c;
+			    jc.setBorder(normalBorder);
+			} // end if: JComponent
+		    } // end finally
+		} // end drop
+
+		public void dragExit(java.awt.dnd.DropTargetEvent evt) {
+		    // If it's a Swing component, reset its border
+		    if (c instanceof javax.swing.JComponent) {
+			javax.swing.JComponent jc = (javax.swing.JComponent) c;
+			jc.setBorder(normalBorder);
+		    } // end if: JComponent
+		} // end dragExit
+
+		public void dropActionChanged(java.awt.dnd.DropTargetDragEvent evt) {
+		    // Is this an acceptable drag event?
+		    if (isDragOk(out, evt)) { //evt.acceptDrag( java.awt.dnd.DnDConstants.ACTION_COPY_OR_MOVE );
+			evt.acceptDrag(java.awt.dnd.DnDConstants.ACTION_COPY);
+		    } // end if: drag ok
+		    else {
+			evt.rejectDrag();
+		    } // end else: drag not ok
+		} // end dropActionChanged
+	    }; // end DropTargetListener
+
+	    // Make the component (and possibly children) drop targets
+	    makeDropTarget(out, c, recursive);
+	} // end if: supports dnd
+	else {
+	} // end else: does not support DnD
+    } // end constructor
+
+    private static boolean supportsDnD() { // Static Boolean
+	if (supportsDnD == null) {
+	    boolean support = false;
+	    try {
+		Class arbitraryDndClass = Class.forName("java.awt.dnd.DnDConstants");
+		support = true;
+	    } // end try
+	    catch (Exception e) {
+		support = false;
+	    } // end catch
+	    supportsDnD = new Boolean(support);
+	} // end if: first time through
+	return supportsDnD.booleanValue();
+    } // end supportsDnD
+
+    // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+    private static String ZERO_CHAR_STRING = "" + (char) 0;
+
+    private static File[] createFileArray(BufferedReader bReader, PrintStream out) {
+	try {
+	    java.util.List list = new java.util.ArrayList();
+	    java.lang.String line = null;
+	    while ((line = bReader.readLine()) != null) {
+		try {
+		    // kde seems to append a 0 char to the end of the reader
+		    if (ZERO_CHAR_STRING.equals(line))
+			continue;
+
+		    java.io.File file = new java.io.File(new java.net.URI(line));
+		    list.add(file);
+		} catch (Exception ex) {
+		}
+	    }
+
+	    return (java.io.File[]) list.toArray(new File[list.size()]);
+	} catch (IOException ex) {
+	}
+	return new File[0];
+    }
+
+    // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+
+    private void makeDropTarget(final java.io.PrintStream out, final java.awt.Component c, boolean recursive) {
+	// Make drop target
+	final java.awt.dnd.DropTarget dt = new java.awt.dnd.DropTarget();
+	try {
+	    dt.addDropTargetListener(dropListener);
+	} // end try
+	catch (java.util.TooManyListenersException e) {
+	    e.printStackTrace();
+	} // end catch
+
+	// Listen for hierarchy changes and remove the drop target when the parent gets cleared out.
+	c.addHierarchyListener(new java.awt.event.HierarchyListener() {
+	    public void hierarchyChanged(java.awt.event.HierarchyEvent evt) {
+		java.awt.Component parent = c.getParent();
+		if (parent == null) {
+		    c.setDropTarget(null);
+		} // end if: null parent
+		else {
+		    new java.awt.dnd.DropTarget(c, dropListener);
+		} // end else: parent not null
+	    } // end hierarchyChanged
+	}); // end hierarchy listener
+	if (c.getParent() != null)
+	    new java.awt.dnd.DropTarget(c, dropListener);
+
+	if (recursive && (c instanceof java.awt.Container)) {
+	    // Get the container
+	    java.awt.Container cont = (java.awt.Container) c;
+
+	    // Get it's components
+	    java.awt.Component[] comps = cont.getComponents();
+
+	    // Set it's components as listeners also
+	    for (int i = 0; i < comps.length; i++)
+		makeDropTarget(out, comps[i], recursive);
+	} // end if: recursively set components as listener
+    } // end dropListener
+
+    /** Determine if the dragged data is a file list. */
+    private boolean isDragOk(final java.io.PrintStream out, final java.awt.dnd.DropTargetDragEvent evt) {
+	boolean ok = false;
+
+	// Get data flavors being dragged
+	java.awt.datatransfer.DataFlavor[] flavors = evt.getCurrentDataFlavors();
+
+	// See if any of the flavors are a file list
+	int i = 0;
+	while (!ok && i < flavors.length) {
+	    // BEGIN 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+	    // Is the flavor a file list?
+	    final DataFlavor curFlavor = flavors[i];
+	    if (curFlavor.equals(java.awt.datatransfer.DataFlavor.javaFileListFlavor)
+		    || curFlavor.isRepresentationClassReader()) {
+		ok = true;
+	    }
+	    // END 2007-09-12 Nathan Blomquist -- Linux (KDE/Gnome) support added.
+	    i++;
+	} // end while: through flavors
+
+	return ok;
+    } // end isDragOk
+
+    /**
+     * Removes the drag-and-drop hooks from the component and optionally
+     * from the all children. You should call this if you add and remove
+     * components after you've set up the drag-and-drop.
+     * This will recursively unregister all components contained within
+     * <var>c</var> if <var>c</var> is a {@link java.awt.Container}.
+     *
+     * @param c The component to unregister as a drop target
+     * @since 1.0
+     */
+    public static boolean remove(java.awt.Component c) {
+	return remove(null, c, true);
+    } // end remove
+
+    /**
+     * Removes the drag-and-drop hooks from the component and optionally
+     * from the all children. You should call this if you add and remove
+     * components after you've set up the drag-and-drop.
+     *
+     * @param out Optional {@link java.io.PrintStream} for logging drag and drop messages
+     * @param c The component to unregister
+     * @param recursive Recursively unregister components within a container
+     * @since 1.0
+     */
+    public static boolean remove(java.io.PrintStream out, java.awt.Component c, boolean recursive) { // Make sure we support dnd.
+	if (supportsDnD()) {
+	    c.setDropTarget(null);
+	    if (recursive && (c instanceof java.awt.Container)) {
+		java.awt.Component[] comps = ((java.awt.Container) c).getComponents();
+		for (int i = 0; i < comps.length; i++)
+		    remove(out, comps[i], recursive);
+		return true;
+	    } // end if: recursive
+	    else
+		return false;
+	} // end if: supports DnD
+	else
+	    return false;
+    } // end remove
+
+    /* ********  I N N E R   I N T E R F A C E   L I S T E N E R  ******** */
+
+    /**
+     * Implement this inner interface to listen for when files are dropped. For example
+     * your class declaration may begin like this:
+     * <code><pre>
+     *      public class MyClass implements FileDrop.Listener
+     *      ...
+     *      public void filesDropped( java.io.File[] files )
+     *      {
+     *          ...
+     *      }   // end filesDropped
+     *      ...
+     * </pre></code>
+     *
+     * @since 1.1
+     */
+    public static interface Listener {
+
+	/**
+	 * This method is called when files have been successfully dropped.
+	 *
+	 * @param files An array of <tt>File</tt>s that were dropped.
+	 * @since 1.0
+	 */
+	public abstract void filesDropped(java.io.File[] files);
+
+    } // end inner-interface Listener
+
+    /* ********  I N N E R   C L A S S  ******** */
+
+    /**
+     * This is the event that is passed to the
+     * {@link FileDropListener#filesDropped filesDropped(...)} method in
+     * your {@link FileDropListener} when files are dropped onto
+     * a registered drop target.
+     *
+     * <p>I'm releasing this code into the Public Domain. Enjoy.</p>
+     * 
+     * @author  Robert Harder
+     * @author  rob@iharder.net
+     * @version 1.2
+     */
+    public static class Event extends java.util.EventObject {
+
+	private java.io.File[] files;
+
+	/**
+	 * Constructs an {@link Event} with the array
+	 * of files that were dropped and the
+	 * {@link FileDrop} that initiated the event.
+	 *
+	 * @param files The array of files that were dropped
+	 * @source The event source
+	 * @since 1.1
+	 */
+	public Event(java.io.File[] files, Object source) {
+	    super(source);
+	    this.files = files;
+	} // end constructor
+
+	/**
+	 * Returns an array of files that were dropped on a
+	 * registered drop target.
+	 *
+	 * @return array of files that were dropped
+	 * @since 1.1
+	 */
+	public java.io.File[] getFiles() {
+	    return files;
+	} // end getFiles
+
+    } // end inner class Event
+
+    /* ********  I N N E R   C L A S S  ******** */
+
+    /**
+     * At last an easy way to encapsulate your custom objects for dragging and dropping
+     * in your Java programs!
+     * When you need to create a {@link java.awt.datatransfer.Transferable} object,
+     * use this class to wrap your object.
+     * For example:
+     * <pre><code>
+     *      ...
+     *      MyCoolClass myObj = new MyCoolClass();
+     *      Transferable xfer = new TransferableObject( myObj );
+     *      ...
+     * </code></pre>
+     * Or if you need to know when the data was actually dropped, like when you're
+     * moving data out of a list, say, you can use the {@link TransferableObject.Fetcher}
+     * inner class to return your object Just in Time.
+     * For example:
+     * <pre><code>
+     *      ...
+     *      final MyCoolClass myObj = new MyCoolClass();
+     *
+     *      TransferableObject.Fetcher fetcher = new TransferableObject.Fetcher()
+     *      {   public Object getObject(){ return myObj; }
+     *      }; // end fetcher
+     *
+     *      Transferable xfer = new TransferableObject( fetcher );
+     *      ...
+     * </code></pre>
+     *
+     * The {@link java.awt.datatransfer.DataFlavor} associated with 
+     * {@link TransferableObject} has the representation class
+     * <tt>net.iharder.dnd.TransferableObject.class</tt> and MIME type
+     * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
+     * This data flavor is accessible via the static
+     * {@link #DATA_FLAVOR} property.
+     *
+     *
+     * <p>I'm releasing this code into the Public Domain. Enjoy.</p>
+     * 
+     * @author  Robert Harder
+     * @author  rob@iharder.net
+     * @version 1.2
+     */
+    public static class TransferableObject implements java.awt.datatransfer.Transferable {
+	/**
+	 * The MIME type for {@link #DATA_FLAVOR} is 
+	 * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
+	 *
+	 * @since 1.1
+	 */
+	public final static String MIME_TYPE = "application/x-net.iharder.dnd.TransferableObject";
+
+	/**
+	 * The default {@link java.awt.datatransfer.DataFlavor} for
+	 * {@link TransferableObject} has the representation class
+	 * <tt>net.iharder.dnd.TransferableObject.class</tt>
+	 * and the MIME type 
+	 * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
+	 *
+	 * @since 1.1
+	 */
+	public final static java.awt.datatransfer.DataFlavor DATA_FLAVOR = new java.awt.datatransfer.DataFlavor(
+		FileDrop.TransferableObject.class, MIME_TYPE);
+
+	private Fetcher fetcher;
+	private Object data;
+
+	private java.awt.datatransfer.DataFlavor customFlavor;
+
+	/**
+	 * Creates a new {@link TransferableObject} that wraps <var>data</var>.
+	 * Along with the {@link #DATA_FLAVOR} associated with this class,
+	 * this creates a custom data flavor with a representation class 
+	 * determined from <code>data.getClass()</code> and the MIME type
+	 * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
+	 *
+	 * @param data The data to transfer
+	 * @since 1.1
+	 */
+	public TransferableObject(Object data) {
+	    this.data = data;
+	    this.customFlavor = new java.awt.datatransfer.DataFlavor(data.getClass(), MIME_TYPE);
+	} // end constructor
+
+	/**
+	 * Creates a new {@link TransferableObject} that will return the
+	 * object that is returned by <var>fetcher</var>.
+	 * No custom data flavor is set other than the default
+	 * {@link #DATA_FLAVOR}.
+	 *
+	 * @see Fetcher
+	 * @param fetcher The {@link Fetcher} that will return the data object
+	 * @since 1.1
+	 */
+	public TransferableObject(Fetcher fetcher) {
+	    this.fetcher = fetcher;
+	} // end constructor
+
+	/**
+	 * Creates a new {@link TransferableObject} that will return the
+	 * object that is returned by <var>fetcher</var>.
+	 * Along with the {@link #DATA_FLAVOR} associated with this class,
+	 * this creates a custom data flavor with a representation class <var>dataClass</var>
+	 * and the MIME type
+	 * <tt>application/x-net.iharder.dnd.TransferableObject</tt>.
+	 *
+	 * @see Fetcher
+	 * @param dataClass The {@link java.lang.Class} to use in the custom data flavor
+	 * @param fetcher The {@link Fetcher} that will return the data object
+	 * @since 1.1
+	 */
+	public TransferableObject(Class dataClass, Fetcher fetcher) {
+	    this.fetcher = fetcher;
+	    this.customFlavor = new java.awt.datatransfer.DataFlavor(dataClass, MIME_TYPE);
+	} // end constructor
+
+	/**
+	 * Returns the custom {@link java.awt.datatransfer.DataFlavor} associated
+	 * with the encapsulated object or <tt>null</tt> if the {@link Fetcher}
+	 * constructor was used without passing a {@link java.lang.Class}.
+	 *
+	 * @return The custom data flavor for the encapsulated object
+	 * @since 1.1
+	 */
+	public java.awt.datatransfer.DataFlavor getCustomDataFlavor() {
+	    return customFlavor;
+	} // end getCustomDataFlavor
+
+	/* ********  T R A N S F E R A B L E   M E T H O D S  ******** */
+
+	/**
+	 * Returns a two- or three-element array containing first
+	 * the custom data flavor, if one was created in the constructors,
+	 * second the default {@link #DATA_FLAVOR} associated with
+	 * {@link TransferableObject}, and third the
+	 * {@link java.awt.datatransfer.DataFlavor.stringFlavor}.
+	 *
+	 * @return An array of supported data flavors
+	 * @since 1.1
+	 */
+	public java.awt.datatransfer.DataFlavor[] getTransferDataFlavors() {
+	    if (customFlavor != null)
+		return new java.awt.datatransfer.DataFlavor[] { customFlavor, DATA_FLAVOR,
+			java.awt.datatransfer.DataFlavor.stringFlavor }; // end flavors array
+	    else
+		return new java.awt.datatransfer.DataFlavor[] { DATA_FLAVOR,
+			java.awt.datatransfer.DataFlavor.stringFlavor }; // end flavors array
+	} // end getTransferDataFlavors
+
+	/**
+	 * Returns the data encapsulated in this {@link TransferableObject}.
+	 * If the {@link Fetcher} constructor was used, then this is when
+	 * the {@link Fetcher#getObject getObject()} method will be called.
+	 * If the requested data flavor is not supported, then the
+	 * {@link Fetcher#getObject getObject()} method will not be called.
+	 *
+	 * @param flavor The data flavor for the data to return
+	 * @return The dropped data
+	 * @since 1.1
+	 */
+	public Object getTransferData(java.awt.datatransfer.DataFlavor flavor)
+		throws java.awt.datatransfer.UnsupportedFlavorException, java.io.IOException {
+	    // Native object
+	    if (flavor.equals(DATA_FLAVOR))
+		return fetcher == null ? data : fetcher.getObject();
+
+	    // String
+	    if (flavor.equals(java.awt.datatransfer.DataFlavor.stringFlavor))
+		return fetcher == null ? data.toString() : fetcher.getObject().toString();
+
+	    // We can't do anything else
+	    throw new java.awt.datatransfer.UnsupportedFlavorException(flavor);
+	} // end getTransferData
+
+	/**
+	 * Returns <tt>true</tt> if <var>flavor</var> is one of the supported
+	 * flavors. Flavors are supported using the <code>equals(...)</code> method.
+	 *
+	 * @param flavor The data flavor to check
+	 * @return Whether or not the flavor is supported
+	 * @since 1.1
+	 */
+	public boolean isDataFlavorSupported(java.awt.datatransfer.DataFlavor flavor) {
+	    // Native object
+	    if (flavor.equals(DATA_FLAVOR))
+		return true;
+
+	    // String
+	    if (flavor.equals(java.awt.datatransfer.DataFlavor.stringFlavor))
+		return true;
+
+	    // We can't do anything else
+	    return false;
+	} // end isDataFlavorSupported
+
+	/* ********  I N N E R   I N T E R F A C E   F E T C H E R  ******** */
+
+	/**
+	 * Instead of passing your data directly to the {@link TransferableObject}
+	 * constructor, you may want to know exactly when your data was received
+	 * in case you need to remove it from its source (or do anyting else to it).
+	 * When the {@link #getTransferData getTransferData(...)} method is called
+	 * on the {@link TransferableObject}, the {@link Fetcher}'s
+	 * {@link #getObject getObject()} method will be called.
+	 *
+	 * @author Robert Harder
+	 * @copyright 2001
+	 * @version 1.1
+	 * @since 1.1
+	 */
+	public static interface Fetcher {
+	    /**
+	     * Return the object being encapsulated in the
+	     * {@link TransferableObject}.
+	     *
+	     * @return The dropped object
+	     * @since 1.1
+	     */
+	    public abstract Object getObject();
+	} // end inner interface Fetcher
+
+    } // end class TransferableObject
+
+} // end class FileDrop
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/AbstractConcisePatternConverter.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/AbstractConcisePatternConverter.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/AbstractConcisePatternConverter.java	(revision 6845)
@@ -0,0 +1,101 @@
+package fr.mael.jiwigo.transverse.util.log4j;
+
+import org.apache.log4j.helpers.FormattingInfo;
+import org.apache.log4j.helpers.PatternConverter;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * @author mael
+ *
+ */
+public abstract class AbstractConcisePatternConverter extends PatternConverter {
+
+    /**
+     *
+     */
+    private int precision;
+
+    /**
+     * Constructeur de AbstractConcisePatternConverter.
+     * @param formattingInfo .
+     * @param precision .
+     */
+    public AbstractConcisePatternConverter(final FormattingInfo formattingInfo, final int precision) {
+	super(formattingInfo);
+
+	this.precision = precision;
+    }
+
+    /**
+     * @param paramLoggingEvent .
+     * @return le nom
+     */
+    protected abstract String getConciseName(LoggingEvent paramLoggingEvent);
+
+    /**.
+     * {@inheritDoc}
+     */
+    protected final String convert(final LoggingEvent event) {
+	final String n = getConciseName(event);
+
+	if (this.precision <= 0) {
+	    return n;
+	}
+
+	final int len = n.length();
+
+	int end = len - 1;
+	final int debut = 46;
+	for (int i = this.precision; i > 0; --i) {
+	    end = n.lastIndexOf(debut, end - 1);
+	    if (end == -1) {
+		return n;
+	    }
+	}
+	return n.substring(end + 1, len);
+    }
+
+    /**
+     * @param className le nom de la class
+     * @param maxLength la longueur
+     * @return la string
+     */
+    public static String simplify(final String className, final int maxLength) {
+	if (className.length() <= maxLength) {
+	    return className;
+	}
+
+	final StringBuffer result = new StringBuffer();
+
+	int index = -1;
+	while (true) {
+	    if (className.indexOf(".", index + 1) == -1) {
+		String remainingStr = className.substring(index + 1);
+
+		final int availableLength = maxLength - result.length();
+
+		if (remainingStr.length() > availableLength) {
+		    remainingStr = remainingStr.substring(0, availableLength - 1) + '~';
+		}
+
+		result.append(remainingStr);
+
+		break;
+	    }
+
+	    result.append(className.charAt(index + 1));
+
+	    if (result.length() + 1 == maxLength) {
+		result.append('~');
+
+		break;
+	    }
+
+	    result.append('.');
+
+	    index = className.indexOf(".", index + 1);
+	}
+
+	return result.toString();
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/CategoryConcisePatternConverter.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/CategoryConcisePatternConverter.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/CategoryConcisePatternConverter.java	(revision 6845)
@@ -0,0 +1,78 @@
+package fr.mael.jiwigo.transverse.util.log4j;
+
+import org.apache.log4j.helpers.FormattingInfo;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * @author mael
+ *
+ */
+public class CategoryConcisePatternConverter extends AbstractConcisePatternConverter {
+
+    /**
+     *
+     */
+    private static final int ROLE_LENGTH = 30;
+    /**
+     *
+     */
+    private static final int HINT_LENGTH = 8;
+
+    /**
+     *
+     */
+    private static final int SIZE = 35;
+
+    /**
+     * Constructeur de CategoryConcisePatternConverter.
+     * @param formattingInfo .
+     * @param precision .
+     */
+    public CategoryConcisePatternConverter(final FormattingInfo formattingInfo, final int precision) {
+	super(formattingInfo, precision);
+    }
+
+    /**.
+     * {@inheritDoc}
+     */
+    protected final String getConciseName(final LoggingEvent event) {
+	final StringBuffer result = new StringBuffer();
+
+	appendConciseCategory(result, event.getLoggerName());
+
+	appendLeftSpaces(result);
+
+	return result.toString();
+    }
+
+    /**
+     * @param sb la string a modifier
+     * @param loggerName le nom du logger
+     */
+    private void appendConciseCategory(final StringBuffer sb, final String loggerName) {
+	final int colonIndex = loggerName.indexOf(58);
+
+	if (colonIndex == -1) {
+	    sb.append(simplify(loggerName, ROLE_LENGTH));
+
+	    return;
+	}
+
+	final String roleName = loggerName.substring(0, colonIndex);
+
+	final String hintName = loggerName.substring(colonIndex + 1);
+
+	// sb.append(simplify(roleName,
+	// 20)).append(":").append(simplify(hintName, 8));
+	sb.append(roleName).append(":").append(hintName);
+    }
+
+    /**
+     * @param sb la string a modifier
+     */
+    private void appendLeftSpaces(final StringBuffer sb) {
+	while (sb.length() < SIZE) {
+	    sb.append(" ");
+	}
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ClassNameConcisePatternConverter.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ClassNameConcisePatternConverter.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ClassNameConcisePatternConverter.java	(revision 6845)
@@ -0,0 +1,32 @@
+package fr.mael.jiwigo.transverse.util.log4j;
+
+import org.apache.log4j.helpers.FormattingInfo;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * @author mael
+ *
+ */
+public class ClassNameConcisePatternConverter extends AbstractConcisePatternConverter {
+
+    /**
+     *
+     */
+    private static final int CLASS_LENGTH = 30;
+
+    /**
+     * Constructeur de ClassNameConcisePatternConverter.
+     * @param formattingInfo .
+     * @param precision .
+     */
+    public ClassNameConcisePatternConverter(final FormattingInfo formattingInfo, final int precision) {
+	super(formattingInfo, precision);
+    }
+
+    /**.
+     * {@inheritDoc}
+     */
+    protected final String getConciseName(final LoggingEvent event) {
+	return simplify(event.getLocationInformation().getClassName(), CLASS_LENGTH);
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ConcisePatternLayout.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ConcisePatternLayout.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ConcisePatternLayout.java	(revision 6845)
@@ -0,0 +1,18 @@
+package fr.mael.jiwigo.transverse.util.log4j;
+
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.helpers.PatternParser;
+
+/**
+ * @author mael
+ *
+ */
+public class ConcisePatternLayout extends PatternLayout {
+
+    /**.
+     * {@inheritDoc}
+     */
+    protected final PatternParser createPatternParser(final String pattern) {
+	return new ConcisePatternParser(pattern);
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ConcisePatternParser.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ConcisePatternParser.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/log4j/ConcisePatternParser.java	(revision 6845)
@@ -0,0 +1,41 @@
+package fr.mael.jiwigo.transverse.util.log4j;
+
+import org.apache.log4j.helpers.PatternConverter;
+import org.apache.log4j.helpers.PatternParser;
+
+/**
+ * @author mael
+ *
+ */
+public class ConcisePatternParser extends PatternParser {
+
+    /**
+     * Constructeur de ConcisePatternParser.
+     * @param pattern le pattern a appliquer
+     */
+    public ConcisePatternParser(final String pattern) {
+	super(pattern);
+    }
+
+    /**.
+     * {@inheritDoc}
+     */
+    protected final void finalizeConverter(final char c) {
+	PatternConverter patternConverter;
+	if (c == 'C') {
+	    patternConverter = new ClassNameConcisePatternConverter(this.formattingInfo, extractPrecisionOption());
+
+	    this.currentLiteral.setLength(0);
+
+	    addConverter(patternConverter);
+	} else if (c == 'l') {
+	    patternConverter = new CategoryConcisePatternConverter(this.formattingInfo, extractPrecisionOption());
+
+	    this.currentLiteral.setLength(0);
+
+	    addConverter(patternConverter);
+	} else {
+	    super.finalizeConverter(c);
+	}
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/preferences/PreferencesManagement.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/preferences/PreferencesManagement.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/transverse/util/preferences/PreferencesManagement.java	(revision 6845)
@@ -0,0 +1,115 @@
+package fr.mael.jiwigo.transverse.util.preferences;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.jdom.Document;
+import org.jdom.input.SAXBuilder;
+
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Classe de gestion des preferences
+ * @author mael
+ *
+ */
+public class PreferencesManagement {
+
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(PreferencesManagement.class);
+
+    /**
+     * fonction qui retourne le chemin du fichier de configuration
+     * @return
+     */
+    private static String getConfigFilePath() {
+	return System.getProperty("user.home") + "/.jiwigo/config.xml";
+    }
+
+    /**
+     * Creation du fichier de configuration par défaut
+     * @throws IOException
+     */
+    public static void creerFichierParDefaut() throws IOException {
+	File outFile = new File(getConfigFilePath());
+	if (!outFile.exists()) {
+	    StringBuffer xml = new StringBuffer();
+	    xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+	    xml.append("<config>\n");
+	    xml.append("	<chunk_size>0.5</chunk_size>\n");
+	    xml.append("	<width_original>800</width_original>\n");
+	    xml.append("	<height_original>600</height_original>\n");
+	    xml.append("	<password></password>\n");
+	    xml.append("	<login></login>\n");
+	    xml.append("	<url></url>\n");
+	    xml.append("</config>");
+
+	    FileWriter out = new FileWriter(outFile);
+	    out.write(xml.toString());
+	    out.close();
+	}
+    }
+
+    /**
+     * Fonction qui retourne la valeur d'une préférence
+     * @param key la cle de la preference
+     * @return la valeur
+     */
+    public static String getValue(String key) {
+	SAXBuilder sxb = new SAXBuilder();
+	try {
+	    Document document = sxb.build(new File(getConfigFilePath()));
+	    return document.getRootElement().getChildText(key);
+	} catch (Exception e) {
+	    LOG.error(Outil.getStackTrace(e));
+	    return null;
+	}
+    }
+
+    /**
+     * Fonction qui attribue une valeur à une préférence
+     * @param key la cle
+     * @param text la valeur
+     */
+    public static void setValue(String key, String text) {
+	SAXBuilder sxb = new SAXBuilder();
+	try {
+	    Document document = sxb.build(new File(getConfigFilePath()));
+	    document.getRootElement().getChild(key).setText(text);
+	    FileWriter out = new FileWriter(getConfigFilePath());
+	    out.write(Outil.documentToString(document));
+	    out.close();
+	} catch (Exception e) {
+	    LOG.error(Outil.getStackTrace(e));
+	}
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/ConnexionDialog.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/ConnexionDialog.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/ConnexionDialog.java	(revision 6845)
@@ -0,0 +1,281 @@
+package fr.mael.jiwigo.ui;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Locale;
+
+import javax.swing.AbstractListModel;
+import javax.swing.ComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPasswordField;
+import javax.swing.JTextField;
+
+import fr.mael.jiwigo.Main;
+import fr.mael.jiwigo.transverse.enumeration.PreferencesEnum;
+import fr.mael.jiwigo.transverse.session.SessionManager;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.preferences.PreferencesManagement;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Dialog de connexion au site
+ */
+public class ConnexionDialog extends JDialog implements ActionListener, ItemListener, KeyListener {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(ConnexionDialog.class);
+    /**
+     * field contenant l'url
+     */
+    private JTextField fieldUrl;
+    /**
+     * field contenant le login
+     */
+    private JTextField loginField;
+    /**
+     * field contenant le mot de passe
+     */
+    private JPasswordField passwordField;
+    /**
+     * label de l'url
+     */
+    private JLabel labelUrl;
+    /**
+     * label du login
+     */
+    private JLabel labelLogin;
+    /**
+     *  label du mot de passe
+     */
+    private JLabel labelPass;
+    /**
+     * bouton ok, pour la connexion
+     */
+    private JButton boutonOk;
+
+    /**
+     * Box qui permet de retenir les informations
+     */
+    private JCheckBox checkBoxRetenir;
+
+    /**
+     * Combo containing all locales
+     */
+    private JComboBox comboLocales;
+
+    /**
+     * Constructeur 
+     */
+    public ConnexionDialog() {
+	Locale defautLocale = Messages.usedLocale;
+	labelUrl = new JLabel(Messages.getMessage("connexionDialog_urlSite"));
+	labelLogin = new JLabel(Messages.getMessage("connexionDialog_login"));
+	labelPass = new JLabel(Messages.getMessage("connexionDialog_pass"));
+	comboLocales = new JComboBox();
+	boutonOk = new JButton("Ok");
+	String url = PreferencesManagement.getValue(PreferencesEnum.URL_SITE.getLabel());
+	String login = PreferencesManagement.getValue(PreferencesEnum.LOGIN.getLabel());
+	String pass = PreferencesManagement.getValue(PreferencesEnum.PASSWORD.getLabel());
+	fieldUrl = new JTextField(url);
+	loginField = new JTextField(login);
+	passwordField = new JPasswordField(pass);
+	checkBoxRetenir = new JCheckBox(Messages.getMessage("connexionDialog_sauvegarder"));
+	if (!url.equals("") && !login.equals("") && !pass.equals("")) {
+	    checkBoxRetenir.setSelected(true);
+	}
+	Dimension fieldDimensions = new Dimension(300, 30);
+	fieldUrl.setPreferredSize(fieldDimensions);
+	fieldUrl.addActionListener(this);
+	loginField.setPreferredSize(fieldDimensions);
+	loginField.addActionListener(this);
+	passwordField.setPreferredSize(fieldDimensions);
+	passwordField.addActionListener(this);
+	this.getContentPane().setLayout(new GridBagLayout());
+	GridBagConstraints constraints = new GridBagConstraints();
+	constraints.gridx = 0;
+	constraints.gridy = 0;
+	constraints.insets = new Insets(3, 3, 3, 3);
+	this.getContentPane().add(labelUrl, constraints);
+	constraints.gridx++;
+	this.getContentPane().add(fieldUrl, constraints);
+	constraints.gridx = 0;
+	constraints.gridy++;
+	this.getContentPane().add(labelLogin, constraints);
+	constraints.gridx++;
+	this.getContentPane().add(loginField, constraints);
+	constraints.gridx = 0;
+	constraints.gridy++;
+	this.getContentPane().add(labelPass, constraints);
+	constraints.gridx++;
+	this.getContentPane().add(passwordField, constraints);
+	constraints.gridx = 0;
+	constraints.gridy++;
+	this.getContentPane().add(comboLocales, constraints);
+	constraints.gridx++;
+	this.getContentPane().add(checkBoxRetenir, constraints);
+	constraints.gridx = 0;
+	constraints.gridy++;//  
+	//	for (Locale locale : SimpleDateFormat.getAvailableLocales()) {
+	//	    comboLocales.addItem(locale.getDisplayName(Locale.ENGLISH));
+	//	}
+	comboLocales.setPreferredSize(new Dimension(130, 25));
+	comboLocales.addItemListener(this);
+	localeModel model = new localeModel();
+	comboLocales.setModel(model);
+	model.setSelectedItem(defautLocale.getDisplayLanguage(Locale.ENGLISH));
+	this.getContentPane().add(boutonOk, constraints);
+	boutonOk.setPreferredSize(new Dimension(80, 30));
+	boutonOk.addActionListener(this);
+
+    }
+
+    public void showDialog() {
+	this.pack();
+	this.setLocationRelativeTo(null);
+	this.setVisible(true);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent paramActionEvent) {
+	//si un des champs est vide, on affiche une erreur
+	if (fieldUrl.getText().equals("") || loginField.getText().equals("") || passwordField.getText().equals("")) {
+	    JOptionPane.showMessageDialog(null, Messages.getMessage("connexionDialog_emptyField"), Messages
+		    .getMessage("error"), JOptionPane.ERROR_MESSAGE);
+	} else {
+	    if (!fieldUrl.getText().startsWith("http://")) {
+		fieldUrl.setText("http://" + fieldUrl.getText());
+	    }
+	    //sinon, on instancie le session manager de la classe principale
+	    Main.sessionManager = new SessionManager(loginField.getText(), passwordField.getText(), fieldUrl.getText());
+	    if (checkBoxRetenir.isSelected()) {
+		PreferencesManagement.setValue(PreferencesEnum.LOGIN.getLabel(), loginField.getText());
+		PreferencesManagement.setValue(PreferencesEnum.PASSWORD.getLabel(), passwordField.getText());
+		PreferencesManagement.setValue(PreferencesEnum.URL_SITE.getLabel(), fieldUrl.getText());
+	    } else {
+		PreferencesManagement.setValue(PreferencesEnum.LOGIN.getLabel(), "");
+		PreferencesManagement.setValue(PreferencesEnum.PASSWORD.getLabel(), "");
+		PreferencesManagement.setValue(PreferencesEnum.URL_SITE.getLabel(), "");
+	    }
+	    if (!Main.sessionManager.processLogin()) {
+		//si le login a échoué, on affiche une erreur
+		JOptionPane.showMessageDialog(null, Messages.getMessage("connexionDialog_connexionError"), Messages
+			.getMessage("error"), JOptionPane.ERROR_MESSAGE);
+	    } else {
+		//		Locale.setDefault((Locale) comboLocales.getSelectedItem());
+		Main.showFrame();
+		//on cache le dialog de connexion
+		this.dispose();
+	    }
+	}
+    }
+
+    /**
+     * @author mael
+     * Internal class that represents the modal of the combobox that allows
+     * to choose a locale
+     */
+    class localeModel extends AbstractListModel implements ComboBoxModel {
+	Locale[] locales = SimpleDateFormat.getAvailableLocales();
+	String[] localesNames;
+
+	String selection = null;
+
+	public localeModel() {
+	    localesNames = new String[locales.length];
+	    int compteur = 0;
+	    for (Locale locale : locales) {
+		localesNames[compteur] = locale.getDisplayName(Locale.ENGLISH);
+		compteur++;
+	    }
+	    Arrays.sort(localesNames);
+	}
+
+	public Object getElementAt(int index) {
+	    return localesNames[index];
+	}
+
+	public int getSize() {
+	    return locales.length;
+	}
+
+	public void setSelectedItem(Object anItem) {
+	    selection = (String) anItem;
+	}
+
+	public Object getSelectedItem() {
+	    if (selection != null)
+		return selection;
+	    else
+		return null;
+	}
+    }
+
+    @Override
+    public void itemStateChanged(ItemEvent paramItemEvent) {
+	for (Locale locale : SimpleDateFormat.getAvailableLocales()) {
+	    if (locale.getDisplayName(Locale.ENGLISH).equals(paramItemEvent.getItem())) {
+		Messages.usedLocale = locale;
+		dispose();
+		ConnexionDialog dial = new ConnexionDialog();
+		dial.showDialog();
+
+	    }
+
+	}
+    }
+
+    @Override
+    public void keyPressed(KeyEvent arg0) {
+    }
+
+    @Override
+    public void keyReleased(KeyEvent arg0) {
+
+    }
+
+    @Override
+    public void keyTyped(KeyEvent arg0) {
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/ImagesManagement.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/ImagesManagement.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/ImagesManagement.java	(revision 6845)
@@ -0,0 +1,152 @@
+package fr.mael.jiwigo.ui;
+
+import java.awt.image.BufferedImage;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+
+import fr.mael.jiwigo.om.Image;
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Classe de gestion des images à taille relle.
+ * mettre tout en static permet d'y accéder depuis les différentes classes qui en ont besoin
+ */
+public class ImagesManagement {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(ImagesManagement.class);
+    /**
+     * L'index de l'image courante dans la liste
+     */
+    public static int CURRENT_IMAGE_INDEX;
+    /**
+     * l'image courante
+     */
+    public static Image CURRENT_IMAGE;
+    /**
+     * la liste des images
+     */
+    public static List<Image> LIST_IMAGE;
+
+    /**
+     * cache permettant de ne pas recharger les images à chaque fois
+     */
+    private static HashMap<Integer, BufferedImage> IMAGES_CACHE = new HashMap<Integer, BufferedImage>();
+
+    /**
+     * cache permettant de ne pas recharger les images à chaque fois
+     */
+    private static HashMap<Integer, BufferedImage> MINIATURE_CACHE = new HashMap<Integer, BufferedImage>();
+
+    /**
+     * Récupération de l'image courante
+     * @return l'image
+     */
+    public static Image getCurrentImage() {
+	return LIST_IMAGE.get(CURRENT_IMAGE_INDEX);
+    }
+
+    /**
+     * passage à l'image suivante
+     */
+    public static void next() {
+	if (CURRENT_IMAGE_INDEX != LIST_IMAGE.size() - 1) {
+	    CURRENT_IMAGE_INDEX++;
+	} else {
+	    CURRENT_IMAGE_INDEX = 0;
+	}
+	CURRENT_IMAGE = LIST_IMAGE.get(CURRENT_IMAGE_INDEX);
+    }
+
+    /**
+     * passage à l'image précédente
+     */
+    public static void previous() {
+	if (CURRENT_IMAGE_INDEX != 0) {
+	    CURRENT_IMAGE_INDEX--;
+	} else {
+	    CURRENT_IMAGE_INDEX = LIST_IMAGE.size() - 1;
+	}
+	CURRENT_IMAGE = LIST_IMAGE.get(CURRENT_IMAGE_INDEX);
+    }
+
+    /**
+     * 
+     * @param image l'image courante
+     */
+    public static void setCurrentImage(Image image) {
+	CURRENT_IMAGE = image;
+	int compteur = 0;
+	for (Image im : LIST_IMAGE) {
+	    if (im.equals(image)) {
+		CURRENT_IMAGE_INDEX = compteur;
+	    }
+	    compteur++;
+	}
+    }
+
+    /**
+     * Fonction qui permet de ne charger les images qu'une seule fois
+     * afin d'améliorer les temps de réponses en ne consommant pas de bande passante.
+     * @return l'image
+     */
+    public static BufferedImage getCurrentBufferedImage() {
+	if (IMAGES_CACHE.get(CURRENT_IMAGE.getIdentifiant()) == null) {
+	    try {
+		BufferedImage img = ImageIO.read(new URL(CURRENT_IMAGE.getUrl()));
+		IMAGES_CACHE.put(CURRENT_IMAGE.getIdentifiant(), img);
+	    } catch (Exception e) {
+		LOG.error(Outil.getStackTrace(e));
+	    }
+	}
+	return IMAGES_CACHE.get(CURRENT_IMAGE.getIdentifiant());
+    }
+
+    /**
+     * Fonction qui permet de ne charger les images qu'une seule fois
+     * afin d'améliorer les temps de réponses en ne consommant pas de bande passante.
+     * @return l'image
+     */
+    public static BufferedImage getMiniatureBufferedImage(Image image) {
+	if (MINIATURE_CACHE.get(image.getIdentifiant()) == null) {
+	    try {
+		BufferedImage img = ImageIO.read(new URL(image.getMiniature()));
+		MINIATURE_CACHE.put(image.getIdentifiant(), img);
+	    } catch (Exception e) {
+		LOG.error(Outil.getStackTrace(e));
+	    }
+	}
+	return MINIATURE_CACHE.get(image.getIdentifiant());
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/browser/BrowserFrame.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/browser/BrowserFrame.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/browser/BrowserFrame.java	(revision 6845)
@@ -0,0 +1,374 @@
+package fr.mael.jiwigo.ui.browser;
+
+import java.awt.AWTEvent;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Toolkit;
+import java.awt.event.AWTEventListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.image.BufferedImage;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javax.imageio.ImageIO;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JRootPane;
+import javax.swing.JScrollPane;
+
+import fr.mael.jiwigo.om.Image;
+import fr.mael.jiwigo.transverse.util.ImagesUtil;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.Outil;
+import fr.mael.jiwigo.ui.ImagesManagement;
+import fr.mael.jiwigo.ui.comments.CommentsDialog;
+
+/**
+ *    
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * 
+ * Frame de navigation dans les images
+ *
+ */
+public class BrowserFrame extends JFrame implements ActionListener {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(BrowserFrame.class);
+    /**
+     * bouton pour passer à l'image suivante
+     */
+    private JButton next = new JButton();
+    /**
+     * bouton pour passer à l'image précédente
+     */
+    private JButton previous = new JButton();
+    /**
+     * rotation de l'image vers la gauche
+     */
+    private JButton rotateLeft = new JButton();
+    /**
+     * rotation de l'image vers la droite
+     */
+    private JButton rotateRight = new JButton();
+    /**
+     * sauvegarde de l'image
+     */
+    private JButton save = new JButton();
+    /**
+     * affichage des commentaire de l'image
+     */
+    private JButton comment = new JButton();
+    /**
+     * panel contenant tous les boutons précédents
+     */
+    private JPanel panelBoutons;
+
+    /**
+     * Panel qui contient l'image
+     */
+    private BrowserImagePanel imagePanel;
+
+    /**
+     * Menus
+     */
+    private JMenuBar menuBar;
+    private JMenu menuFichier, menuAffichage, menuImage;
+    private JMenuItem menuItemSave, menuItemPrint, menuItemClose, menuItemZoomPlus;
+    private JMenuItem menuItemZoomMoins, menuItemNormal, menuItemFlipH, menuItemFlipV;
+    private JMenuItem menuItemRotationG, menuItemRotationD;
+
+    /**
+     * Listener général. Permet d'ajouter les écouteurs sur les touches
+     * pour la navigation entres les différentes images grace aux touches
+     * droite et gauche.
+     * Je n'ai pas trouvé mieux que de faire ce listener général.
+     * Il est instancié et ajouté à la création de la frame, et retiré lorsqu'on la quitte
+     */
+    private AWTEventListener generalListener;
+
+    public BrowserFrame(Image image) {
+	this.setIconImage(java.awt.Toolkit.getDefaultToolkit().getImage(Outil.getURL("fr/mael/jiwigo/img/icon.png")));
+	this.setTitle(Messages.getMessage("titleBrowser"));
+	panelBoutons = new JPanel(new FlowLayout());
+	//ajout des images sur les boutons
+	next.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/next.png")));
+	previous.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/previous.png")));
+	rotateLeft.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/left.png")));
+	rotateRight.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/right.png")));
+	save.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/save.png")));
+	comment.setIcon(new ImageIcon(Outil.getURL("fr/mael/jiwigo/img/comment.png")));
+	//on rend les boutons invisibles, pour ne voir que l'image
+	next.setFocusPainted(false);
+	next.setBorderPainted(false);
+	next.setContentAreaFilled(false);
+	previous.setFocusPainted(false);
+	previous.setBorderPainted(false);
+	previous.setContentAreaFilled(false);
+	rotateLeft.setFocusPainted(false);
+	rotateLeft.setBorderPainted(false);
+	rotateLeft.setContentAreaFilled(false);
+	rotateRight.setFocusPainted(false);
+	rotateRight.setBorderPainted(false);
+	rotateRight.setContentAreaFilled(false);
+	save.setFocusPainted(false);
+	save.setBorderPainted(false);
+	save.setContentAreaFilled(false);
+	comment.setFocusPainted(false);
+	comment.setBorderPainted(false);
+	comment.setContentAreaFilled(false);
+	//ajout des action listeners
+	comment.addActionListener(this);
+	save.addActionListener(this);
+	rotateRight.addActionListener(this);
+	rotateLeft.addActionListener(this);
+	previous.addActionListener(this);
+	next.addActionListener(this);
+	//ajout des boutons
+	panelBoutons.add(previous);
+	panelBoutons.add(next);
+	panelBoutons.add(rotateLeft);
+	panelBoutons.add(rotateRight);
+	panelBoutons.add(save);
+	panelBoutons.add(comment);
+
+	BufferedImage img;
+	try {
+	    img = ImageIO.read(new URL(ImagesManagement.getCurrentImage().getUrl()));
+	    imagePanel = new BrowserImagePanel(img);
+	} catch (Exception e1) {
+	    LOG.error(Outil.getStackTrace(e1));
+	}
+
+	this.getContentPane().setLayout(new BorderLayout());
+	JScrollPane scrollpane = new JScrollPane(imagePanel);
+	Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+	this.getRootPane().setWindowDecorationStyle(JRootPane.PLAIN_DIALOG);
+	this.setExtendedState(getExtendedState() | JFrame.MAXIMIZED_BOTH);
+	//	this.setExtendedState(JFrame.ICONIFIED | this.getExtendedState());
+	panelBoutons.add(imagePanel.getSlider());
+	imagePanel.setLayout(new BorderLayout());
+	panelBoutons.setOpaque(false);
+	this.add(scrollpane, BorderLayout.CENTER);
+	this.add(panelBoutons, BorderLayout.SOUTH);
+
+	this.setSize(screenSize);
+	this.setLocationRelativeTo(null);
+	this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+	setUpMenu();
+	//instanciation du listener general
+	this.generalListener = new AWTEventListener() {
+
+	    public void eventDispatched(AWTEvent event) {
+		KeyEvent ke = (KeyEvent) event;
+		if (ke.getID() == KeyEvent.KEY_PRESSED) {
+		    if (ke.getKeyCode() == KeyEvent.VK_RIGHT) {
+			next.doClick();
+		    } else if (ke.getKeyCode() == KeyEvent.VK_LEFT) {
+			previous.doClick();
+		    }
+		}
+	    }
+	};
+	this.setVisible(true);
+
+	//ajout du listener general
+	//Toolkit.getDefaultToolkit().addAWTEventListener(generalListener, AWTEvent.KEY_EVENT_MASK);
+
+    }
+
+    private void setUpMenu() {
+	menuBar = new JMenuBar();
+
+	menuBar = new JMenuBar();
+	menuFichier = new JMenu(Messages.getMessage("imageBrowser_file"));
+	menuAffichage = new JMenu(Messages.getMessage("imageBrowser_display"));
+	menuImage = new JMenu(Messages.getMessage("imageBrowser_image"));
+	menuBar.add(menuFichier);
+	menuBar.add(menuAffichage);
+	menuBar.add(menuImage);
+	menuItemSave = new JMenuItem(Messages.getMessage("imageBrowser_save"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/save_mini.png")));
+	menuItemPrint = new JMenuItem(Messages.getMessage("imageBrowser_print"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/print.gif")));
+	menuItemClose = new JMenuItem(Messages.getMessage("imageBrowser_close"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/close.png")));
+	menuItemZoomPlus = new JMenuItem(Messages.getMessage("imageBrowser_zoomPlus"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/zoom_in.png")));
+	menuItemZoomMoins = new JMenuItem(Messages.getMessage("imageBrowser_zoomMoins"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/zoom_out.png")));
+	menuItemNormal = new JMenuItem(Messages.getMessage("imageBrowser_zoomNormal"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/zoom_n.png")));
+	menuItemFlipH = new JMenuItem(Messages.getMessage("imageBrowser_flipH"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/flip_h.png")));
+	menuItemFlipV = new JMenuItem(Messages.getMessage("imageBrowser_flipV"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/flip_v.png")));
+	menuItemRotationG = new JMenuItem(Messages.getMessage("imageBrowser_rotationL"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/left.png")));
+	menuItemRotationD = new JMenuItem(Messages.getMessage("imageBrowser_rotationR"), new ImageIcon(Outil
+		.getURL("fr/mael/jiwigo/img/right.png")));
+	menuFichier.add(menuItemSave);
+	menuFichier.addSeparator();
+	menuFichier.add(menuItemPrint);
+	menuFichier.addSeparator();
+	menuFichier.add(menuItemClose);
+	menuAffichage.add(menuItemZoomMoins);
+	menuAffichage.add(menuItemNormal);
+	menuAffichage.add(menuItemZoomPlus);
+	menuImage.add(menuItemFlipH);
+	menuImage.add(menuItemFlipV);
+	menuImage.addSeparator();
+	menuImage.add(menuItemRotationG);
+	menuImage.add(menuItemRotationD);
+	menuBar.add(menuFichier);
+	menuBar.add(menuAffichage);
+	menuBar.add(menuImage);
+	menuItemSave.addActionListener(this);
+	menuItemPrint.addActionListener(this);
+	menuItemClose.addActionListener(this);
+	menuItemZoomPlus.addActionListener(this);
+	menuItemZoomMoins.addActionListener(this);
+	menuItemNormal.addActionListener(this);
+	menuItemFlipH.addActionListener(this);
+	menuItemFlipV.addActionListener(this);
+	menuItemRotationG.addActionListener(this);
+	menuItemRotationD.addActionListener(this);
+	this.setJMenuBar(menuBar);
+
+    }
+
+    @Override
+    public void dispose() {
+	super.dispose();
+	//on enleve le listener general
+	Toolkit.getDefaultToolkit().removeAWTEventListener(generalListener);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+	if (e.getSource().equals(comment)) {
+	    new CommentsDialog(this, ImagesManagement.getCurrentImage().getIdentifiant());
+	} else if (e.getSource().equals(save)) {
+	    //ouverture du dialog de sauvegarde d'une image
+	    JFileChooser chooser = new JFileChooser();
+	    if (JFileChooser.APPROVE_OPTION == chooser.showSaveDialog(null)) {
+		File chosenFile = chooser.getSelectedFile();
+		if (chosenFile.getName().endsWith(".png")) {
+		    try {
+			//sauvegarde de l'image
+			ImagesUtil.writeImageToPNG(chosenFile, imagePanel.getImage());
+		    } catch (IOException ex) {
+			LOG.error(Outil.getStackTrace(ex));
+		    }
+		} else {
+		    try {
+			ImagesUtil.writeImageToPNG(new File(chosenFile.getParentFile(), chosenFile.getName() + ".png"),
+				imagePanel.getImage());
+		    } catch (IOException ex) {
+			LOG.error(Outil.getStackTrace(ex));
+		    }
+		}
+	    }
+	} else if (e.getSource().equals(next)) {
+	    //on appelle d'abord la fonction de l'images panel qui increment l'image courante
+	    ImagesManagement.next();
+	    //on rafraichit le panel qui contient l'image
+	    BufferedImage img;
+	    try {
+		img = ImagesManagement.getCurrentBufferedImage();
+		imagePanel.setImage(img);
+	    } catch (Exception e1) {
+		LOG.error(Outil.getStackTrace(e1));
+	    }
+
+	} else if (e.getSource().equals(previous)) {
+	    //on appelle d'abord la fonction de l'images panel qui décrémente l'image courante
+	    ImagesManagement.previous();
+	    //on rafraichit le panel qui contient l'image
+	    BufferedImage img;
+	    try {
+		img = ImagesManagement.getCurrentBufferedImage();
+		imagePanel.setImage(img);
+	    } catch (Exception e1) {
+		LOG.error(Outil.getStackTrace(e1));
+	    }
+
+	} else if (e.getSource().equals(rotateLeft)) {
+	    imagePanel.rotationGauche();
+	} else if (e.getSource().equals(rotateRight)) {
+	    imagePanel.rotationDroite();
+	} else if (e.getSource().equals(menuItemSave)) {
+	    save.doClick();
+	} else if (e.getSource().equals(menuItemClose)) {
+	    this.dispose();
+	} else if (e.getSource().equals(menuItemZoomPlus)) {
+	    imagePanel.zoomIn();
+	} else if (e.getSource().equals(menuItemZoomMoins)) {
+	    imagePanel.zoomOut();
+	} else if (e.getSource().equals(menuItemFlipH)) {
+	    imagePanel.flipH = !imagePanel.flipH;
+	    imagePanel.repaint();
+	    imagePanel.revalidate();
+	} else if (e.getSource().equals(menuItemFlipV)) {
+	    imagePanel.flipV = !imagePanel.flipV;
+	    imagePanel.repaint();
+	    imagePanel.revalidate();
+	} else if (e.getSource().equals(menuItemRotationD)) {
+	    rotateRight.doClick();
+	} else if (e.getSource().equals(menuItemRotationG)) {
+	    rotateLeft.doClick();
+	} else if (e.getSource().equals(menuItemPrint)) {
+	    PrinterJob pj = PrinterJob.getPrinterJob();
+	    pj.setPrintable(imagePanel);
+	    if (pj.printDialog()) {
+		try {
+		    pj.print();
+		} catch (PrinterException ex) {
+		    ex.printStackTrace();
+		}
+	    }
+	} else if (e.getSource().equals(menuItemNormal)) {
+	    imagePanel.zoomNormal();
+	}
+
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/browser/BrowserImagePanel.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/browser/BrowserImagePanel.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/browser/BrowserImagePanel.java	(revision 6845)
@@ -0,0 +1,239 @@
+package fr.mael.jiwigo.ui.browser;
+
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.awt.print.PageFormat;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.util.Hashtable;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import fr.mael.jiwigo.transverse.util.ImagesUtil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * Panel qui affiche une image
+ * @author mael
+ *
+ */
+public class BrowserImagePanel extends JPanel implements MouseWheelListener, Printable {
+    private BufferedImage image;
+    private double scale = 1.0;
+    boolean flipH = false;
+    boolean flipV = false;
+    private int valueSlider = 16;
+
+    /**
+     * Constructeur
+     * @param image
+     */
+    public BrowserImagePanel(BufferedImage image) {
+	this.image = image;
+	this.addMouseWheelListener(this);
+    }
+
+    /* (non-Javadoc)
+     * @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
+     */
+    protected void paintComponent(Graphics g) {
+	super.paintComponent(g);
+	Graphics2D g2 = (Graphics2D) g;
+	g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+	double x = (getWidth() - scale * image.getWidth()) / 2;
+	double y = (getHeight() - scale * image.getHeight()) / 2;
+	AffineTransform at = AffineTransform.getTranslateInstance(x, y);
+	if (flipV && !flipH) {
+	    at.scale(scale, -scale);
+	    at.translate(0, -getHeight() / 2);
+	} else if (flipH && !flipV) {
+	    at.scale(-scale, scale);
+	    at.translate(-getWidth() / 2, 0);
+	} else if (flipH && flipV) {
+	    at.scale(-scale, -scale);
+	    at.translate(-getWidth() / 2, -getHeight() / 2);
+	} else {
+	    at.scale(scale, scale);
+	}
+
+	g2.drawRenderedImage(image, at);
+
+    }
+
+    /* (non-Javadoc)
+     * @see javax.swing.JComponent#getPreferredSize()
+     */
+    public Dimension getPreferredSize() {
+	int w = (int) (scale * image.getWidth());
+	int h = (int) (scale * image.getHeight());
+	return new Dimension(w, h);
+    }
+
+    /**
+     * Récupération du slider
+     * @return le slider
+     */
+    public JSlider getSlider() {
+	int min = 1, max = 36, inc = 10;
+	final JSlider slider = new JSlider(min, max, 16);
+	slider.setMajorTickSpacing(5);
+	slider.setMinorTickSpacing(1);
+	slider.setPaintTicks(true);
+	slider.setSnapToTicks(true);
+	slider.setLabelTable(getLabelTable(min, max, inc));
+	slider.setPaintLabels(true);
+	slider.addChangeListener(new ChangeListener() {
+	    public void stateChanged(ChangeEvent e) {
+		int value = slider.getValue();
+		valueSlider = value;
+		scale = (value + 4) / 20.0;
+		revalidate();
+		repaint();
+	    };
+	});
+	return slider;
+    }
+
+    public void zoomIn() {
+
+	scale = (++valueSlider + 4) / 20.0;
+	revalidate();
+	repaint();
+    }
+
+    public void zoomOut() {
+	if (scale > 0) {
+	    scale = (--valueSlider + 4) / 20.0;
+	    revalidate();
+	    repaint();
+	}
+    }
+
+    public void zoomNormal() {
+
+	scale = 1.0;
+	revalidate();
+	repaint();
+    }
+
+    /**
+     * Label du slider
+     * @param min
+     * @param max
+     * @param inc
+     * @return
+     */
+    private Hashtable getLabelTable(int min, int max, int inc) {
+	Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel>();
+	for (int j = min; j <= max; j += inc) {
+	    String s = String.format("%.2f", (j + 4) / 20.0);
+	    table.put(Integer.valueOf(j), new JLabel(s));
+	}
+	return table;
+    }
+
+    /**
+     *  Rotation vers la droite
+     */
+    public void rotationDroite() {
+	setImage(ImagesUtil.rotate(image, Math.PI / 2));
+    }
+
+    /**
+     * Rotation vers la gauche
+     */
+    public void rotationGauche() {
+	setImage(ImagesUtil.rotate(image, -Math.PI / 2));
+    }
+
+    /**
+     * @return the image
+     */
+    public BufferedImage getImage() {
+	return image;
+    }
+
+    /**
+     * @param image the image to set
+     */
+    public void setImage(BufferedImage image) {
+	this.image = image;
+	revalidate();
+	repaint();
+    }
+
+    @Override
+    public void mouseWheelMoved(MouseWheelEvent arg0) {
+	int notches = arg0.getWheelRotation();
+	String message;
+	String newline = "\n";
+	if (notches < 0) {
+	    zoomIn();
+
+	} else {
+	    zoomOut();
+	}
+
+    }
+
+    @Override
+    public int print(Graphics arg0, PageFormat arg1, int arg2) throws PrinterException {
+	if (arg2 != 0)
+	    return NO_SUCH_PAGE;
+	Graphics2D g2 = (Graphics2D) arg0;
+	g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+	double x = (getWidth() - scale * image.getWidth()) / 2;
+	double y = (getHeight() - scale * image.getHeight()) / 2;
+	AffineTransform at = AffineTransform.getTranslateInstance(x, y);
+	if (flipV && !flipH) {
+	    at.scale(scale, -scale);
+	    at.translate(0, -getHeight() / 2);
+	} else if (flipH && !flipV) {
+	    at.scale(-scale, scale);
+	    at.translate(-getWidth() / 2, 0);
+	} else if (flipH && flipV) {
+	    at.scale(-scale, -scale);
+	    at.translate(-getWidth() / 2, -getHeight() / 2);
+	} else {
+	    at.scale(scale, scale);
+	}
+
+	g2.drawRenderedImage(image, at);
+	return PAGE_EXISTS;
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/comments/CommentPanel.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/comments/CommentPanel.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/comments/CommentPanel.java	(revision 6845)
@@ -0,0 +1,79 @@
+package fr.mael.jiwigo.ui.comments;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Font;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Un panel affichant un commentaire
+ */
+public class CommentPanel extends JPanel {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(CommentPanel.class);
+
+    /**
+     * Constructeur
+     * @param color la couleur de la zone de commentaire
+     * @param text le commentaire
+     * @param auteur l'auteur du commentaire
+     * @param date la date du commentaire
+     */
+    public CommentPanel(Color color, String text, String auteur, String date) {
+	this.setLayout(new BorderLayout());
+	this.setBackground(color);
+	JTextArea area = new JTextArea("\n\n\t" + text);
+	area.setFont(area.getFont().deriveFont(Font.BOLD));
+	area.setPreferredSize(new Dimension(550, 100));
+	area.setLineWrap(true);
+	area.setWrapStyleWord(true);
+	area.setEditable(false);
+	area.setBorder(null);
+	area.setOpaque(false);
+	JPanel panelHaut = new JPanel(new FlowLayout());
+	panelHaut.setPreferredSize(new Dimension(550, 50));
+	panelHaut.setOpaque(false);
+	JLabel labelAuteur = new JLabel(auteur);
+	JLabel labelDate = new JLabel(date);
+	panelHaut.add(labelAuteur);
+	panelHaut.add(labelDate);
+
+	this.add(panelHaut, BorderLayout.NORTH);
+	this.add(area, BorderLayout.CENTER);
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/comments/CommentsDialog.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/comments/CommentsDialog.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/comments/CommentsDialog.java	(revision 6845)
@@ -0,0 +1,183 @@
+package fr.mael.jiwigo.ui.comments;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.IOException;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import fr.mael.jiwigo.Main;
+import fr.mael.jiwigo.om.Comment;
+import fr.mael.jiwigo.service.CommentService;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * dialog affichant les commentaires d'une image et permettant d'en ajouter un
+ */
+public class CommentsDialog extends JDialog implements ActionListener {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(CommentsDialog.class);
+    /**
+     * booleen permettant d'alterner les couleurs des commentaires
+     */
+    private boolean alternate = true;
+    /**
+     * area permettant d'écrire un nouveau commentaire
+     */
+    private JTextArea textArea = new JTextArea();
+    /**
+     * bouton d'envoi d'un commentaire
+     */
+    private JButton boutonEnvoyer = new JButton("Ok");
+
+    /**
+     * id de l'image
+     */
+    private Integer imageId;
+    /**
+     * panel qui permet de scroller sur les commentaires
+     */
+    private JPanel panelScrollCommentaires = new JPanel(new GridBagLayout());
+    /**
+     * panel qui permet d'ajouter un commentaire
+     */
+    private JPanel panelAjouterCommentaire = new JPanel(new FlowLayout());
+
+    /**
+     * Scrollpane qui permet de scroller sur l'area 
+     */
+    private JScrollPane scrollPaneArea;
+    /**
+     * scrollpane qui permet de scroller sur les commentaires
+     */
+    private JScrollPane scrollPaneCommentaires;
+
+    /**
+     * Constructeur
+     * @param imageId id de l'image
+     */
+    public CommentsDialog(JFrame parent, Integer imageId) {
+	super(parent);
+	this.imageId = imageId;
+	this.setTitle(Messages.getMessage("commentaires"));
+
+	panelScrollCommentaires.setOpaque(true);
+	scrollPaneCommentaires = new JScrollPane(panelScrollCommentaires, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+		JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+	scrollPaneArea = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+		JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+	scrollPaneArea.setPreferredSize(new Dimension(400, 100));
+	scrollPaneCommentaires.setPreferredSize(new Dimension(700, 500));
+	rafraichir();
+	this.setSize(new Dimension(700, 700));
+	this.setLocationRelativeTo(null);
+	this.setVisible(true);
+
+    }
+
+    private void rafraichir() {
+	this.getContentPane().removeAll();
+	try {
+	    List<Comment> commentsForImage = CommentService.getInstance().lister(imageId);
+	    GridBagConstraints c = new GridBagConstraints();
+	    c.insets = new Insets(3, 3, 3, 3);
+	    c.gridx = 0;
+	    c.gridy = 0;
+	    //boucle sur tous les commentaires
+	    for (Comment comment : commentsForImage) {
+		CommentPanel panel;
+		if (alternate) {
+		    panel = new CommentPanel(new Color(153, 204, 51), comment.getContent(), comment.getAuthor(),
+			    comment.getDate());
+		} else {
+		    panel = new CommentPanel(new Color(77, 204, 51), comment.getContent(), comment.getAuthor(), comment
+			    .getDate());
+		}
+		alternate = !alternate;
+		panelScrollCommentaires.add(panel, c);
+		c.gridy++;
+	    }
+	} catch (Exception e) {
+	    LOG.error(Outil.getStackTrace(e));
+	    JOptionPane.showMessageDialog(null, Messages.getMessage("commentListingError"), Messages
+		    .getMessage("error"), JOptionPane.ERROR_MESSAGE);
+	}
+	panelAjouterCommentaire.add(scrollPaneArea);
+	boutonEnvoyer.addActionListener(this);
+	panelAjouterCommentaire.add(boutonEnvoyer);
+	this.getContentPane().setLayout(new BorderLayout());
+	this.getContentPane().add(scrollPaneCommentaires, BorderLayout.NORTH);
+	this.getContentPane().add(panelAjouterCommentaire, BorderLayout.CENTER);
+	this.getContentPane().repaint();
+	((JPanel) this.getContentPane()).revalidate();
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent arg0) {
+	String text = textArea.getText();
+	//on n'envoie pas de commentaire vide
+	if (text.equals("")) {
+	    JOptionPane.showMessageDialog(null, Messages.getMessage("emptyCommentError"), Messages.getMessage("error"),
+		    JOptionPane.ERROR_MESSAGE);
+	} else {
+	    boolean reussite = true;
+	    try {
+		reussite = CommentService.getInstance().creer(text, this.imageId, Main.sessionManager.getLogin());
+	    } catch (IOException e) {
+		reussite = false;
+		LOG.error(Outil.getStackTrace(e));
+	    }
+	    if (reussite) {
+		rafraichir();
+	    } else {
+		JOptionPane.showMessageDialog(null, Messages.getMessage("addCommentError"), Messages
+			.getMessage("error"), JOptionPane.ERROR_MESSAGE);
+	    }
+	}
+
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/CategoriesTree.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/CategoriesTree.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/CategoriesTree.java	(revision 6845)
@@ -0,0 +1,231 @@
+package fr.mael.jiwigo.ui.mainframe;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.List;
+
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JScrollPane;
+import javax.swing.JTree;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreePath;
+import javax.swing.tree.TreeSelectionModel;
+
+import fr.mael.jiwigo.om.Category;
+import fr.mael.jiwigo.service.CategoryService;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Arbre des catégories
+ */
+public class CategoriesTree extends JPanel implements TreeSelectionListener, MouseListener, ActionListener {
+
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(CategoriesTree.class);
+    /**
+     *  L'arbre
+     */
+    private JTree tree;
+    /**
+     * le menu permettant d'ajouter une catégorie
+     */
+    private JMenuItem menuAjouter;
+    /**
+     * Le menu permettant d'actualiser les catégories
+     */
+    private JMenuItem menuActualiser;
+    /**
+     * la racine du tree, qu'on n'affiche pas
+     */
+    private DefaultMutableTreeNode root = new DefaultMutableTreeNode("");
+    /**
+     * La catégorie selectionnée
+     */
+    private Category selectedCategory;
+
+    /**
+     * Constructeur
+     */
+    public CategoriesTree() {
+	super(new BorderLayout());
+	//creation de l'arbre
+	createNodes(root);
+	tree = new JTree(root);
+	tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
+	tree.addTreeSelectionListener(this);
+	tree.setRootVisible(false);
+	tree.addMouseListener(this);
+	JScrollPane treeView = new JScrollPane(tree);
+	Dimension minimumSize = new Dimension(100, 50);
+	treeView.setMinimumSize(minimumSize);
+	add(treeView, BorderLayout.CENTER);
+    }
+
+    /**
+     * Methode qui permet de mettre à jour l'arbre
+     */
+    public void setUpUi() {
+	//begin bug:0001830
+	root.removeAllChildren();
+	createNodes(root);
+	((DefaultTreeModel) tree.getModel()).reload();
+	//end
+
+    }
+
+    /* (non-Javadoc)
+     * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
+     */
+    public void valueChanged(TreeSelectionEvent e) {
+	DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
+	//
+	if (node == null)
+	    return;
+	Object catSelectionnee = node.getUserObject();
+	Category category = (Category) catSelectionnee;
+	MainFrame.imagesPanel.rafraichir(category.getIdentifiant(), false);
+    }
+
+    /**
+     * Creation des noeuds
+     * @param root noeud racine
+     */
+    private void createNodes(DefaultMutableTreeNode root) {
+	DefaultMutableTreeNode category = null;
+	try {
+	    List<Category> list = CategoryService.getInstance().construireArbre();
+	    for (Category cat : list) {
+		if (cat.getCategoriesMeres().size() == 0) {
+		    category = new DefaultMutableTreeNode(cat);
+		    root.add(category);
+		    recursiveNodeCreation(category, cat);
+		}
+
+	    }
+	} catch (Exception e) {
+	    LOG.error(Outil.getStackTrace(e));
+	    JOptionPane.showMessageDialog(null, Messages.getMessage("treeCreationError"), Messages.getMessage("error"),
+		    JOptionPane.ERROR_MESSAGE);
+	}
+
+    }
+
+    /**
+     * Méthode récursive de creation des noeuds de l'arbre
+     * @param categoryNode
+     * @param category
+     */
+    private void recursiveNodeCreation(DefaultMutableTreeNode categoryNode, Category category) {
+	for (Category cat : category.getCategoriesFilles()) {
+	    DefaultMutableTreeNode node = new DefaultMutableTreeNode(cat);
+	    categoryNode.add(node);
+	    recursiveNodeCreation(node, cat);
+	}
+    }
+
+    @Override
+    public void mouseClicked(MouseEvent arg0) {
+
+    }
+
+    @Override
+    public void mouseEntered(MouseEvent arg0) {
+	// TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void mouseExited(MouseEvent arg0) {
+	// TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void mousePressed(MouseEvent e) {
+	int selRow = tree.getRowForLocation(e.getX(), e.getY());
+	TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
+	//begin bug:0001832
+	tree.setSelectionRow(selRow);
+	//end
+	if (selRow != -1) {
+	    if (e.getButton() == 3) {
+		JPopupMenu popup = new JPopupMenu();
+		menuAjouter = new JMenuItem(Messages.getMessage("categories_add"));
+		menuAjouter.addActionListener(this);
+		popup.add(menuAjouter);
+		menuActualiser = new JMenuItem(Messages.getMessage("categories_update"));
+		menuActualiser.addActionListener(this);
+		popup.add(menuActualiser);
+		popup.show(tree, e.getX(), e.getY());
+		DefaultMutableTreeNode node = (DefaultMutableTreeNode) (selPath.getLastPathComponent());
+		this.selectedCategory = (Category) node.getUserObject();
+	    }
+	}
+
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent arg0) {
+	// TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent arg0) {
+	if (arg0.getSource().equals(menuAjouter)) {
+	    String nomcategorie = JOptionPane.showInputDialog(null, Messages.getMessage("categories_enterName"),
+		    Messages.getMessage("categories_add"), JOptionPane.INFORMATION_MESSAGE);
+	    if (!(nomcategorie == null) && !nomcategorie.equals("")) {
+		if (CategoryService.getInstance().creer(nomcategorie, selectedCategory.getIdentifiant())) {
+		    setUpUi();
+		} else {
+		    JOptionPane.showMessageDialog(null, Messages.getMessage("categoryCreationError"), Messages
+			    .getMessage("error"), JOptionPane.ERROR_MESSAGE);
+
+		}
+	    }
+	} else if (arg0.getSource().equals(menuActualiser)) {
+	    setUpUi();
+	}
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/MainFrame.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/MainFrame.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/MainFrame.java	(revision 6845)
@@ -0,0 +1,193 @@
+package fr.mael.jiwigo.ui.mainframe;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.Outil;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Frame principale
+ */
+public class MainFrame extends JFrame implements ActionListener {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(MainFrame.class);
+    /**
+     * l'arbre des catégories
+     */
+    private CategoriesTree categoriesTree;
+    /**
+     * Splitpane avec à gauche l'arbre et à droite les miniatures pour la catégorie
+     * courante
+     */
+    private JSplitPane splitPane;
+    /**
+     * Panel contenant les miniatures de la catégorie courante
+     */
+    public static ThumbnailCategoryPanel imagesPanel;
+    /**
+     *  Scrollpane contenant le panel ci dessus
+     */
+    private JScrollPane scrollPaneImagesPanel;
+    /**
+     * label qui affiche des messages
+     */
+    private JLabel labelMessage;
+
+    /**
+     * Barre de menu
+     */
+    private JMenuBar jMenuBar;
+
+    /**
+     * Menu d'édition
+     */
+    private JMenu jMenuEdition;
+
+    /**
+     * menu des preferences
+     */
+    private JMenuItem jMenuItemPreferences;
+
+    /**
+     * singleton
+     */
+    private static MainFrame instance;
+
+    private JProgressBar progressBar;
+
+    /**
+     * @return le singleton
+     */
+    public static MainFrame getInstance() {
+	if (instance == null) {
+	    instance = new MainFrame();
+	}
+	return instance;
+    }
+
+    /**
+     * COnstructeur privé, permettant de n'avoir accès qu'au singleton
+     */
+    private MainFrame() {
+	this.setTitle("Piwigo v" + Messages.getMessage("version"));
+	this.setIconImage(java.awt.Toolkit.getDefaultToolkit().getImage(Outil.getURL("fr/mael/jiwigo/img/icon.png")));
+	this.setLayout(new BorderLayout());
+	jMenuBar = new JMenuBar();
+	labelMessage = new JLabel(Messages.getMessage("welcomeMessage"));
+	splitPane = new JSplitPane();
+	categoriesTree = new CategoriesTree();
+	splitPane.setLeftComponent(categoriesTree);
+	imagesPanel = new ThumbnailCategoryPanel(null);
+	reduceSizeOfComponent(imagesPanel);
+	scrollPaneImagesPanel = new JScrollPane(imagesPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+		JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+	scrollPaneImagesPanel.setPreferredSize(new Dimension(900, 700));
+	splitPane.setRightComponent(scrollPaneImagesPanel);
+
+	this.add(splitPane, BorderLayout.WEST);
+	JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
+	progressBar = new JProgressBar(0, 100);
+	panel.add(progressBar);
+	panel.add(labelMessage);
+
+	jMenuEdition = new JMenu(Messages.getMessage("mainFrame_editionMenu"));
+	jMenuBar.add(jMenuEdition);
+	jMenuItemPreferences = new JMenuItem(Messages.getMessage("mainFrame_preferencesMenu"));
+	jMenuItemPreferences.addActionListener(this);
+	jMenuEdition.add(jMenuItemPreferences);
+
+	this.setJMenuBar(jMenuBar);
+	this.add(panel, BorderLayout.SOUTH);
+	this.pack();
+	this.setLocationRelativeTo(null);
+	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+	this.setResizable(false);
+    }
+
+    /**
+     * affichage de la frame
+     */
+    public void showUi() {
+	this.setVisible(true);
+    }
+
+    /**
+     * Affichage d'un message d'erreur
+     * @param message
+     */
+    public void setErrorMessage(String message) {
+	this.labelMessage.setText(message);
+    }
+
+    /**
+     * Affichage d'un message de réussite
+     * @param message
+     */
+    public void setReussiteMessage(String message) {
+	this.labelMessage.setText(message);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent arg0) {
+	if (arg0.getSource().equals(jMenuItemPreferences)) {
+	    new PreferencesDialog(this);
+	}
+
+    }
+
+    public static void reduceSizeOfComponent(JComponent comp) {
+	comp.setMaximumSize(comp.getPreferredSize());
+    }
+
+    /**
+     * @return the progressBar
+     */
+    public JProgressBar getProgressBar() {
+	return progressBar;
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/PreferencesDialog.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/PreferencesDialog.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/PreferencesDialog.java	(revision 6845)
@@ -0,0 +1,195 @@
+package fr.mael.jiwigo.ui.mainframe;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+
+import fr.mael.jiwigo.transverse.enumeration.PreferencesEnum;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.preferences.PreferencesManagement;
+
+/**
+ * 
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ *
+ */
+public class PreferencesDialog extends JDialog implements ActionListener {
+
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(PreferencesDialog.class);
+
+    /**
+     * Les onglets
+     */
+    private JTabbedPane tabPane;
+
+    /**
+     * l'onglet de gestion des preferences des images
+     */
+    private JPanel panelImage;
+
+    /**
+     * largeur des images
+     */
+    private JTextField fieldWidth;
+
+    /**
+     * hauteur des images
+     */
+    private JTextField fieldHeight;
+
+    /**
+     * taille des morceaux
+     */
+    private JTextField fieldChunkSize;
+
+    /**
+     * label
+     */
+    private JLabel labelTaille;
+
+    /**
+     * label
+     */
+    private JLabel labelChunkSize;
+
+    /**
+     * label
+     */
+    private JLabel labelCroix;
+
+    /**
+     * bouton d'enregistrement des preferences
+     */
+    private JButton boutonOk = new JButton("Ok");
+
+    /**
+     * panel contenant les boutons
+     */
+    private JPanel panelBoutons;
+
+    /**
+     * bouton pour annuler 
+     */
+    private JButton boutonAnnuler;
+
+    /**
+     * Constructeur
+     * @param parent frame parent
+     */
+    public PreferencesDialog(JFrame parent) {
+	fieldWidth = new JTextField(PreferencesManagement.getValue(PreferencesEnum.WIDTH_ORIGINALE.getLabel()));
+	fieldHeight = new JTextField(PreferencesManagement.getValue(PreferencesEnum.HEIGHT_ORIGINAL.getLabel()));
+	fieldChunkSize = new JTextField(PreferencesManagement.getValue(PreferencesEnum.CHUNK_SIZE.getLabel()));
+	labelTaille = new JLabel(Messages.getMessage("preferences_imagesSize"));
+	labelCroix = new JLabel("x");
+	labelChunkSize = new JLabel(Messages.getMessage("preferences_chunkSize"));
+	fieldWidth.setPreferredSize(new Dimension(50, 30));
+	fieldHeight.setPreferredSize(new Dimension(50, 30));
+	fieldChunkSize.setPreferredSize(new Dimension(50, 30));
+
+	panelImage = new JPanel(new GridBagLayout());
+	GridBagConstraints c = new GridBagConstraints();
+	c.gridx = 0;
+	c.gridy = 0;
+	c.anchor = GridBagConstraints.WEST;
+	panelImage.add(labelTaille, c);
+	c.gridx++;
+	panelImage.add(fieldWidth, c);
+	c.gridx++;
+	panelImage.add(labelCroix, c);
+	c.gridx++;
+	panelImage.add(fieldHeight, c);
+	c.gridy++;
+	c.gridx = 0;
+	panelImage.add(labelChunkSize, c);
+	c.gridx++;
+	panelImage.add(fieldChunkSize, c);
+
+	boutonAnnuler = new JButton(Messages.getMessage("cancel"));
+	boutonAnnuler.addActionListener(this);
+	boutonOk.addActionListener(this);
+	panelBoutons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+	panelBoutons.add(boutonOk);
+	panelBoutons.add(boutonAnnuler);
+	boutonOk.setPreferredSize(new Dimension(90, 30));
+	boutonAnnuler.setPreferredSize(new Dimension(90, 30));
+
+	tabPane = new JTabbedPane();
+	tabPane.addTab(Messages.getMessage("preferences_tabImage"), panelImage);
+	this.setLayout(new BorderLayout());
+	this.add(tabPane, BorderLayout.CENTER);
+	this.add(panelBoutons, BorderLayout.SOUTH);
+	this.setSize(new Dimension(400, 300));
+	this.setLocationRelativeTo(null);
+	this.setVisible(true);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+	if (e.getSource().equals(boutonAnnuler)) {
+	    this.dispose();
+	} else if (e.getSource().equals(boutonOk)) {
+	    try {
+		int width = Integer.valueOf(fieldWidth.getText());
+		int height = Integer.valueOf(fieldHeight.getText());
+		double chunk = Double.parseDouble(fieldChunkSize.getText().replace(",", "."));
+		PreferencesManagement.setValue(PreferencesEnum.WIDTH_ORIGINALE.getLabel(), String.valueOf(width));
+		PreferencesManagement.setValue(PreferencesEnum.HEIGHT_ORIGINAL.getLabel(), String.valueOf(height));
+		PreferencesManagement.setValue(PreferencesEnum.CHUNK_SIZE.getLabel(), String.valueOf(chunk));
+		this.dispose();
+	    } catch (NumberFormatException ex) {
+		ex.printStackTrace();
+		JOptionPane.showMessageDialog(this, Messages.getMessage("preferencesCheckValues"), Messages
+			.getMessage("error"), JOptionPane.ERROR_MESSAGE);
+	    } catch (Exception ex) {
+		JOptionPane.showMessageDialog(this, Messages.getMessage("preferencesUnexpectedError"), Messages
+			.getMessage("error"), JOptionPane.ERROR_MESSAGE);
+
+	    }
+
+	}
+
+    }
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailCategoryPanel.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailCategoryPanel.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailCategoryPanel.java	(revision 6845)
@@ -0,0 +1,209 @@
+package fr.mael.jiwigo.ui.mainframe;
+
+import java.awt.FlowLayout;
+import java.io.File;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import fr.mael.jiwigo.om.Image;
+import fr.mael.jiwigo.service.ImageService;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.transverse.util.Outil;
+import fr.mael.jiwigo.transverse.util.filedrop.FileDrop;
+import fr.mael.jiwigo.ui.ImagesManagement;
+import fr.mael.jiwigo.ui.layout.VerticalLayout;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Classe qui affiche toutes les miniatures d'une catégorie
+ */
+public class ThumbnailCategoryPanel extends JPanel {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(ThumbnailCategoryPanel.class);
+    /**
+     * L'id de la catégorie pour laquelle les miniatures doivent être affichées
+     */
+    private Integer categoryId;
+
+    /**
+     * Constructeur
+     * @param categoryId l'id de la catégorie
+     */
+    public ThumbnailCategoryPanel(Integer categoryId) {
+	this.categoryId = categoryId;
+	//	this.setLayout(new FlowLayout());
+	//	this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
+	this.setLayout(new VerticalLayout());
+	//	this.setPreferredSize(new Dimension(900, 800));
+	if (categoryId != null) {
+	    rafraichir(categoryId, false);
+	}
+	//gestion du drag'n drop
+	new FileDrop(System.out, this, new FileDrop.Listener() {
+	    public void filesDropped(final java.io.File[] files) {
+		new Thread(new ThreadEnvoiPhoto(files)).start();
+		//		for (int i = 0; i < files.length; i++) {
+		//		    try {
+		//			ImageService.getInstance().creer(files[i].getCanonicalPath(), getCategoryId());
+		//			//on rafraichit
+		//			rafraichir(getCategoryId(), true);
+		//		    } catch (Exception e) {
+		//			LOG.error(Outil.getStackTrace(e));
+		//			//s'il y a une erreur lors de l'envoi
+		//			JOptionPane.showMessageDialog(null, Messages.getMessage("sendingError") + files[i].getName(),
+		//				Messages.getMessage("error"), JOptionPane.ERROR_MESSAGE);
+		//		    }
+		//		}
+
+	    }
+	});
+
+    }
+
+    /**
+     * rafraichissement, afin d'afficher les nouvelles images
+     * @param categoryId
+     */
+    public void rafraichir(Integer categoryId, boolean rafraichir) {
+	this.categoryId = categoryId;
+	new Thread(new ThreadLoadThumb(this, rafraichir)).start();
+    }
+
+    /**
+     * @return the categoryId
+     */
+    public Integer getCategoryId() {
+	return categoryId;
+    }
+
+    /**
+     * @param categoryId the categoryId to set
+     */
+    public void setCategoryId(Integer categoryId) {
+	this.categoryId = categoryId;
+    }
+
+    /**
+     * @author mael
+     * Thread that send the photos
+     */
+    public class ThreadEnvoiPhoto implements Runnable {
+	private File[] files;
+
+	public ThreadEnvoiPhoto(File[] files) {
+	    this.files = files;
+	}
+
+	@Override
+	public void run() {
+
+	    for (int i = 0; i < files.length; i++) {
+		int nbProgressBar = ((i + 1) * 100) / files.length;
+		try {
+
+		    ImageService.getInstance().creer(files[i].getCanonicalPath(), categoryId);
+		    MainFrame.getInstance().setReussiteMessage(
+			    files[i].getName() + " " + Messages.getMessage("sendingSuccess"));
+		} catch (Exception e) {
+		    LOG.error(Outil.getStackTrace(e));
+		    //s'il y a une erreur lors de l'envoi
+		    JOptionPane.showMessageDialog(null, Messages.getMessage("sendingError") + files[i].getName(),
+			    Messages.getMessage("error"), JOptionPane.ERROR_MESSAGE);
+		    MainFrame.getInstance().setErrorMessage(
+			    Messages.getMessage("sendingError") + " " + files[i].getName());
+		} finally {
+		    MainFrame.getInstance().getProgressBar().setValue(nbProgressBar);
+		}
+	    }
+	    //on rafraichit
+	    rafraichir(categoryId, true);
+	    MainFrame.getInstance().getProgressBar().setValue(0);
+	}
+    }
+
+    /**
+     * 
+     * @author mael
+     * Thread that loads the thumbs and fills the thumb panel
+     */
+    public class ThreadLoadThumb implements Runnable {
+	ThumbnailCategoryPanel panel;
+	boolean rafraichir;
+
+	public ThreadLoadThumb(ThumbnailCategoryPanel panel, boolean rafraichir) {
+	    this.panel = panel;
+	    this.rafraichir = rafraichir;
+	}
+
+	@Override
+	public void run() {
+
+	    panel.removeAll();
+	    int nb = 1;
+	    JPanel panelh = new JPanel(new FlowLayout());
+	    try {
+		MainFrame.getInstance().setReussiteMessage(Messages.getMessage("thumbviewer_loading"));
+		ImagesManagement.LIST_IMAGE = ImageService.getInstance().listerParCategory(categoryId, rafraichir);
+		for (Image image : ImagesManagement.LIST_IMAGE) {
+		    try {
+
+			if (nb == 7) {
+			    panel.add(panelh);
+			    panelh = new JPanel(new FlowLayout());
+			    nb = 0;
+			} else {
+			    ThumbnailPanel panel = new ThumbnailPanel(image);
+			    panelh.add(panel);
+			}
+			nb++;
+
+		    } catch (Exception e) {
+
+		    }
+		}
+		if (nb != 8) {
+		    panel.add(panelh);
+		}
+		panel.repaint();
+		panel.revalidate();
+		MainFrame.getInstance().setReussiteMessage(Messages.getMessage("loadingOk"));
+	    } catch (Exception e) {
+		LOG.error(Outil.getStackTrace(e));
+		JOptionPane.showMessageDialog(null, Messages.getMessage("imagesListingError"), Messages
+			.getMessage("error"), JOptionPane.ERROR_MESSAGE);
+		MainFrame.getInstance().setErrorMessage(Messages.getMessage("imagesListingError"));
+	    }
+
+	}
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailPanel.java
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailPanel.java	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/java/fr/mael/jiwigo/ui/mainframe/ThumbnailPanel.java	(revision 6845)
@@ -0,0 +1,123 @@
+package fr.mael.jiwigo.ui.mainframe;
+
+import java.awt.Cursor;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.JLabel;
+
+import fr.mael.jiwigo.om.Image;
+import fr.mael.jiwigo.transverse.util.Messages;
+import fr.mael.jiwigo.ui.ImagesManagement;
+import fr.mael.jiwigo.ui.browser.BrowserFrame;
+
+/**
+   Copyright (c) 2010, Mael
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of jiwigo nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL Mael BE LIABLE FOR ANY
+   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   
+ * @author mael
+ * Panel contenant la miniature d'une image.
+ * C'est un panel "cliquable", qui permet d'afficher l'image à taille réelle
+ */
+public class ThumbnailPanel extends JLabel implements MouseListener {
+    /**
+     * Logger
+     */
+    public static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory
+	    .getLog(ThumbnailPanel.class);
+    /**
+     * l'image
+     */
+    private Image image;
+
+    /**
+     * Constructeur
+     * @param image l'image
+     * @param imagesPanel le panel
+     */
+    public ThumbnailPanel(Image image) {
+	this.image = image;
+	setToolTipText("<html><center>" + image.getName() + "<br/>" + image.getVue() + " "
+		+ Messages.getMessage("hits") + "</center></html>");
+	this.addMouseListener(this);
+    }
+
+    protected void paintComponent(Graphics g) {
+	super.paintComponent(g);
+	Graphics2D g2 = (Graphics2D) g;
+	g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+	double x = (getWidth() * ImagesManagement.getMiniatureBufferedImage(image).getWidth()) / 2;
+	double y = (getHeight() * ImagesManagement.getMiniatureBufferedImage(image).getHeight()) / 2;
+	g2.drawRenderedImage(ImagesManagement.getMiniatureBufferedImage(image), null);
+    }
+
+    /* (non-Javadoc)
+     * @see javax.swing.JComponent#getPreferredSize()
+     */
+    public Dimension getPreferredSize() {
+	int w = (int) (ImagesManagement.getMiniatureBufferedImage(image).getWidth());
+	int h = (int) (ImagesManagement.getMiniatureBufferedImage(image).getHeight() + 10);
+	return new Dimension(w, h);
+    }
+
+    @Override
+    public void mouseClicked(MouseEvent paramMouseEvent) {
+	// on affiche l'image en grand
+	ImagesManagement.setCurrentImage(image);
+	try {
+	    new BrowserFrame(image);
+	} catch (Exception e) {
+
+	}
+
+    }
+
+    @Override
+    public void mouseEntered(MouseEvent paramMouseEvent) {
+	//changement du curseur, pour signifier à l'utilisateur que l'image est cliquable
+	this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+    }
+
+    @Override
+    public void mouseExited(MouseEvent paramMouseEvent) {
+    }
+
+    @Override
+    public void mousePressed(MouseEvent paramMouseEvent) {
+	// TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void mouseReleased(MouseEvent paramMouseEvent) {
+	// TODO Auto-generated method stub
+
+    }
+
+}
Index: /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages.properties
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages.properties	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages.properties	(revision 6845)
@@ -0,0 +1,87 @@
+#####################################################
+#################### General ########################
+#####################################################
+error=Error
+welcomeMessage=Welcome to Jiwigo
+version=0.11b
+commentaires=Comments
+loading=Loading...
+titleBrowser=Jiwigo :: Files browser
+cancel=Cancel
+hits=Hits
+loadingOk=Loading ok
+
+#####################################################
+################### Main Frame ######################
+#####################################################
+mainFrame_editionMenu=Edition
+mainFrame_preferencesMenu=Preferences
+mainFrame_resizing=Resizing for
+mainFrame_addMetadata=Adding metadata for
+mainFrame_sendingFiles=Sending files for
+
+#####################################################
+################## Preferences ######################
+#####################################################
+preferences_tabImage=Images
+preferences_imagesSize=Images size
+preferences_chunkSize=Chunks size (Mb)
+
+#####################################################
+############### Thumbnail viewer ####################
+#####################################################
+thumbviewer_loading=Loading thumbnails. Please wait...
+
+#####################################################
+#################### Errors  ########################
+#####################################################
+sendingError=Error sending
+categoryCreationError=Error creating category
+emptyCommentError=Unable to send an empty comment
+addCommentError=Error adding the comment
+treeCreationError=Error creating categories tree
+commentListingError=Error getting comments
+imagesListingError=Error getting images
+configDefaultCreation=Error creating default configuration files
+preferencesCheckValues=Please check the values
+preferencesUnexpectedError=<html>An unexpected error happened. Preferences won't be updated</html>
+
+#####################################################
+#################### Success ########################
+#####################################################
+sendingSuccess=Sending success
+
+#####################################################
+#################### Categories######################
+#####################################################
+categories_add=Add a category
+categories_update=Refresh
+categories_enterName=Fill the category name
+
+
+#####################################################
+############### Connection dialog ###################
+#####################################################
+connexionDialog_urlSite=Site url
+connexionDialog_login=Login
+connexionDialog_pass=Password
+connexionDialog_emptyField=You must fill all field
+connexionDialog_connexionError=<html><center>Error<br/>Check the fields<br/>(The url must contain "http://")</center></html>
+connexionDialog_sauvegarder=<html><center>Save informations.<br/> <u>Warning</u> This informations <br/>are not encrypted</center></html>
+
+#####################################################
+################ Images browser #####################
+#####################################################
+imageBrowser_file=File
+imageBrowser_display=Display
+imageBrowser_image=Image
+imageBrowser_save=Save as
+imageBrowser_print=Print
+imageBrowser_close=Close
+imageBrowser_zoomPlus=Zoom +
+imageBrowser_zoomMoins=Zoom -
+imageBrowser_zoomNormal=Original size
+imageBrowser_flipH=Horizontal flip
+imageBrowser_flipV=Vertical flip
+imageBrowser_rotationL=Rotate to left
+imageBrowser_rotationR=Rotate to right
Index: /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_de.properties
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_de.properties	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_de.properties	(revision 6845)
@@ -0,0 +1,87 @@
+#####################################################
+#################### General ########################
+#####################################################
+error=Fehler
+welcomeMessage=Willkommen bei Jiwigo
+version=0.11b
+commentaires=Kommentare
+loading=Ladet...
+titleBrowser=Jiwigo :: Dateien Browser
+cancel=löschen
+hits=Hits
+loadingOk=Laden ok
+
+#####################################################
+################### Main Frame ######################
+#####################################################
+mainFrame_editionMenu=Edition
+mainFrame_preferencesMenu=Einstellungen
+mainFrame_resizing=Ändert die Größe für
+mainFrame_addMetadata=Metadatei wird hinzugefügt für
+mainFrame_sendingFiles=Dateien werden gesendet für
+
+#####################################################
+################## Preferences ######################
+#####################################################
+preferences_tabImage=Bilder
+preferences_imagesSize=Bildergröße
+preferences_chunkSize=Größe der Blöcke (Mb)
+
+#####################################################
+############### Thumbnail viewer ####################
+#####################################################
+thumbviewer_loading=Thumbnails werden geladen. Bitte warten...
+
+#####################################################
+#################### Errors  ########################
+#####################################################
+sendingError=Fehler beim senden
+categoryCreationError=Fehler bei der Erstellung der Kategorie
+emptyCommentError=Unmöglich einen lehren Kommentar zu senden
+addCommentError=Fehler beim hinzufügen des Kommentars
+treeCreationError=Fehler beim Erstellen eines Kategorienbaumes
+commentListingError=Fehler beim erhalten der Kommentare
+imagesListingError=Fehler beim erhalten der Bilder
+configDefaultCreation=Fehler bei der Erstellung von Standard-Konfigurationsdateien
+preferencesCheckValues=Bitte die Werte überprüfen
+preferencesUnexpectedError=<html>Ein unerwarteter Fehler ist aufgetreten. Einstellungen werden nicht aktualisiert</html>
+
+#####################################################
+#################### Success ########################
+#####################################################
+sendingSuccess=Erfolgreiche Entsendung
+
+#####################################################
+#################### Categories######################
+#####################################################
+categories_add=Kategorie hinzufügen
+categories_update=Aktualisieren
+categories_enterName=Den Kategorienname hinzufügen
+
+
+#####################################################
+############### Connection dialog ###################
+#####################################################
+connexionDialog_urlSite=URL der Seite
+connexionDialog_login=Login
+connexionDialog_pass=Password
+connexionDialog_emptyField=Sie müssen alle Felder ausfüllen
+connexionDialog_connexionError=<html><center>Fehler<br/>Überprüfen Sie die Felder<br/>(Die Url muss "http://" enthalten)</center></html>
+connexionDialog_sauvegarder=<html><center>Sicherung der Informationen.<br/> <u>Achtung</u> Die Informationen sind unverschlüsselt<br/> auf Ihrem Computer gespeichert.</center></html>
+
+#####################################################
+################ Images browser #####################
+#####################################################
+imageBrowser_file=File
+imageBrowser_display=Display
+imageBrowser_image=Bild
+imageBrowser_save=Speichern als
+imageBrowser_print=Drucken
+imageBrowser_close=Schließen
+imageBrowser_zoomPlus=Zoom +
+imageBrowser_zoomMoins=Zoom -
+imageBrowser_zoomNormal=Originalgröße
+imageBrowser_flipH=Horizontal umdrehen
+imageBrowser_flipV=Vertikal umdrehen
+imageBrowser_rotationL=Nach Links drehen
+imageBrowser_rotationR=Nach Rechts drehen
Index: /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_en.properties
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_en.properties	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_en.properties	(revision 6845)
@@ -0,0 +1,87 @@
+#####################################################
+#################### General ########################
+#####################################################
+error=Error
+welcomeMessage=Welcome to Jiwigo
+version=0.11b
+commentaires=Comments
+loading=Loading...
+titleBrowser=Jiwigo :: Files browser
+cancel=Cancel
+hits=Hits
+loadingOk=Loading ok
+
+#####################################################
+################### Main Frame ######################
+#####################################################
+mainFrame_editionMenu=Edition
+mainFrame_preferencesMenu=Preferences
+mainFrame_resizing=Resizing for
+mainFrame_addMetadata=Adding metadata for
+mainFrame_sendingFiles=Sending files for
+
+#####################################################
+################## Preferences ######################
+#####################################################
+preferences_tabImage=Images
+preferences_imagesSize=Images size
+preferences_chunkSize=Chunks size (Mb)
+
+#####################################################
+############### Thumbnail viewer ####################
+#####################################################
+thumbviewer_loading=Loading thumbnails. Please wait...
+
+#####################################################
+#################### Errors  ########################
+#####################################################
+sendingError=Error sending
+categoryCreationError=Error creating category
+emptyCommentError=Unable to send an empty comment
+addCommentError=Error adding the comment
+treeCreationError=Error creating categories tree
+commentListingError=Error getting comments
+imagesListingError=Error getting images
+configDefaultCreation=Error creating default configuration files
+preferencesCheckValues=Please check the values
+preferencesUnexpectedError=<html>An unexpected error happened. Preferences won't be updated</html>
+
+#####################################################
+#################### Success ########################
+#####################################################
+sendingSuccess=Sending success
+
+#####################################################
+#################### Categories######################
+#####################################################
+categories_add=Add a category
+categories_update=Refresh
+categories_enterName=Fill the category name
+
+
+#####################################################
+############### Connection dialog ###################
+#####################################################
+connexionDialog_urlSite=Site url
+connexionDialog_login=Login
+connexionDialog_pass=Password
+connexionDialog_emptyField=You must fill all field
+connexionDialog_connexionError=<html><center>Error<br/>Check the fields<br/>(The url must contain "http://")</center></html>
+connexionDialog_sauvegarder=<html><center>Save informations.<br/> <u>Warning</u> This informations <br/>are not encrypted</center></html>
+
+#####################################################
+################ Images browser #####################
+#####################################################
+imageBrowser_file=File
+imageBrowser_display=Display
+imageBrowser_image=Image
+imageBrowser_save=Save as
+imageBrowser_print=Print
+imageBrowser_close=Close
+imageBrowser_zoomPlus=Zoom +
+imageBrowser_zoomMoins=Zoom -
+imageBrowser_zoomNormal=Original size
+imageBrowser_flipH=Horizontal flip
+imageBrowser_flipV=Vertical flip
+imageBrowser_rotationL=Rotate to left
+imageBrowser_rotationR=Rotate to right
Index: /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_fr.properties
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_fr.properties	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_fr.properties	(revision 6845)
@@ -0,0 +1,88 @@
+#####################################################
+#################### General ########################
+#####################################################
+error=Erreur
+welcomeMessage=Bienvenue dans jiwigo
+version=0.11b
+commentaires=Commentaires
+loading=Chargement...
+titleBrowser=Jiwigo :: Navigateur de fichiers
+cancel=Annuler
+hits=Hits
+loadingOk=Chargement réussi
+
+#####################################################
+################### Main Frame ######################
+#####################################################
+mainFrame_editionMenu=Edition
+mainFrame_preferencesMenu=Préférences
+mainFrame_resizing=Redimensionnements pour
+mainFrame_addMetadata=Ajout des métadonnées pour
+mainFrame_sendingFiles=Envoi des fichiers pour
+
+#####################################################
+################## Preferences ######################
+#####################################################
+preferences_tabImage=Images
+preferences_imagesSize=Taille des images
+preferences_chunkSize=Taille des "morceaux" (en Mo)
+
+#####################################################
+############### Thumbnail viewer ####################
+#####################################################
+thumbviewer_loading=Chargement des miniatures, veuillez patienter
+
+
+#####################################################
+#################### Errors  ########################
+#####################################################
+sendingError=Erreur lors de l'envoi de 
+categoryCreationError=Erreur lors de la création de la catégorie
+emptyCommentError=Impossible d'envoyer un commentaire vide
+addCommentError=Erreur lors de l'ajout du commentaire
+treeCreationError=Erreur lors de la création de l'arbre des catégories
+commentListingError=Erreur lors de la récupération des commentaires
+imagesListingError=Erreur lors de la récupération des images
+configDefaultCreation=Erreur lors de la création des fichiers de configuration par défaut
+preferencesCheckValues=Veuillez vérifier les valeurs entrées
+preferencesUnexpectedError=<html>Une erreur inattendue s'est produite. Les préférences ne seront<br/>probablement pas mises à jour</html>
+
+#####################################################
+#################### Success ########################
+#####################################################
+sendingSuccess=envoi réussi
+
+#####################################################
+#################### Categories######################
+#####################################################
+categories_add=Ajouter une catégorie
+categories_update=Actualiser
+categories_enterName=Entrez le nom de la catégorie
+
+
+#####################################################
+############### Connection dialog ###################
+#####################################################
+connexionDialog_urlSite=Adresse du site
+connexionDialog_login=Identifiant
+connexionDialog_pass=Mot de passe
+connexionDialog_emptyField=Vous devez remplir tous les champs
+connexionDialog_connexionError=<html><center>Erreur lors de la connexion.<br/>Assurez vous d'avoir complété les champs correctement<br/>(L'adresse du site doit contenir le "http://")</center></html>
+connexionDialog_sauvegarder=<html><center>Sauvegarder les informations.<br/> <u>Attention</u> Les informations sont stockées<br/> en clair sur votre ordinateur.</center></html>
+
+#####################################################
+################ Images browser #####################
+#####################################################
+imageBrowser_file=Fichier
+imageBrowser_display=Affichage
+imageBrowser_image=Image
+imageBrowser_save=Enregistrer sous
+imageBrowser_print=Imprimer
+imageBrowser_close=Fermer
+imageBrowser_zoomPlus=Zoom plus
+imageBrowser_zoomMoins=Zoom moins
+imageBrowser_zoomNormal=Taille normale
+imageBrowser_flipH=Miroir horizontal
+imageBrowser_flipV=Miroir vertical
+imageBrowser_rotationL=Rotation à gauche
+imageBrowser_rotationR=Rotation à droite
Index: /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_it.properties
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_it.properties	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/fr/mael/jiwigo/trad/messages_it.properties	(revision 6845)
@@ -0,0 +1,87 @@
+#####################################################
+#################### General ########################
+#####################################################
+error=Errore
+welcomeMessage=Benvenuti su Jiwigo
+version=0.11b
+commentaires=Commenti
+loading=Caricamento in corso...
+titleBrowser=Jiwigo :: File browser
+cancel=Cancella
+hits=Hits
+loadingOk=Caricamento ok
+
+#####################################################
+################### Main Frame ######################
+#####################################################
+mainFrame_editionMenu=Editione
+mainFrame_preferencesMenu=Preference
+mainFrame_resizing=Redimensionamento per
+mainFrame_addMetadata=L'aggiunta di metadati per
+mainFrame_sendingFiles=Invio dei file per
+
+#####################################################
+################## Preferences ######################
+#####################################################
+preferences_tabImage=Imagini
+preferences_imagesSize=Dimensione delle immagini
+preferences_chunkSize=Dimensione dei blocchi (Mb)
+
+#####################################################
+############### Thumbnail viewer ####################
+#####################################################
+thumbviewer_loading=Caricamento delle miniature in corso. Attendere prego...
+
+#####################################################
+#################### Errors  ########################
+#####################################################
+sendingError=Errore nell'invio
+categoryCreationError=Errore durante la creazione della categoria
+emptyCommentError=Impossibile inviare un commento vuoto
+addCommentError=Errore durante l'aggiunta del commento
+treeCreationError=Errore durante la creazione di un albero di categorie
+commentListingError=Errore durante la ricevuta dei commenti
+imagesListingError=Errore durante la ricevuta delle immagini
+configDefaultCreation=Errore durante al creazione dei file default di configurazione
+preferencesCheckValues=Si prega di verificare i valori
+preferencesUnexpectedError=<html>Si è verificato un errore imprevisto. Le preferenze non saranno aggiornate</html>
+
+#####################################################
+#################### Success ########################
+#####################################################
+sendingSuccess=Inviato con successo
+
+#####################################################
+#################### Categories######################
+#####################################################
+categories_add=Aggiungi una Categoria
+categories_update=Aggiornare
+categories_enterName=Inserire il nome della categoria
+
+
+#####################################################
+############### Connection dialog ###################
+#####################################################
+connexionDialog_urlSite=Url del sito
+connexionDialog_login=Login
+connexionDialog_pass=Password
+connexionDialog_emptyField=Deve compilare tutti  i campi
+connexionDialog_connexionError=<html><center>Errore<br/>Controllare i campi<br/>(L'url deve contenere "http://")</center></html>
+connexionDialog_sauvegarder=<html><center>Salvare le informazioni.<br/> <u>Attenzione</u> Le informazioni sono state salvate<br/> senza codice sul vostro PC.</center></html>
+
+#####################################################
+################ Images browser #####################
+#####################################################
+imageBrowser_file=File
+imageBrowser_display=Display
+imageBrowser_image=Imagine
+imageBrowser_save=Salvare come
+imageBrowser_print=Stampare
+imageBrowser_close=Chiudere
+imageBrowser_zoomPlus=Zoom +
+imageBrowser_zoomMoins=Zoom -
+imageBrowser_zoomNormal=Grandezza originale
+imageBrowser_flipH=Flip orizzontale
+imageBrowser_flipV=Flip verticale
+imageBrowser_rotationL=Ruota a sinistra
+imageBrowser_rotationR=Ruota a destra
Index: /extensions/jiwigo/release-0.12/src/main/resources/log4j.dtd
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/log4j.dtd	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/log4j.dtd	(revision 6845)
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!-- Authors: Chris Taylor, Ceki Gulcu. -->
+
+<!-- Version: 1.2 -->
+
+<!-- A configuration element consists of optional renderer
+elements,appender elements, categories and an optional root
+element. -->
+
+<!ELEMENT log4j:configuration (renderer*, appender*,(category|logger)*,root?,
+                               categoryFactory?)>
+
+<!-- The "threshold" attribute takes a level value such that all -->
+<!-- logging statements with a level equal or below this value are -->
+<!-- disabled. -->
+
+<!-- Setting the "debug" enable the printing of internal log4j logging   -->
+<!-- statements.                                                         -->
+
+<!-- By default, debug attribute is "null", meaning that we not do touch -->
+<!-- internal log4j logging settings. The "null" value for the threshold -->
+<!-- attribute can be misleading. The threshold field of a repository	 -->
+<!-- cannot be set to null. The "null" value for the threshold attribute -->
+<!-- simply means don't touch the threshold field, the threshold field   --> 
+<!-- keeps its old value.                                                -->
+     
+<!ATTLIST log4j:configuration
+  xmlns:log4j              CDATA #FIXED "http://jakarta.apache.org/log4j/" 
+  threshold                (all|debug|info|warn|error|fatal|off|null) "null"
+  debug                    (true|false|null)  "null"
+>
+
+<!-- renderer elements allow the user to customize the conversion of  -->
+<!-- message objects to String.                                       -->
+
+<!ELEMENT renderer EMPTY>
+<!ATTLIST renderer
+  renderedClass  CDATA #REQUIRED
+  renderingClass CDATA #REQUIRED
+>
+
+<!-- Appenders must have a name and a class. -->
+<!-- Appenders may contain an error handler, a layout, optional parameters -->
+<!-- and filters. They may also reference (or include) other appenders. -->
+<!ELEMENT appender (errorHandler?, param*, layout?, filter*, appender-ref*)>
+<!ATTLIST appender
+  name 		ID 	#REQUIRED
+  class 	CDATA	#REQUIRED
+>
+
+<!ELEMENT layout (param*)>
+<!ATTLIST layout
+  class		CDATA	#REQUIRED
+>
+
+<!ELEMENT filter (param*)>
+<!ATTLIST filter
+  class		CDATA	#REQUIRED
+>
+
+<!-- ErrorHandlers can be of any class. They can admit any number of -->
+<!-- parameters. -->
+
+<!ELEMENT errorHandler (param*, root-ref?, logger-ref*,  appender-ref?)> 
+<!ATTLIST errorHandler
+   class        CDATA   #REQUIRED 
+>
+
+<!ELEMENT root-ref EMPTY>
+
+<!ELEMENT logger-ref EMPTY>
+<!ATTLIST logger-ref
+  ref IDREF #REQUIRED
+>
+
+<!ELEMENT param EMPTY>
+<!ATTLIST param
+  name		CDATA   #REQUIRED
+  value		CDATA	#REQUIRED
+>
+
+
+<!-- The priority class is org.apache.log4j.Level by default -->
+<!ELEMENT priority (param*)>
+<!ATTLIST priority
+  class   CDATA	#IMPLIED
+  value	  CDATA #REQUIRED
+>
+
+<!-- The level class is org.apache.log4j.Level by default -->
+<!ELEMENT level (param*)>
+<!ATTLIST level
+  class   CDATA	#IMPLIED
+  value	  CDATA #REQUIRED
+>
+
+
+<!-- If no level element is specified, then the configurator MUST not -->
+<!-- touch the level of the named category. -->
+<!ELEMENT category (param*,(priority|level)?,appender-ref*)>
+<!ATTLIST category
+  class         CDATA   #IMPLIED
+  name		CDATA	#REQUIRED
+  additivity	(true|false) "true"  
+>
+
+<!-- If no level element is specified, then the configurator MUST not -->
+<!-- touch the level of the named logger. -->
+<!ELEMENT logger (level?,appender-ref*)>
+<!ATTLIST logger
+  name		ID	#REQUIRED
+  additivity	(true|false) "true"  
+>
+
+
+<!ELEMENT categoryFactory (param*)>
+<!ATTLIST categoryFactory 
+   class        CDATA #REQUIRED>
+
+<!ELEMENT appender-ref EMPTY>
+<!ATTLIST appender-ref
+  ref IDREF #REQUIRED
+>
+
+<!-- If no priority element is specified, then the configurator MUST not -->
+<!-- touch the priority of root. -->
+<!-- The root category always exists and cannot be subclassed. -->
+<!ELEMENT root (param*, (priority|level)?, appender-ref*)>
+
+
+<!-- ==================================================================== -->
+<!--                       A logging event                                -->
+<!-- ==================================================================== -->
+<!ELEMENT log4j:eventSet (log4j:event*)>
+<!ATTLIST log4j:eventSet
+  xmlns:log4j             CDATA #FIXED "http://jakarta.apache.org/log4j/" 
+  version                (1.1|1.2) "1.2" 
+  includesLocationInfo   (true|false) "true"
+>
+
+
+
+<!ELEMENT log4j:event (log4j:message, log4j:NDC?, log4j:throwable?, 
+                       log4j:locationInfo?) >
+
+<!-- The timestamp format is application dependent. -->
+<!ATTLIST log4j:event
+    logger     CDATA #REQUIRED
+    level      CDATA #REQUIRED
+    thread     CDATA #REQUIRED
+    timestamp  CDATA #REQUIRED
+>
+
+<!ELEMENT log4j:message (#PCDATA)>
+<!ELEMENT log4j:NDC (#PCDATA)>
+
+<!ELEMENT log4j:throwable (#PCDATA)>
+
+<!ELEMENT log4j:locationInfo EMPTY>
+<!ATTLIST log4j:locationInfo
+  class  CDATA	#REQUIRED
+  method CDATA	#REQUIRED
+  file   CDATA	#REQUIRED
+  line   CDATA	#REQUIRED
+>
Index: /extensions/jiwigo/release-0.12/src/main/resources/log4j.xml
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/log4j.xml	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/log4j.xml	(revision 6845)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration debug="false" xmlns:log4j="http://jakarta.apache.org/log4j/">
+
+	<!-- Déclaration Appenders -->
+	<appender name="console" class="org.apache.log4j.ConsoleAppender">
+		<layout class="fr.mael.jiwigo.transverse.util.log4j.ConcisePatternLayout">
+			<param name="ConversionPattern" value="[Jiwigo] %4d{yyyy-MM-dd HH:mm:ss} %-5p - %l - %m%n" />
+		</layout>
+	</appender>
+	
+	<appender name="fichier" class="org.apache.log4j.DailyRollingFileAppender">
+		<param name="File" value="logs/jiwigo.log" />
+		<param name="datePattern" value="'.'dd-MM-yyyy" />
+		<param name="Threshold" value="INFO" />
+		<layout class="fr.mael.jiwigo.transverse.util.log4j.ConcisePatternLayout">
+			<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] %m%n" />
+		</layout>
+	</appender>	
+
+
+	<!-- Déclaration loggers -->
+	<logger name="fr.mael.jiwigo" additivity="false">
+		<level value="INFO" />
+		<appender-ref ref="console" />
+		<appender-ref ref="fichier" />
+	</logger>
+	
+
+
+	<root>
+		<level value="INFO" />
+		<appender-ref ref="console" />
+	</root>
+
+</log4j:configuration>
Index: /extensions/jiwigo/release-0.12/src/main/resources/temp.xml
===================================================================
--- /extensions/jiwigo/release-0.12/src/main/resources/temp.xml	(revision 6845)
+++ /extensions/jiwigo/release-0.12/src/main/resources/temp.xml	(revision 6845)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<rsp stat="ok">
+	<image id="83" file="SNC00223.jpg" date_available="2010-08-24 21:44:09"
+		date_creation="0000-00-00" tn_ext="jpg" author="Danièle" hit="3"
+		filesize="205" width="640" height="480" date_metadata_update="2010-08-24"
+		level="0" md5sum="a0bdd501070f75fce94e7007d5dfbd8c"
+		tn_url="http://www.le-guevel.com/piwigo/upload/2010/08/24/thumbnail/TN-20100824214409-8fb71afd.jpg"
+		element_url="http://www.le-guevel.com/piwigo/upload/2010/08/24/20100824214409-8fb71afd.jpg">
+		<name>SNC00223</name>
+		<rates count="0" average="" />
+		<categories>
+			<category id="25"
+				url="http://www.le-guevel.com/piwigo/index.php?/category/25"
+				page_url="http://www.le-guevel.com/piwigo/picture.php?/83/category/25">
+				<name>Gouesnach</name>
+				<uppercats>21,25</uppercats>
+				<global_rank>2.2</global_rank>
+			</category>
+		</categories>
+		<tags />
+		<comment_post author="admin"
+			key="1283118169:7e9b8049cd926362bb217d7b3316d10b" />
+		<comments page="0" per_page="10" count="3" nb_comments="3">
+			<comment id="1" date="2010-08-28 21:41:04">
+				<author>admin</author>
+				<content>Test d'un commentaire</content>
+			</comment>
+			<comment id="2" date="2010-08-28 22:06:43">
+				<author>admin</author>
+				<content>Test d'un commentaire 2</content>
+			</comment>
+			<comment id="3" date="2010-08-28 22:29:22">
+				<author>admin</author>
+				<content>Test d'un commentaire 3</content>
+			</comment>
+		</comments>
+	</image>
+</rsp>
