Simexplorer-si-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- 1607 discussions
Author: glandais
Date: 2008-01-10 16:07:29 +0000 (Thu, 10 Jan 2008)
New Revision: 112
Added:
trunk/simexplorer-is/
Removed:
trunk/simexplorer-si/
Log:
Standardisation nom projet
Copied: trunk/simexplorer-is (from rev 111, trunk/simexplorer-si)
1
0
r111 - in trunk: simexplorer-is-service simexplorer-si-storage
by glandais@users.labs.libre-entreprise.org 10 Jan '08
by glandais@users.labs.libre-entreprise.org 10 Jan '08
10 Jan '08
Author: glandais
Date: 2008-01-10 16:01:50 +0000 (Thu, 10 Jan 2008)
New Revision: 111
Modified:
trunk/simexplorer-is-service/pom.xml
trunk/simexplorer-si-storage/pom.xml
Log:
MAJ poms
Modified: trunk/simexplorer-is-service/pom.xml
===================================================================
--- trunk/simexplorer-is-service/pom.xml 2008-01-10 16:00:55 UTC (rev 110)
+++ trunk/simexplorer-is-service/pom.xml 2008-01-10 16:01:50 UTC (rev 111)
@@ -1,53 +1,71 @@
-<?xml version="1.0" encoding="UTF-8"?><project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>simexplorer-is</groupId>
- <artifactId>simexplorer-is-service</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <description></description>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>org.testng</groupId>
- <artifactId>testng</artifactId>
- <version>5.1</version>
- <classifier>jdk15</classifier>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>simexplorer-is</groupId>
- <artifactId>simexplorer-is-entities</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>simexplorer-is</groupId>
- <artifactId>simexplorer-is-storage</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>com.healthmarketscience.rmiio</groupId>
- <artifactId>rmiio</artifactId>
- <version>2.0.0</version>
- </dependency>
- <dependency>
- <groupId>jboss</groupId>
- <artifactId>jboss-ejb3x</artifactId>
- <version>4.2.2.GA</version>
- </dependency>
- </dependencies>
-</project>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-service</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <description></description>
+ <packaging>ejb</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-ejb-plugin</artifactId>
+ <configuration>
+ <ejbVersion>3.0</ejbVersion>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <configuration>
+ <useProjectReferences>true</useProjectReferences>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.1</version>
+ <classifier>jdk15</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.healthmarketscience.rmiio</groupId>
+ <artifactId>rmiio</artifactId>
+ <version>2.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-storage</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3x</artifactId>
+ <version>4.2.2.GA</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-annotations-ejb3</artifactId>
+ <version>4.2.2.GA</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
Modified: trunk/simexplorer-si-storage/pom.xml
===================================================================
--- trunk/simexplorer-si-storage/pom.xml 2008-01-10 16:00:55 UTC (rev 110)
+++ trunk/simexplorer-si-storage/pom.xml 2008-01-10 16:01:50 UTC (rev 111)
@@ -5,6 +5,7 @@
<artifactId>simexplorer-is-storage</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description></description>
+ <packaging>jar</packaging>
<build>
<plugins>
<plugin>
@@ -20,6 +21,15 @@
<target>1.5</target>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <configuration>
+ <eclipse.useProjectReferences>
+ true
+ </eclipse.useProjectReferences>
+ </configuration>
+ </plugin>
</plugins>
</build>
<dependencies>
@@ -31,11 +41,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>simexplorer-is</groupId>
- <artifactId>simexplorer-is-entities</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
- <dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>2.2.0</version>
@@ -45,6 +50,10 @@
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
-
+ <dependency>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-entities</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
1
0
r110 - in trunk/simexplorer-si/src: . site/fr/rst/devel site/fr/rst/devel/screenshots xmi xmi/images
by glandais@users.labs.libre-entreprise.org 10 Jan '08
by glandais@users.labs.libre-entreprise.org 10 Jan '08
10 Jan '08
Author: glandais
Date: 2008-01-10 16:00:55 +0000 (Thu, 10 Jan 2008)
New Revision: 110
Added:
trunk/simexplorer-si/src/simexplore-is.xsd
trunk/simexplorer-si/src/simexplorer-is.xml
trunk/simexplorer-si/src/site/fr/rst/devel/architecture.abw
trunk/simexplorer-si/src/site/fr/rst/devel/architecture.rst
trunk/simexplorer-si/src/site/fr/rst/devel/architecture.xhtml
trunk/simexplorer-si/src/site/fr/rst/devel/authorization.jpg
trunk/simexplorer-si/src/site/fr/rst/devel/authorization.uxf
trunk/simexplorer-si/src/site/fr/rst/devel/developpement.abw
trunk/simexplorer-si/src/site/fr/rst/devel/diagramme1.dia
trunk/simexplorer-si/src/site/fr/rst/devel/diagramme1.png
trunk/simexplorer-si/src/site/fr/rst/devel/implementation.rst
trunk/simexplorer-si/src/site/fr/rst/devel/migration.rst
trunk/simexplorer-si/src/site/fr/rst/devel/nok.png
trunk/simexplorer-si/src/site/fr/rst/devel/ok.png
trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/
trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-1.png
trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-2.png
trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-3.png
trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-4.png
trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-5.png
trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot.png
trunk/simexplorer-si/src/site/fr/rst/devel/sequence1.uxf
trunk/simexplorer-si/src/site/fr/rst/devel/template.uxf
trunk/simexplorer-si/src/site/fr/rst/devel/uok.png
trunk/simexplorer-si/src/site/fr/rst/devel/version.uxf
trunk/simexplorer-si/src/test.xml
trunk/simexplorer-si/src/test.xsd
trunk/simexplorer-si/src/xmi/images/applications.png
trunk/simexplorer-si/src/xmi/images/authorization.png
trunk/simexplorer-si/src/xmi/images/storage.png
trunk/simexplorer-si/src/xmi/specsSI.xmi
Modified:
trunk/simexplorer-si/src/xmi/images/data.png
trunk/simexplorer-si/src/xmi/images/entities.png
trunk/simexplorer-si/src/xmi/simexplorer-si.zargo
Log:
Documents de travail
Added: trunk/simexplorer-si/src/simexplore-is.xsd
===================================================================
Added: trunk/simexplorer-si/src/simexplorer-is.xml
===================================================================
Added: trunk/simexplorer-si/src/site/fr/rst/devel/architecture.abw
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/architecture.abw (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/architecture.abw 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,420 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE abiword PUBLIC "-//ABISOURCE//DTD AWML 1.0 Strict//EN" "http://www.abisource.com/awml.dtd">
+<abiword template="false" version="2.4.6" xmlns:svg="http://www.w3.org/2000/svg" xid-max="480" xmlns:dc="http://purl.org/dc/elements/1.1/" fileformat="1.1" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:awml="http://www.abisource.com/awml.dtd" xmlns="http://www.abisource.com/awml.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" props="dom-dir:ltr; document-footnote-restart-section:0; document-endnote-type:numeric; document-endnote-place-enddoc:1; document-endnote-initial:1; lang:fr-FR; document-endnote-restart-section:0; document-footnote-restart-page:0; document-footnote-type:numeric; document-footnote-initial:1; document-endnote-place-endsection:0">
+<!-- ======================================================================== -->
+<!-- This file is an AbiWord document. -->
+<!-- AbiWord is a free, Open Source word processor. -->
+<!-- More information about AbiWord is available at http://www.abisource.com/ -->
+<!-- You should not edit this file by hand. -->
+<!-- ======================================================================== -->
+
+<metadata>
+<m key="dc.format">application/x-abiword</m>
+<m key="abiword.generator">AbiWord</m>
+</metadata>
+<history version="60" edit-time="56556" last-saved="1196101722" uid="e5b61a06-9845-11dc-84e0-f93525e6000d">
+<version id="1" started="1195658750" uid="0abf655a-9846-11dc-84e0-f93525e6000d" auto="0" top-xid="328"/>
+<version id="3" started="1195658775" uid="55ff20f0-984b-11dc-97cb-8f99009bf653" auto="0" top-xid="330"/>
+<version id="11" started="1195723478" uid="2b673fac-990a-11dc-8d16-acd61ab3f596" auto="0" top-xid="332"/>
+<version id="14" started="1195813646" uid="5d32eb8a-99af-11dc-8b35-982ad6d9719b" auto="0" top-xid="437"/>
+<version id="60" started="1196067628" uid="6a36dbb6-9c4d-11dc-9e05-9e041a8dd754" auto="0" top-xid="468"/>
+</history>
+<styles>
+<s type="P" name="Normal" followedby="Current Settings" props="font-family:Times New Roman; margin-top:0pt; text-align:left; font-variant:normal; margin-left:0pt; bgcolor:transparent; widows:2; font-style:normal; text-indent:0in; text-position:normal; font-weight:normal; margin-right:0pt; font-size:12pt; margin-bottom:0pt; text-decoration:none; line-height:1.0; color:000000; lang:fr-FR; font-stretch:normal"/>
+<s type="C" name="Reference" props="font-size:10pt"/>
+</styles>
+<pagesize pagetype="Custom" orientation="portrait" width="17.715278" height="11.691667" units="in" page-scale="1.000000"/>
+<section xid="1" props="page-margin-right:25.4mm; columns:1; page-margin-header:0.0mm; page-margin-left:25.4mm; page-margin-footer:0.0mm; page-margin-top:25.4mm; page-margin-bottom:25.4mm">
+<p style="Normal" xid="2"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">=======================================</c></p>
+<p style="Normal" xid="3" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">SimExplorer SI - Dossier d'architecture</c></p>
+<p style="Normal" xid="4"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">=======================================</c></p>
+<p style="Normal" xid="5"></p>
+<p style="Normal" xid="6" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. contents:: :depth: 3</c></p>
+<p style="Normal" xid="7" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. sectnum::</c></p>
+<p style="Normal" xid="8"></p>
+<p style="Normal" xid="9" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Introduction</c></p>
+<p style="Normal" xid="10"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">============</c></p>
+<p style="Normal" xid="11"></p>
+<p style="Normal" xid="12" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Ce document détaille la solution proposée en réponse à la demande d'un outil d'exploration de simulation.</c></p>
+<p style="Normal" xid="13"></p>
+<p style="Normal" xid="14" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Architecture conceptuelle</c></p>
+<p style="Normal" xid="15"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">=========================</c></p>
+<p style="Normal" xid="16"></p>
+<p style="Normal" xid="17" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Rappel des fonctions de l'application</c></p>
+<p style="Normal" xid="18"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">-------------------------------------</c></p>
+<p style="Normal" xid="19"></p>
+<p style="Normal" xid="20" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'application permet l'utilisation d'outils de simulation dans un environnement multi-utilisateurs. Un mode client léger met à disposition la gestion des utilisateurs et la consultation des paramÚtres des simulations. Ce mode est accessible avec un simple navigateur. Avec un logiciel fourni (nommé aussi client lourd), l'utilisateur peut de même gérer les utilisateurs, mais aussi les simulations afin de les lancer. Une fonction de synchronisation met à jour les données locales par rapport aux données centralisées.</c></p>
+<p style="Normal" xid="21"></p>
+<p style="Normal" xid="22" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Chaque fonction est limitée en fonction des droits de l'utilisateur connecté. Cet utilisateur, en fonction des groupes auxquels il appartient, obtient des droits sur les simulations et les utilisateurs (création, modification, suppression).</c></p>
+<p style="Normal" xid="23"></p>
+<p style="Normal" xid="24" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les modifications des paramÚtres des simulations sont sauvegardé afin de conserver un historique. Cet historique se synchronise avec les données centralisées et les données de l'utilisateur.</c></p>
+<p style="Normal" xid="25"></p>
+<p style="Normal" xid="26" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Décomposition de l'application en modules</c></p>
+<p style="Normal" xid="27"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">-----------------------------------------</c></p>
+<p style="Normal" xid="28"></p>
+<p style="Normal" xid="29" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'authentification s'appuie sur un module unique. Celui ci permet d'authentifier les utilisateurs se connectant via le client léger ou le client lourd. Un premier niveau impératif nécessite l'appartenance de l'utilisateur à un groupe destiné à contenir les accrédités à utiliser l'application. Ce module fourni aussi les groupes d'appartenance d'un utilisateur, afin de déterminer ses droits. Enfin, ce module permet l'édition des utilisateurs et des groupes par les utilisateurs avec pouvoir.</c></p>
+<p style="Normal" xid="30"></p>
+<p style="Normal" xid="31" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les autorisations sont gérées conjointement avec l'authentification. Une simulation a des droits associés en fonction de son propriétaire et son groupe d'appartenance. Ses droits sont décorélés des données métier, seul un identifiant technique permet aux services d'interroger le module d'autorisation afin de valider l'accÚs à une simulation. Le niveau de granularité des droits est similaire à la gestion des modes sur les fichiers. Les droits sur les actions création/modification/exécution sont alloués en fonction de l'utilisateur/groupe/autre.</c></p>
+<p style="Normal" xid="32"></p>
+<p style="Normal" xid="33" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le stockage est un module dupliqué à la fois sur le serveur gérant les données centralisées et sur chaque client lourd. Celui-ci a la charge de conserver les données dans une base, et de stocker les données volumineuses dans le systÚme de fichier. Il est capable de persister les objets utilisés par l'application. Un mécanisme de synchronisation permet de mettre à jour les données locales et les données centralisées en fonction de rÚgles de gestion de versionnement.</c></p>
+<p style="Normal" xid="34"></p>
+<p style="Normal" xid="35" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">La logique métier de l'application est contenue dans des services. Ceux ci peuvent être exécutés localement, lors de l'exécution d'une simulation sur le client lourd par exemple. Certains services sont présents uniquement sur le serveur, parce qu'ils nécessitent les modules d'autorisation et les données centralisées. Le client lourd fait alors appel à ces services dans un mode appel distant.</c></p>
+<p style="Normal" xid="36"></p>
+<p style="Normal" xid="37" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le module d'interface est composé de deux parties. CÎté serveur, l'utilisateur accÚde avec un navigateur Internet standard à l'application. Les pages sont servies par un serveur web utilisant un contrÎleur. Celui ci interagit avec les services afin de présenter les données à l'utilisateur. CÎté client, l'interface graphique s'appuie aussi sur un contrÎleur utilisant les services.</c></p>
+<p style="Normal" xid="38"></p>
+<p style="Normal" xid="39"></p>
+<p style="Normal" xid="40" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Exigences et contraintes</c></p>
+<p style="Normal" xid="41"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">------------------------</c></p>
+<p style="Normal" xid="42"></p>
+<p style="Normal" xid="43" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Contraintes d'urbanisme</c></p>
+<p style="Normal" xid="44"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_______________________</c></p>
+<p style="Normal" xid="45"></p>
+<p style="Normal" xid="46" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le client lourd doit s'intégrer dans SimExplorer RCP.</c></p>
+<p style="Normal" xid="47"></p>
+<p style="Normal" xid="48" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les services déployés sur le serveur et mis à disposition du client lourd doivent pouvoir être réutilisés par des applications tierces.</c></p>
+<p style="Normal" xid="49"></p>
+<p style="Normal" xid="50" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le serveur doit être en mesure de lancer des simulations et de récupérer les résultats.</c></p>
+<p style="Normal" xid="51"></p>
+<p style="Normal" xid="52" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Exigences et contraintes liées à des fonctionnalités particuliÚres</c></p>
+<p style="Normal" xid="53"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________________________________________________________________</c></p>
+<p style="Normal" xid="54"></p>
+<p style="Normal" xid="55" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Un serveur d'authentification.existant pourra être réutilisé dans la mesure où il est accessible via des protocoles standards. Une note précisant le fonctionnement de ce serveur devra être fourni afin de rendre possible son utilisation. ex : LDAP</c></p>
+<p style="Normal" xid="56"></p>
+<p style="Normal" xid="57" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les appels de lancement des simulations devra être formalisés dans une note. Ceux ci pourront alors être intégrés dans les services.</c></p>
+<p style="Normal" xid="58"></p>
+<p style="Normal" xid="59" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'authentification implique l'établissement d'une connexion sécurisée entre le client et le serveur, afin de ne pas faire passer en clair les mots de passe sur le réseau. Le serveur disposera d'un certificat afin de crypter les flux.</c></p>
+<p style="Normal" xid="60"></p>
+<p style="Normal" xid="61" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Contraintes d'ergonomie</c></p>
+<p style="Normal" xid="62"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_______________________</c></p>
+<p style="Normal" xid="63"></p>
+<p style="Normal" xid="64" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'application web se doit d'être compatible avec les navigateurs récents : Firefox2+ et IE6+.</c></p>
+<p style="Normal" xid="331" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="332" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'application client lourd est un application standard type bureautique, et doit être compatible avec le maximum de plateformes. Le lancement de l'application doit se faire simplement par un raccourci.</c></p>
+<p style="Normal" xid="65"></p>
+<p style="Normal" xid="66" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Volumétrie</c></p>
+<p style="Normal" xid="67"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________</c></p>
+<p style="Normal" xid="68"></p>
+<p style="Normal" xid="69" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les données associées aux simulations sont parfois trÚs volumineuses (>100Mo). Ces données doivent être stockées en local mais aussi sur le serveur, avec des transferts entre le client et le serveur.</c></p>
+<p style="Normal" xid="70"></p>
+<p style="Normal" xid="71" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Contraintes et exigences liées à l'exploitation</c></p>
+<p style="Normal" xid="72"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_______________________________________________</c></p>
+<p style="Normal" xid="73"></p>
+<p style="Normal" xid="74" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Lors de la mise à jour de l'application, la base de données doit être synchrone avec l'applicatif. De même, le client lourd doit être à jour par rapport à la version déployée sur le serveur.</c></p>
+<p style="Normal" xid="75"></p>
+<p style="Normal" xid="76" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les données doivent pouvoir être simplement sauvegardées et restaurées.</c></p>
+<p style="Normal" xid="77"></p>
+<p style="Normal" xid="78" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Architecture logique</c></p>
+<p style="Normal" xid="79"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">====================</c></p>
+<p style="Normal" xid="80"></p>
+<p style="Normal" xid="81" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Schéma d'architecture logique</c></p>
+<p style="Normal" xid="82"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">-----------------------------</c></p>
+<p style="Normal" xid="83"></p>
+<p style="Normal" xid="84" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image::</c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> diagramme1.png</c></p>
+<p style="Normal" xid="85" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="87" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Description des flux</c></p>
+<p style="Normal" xid="88"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">--------------------</c></p>
+<p style="Normal" xid="89"></p>
+<p style="Normal" xid="90" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. Serveur web</c></p>
+<p style="Normal" xid="91"></p>
+<p style="Normal" xid="92" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> L'interface client léger passe par ce flux. L'authentification se fera en HTTPS, le reste de l'application pourra être au choix en HTTP ou en HTTPS. Le contenu sera constitué de pages XHTML compatibles avec les navigateurs récents.</c></p>
+<p style="Normal" xid="93"></p>
+<p style="Normal" xid="94" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. Interface client lourd</c></p>
+<p style="Normal" xid="95"></p>
+<p style="Normal" xid="96" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> C'est à travers ce canal que l'utilisateur interagit avec l'application.</c></p>
+<p style="Normal" xid="97"></p>
+<p style="Normal" xid="98" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. Serveur d'authentification</c></p>
+<p style="Normal" xid="99"></p>
+<p style="Normal" xid="100" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> Le framework d'authentification utilise un serveur externe afin d'authentifier les utilisateurs. Ce flux dépend du serveur.</c></p>
+<p style="Normal" xid="101"></p>
+<p style="Normal" xid="102" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. Autorisations</c></p>
+<p style="Normal" xid="103"></p>
+<p style="Normal" xid="104" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> Toutes les informations relatives à la protection des accÚs aux simulations sont retrouvées via ce lien vers une base de données.</c></p>
+<p style="Normal" xid="105"></p>
+<p style="Normal" xid="106" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. Persistance cÎté serveur</c></p>
+<p style="Normal" xid="107"></p>
+<p style="Normal" xid="108" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> Les objets sont stockés dans une base de donnée à travers ce flux.</c></p>
+<p style="Normal" xid="109"></p>
+<p style="Normal" xid="110" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. Persistance cÎté client</c></p>
+<p style="Normal" xid="111"></p>
+<p style="Normal" xid="112" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> De même, les objets sont stockés dans une base de données. Nous sommes ici en présence d'une base de données embarquée, afin de rendre le client lourd autonome.</c></p>
+<p style="Normal" xid="113"></p>
+<p style="Normal" xid="114" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. SystÚme de fichiers serveur</c></p>
+<p style="Normal" xid="115"></p>
+<p style="Normal" xid="116" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> Les données volumineuses sont stockées dans le systÚme de fichier plutÎt que dans la base.</c></p>
+<p style="Normal" xid="117"></p>
+<p style="Normal" xid="118" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. SystÚme de fichiers client</c></p>
+<p style="Normal" xid="119"></p>
+<p style="Normal" xid="120" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> De la même façon que sur le serveur, les données sont stockées sous forme de fichiers dans le systÚme de fichier de l'utilisateur.</c></p>
+<p style="Normal" xid="121"></p>
+<p style="Normal" xid="122" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> #. Services distants</c></p>
+<p style="Normal" xid="123"></p>
+<p style="Normal" xid="124" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> La communication entre le client lourd et le serveur passe par ce flux. Celui ci est crypté et intégré à haut niveau dans l'application. Les appels de service se font de façon transparente, de façon similaire à un appel local.</c></p>
+<p style="Normal" xid="125"></p>
+<p style="Normal" xid="126"></p>
+<p style="Normal" xid="127" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Initialisation des entrepÎts de données</c></p>
+<p style="Normal" xid="128"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">---------------------------------------</c></p>
+<p style="Normal" xid="129"></p>
+<p style="Normal" xid="130" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Pour l'authentification, un groupe d'utilisateur doit être créé afin d'accueillir les personnes accréditées. De plus, un groupe d'administrateur avec un utilisateur doit exister afin de permettre l'administration des utilisateurs. Ces deux groupes seront à spécifier lors de l'installation.</c></p>
+<p style="Normal" xid="131"></p>
+<p style="Normal" xid="132" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Si l'application doit utiliser un serveur d'authentification existant, le groupe des administrateurs doit avoir les droits de lister les utilisateurs amenés à être ajouté aux personnes accréditées.</c></p>
+<p style="Normal" xid="133"></p>
+<p style="Normal" xid="134" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les bases de données d'autorisation et de stockage peuvent être initialisés lors du lancement de l'application de façon automatique. Si les droits de création de table et de champs n'est pas autorisé pour l'application, un script doit être exécuté avant le déploiement d'une nouvelle version afin de mettre à jour la base et migrer les données.</c></p>
+<p style="Normal" xid="135"></p>
+<p style="Normal" xid="136" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">CÎté client, le problÚme ne se pose pas, la base de données est embarquée dans l'application.</c></p>
+<p style="Normal" xid="137"></p>
+<p style="Normal" xid="138" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les modules de l'application</c></p>
+<p style="Normal" xid="139"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">----------------------------</c></p>
+<p style="Normal" xid="140"></p>
+<p style="Normal" xid="141" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le module authentification</c></p>
+<p style="Normal" xid="142"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________________________</c></p>
+<p style="Normal" xid="143"></p>
+<p style="Normal" xid="144" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">La technologie JAAS (Java Authentication and Authorization Service) a été retenue. La partie autorisation est utilisée uniquement pour valider l'accÚs de l'utilisateur authentifié à l'application.</c></p>
+<p style="Normal" xid="145"></p>
+<p style="Normal" xid="146" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Plusieurs méthodes d'authentification sont déjà implantées (login/mot de passe/groupes dans une base de données avec JDBC, LDAP, ...).</c></p>
+<p style="Normal" xid="147"></p>
+<p style="Normal" xid="148" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les modules services</c></p>
+<p style="Normal" xid="149"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">____________________</c></p>
+<p style="Normal" xid="150"></p>
+<p style="Normal" xid="151" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les services sont contenus dans des EJB (Entreprise Java Bean). Chaque service est un composant disposant d'outils facilitant la mise en oeuvre des transactions et la distribution.</c></p>
+<p style="Normal" xid="152"></p>
+<p style="Normal" xid="153" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Ces services sont destinés à contenir toute la logique métier.</c></p>
+<p style="Normal" xid="154"></p>
+<p style="Normal" xid="155" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Les services contiennent aussi le contexte d'authentification de l'appelant.</c></p>
+<p style="Normal" xid="156"></p>
+<p style="Normal" xid="157" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le module autorisation </c></p>
+<p style="Normal" xid="158"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">______________________</c></p>
+<p style="Normal" xid="159"></p>
+<p style="Normal" xid="160" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Grâce au contexte d'authentification des EJB, les appels au module d'autorisation vont sécurisés les accÚs aux données.</c></p>
+<p style="Normal" xid="161"></p>
+<p style="Normal" xid="162" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le module stockage</c></p>
+<p style="Normal" xid="163"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________________</c></p>
+<p style="Normal" xid="164"></p>
+<p style="Normal" xid="165" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Ce module repose en grande partie sur la technologie JPA (Java Persistence API). Elle permet un mapping entre les objets et la base de données de façon transparente et interropérable. Le choix de la base de données n'est alors plus vérouillé, de nombreux systÚmes étant compatibles. Afin de gérer les volumétries associées aux simulations, certaines propriétés seront stockées sur le disque dur.</c></p>
+<p style="Normal" xid="166"></p>
+<p style="Normal" xid="167" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Lors de l'accÚs à une donnée, le module gérant les autorisations est appelé afin de vérifier les droits. De même, lorsque l'utilisateur crée une nouvelle entité, les droits lui sont associés via ce service.</c></p>
+<p style="Normal" xid="168"></p>
+<p style="Normal" xid="169" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le module interface</c></p>
+<p style="Normal" xid="170"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">___________________</c></p>
+<p style="Normal" xid="171"></p>
+<p style="Normal" xid="172" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">CÎté client léger, le site est réalisé avec Tapestry 5. Ce framework apporte le développement orienté objet au applications web. De nombreuses fonctionnalités sont incluses et facilitent le développement.</c></p>
+<p style="Normal" xid="173"></p>
+<p style="Normal" xid="174" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">CÎté client lourd, le framework JAXX est utilisé. Ce framework transforme des XML décrivant l'interface en classes Java.</c></p>
+<p style="Normal" xid="175"></p>
+<p style="Normal" xid="474"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Développement de l'application</c></p>
+<p style="Normal" xid="177"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">------------------------------</c></p>
+<p style="Normal" xid="178"></p>
+<p style="Normal" xid="179" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Lors de la construction de Simexplorer SI, nous utilisons le framework ToPIA ainsi que différents outils développés par Code Lutin. Ceux ci sont tous sous licence LGPL.</c></p>
+<p style="Normal" xid="180"></p>
+<p style="Normal" xid="181" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">A partir du modÚle conceptuel, le process de développement génÚre une partie de l'application, entre autre sous la forme d'interfaces à implémenter. Nous obtenons alors :</c></p>
+<p style="Normal" xid="182" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> - les entités persistées</c></p>
+<p style="Normal" xid="183" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> - les interfaces des services</c></p>
+<p style="Normal" xid="184" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt"> - les interfaces des composants des pages web</c></p>
+<p style="Normal" xid="185"></p>
+<p style="Normal" xid="186"></p>
+<p style="Normal" xid="187" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Architecture physique</c></p>
+<p style="Normal" xid="188"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">=====================</c></p>
+<p style="Normal" xid="189"></p>
+<p style="Normal" xid="190" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Architecture logicielle</c></p>
+<p style="Normal" xid="191"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">-----------------------</c></p>
+<p style="Normal" xid="192"></p>
+<p style="Normal" xid="193" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'ensemble de l'application est développée avec le langage Java. La version de référence lors du développement de l'application est JRE 6 Update 3.</c></p>
+<p style="Normal" xid="194"></p>
+<p style="Normal" xid="195" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Serveur Web</c></p>
+<p style="Normal" xid="196"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">___________</c></p>
+<p style="Normal" xid="197"></p>
+<p style="Normal" xid="198" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Le serveur web est constitué d'un Apache 2.2. Le module mod_proxy_ajp permet de ne pas lancer le serveur d'application en root et d'avoir accÚs au port HTTP et HTTPS.</c></p>
+<p style="Normal" xid="200"></p>
+<p style="Normal" xid="201" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Serveur Applicatif</c></p>
+<p style="Normal" xid="202"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________________</c></p>
+<p style="Normal" xid="203"></p>
+<p style="Normal" xid="204"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="205" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">| |JBoss 4.2.2 GA |Geronimo JEE5 2.0.2 |JOnAS 5.0 M1 |GlassFish V2 |</c></p>
+<p style="Normal" xid="206"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+========================+========================+========================+========================+========================+</c></p>
+<p style="Normal" xid="207" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|EJB3 | |ok| [#jba]_ | |ok| [#grc]_ | |ok| [#joa]_ | |uok| |</c></p>
+<p style="Normal" xid="208"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="209" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- RemoteBinding | |ok| [#jbb]_ | |ok| [#grd]_ | |uok| | |uok| |</c></p>
+<p style="Normal" xid="210"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="211" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- SSL | |ok| [#jbc]_ | |ok| [#gra]_ | |uok| | |ok| [#gfd]_ |</c></p>
+<p style="Normal" xid="212"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="213" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- SecurityDomain | |ok| [#jbd]_ | |uok| | |ok| [#joc]_ | |ok| [#gfe]_ |</c></p>
+<p style="Normal" xid="214"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="215" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- WebService | |ok| [#jbe]_ | |ok| [#gre]_ | |ok| [#job]_ | |ok| [#gfa]_ |</c></p>
+<p style="Normal" xid="216"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="217" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">| * Sécurisé | |ok| [#jbe]_ | |uok| [#gre]_ | |uok| | |ok| [#gff]_ |</c></p>
+<p style="Normal" xid="218"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="219" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">| * WebServiceContext | |ok| [#jbe]_ | |ok| [#gre]_ | |ok| [#job]_ | |uok| |</c></p>
+<p style="Normal" xid="220"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="221" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- SessionContext | |uok| | |uok| | |uok| | |uok| |</c></p>
+<p style="Normal" xid="222"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="223" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|JPA | |ok| [#jbf]_ | |ok| [#grf]_ | |ok| [#jof]_ | |ok| [#gfb]_ |</c></p>
+<p style="Normal" xid="224"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="225" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- XML datasource | |ok| [#jbg]_ | |ok| [#grj]_ | |ok| [#joe]_ | |uok| |</c></p>
+<p style="Normal" xid="226"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="227" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- persistence.xml | |ok| [#jbh]_ | |ok| [#grg]_ | |ok| [#jog]_ | |uok| |</c></p>
+<p style="Normal" xid="228"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="229" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- orm.xml | |uok| | |ok| [#grh]_ | |ok| [#joh]_ | |ok| [#gfc]_ |</c></p>
+<p style="Normal" xid="230"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="231" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|Servlet | |ok| [#jbi]_ | |ok| [#gri]_ | |uok| | |uok| |</c></p>
+<p style="Normal" xid="232"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="233" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|- JAAS | |ok| [#jbj]_ | |ok| [#grb]_ | |ok| [#jod]_ | |uok| |</c></p>
+<p style="Normal" xid="234"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="235" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">|Corba | |uok| | |uok| | |uok| | |uok| |</c></p>
+<p style="Normal" xid="236"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">+------------------------+------------------------+------------------------+------------------------+------------------------+</c></p>
+<p style="Normal" xid="237"></p>
+<p style="Normal" xid="238" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. |ok| image:: ok.png</c></p>
+<p style="Normal" xid="239" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. |nok| image:: nok.png</c></p>
+<p style="Normal" xid="240" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. |uok| image:: uok.png</c></p>
+<p style="Normal" xid="241"></p>
+<p style="Normal" xid="242" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jba] http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/ind…</c></p>
+<p style="Normal" xid="243" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbb] http://docs.jboss.org/ejb3/app-server/tutorial/jndibinding/jndi.html</c></p>
+<p style="Normal" xid="244" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbc] http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/tra…</c></p>
+<p style="Normal" xid="245" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbd] http://docs.jboss.org/ejb3/app-server/tutorial/security/security.html</c></p>
+<p style="Normal" xid="246" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbe] http://labs.jboss.com/jbossws/docs/jaxws_userguide-2.0/index.html</c></p>
+<p style="Normal" xid="247" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbf] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</c></p>
+<p style="Normal" xid="248" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbg] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</c></p>
+<p style="Normal" xid="249" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbh] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</c></p>
+<p style="Normal" xid="250" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbi] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Get…</c></p>
+<p style="Normal" xid="251" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jbj] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</c></p>
+<p style="Normal" xid="252"></p>
+<p style="Normal" xid="253" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#grc] http://openejb.apache.org/</c></p>
+<p style="Normal" xid="254" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#grd] http://openejb.apache.org/jndi-names.html</c></p>
+<p style="Normal" xid="255" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gra] http://www.ibm.com/developerworks/opensource/library/os-ag-corba1/</c></p>
+<p style="Normal" xid="256" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gre] http://cwiki.apache.org/GMOxPMGT/geronimo-20-web-services-support.html</c></p>
+<p style="Normal" xid="257" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#grf] http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…</c></p>
+<p style="Normal" xid="258" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#grj] http://cwiki.apache.org/GMOxDOC11/geronimo-connector-11xsd.html#geronimo-co…</c></p>
+<p style="Normal" xid="259" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#grg] http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…</c></p>
+<p style="Normal" xid="260" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#grh] http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…</c></p>
+<p style="Normal" xid="261" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gri] http://cwiki.apache.org/GMOxKB/jetty-or-tomcat.html</c></p>
+<p style="Normal" xid="262" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#grb] http://www.ibm.com/developerworks/opensource/library/os-ag-security/</c></p>
+<p style="Normal" xid="263"></p>
+<p style="Normal" xid="264" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#joa] http://www.easybeans.org/doc/userguide/en/chunk-integrated/ejb3_introductio…</c></p>
+<p style="Normal" xid="265" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#joc] http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…</c></p>
+<p style="Normal" xid="266" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#job] http://wiki.easybeans.org/xwiki/bin/view/Main/JAXWS</c></p>
+<p style="Normal" xid="267"></p>
+<p style="Normal" xid="268" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jof] http://www.jpox.org/docs/jpa/index.html</c></p>
+<p style="Normal" xid="269" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#joe] http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…</c></p>
+<p style="Normal" xid="270" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jog] http://www.jpox.org/docs/jpa/persistence_xml.html</c></p>
+<p style="Normal" xid="271" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#joh] http://www.jpox.org/docs/jpa/orm_xml.html</c></p>
+<p style="Normal" xid="272"></p>
+<p style="Normal" xid="273" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#jod] http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…</c></p>
+<p style="Normal" xid="274"></p>
+<p style="Normal" xid="275" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gfd] http://blogs.sun.com/swchan/entry/enterprise_java_bean_over_ssl</c></p>
+<p style="Normal" xid="276" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gfe] http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/</c></p>
+<p style="Normal" xid="277" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gfa] http://wiki.glassfish.java.net/Wiki.jsp?page=WebServicesTechnologies</c></p>
+<p style="Normal" xid="278" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gff] https://glassfish.dev.java.net/javaee5/docs/AG/ablrk.html#ablry</c></p>
+<p style="Normal" xid="279" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gfb] https://glassfish.dev.java.net/javaee5/persistence/</c></p>
+<p style="Normal" xid="280" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. [#gfc] https://glassfish.dev.java.net/javaee5/persistence/persistence_faq.html#5</c></p>
+<p style="Normal" xid="281"></p>
+<p style="Normal" xid="282" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="285" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">SGBD</c></p>
+<p style="Normal" xid="286"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">____</c></p>
+<p style="Normal" xid="287"></p>
+<p style="Normal" xid="288" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Pour la base sur le serveur, les performances et la stabilité de PostgreSQL ont été retenues. CÎté client lourd, la base de donnée embarquée H2 est utilisée. Un export XML sera réalisé pour l'interopérabilité.</c></p>
+<p style="Normal" xid="289"></p>
+<p style="Normal" xid="290"></p>
+<p style="Normal" xid="291" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Choix technologiques transverses</c></p>
+<p style="Normal" xid="292"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">________________________________</c></p>
+<p style="Normal" xid="293"></p>
+<p style="Normal" xid="294" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Dans la perspective de réutilisation, les services publiés utiliseront des protocoles standardisés et inter opérables, afin de ne pas limiter le choix du langage.</c></p>
+<p style="Normal" xid="295"></p>
+<p style="Normal" xid="296" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">La technologie ... a été choisie pour son support de la sécurité et son utilisation courante dans différents langages et sur différents systÚmes d'exploitation.</c></p>
+<p style="Normal" xid="297"></p>
+<p style="Normal" xid="298" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Solution aux contraintes d'ergonomie</c></p>
+<p style="Normal" xid="299"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">____________________________________</c></p>
+<p style="Normal" xid="300"></p>
+<p style="Normal" xid="301" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'application web respectera les standards W3C XHTML.</c></p>
+<p style="Normal" xid="302"></p>
+<p style="Normal" xid="303" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">L'application client lourd utilise le framework Swing, disponible sur un grand nombre de plateformes. Sur celles où Java Web Start est disponible, l'application pourra être installée par un simple clic sur le site du client léger.</c></p>
+<p style="Normal" xid="304"></p>
+<p style="Normal" xid="305" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Dimensionnement</c></p>
+<p style="Normal" xid="306"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_______________</c></p>
+<p style="Normal" xid="307"></p>
+<p style="Normal" xid="308" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Une attention particuliÚre devra être faite à la taille des partitions lors de l'intégration en fonction de la volumétrie cible. De même, cÎté client, l'utilisateur doit être informé de l'espace utilisé par l'application par rapport à son espace disponible. La synchronisation doit vérifier au préalable la suffisance d'espace.</c></p>
+<p style="Normal" xid="309"></p>
+<p style="Normal" xid="310" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">En supposant que chaque simulation prend environ 100ko de paramÚtres, que 10 utilisateurs utilisent l'application en créant 5 simulations par jour, on obtient environ 10Go de paramÚtres de simulation sur 10 ans.</c></p>
+<p style="Normal" xid="311"></p>
+<p style="Normal" xid="312" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Solution pour l'exploitation du systÚme</c></p>
+<p style="Normal" xid="313"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_______________________________________</c></p>
+<p style="Normal" xid="314"></p>
+<p style="Normal" xid="315"></p>
+<p style="Normal" xid="316" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Lors de la mise à jour de l'application, plusieurs aspects doivent être gérés. Tout d'abord la base de données doit être synchrone avec l'applicatif. Ceci devra se faire automatiquement avec une migration des données executée lors du déploiement d'une nouvelle version.</c></p>
+<p style="Normal" xid="317"></p>
+<p style="Normal" xid="318" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Dans un environnement client/serveur, il est nécessaire de garantir la compatibilité entre les deux applications. Ainsi, le serveur mettra à disposition dans la mesure du possible les services avec une compatibilité ascendante. Si la version du client est obsolÚte, l'utilisateur est notifié et il ne peut plus utiliser l'application en mode connecté.</c></p>
+<p style="Normal" xid="319"></p>
+<p style="Normal" xid="320"></p>
+<p style="Normal" xid="321" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">ModÚle conceptuel</c></p>
+<p style="Normal" xid="322"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">-----------------</c></p>
+<p style="Normal" xid="329"></p>
+<p style="Normal" xid="353" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Entités des données</c></p>
+<p style="Normal" xid="410" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">___________________</c></p>
+<p style="Normal" xid="411" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="412" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. </c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">image</c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">:: ../../../../xmi/images/data.png</c></p>
+<p style="Normal" xid="413" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="414" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="415" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Entités des authorisations</c></p>
+<p style="Normal" xid="416" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________________________</c></p>
+<p style="Normal" xid="417" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="418" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. </c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">image</c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">:: ../../../../xmi/images/entities.png</c></p>
+<p style="Normal" xid="419" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="420" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="421" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Services de stockage</c></p>
+<p style="Normal" xid="422" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">____________________</c></p>
+<p style="Normal" xid="423" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="424" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. </c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">image</c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">:: ../../../../xmi/images/storage.png</c></p>
+<p style="Normal" xid="425" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="426" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="427" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Services d'authorisation</c></p>
+<p style="Normal" xid="428" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">________________________</c></p>
+<p style="Normal" xid="429" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="430" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. </c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">image</c><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">:: ../../../../xmi/images/authorization.png</c></p>
+<p style="Normal" xid="431" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="432" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="433" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Application web</c></p>
+<p style="Normal" xid="434" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_______________</c></p>
+<p style="Normal" xid="435" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="436" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">.. image:: ../../../../xmi/images/applications.png</c></p>
+<p style="Normal" xid="347" props="margin-top:0.0000in; margin-left:0.0000in; text-indent:0.0000in; dom-dir:ltr; margin-bottom:0.0000in; line-height:1.000000; text-align:left; margin-right:0.0000in"></p>
+<p style="Normal" xid="323" props="font-family:Times New Roman; font-size:12pt; color:000000; lang:fr-FR; text-position:normal; font-weight:normal; font-style:normal; text-decoration:none"></p>
+<p style="Normal" xid="324" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Séquences d'utilisation</c></p>
+<p style="Normal" xid="325"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">-----------------------</c></p>
+<p style="Normal" xid="326"></p>
+<p style="Normal" xid="469"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Gestion des authorisations</c></p>
+<p style="Normal" xid="471"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________________________</c></p>
+<p style="Normal" xid="472"></p>
+<p style="Normal" xid="473" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image:: ./authorization.jpg</c></p>
+<p style="Normal" xid="470"></p>
+<p style="Normal" xid="327" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Ãcrans de l'application</c></p>
+<p style="Normal" xid="328"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">-----------------------</c></p>
+<p style="Normal" xid="438"></p>
+<p style="Normal" xid="439"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Liste des éléments</c></p>
+<p style="Normal" xid="440"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">__________________</c></p>
+<p style="Normal" xid="456"></p>
+<p style="Normal" xid="457"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image:: ./screenshots/Screenshot.png</c></p>
+<p style="Normal" xid="441"></p>
+<p style="Normal" xid="442"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Importer un élément</c></p>
+<p style="Normal" xid="443"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">___________________</c></p>
+<p style="Normal" xid="444"></p>
+<p style="Normal" xid="458"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image:: ./screenshots/Screenshot-1.png</c></p>
+<p style="Normal" xid="459" props="margin-top:0.0000in; margin-left:0.0000in; text-indent:0.0000in; dom-dir:ltr; margin-bottom:0.0000in; line-height:1.000000; text-align:left; margin-right:0.0000in"></p>
+<p style="Normal" xid="445" props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; lang:fr-FR; text-position:normal; font-weight:normal; font-style:normal; text-decoration:none"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Liste des utilisateurs</c></p>
+<p style="Normal" xid="446"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">______________________</c></p>
+<p style="Normal" xid="447"></p>
+<p style="Normal" xid="460"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image:: ./screenshots/Screenshot-2.png</c></p>
+<p style="Normal" xid="461" props="margin-top:0.0000in; margin-left:0.0000in; text-indent:0.0000in; dom-dir:ltr; margin-bottom:0.0000in; line-height:1.000000; text-align:left; margin-right:0.0000in"></p>
+<p style="Normal" xid="448" props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; lang:fr-FR; text-position:normal; font-weight:normal; font-style:normal; text-decoration:none"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Ajouter/éditer un utilisateur</c></p>
+<p style="Normal" xid="449"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_____________________________</c></p>
+<p style="Normal" xid="450"></p>
+<p style="Normal" xid="462"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image:: ./screenshots/Screenshot-3.png</c></p>
+<p style="Normal" xid="463" props="margin-top:0.0000in; margin-left:0.0000in; text-indent:0.0000in; dom-dir:ltr; margin-bottom:0.0000in; line-height:1.000000; text-align:left; margin-right:0.0000in"></p>
+<p style="Normal" xid="451" props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; lang:fr-FR; text-position:normal; font-weight:normal; font-style:normal; text-decoration:none"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Liste des groupes</c></p>
+<p style="Normal" xid="452"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">_________________</c></p>
+<p style="Normal" xid="453"></p>
+<p style="Normal" xid="464"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image:: ./screenshots/Screenshot-4.png</c></p>
+<p style="Normal" xid="465" props="margin-top:0.0000in; margin-left:0.0000in; text-indent:0.0000in; dom-dir:ltr; margin-bottom:0.0000in; line-height:1.000000; text-align:left; margin-right:0.0000in"></p>
+<p style="Normal" xid="454" props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; lang:fr-FR; text-position:normal; font-weight:normal; font-style:normal; text-decoration:none"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">Ajouter/éditer un groupe</c></p>
+<p style="Normal" xid="455"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt">________________________</c></p>
+<p style="Normal" xid="466"></p>
+<p style="Normal" xid="467" props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal"><c props="font-family:Bitstream Vera Sans Mono; font-size:12pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">.. image:: ./screenshots/Screenshot-5.png</c></p>
+<p style="Normal" xid="468" props="font-family:Bitstream Vera Sans Mono; dom-dir:ltr; font-style:normal; margin-left:0.0000in; lang:fr-FR; margin-bottom:0.0000in; text-indent:0.0000in; text-position:normal; margin-top:0.0000in; font-weight:normal; margin-right:0.0000in; text-decoration:none; text-align:left; line-height:1.000000; font-size:12pt"></p>
+</section>
+</abiword>
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/architecture.abw
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/simexplorer-si/src/site/fr/rst/devel/architecture.rst
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/architecture.rst (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/architecture.rst 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,390 @@
+=======================================
+SimExplorer SI - Dossier d'architecture
+=======================================
+
+.. contents:: :depth: 3
+.. sectnum::
+
+Introduction
+============
+
+Ce document détaille la solution proposée en réponse à la demande d'un outil d'exploration de simulation.
+
+Architecture conceptuelle
+=========================
+
+Rappel des fonctions de l'application
+-------------------------------------
+
+L'application permet l'utilisation d'outils de simulation dans un environnement multi-utilisateurs. Un mode client léger met à disposition la gestion des utilisateurs et la consultation des paramÚtres des simulations. Ce mode est accessible avec un simple navigateur. Avec un logiciel fourni (nommé aussi client lourd), l'utilisateur peut de même gérer les utilisateurs, mais aussi les simulations afin de les lancer. Une fonction de synchronisation met à jour les données locales par rapport aux données centralisées.
+
+Chaque fonction est limitée en fonction des droits de l'utilisateur connecté. Cet utilisateur, en fonction des groupes auxquels il appartient, obtient des droits sur les simulations et les utilisateurs (création, modification, suppression).
+
+Les modifications des paramÚtres des simulations sont sauvegardé afin de conserver un historique. Cet historique se synchronise avec les données centralisées et les données de l'utilisateur.
+
+Décomposition de l'application en modules
+-----------------------------------------
+
+L'authentification s'appuie sur un module unique. Celui ci permet d'authentifier les utilisateurs se connectant via le client léger ou le client lourd. Un premier niveau impératif nécessite l'appartenance de l'utilisateur à un groupe destiné à contenir les accrédités à utiliser l'application. Ce module fourni aussi les groupes d'appartenance d'un utilisateur, afin de déterminer ses droits. Enfin, ce module permet l'édition des utilisateurs et des groupes par les utilisateurs avec pouvoir.
+
+Les autorisations sont gérées conjointement avec l'authentification. Une simulation a des droits associés en fonction de son propriétaire et son groupe d'appartenance. Ses droits sont décorélés des données métier, seul un identifiant technique permet aux services d'interroger le module d'autorisation afin de valider l'accÚs à une simulation. Le niveau de granularité des droits est similaire à la gestion des modes sur les fichiers. Les droits sur les actions création/modification/exécution sont alloués en fonction de l'utilisateur/groupe/autre.
+
+Le stockage est un module dupliqué à la fois sur le serveur gérant les données centralisées et sur chaque client lourd. Celui-ci a la charge de conserver les données dans une base, et de stocker les données volumineuses dans le systÚme de fichier. Il est capable de persister les objets utilisés par l'application. Un mécanisme de synchronisation permet de mettre à jour les données locales et les données centralisées en fonction de rÚgles de gestion de versionnement.
+
+La logique métier de l'application est contenue dans des services. Ceux ci peuvent être exécutés localement, lors de l'exécution d'une simulation sur le client lourd par exemple. Certains services sont présents uniquement sur le serveur, parce qu'ils nécessitent les modules d'autorisation et les données centralisées. Le client lourd fait alors appel à ces services dans un mode appel distant.
+
+Le module d'interface est composé de deux parties. CÎté serveur, l'utilisateur accÚde avec un navigateur Internet standard à l'application. Les pages sont servies par un serveur web utilisant un contrÎleur. Celui ci interagit avec les services afin de présenter les données à l'utilisateur. CÎté client, l'interface graphique s'appuie aussi sur un contrÎleur utilisant les services.
+
+
+Exigences et contraintes
+------------------------
+
+Contraintes d'urbanisme
+_______________________
+
+Le client lourd doit s'intégrer dans SimExplorer RCP.
+
+Les services déployés sur le serveur et mis à disposition du client lourd doivent pouvoir être réutilisés par des applications tierces.
+
+Le serveur doit être en mesure de lancer des simulations et de récupérer les résultats.
+
+Exigences et contraintes liées à des fonctionnalités particuliÚres
+__________________________________________________________________
+
+Un serveur d'authentification.existant pourra être réutilisé dans la mesure où il est accessible via des protocoles standards. Une note précisant le fonctionnement de ce serveur devra être fourni afin de rendre possible son utilisation. ex : LDAP
+
+Les appels de lancement des simulations devra être formalisés dans une note. Ceux ci pourront alors être intégrés dans les services.
+
+L'authentification implique l'établissement d'une connexion sécurisée entre le client et le serveur, afin de ne pas faire passer en clair les mots de passe sur le réseau. Le serveur disposera d'un certificat afin de crypter les flux.
+
+Contraintes d'ergonomie
+_______________________
+
+L'application web se doit d'être compatible avec les navigateurs récents : Firefox2+ et IE6+.
+
+L'application client lourd est un application standard type bureautique, et doit être compatible avec le maximum de plateformes. Le lancement de l'application doit se faire simplement par un raccourci.
+
+Volumétrie
+__________
+
+Les données associées aux simulations sont parfois trÚs volumineuses (>100Mo). Ces données doivent être stockées en local mais aussi sur le serveur, avec des transferts entre le client et le serveur.
+
+Contraintes et exigences liées à l'exploitation
+_______________________________________________
+
+Lors de la mise à jour de l'application, la base de données doit être synchrone avec l'applicatif. De même, le client lourd doit être à jour par rapport à la version déployée sur le serveur.
+
+Les données doivent pouvoir être simplement sauvegardées et restaurées.
+
+Architecture logique
+====================
+
+Schéma d'architecture logique
+-----------------------------
+
+.. image:: diagramme1.png
+
+Description des flux
+--------------------
+
+ #. Serveur web
+
+ L'interface client léger passe par ce flux. L'authentification se fera en HTTPS, le reste de l'application pourra être au choix en HTTP ou en HTTPS. Le contenu sera constitué de pages XHTML compatibles avec les navigateurs récents.
+
+ #. Interface client lourd
+
+ C'est à travers ce canal que l'utilisateur interagit avec l'application.
+
+ #. Serveur d'authentification
+
+ Le framework d'authentification utilise un serveur externe afin d'authentifier les utilisateurs. Ce flux dépend du serveur.
+
+ #. Autorisations
+
+ Toutes les informations relatives à la protection des accÚs aux simulations sont retrouvées via ce lien vers une base de données.
+
+ #. Persistance cÎté serveur
+
+ Les objets sont stockés dans une base de donnée à travers ce flux.
+
+ #. Persistance cÎté client
+
+ De même, les objets sont stockés dans une base de données. Nous sommes ici en présence d'une base de données embarquée, afin de rendre le client lourd autonome.
+
+ #. SystÚme de fichiers serveur
+
+ Les données volumineuses sont stockées dans le systÚme de fichier plutÎt que dans la base.
+
+ #. SystÚme de fichiers client
+
+ De la même façon que sur le serveur, les données sont stockées sous forme de fichiers dans le systÚme de fichier de l'utilisateur.
+
+ #. Services distants
+
+ La communication entre le client lourd et le serveur passe par ce flux. Celui ci est crypté et intégré à haut niveau dans l'application. Les appels de service se font de façon transparente, de façon similaire à un appel local.
+
+
+Initialisation des entrepÎts de données
+---------------------------------------
+
+Pour l'authentification, un groupe d'utilisateur doit être créé afin d'accueillir les personnes accréditées. De plus, un groupe d'administrateur avec un utilisateur doit exister afin de permettre l'administration des utilisateurs. Ces deux groupes seront à spécifier lors de l'installation.
+
+Si l'application doit utiliser un serveur d'authentification existant, le groupe des administrateurs doit avoir les droits de lister les utilisateurs amenés à être ajouté aux personnes accréditées.
+
+Les bases de données d'autorisation et de stockage peuvent être initialisés lors du lancement de l'application de façon automatique. Si les droits de création de table et de champs n'est pas autorisé pour l'application, un script doit être exécuté avant le déploiement d'une nouvelle version afin de mettre à jour la base et migrer les données.
+
+CÎté client, le problÚme ne se pose pas, la base de données est embarquée dans l'application.
+
+Les modules de l'application
+----------------------------
+
+Le module authentification
+__________________________
+
+La technologie JAAS (Java Authentication and Authorization Service) a été retenue. La partie autorisation est utilisée uniquement pour valider l'accÚs de l'utilisateur authentifié à l'application.
+
+Plusieurs méthodes d'authentification sont déjà implantées (login/mot de passe/groupes dans une base de données avec JDBC, LDAP, ...).
+
+Les modules services
+____________________
+
+Les services sont contenus dans des EJB (Entreprise Java Bean). Chaque service est un composant disposant d'outils facilitant la mise en oeuvre des transactions et la distribution.
+
+Ces services sont destinés à contenir toute la logique métier.
+
+Les services contiennent aussi le contexte d'authentification de l'appelant.
+
+Le module autorisation
+______________________
+
+Grâce au contexte d'authentification des EJB, les appels au module d'autorisation vont sécurisés les accÚs aux données.
+
+Le module stockage
+__________________
+
+Ce module repose en grande partie sur la technologie JPA (Java Persistence API). Elle permet un mapping entre les objets et la base de données de façon transparente et interropérable. Le choix de la base de données n'est alors plus vérouillé, de nombreux systÚmes étant compatibles. Afin de gérer les volumétries associées aux simulations, certaines propriétés seront stockées sur le disque dur.
+
+Lors de l'accÚs à une donnée, le module gérant les autorisations est appelé afin de vérifier les droits. De même, lorsque l'utilisateur crée une nouvelle entité, les droits lui sont associés via ce service.
+
+Le module interface
+___________________
+
+CÎté client léger, le site est réalisé avec Tapestry 5. Ce framework apporte le développement orienté objet au applications web. De nombreuses fonctionnalités sont incluses et facilitent le développement.
+
+CÎté client lourd, le framework JAXX est utilisé. Ce framework transforme des XML décrivant l'interface en classes Java.
+
+Développement de l'application
+------------------------------
+
+Lors de la construction de Simexplorer SI, nous utilisons le framework ToPIA ainsi que différents outils développés par Code Lutin. Ceux ci sont tous sous licence LGPL.
+
+A partir du modÚle conceptuel, le process de développement génÚre une partie de l'application, entre autre sous la forme d'interfaces à implémenter. Nous obtenons alors :
+ - les entités persistées
+ - les interfaces des services
+ - les interfaces des composants des pages web
+
+
+Architecture physique
+=====================
+
+Architecture logicielle
+-----------------------
+
+L'ensemble de l'application est développée avec le langage Java. La version de référence lors du développement de l'application est JRE 6 Update 3.
+
+Serveur Web
+___________
+
+Le serveur web est constitué d'un Apache 2.2. Le module mod_proxy_ajp permet de ne pas lancer le serveur d'application en root et d'avoir accÚs au port HTTP et HTTPS.
+
+Serveur Applicatif
+__________________
+
++------------------------+------------------------+------------------------+------------------------+------------------------+
+| |JBoss 4.2.2 GA |Geronimo JEE5 2.0.2 |JOnAS 5.0 M1 |GlassFish V2 |
++========================+========================+========================+========================+========================+
+|EJB3 | |ok| [#jba]_ | |ok| [#grc]_ | |ok| [#joa]_ | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- RemoteBinding | |ok| [#jbb]_ | |ok| [#grd]_ | |uok| | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- SSL | |ok| [#jbc]_ | |ok| [#gra]_ | |uok| | |ok| [#gfd]_ |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- SecurityDomain | |ok| [#jbd]_ | |uok| | |ok| [#joc]_ | |ok| [#gfe]_ |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- WebService | |ok| [#jbe]_ | |ok| [#gre]_ | |ok| [#job]_ | |ok| [#gfa]_ |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+| * Sécurisé | |ok| [#jbe]_ | |uok| [#gre]_ | |uok| | |ok| [#gff]_ |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+| * WebServiceContext | |ok| [#jbe]_ | |ok| [#gre]_ | |ok| [#job]_ | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- SessionContext | |uok| | |uok| | |uok| | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|JPA | |ok| [#jbf]_ | |ok| [#grf]_ | |ok| [#jof]_ | |ok| [#gfb]_ |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- XML datasource | |ok| [#jbg]_ | |ok| [#grj]_ | |ok| [#joe]_ | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- persistence.xml | |ok| [#jbh]_ | |ok| [#grg]_ | |ok| [#jog]_ | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- orm.xml | |uok| | |ok| [#grh]_ | |ok| [#joh]_ | |ok| [#gfc]_ |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|Servlet | |ok| [#jbi]_ | |ok| [#gri]_ | |uok| | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|- JAAS | |ok| [#jbj]_ | |ok| [#grb]_ | |ok| [#jod]_ | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+|Corba | |uok| | |uok| | |uok| | |uok| |
++------------------------+------------------------+------------------------+------------------------+------------------------+
+
+.. |ok| image:: ok.png
+.. |nok| image:: nok.png
+.. |uok| image:: uok.png
+
+.. [#jba] http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/ind…
+.. [#jbb] http://docs.jboss.org/ejb3/app-server/tutorial/jndibinding/jndi.html
+.. [#jbc] http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/tra…
+.. [#jbd] http://docs.jboss.org/ejb3/app-server/tutorial/security/security.html
+.. [#jbe] http://labs.jboss.com/jbossws/docs/jaxws_userguide-2.0/index.html
+.. [#jbf] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…
+.. [#jbg] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…
+.. [#jbh] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…
+.. [#jbi] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Get…
+.. [#jbj] http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…
+
+.. [#grc] http://openejb.apache.org/
+.. [#grd] http://openejb.apache.org/jndi-names.html
+.. [#gra] http://www.ibm.com/developerworks/opensource/library/os-ag-corba1/
+.. [#gre] http://cwiki.apache.org/GMOxPMGT/geronimo-20-web-services-support.html
+.. [#grf] http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…
+.. [#grj] http://cwiki.apache.org/GMOxDOC11/geronimo-connector-11xsd.html#geronimo-co…
+.. [#grg] http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…
+.. [#grh] http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…
+.. [#gri] http://cwiki.apache.org/GMOxKB/jetty-or-tomcat.html
+.. [#grb] http://www.ibm.com/developerworks/opensource/library/os-ag-security/
+
+.. [#joa] http://www.easybeans.org/doc/userguide/en/chunk-integrated/ejb3_introductio…
+.. [#joc] http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…
+.. [#job] http://wiki.easybeans.org/xwiki/bin/view/Main/JAXWS
+
+.. [#jof] http://www.jpox.org/docs/jpa/index.html
+.. [#joe] http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…
+.. [#jog] http://www.jpox.org/docs/jpa/persistence_xml.html
+.. [#joh] http://www.jpox.org/docs/jpa/orm_xml.html
+
+.. [#jod] http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…
+
+.. [#gfd] http://blogs.sun.com/swchan/entry/enterprise_java_bean_over_ssl
+.. [#gfe] http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/
+.. [#gfa] http://wiki.glassfish.java.net/Wiki.jsp?page=WebServicesTechnologies
+.. [#gff] https://glassfish.dev.java.net/javaee5/docs/AG/ablrk.html#ablry
+.. [#gfb] https://glassfish.dev.java.net/javaee5/persistence/
+.. [#gfc] https://glassfish.dev.java.net/javaee5/persistence/persistence_faq.html#5
+
+
+SGBD
+____
+
+Pour la base sur le serveur, les performances et la stabilité de PostgreSQL ont été retenues. CÎté client lourd, la base de donnée embarquée H2 est utilisée. Un export XML sera réalisé pour l'interopérabilité.
+
+
+Choix technologiques transverses
+________________________________
+
+Dans la perspective de réutilisation, les services publiés utiliseront des protocoles standardisés et inter opérables, afin de ne pas limiter le choix du langage.
+
+La technologie ... a été choisie pour son support de la sécurité et son utilisation courante dans différents langages et sur différents systÚmes d'exploitation.
+
+Solution aux contraintes d'ergonomie
+____________________________________
+
+L'application web respectera les standards W3C XHTML.
+
+L'application client lourd utilise le framework Swing, disponible sur un grand nombre de plateformes. Sur celles où Java Web Start est disponible, l'application pourra être installée par un simple clic sur le site du client léger.
+
+Dimensionnement
+_______________
+
+Une attention particuliÚre devra être faite à la taille des partitions lors de l'intégration en fonction de la volumétrie cible. De même, cÎté client, l'utilisateur doit être informé de l'espace utilisé par l'application par rapport à son espace disponible. La synchronisation doit vérifier au préalable la suffisance d'espace.
+
+En supposant que chaque simulation prend environ 100ko de paramÚtres, que 10 utilisateurs utilisent l'application en créant 5 simulations par jour, on obtient environ 10Go de paramÚtres de simulation sur 10 ans.
+
+Solution pour l'exploitation du systÚme
+_______________________________________
+
+
+Lors de la mise à jour de l'application, plusieurs aspects doivent être gérés. Tout d'abord la base de données doit être synchrone avec l'applicatif. Ceci devra se faire automatiquement avec une migration des données executée lors du déploiement d'une nouvelle version.
+
+Dans un environnement client/serveur, il est nécessaire de garantir la compatibilité entre les deux applications. Ainsi, le serveur mettra à disposition dans la mesure du possible les services avec une compatibilité ascendante. Si la version du client est obsolÚte, l'utilisateur est notifié et il ne peut plus utiliser l'application en mode connecté.
+
+
+ModÚle conceptuel
+-----------------
+
+Entités des données
+___________________
+
+.. image:: ../../../../xmi/images/data.png
+
+
+Entités des authorisations
+__________________________
+
+.. image:: ../../../../xmi/images/entities.png
+
+
+Services de stockage
+____________________
+
+.. image:: ../../../../xmi/images/storage.png
+
+
+Services d'authorisation
+________________________
+
+.. image:: ../../../../xmi/images/authorization.png
+
+
+Application web
+_______________
+
+.. image:: ../../../../xmi/images/applications.png
+
+
+Séquences d'utilisation
+-----------------------
+
+Gestion des authorisations
+__________________________
+
+.. image:: ./authorization.jpg
+
+Ãcrans de l'application
+-----------------------
+
+Liste des éléments
+__________________
+
+.. image:: ./screenshots/Screenshot.png
+
+Importer un élément
+___________________
+
+.. image:: ./screenshots/Screenshot-1.png
+
+Liste des utilisateurs
+______________________
+
+.. image:: ./screenshots/Screenshot-2.png
+
+Ajouter/éditer un utilisateur
+_____________________________
+
+.. image:: ./screenshots/Screenshot-3.png
+
+Liste des groupes
+_________________
+
+.. image:: ./screenshots/Screenshot-4.png
+
+Ajouter/éditer un groupe
+________________________
+
+.. image:: ./screenshots/Screenshot-5.png
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/architecture.rst
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/simexplorer-si/src/site/fr/rst/devel/architecture.xhtml
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/architecture.xhtml (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/architecture.xhtml 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,940 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
+<title>SimExplorer SI - Dossier d'architecture</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger at python.org)
+:Id: $Id: html4css1.css 5196 2007-06-03 20:25:28Z wiemann $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+ border: 0 }
+
+table.borderless td, table.borderless th {
+ /* Override padding for "table.docutils td" with "! important".
+ The right padding separates the table cells. */
+ padding: 0 0.5em 0 0 ! important }
+
+.first {
+ /* Override more specific margin styles with "! important". */
+ margin-top: 0 ! important }
+
+.last, .with-subtitle {
+ margin-bottom: 0 ! important }
+
+.hidden {
+ display: none }
+
+a.toc-backref {
+ text-decoration: none ;
+ color: black }
+
+blockquote.epigraph {
+ margin: 2em 5em ; }
+
+dl.docutils dd {
+ margin-bottom: 0.5em }
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+ font-weight: bold }
+*/
+
+div.abstract {
+ margin: 2em 5em }
+
+div.abstract p.topic-title {
+ font-weight: bold ;
+ text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+ margin: 2em ;
+ border: medium outset ;
+ padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+ font-weight: bold ;
+ font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+ color: red ;
+ font-weight: bold ;
+ font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+ compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+ margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+ margin-top: 0.5em }
+*/
+
+div.dedication {
+ margin: 2em 5em ;
+ text-align: center ;
+ font-style: italic }
+
+div.dedication p.topic-title {
+ font-weight: bold ;
+ font-style: normal }
+
+div.figure {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+div.footer, div.header {
+ clear: both;
+ font-size: smaller }
+
+div.line-block {
+ display: block ;
+ margin-top: 1em ;
+ margin-bottom: 1em }
+
+div.line-block div.line-block {
+ margin-top: 0 ;
+ margin-bottom: 0 ;
+ margin-left: 1.5em }
+
+div.sidebar {
+ margin: 0 0 0.5em 1em ;
+ border: medium outset ;
+ padding: 1em ;
+ background-color: #ffffee ;
+ width: 40% ;
+ float: right ;
+ clear: right }
+
+div.sidebar p.rubric {
+ font-family: sans-serif ;
+ font-size: medium }
+
+div.system-messages {
+ margin: 5em }
+
+div.system-messages h1 {
+ color: red }
+
+div.system-message {
+ border: medium outset ;
+ padding: 1em }
+
+div.system-message p.system-message-title {
+ color: red ;
+ font-weight: bold }
+
+div.topic {
+ margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+ margin-top: 0.4em }
+
+h1.title {
+ text-align: center }
+
+h2.subtitle {
+ text-align: center }
+
+hr.docutils {
+ width: 75% }
+
+img.align-left {
+ clear: left }
+
+img.align-right {
+ clear: right }
+
+ol.simple, ul.simple {
+ margin-bottom: 1em }
+
+ol.arabic {
+ list-style: decimal }
+
+ol.loweralpha {
+ list-style: lower-alpha }
+
+ol.upperalpha {
+ list-style: upper-alpha }
+
+ol.lowerroman {
+ list-style: lower-roman }
+
+ol.upperroman {
+ list-style: upper-roman }
+
+p.attribution {
+ text-align: right ;
+ margin-left: 50% }
+
+p.caption {
+ font-style: italic }
+
+p.credits {
+ font-style: italic ;
+ font-size: smaller }
+
+p.label {
+ white-space: nowrap }
+
+p.rubric {
+ font-weight: bold ;
+ font-size: larger ;
+ color: maroon ;
+ text-align: center }
+
+p.sidebar-title {
+ font-family: sans-serif ;
+ font-weight: bold ;
+ font-size: larger }
+
+p.sidebar-subtitle {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+p.topic-title {
+ font-weight: bold }
+
+pre.address {
+ margin-bottom: 0 ;
+ margin-top: 0 ;
+ font-family: serif ;
+ font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+ margin-left: 2em ;
+ margin-right: 2em }
+
+span.classifier {
+ font-family: sans-serif ;
+ font-style: oblique }
+
+span.classifier-delimiter {
+ font-family: sans-serif ;
+ font-weight: bold }
+
+span.interpreted {
+ font-family: sans-serif }
+
+span.option {
+ white-space: nowrap }
+
+span.pre {
+ white-space: pre }
+
+span.problematic {
+ color: red }
+
+span.section-subtitle {
+ /* font-size relative to parent (h1..h6 element) */
+ font-size: 80% }
+
+table.citation {
+ border-left: solid 1px gray;
+ margin-left: 1px }
+
+table.docinfo {
+ margin: 2em 4em }
+
+table.docutils {
+ margin-top: 0.5em ;
+ margin-bottom: 0.5em }
+
+table.footnote {
+ border-left: solid 1px black;
+ margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+ padding-left: 0.5em ;
+ padding-right: 0.5em ;
+ vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+ font-weight: bold ;
+ text-align: left ;
+ white-space: nowrap ;
+ padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+ font-size: 100% }
+
+ul.auto-toc {
+ list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="simexplorer-si-dossier-d-architecture">
+<h1 class="title">SimExplorer SI - Dossier d'architecture</h1>
+
+<div class="contents topic" id="contents">
+<p class="topic-title first">Contents</p>
+<ul class="auto-toc simple">
+<li><a class="reference internal" href="#introduction" id="id40">1 Introduction</a></li>
+<li><a class="reference internal" href="#architecture-conceptuelle" id="id41">2 Architecture conceptuelle</a><ul class="auto-toc">
+<li><a class="reference internal" href="#rappel-des-fonctions-de-l-application" id="id42">2.1 Rappel des fonctions de l'application</a></li>
+<li><a class="reference internal" href="#d-composition-de-l-application-en-modules" id="id43">2.2 Décomposition de l'application en modules</a></li>
+<li><a class="reference internal" href="#exigences-et-contraintes" id="id44">2.3 Exigences et contraintes</a><ul class="auto-toc">
+<li><a class="reference internal" href="#contraintes-d-urbanisme" id="id45">2.3.1 Contraintes d'urbanisme</a></li>
+<li><a class="reference internal" href="#exigences-et-contraintes-li-es-des-fonctionnalit-s-particuli-res" id="id46">2.3.2 Exigences et contraintes liées à des fonctionnalités particuliÚres</a></li>
+<li><a class="reference internal" href="#contraintes-d-ergonomie" id="id47">2.3.3 Contraintes d'ergonomie</a></li>
+<li><a class="reference internal" href="#volum-trie" id="id48">2.3.4 Volumétrie</a></li>
+<li><a class="reference internal" href="#contraintes-et-exigences-li-es-l-exploitation" id="id49">2.3.5 Contraintes et exigences liées à l'exploitation</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li><a class="reference internal" href="#architecture-logique" id="id50">3 Architecture logique</a><ul class="auto-toc">
+<li><a class="reference internal" href="#sch-ma-d-architecture-logique" id="id51">3.1 Schéma d'architecture logique</a></li>
+<li><a class="reference internal" href="#description-des-flux" id="id52">3.2 Description des flux</a></li>
+<li><a class="reference internal" href="#initialisation-des-entrep-ts-de-donn-es" id="id53">3.3 Initialisation des entrepÎts de données</a></li>
+<li><a class="reference internal" href="#les-modules-de-l-application" id="id54">3.4 Les modules de l'application</a><ul class="auto-toc">
+<li><a class="reference internal" href="#le-module-authentification" id="id55">3.4.1 Le module authentification</a></li>
+<li><a class="reference internal" href="#les-modules-services" id="id56">3.4.2 Les modules services</a></li>
+<li><a class="reference internal" href="#le-module-autorisation" id="id57">3.4.3 Le module autorisation</a></li>
+<li><a class="reference internal" href="#le-module-stockage" id="id58">3.4.4 Le module stockage</a></li>
+<li><a class="reference internal" href="#le-module-interface" id="id59">3.4.5 Le module interface</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#d-veloppement-de-l-application" id="id60">3.5 Développement de l'application</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#architecture-physique" id="id61">4 Architecture physique</a><ul class="auto-toc">
+<li><a class="reference internal" href="#architecture-logicielle" id="id62">4.1 Architecture logicielle</a><ul class="auto-toc">
+<li><a class="reference internal" href="#serveur-web" id="id63">4.1.1 Serveur Web</a></li>
+<li><a class="reference internal" href="#serveur-applicatif" id="id64">4.1.2 Serveur Applicatif</a></li>
+<li><a class="reference internal" href="#sgbd" id="id65">4.1.3 SGBD</a></li>
+<li><a class="reference internal" href="#choix-technologiques-transverses" id="id66">4.1.4 Choix technologiques transverses</a></li>
+<li><a class="reference internal" href="#solution-aux-contraintes-d-ergonomie" id="id67">4.1.5 Solution aux contraintes d'ergonomie</a></li>
+<li><a class="reference internal" href="#dimensionnement" id="id68">4.1.6 Dimensionnement</a></li>
+<li><a class="reference internal" href="#solution-pour-l-exploitation-du-syst-me" id="id69">4.1.7 Solution pour l'exploitation du systÚme</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#mod-le-conceptuel" id="id70">4.2 ModÚle conceptuel</a><ul class="auto-toc">
+<li><a class="reference internal" href="#entit-s-des-donn-es" id="id71">4.2.1 Entités des données</a></li>
+<li><a class="reference internal" href="#entit-s-des-authorisations" id="id72">4.2.2 Entités des authorisations</a></li>
+<li><a class="reference internal" href="#services-de-stockage" id="id73">4.2.3 Services de stockage</a></li>
+<li><a class="reference internal" href="#services-d-authorisation" id="id74">4.2.4 Services d'authorisation</a></li>
+<li><a class="reference internal" href="#application-web" id="id75">4.2.5 Application web</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#s-quences-d-utilisation" id="id76">4.3 Séquences d'utilisation</a><ul class="auto-toc">
+<li><a class="reference internal" href="#gestion-des-authorisations" id="id77">4.3.1 Gestion des authorisations</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#crans-de-l-application" id="id78">4.4 Ãcrans de l'application</a><ul class="auto-toc">
+<li><a class="reference internal" href="#liste-des-l-ments" id="id79">4.4.1 Liste des éléments</a></li>
+<li><a class="reference internal" href="#importer-un-l-ment" id="id80">4.4.2 Importer un élément</a></li>
+<li><a class="reference internal" href="#liste-des-utilisateurs" id="id81">4.4.3 Liste des utilisateurs</a></li>
+<li><a class="reference internal" href="#ajouter-diter-un-utilisateur" id="id82">4.4.4 Ajouter/éditer un utilisateur</a></li>
+<li><a class="reference internal" href="#liste-des-groupes" id="id83">4.4.5 Liste des groupes</a></li>
+<li><a class="reference internal" href="#ajouter-diter-un-groupe" id="id84">4.4.6 Ajouter/éditer un groupe</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id40">1 Introduction</a></h1>
+<p>Ce document détaille la solution proposée en réponse à la demande d'un outil d'exploration de simulation.</p>
+</div>
+<div class="section" id="architecture-conceptuelle">
+<h1><a class="toc-backref" href="#id41">2 Architecture conceptuelle</a></h1>
+<div class="section" id="rappel-des-fonctions-de-l-application">
+<h2><a class="toc-backref" href="#id42">2.1 Rappel des fonctions de l'application</a></h2>
+<p>L'application permet l'utilisation d'outils de simulation dans un environnement multi-utilisateurs. Un mode client léger met à disposition la gestion des utilisateurs et la consultation des paramÚtres des simulations. Ce mode est accessible avec un simple navigateur. Avec un logiciel fourni (nommé aussi client lourd), l'utilisateur peut de même gérer les utilisateurs, mais aussi les simulations afin de les lancer. Une fonction de synchronisation met à jour les données locales par rapport aux données centralisées.</p>
+<p>Chaque fonction est limitée en fonction des droits de l'utilisateur connecté. Cet utilisateur, en fonction des groupes auxquels il appartient, obtient des droits sur les simulations et les utilisateurs (création, modification, suppression).</p>
+<p>Les modifications des paramÚtres des simulations sont sauvegardé afin de conserver un historique. Cet historique se synchronise avec les données centralisées et les données de l'utilisateur.</p>
+</div>
+<div class="section" id="d-composition-de-l-application-en-modules">
+<h2><a class="toc-backref" href="#id43">2.2 Décomposition de l'application en modules</a></h2>
+<p>L'authentification s'appuie sur un module unique. Celui ci permet d'authentifier les utilisateurs se connectant via le client léger ou le client lourd. Un premier niveau impératif nécessite l'appartenance de l'utilisateur à un groupe destiné à contenir les accrédités à utiliser l'application. Ce module fourni aussi les groupes d'appartenance d'un utilisateur, afin de déterminer ses droits. Enfin, ce module permet l'édition des utilisateurs et des groupes par les utilisateurs avec pouvoir.</p>
+<p>Les autorisations sont gérées conjointement avec l'authentification. Une simulation a des droits associés en fonction de son propriétaire et son groupe d'appartenance. Ses droits sont décorélés des données métier, seul un identifiant technique permet aux services d'interroger le module d'autorisation afin de valider l'accÚs à une simulation. Le niveau de granularité des droits est similaire à la gestion des modes sur les fichiers. Les droits sur les actions création/modification/exécution sont alloués en fonction de l'utilisateur/groupe/autre.</p>
+<p>Le stockage est un module dupliqué à la fois sur le serveur gérant les données centralisées et sur chaque client lourd. Celui-ci a la charge de conserver les données dans une base, et de stocker les données volumineuses dans le systÚme de fichier. Il est capable de persister les objets utilisés par l'application. Un mécanisme de synchronisation permet de mettre à jour les données locales et les données centralisées en fonction de rÚgles de gestion de versionnement.</p>
+<p>La logique métier de l'application est contenue dans des services. Ceux ci peuvent être exécutés localement, lors de l'exécution d'une simulation sur le client lourd par exemple. Certains services sont présents uniquement sur le serveur, parce qu'ils nécessitent les modules d'autorisation et les données centralisées. Le client lourd fait alors appel à ces services dans un mode appel distant.</p>
+<p>Le module d'interface est composé de deux parties. CÎté serveur, l'utilisateur accÚde avec un navigateur Internet standard à l'application. Les pages sont servies par un serveur web utilisant un contrÎleur. Celui ci interagit avec les services afin de présenter les données à l'utilisateur. CÎté client, l'interface graphique s'appuie aussi sur un contrÎleur utilisant les services.</p>
+</div>
+<div class="section" id="exigences-et-contraintes">
+<h2><a class="toc-backref" href="#id44">2.3 Exigences et contraintes</a></h2>
+<div class="section" id="contraintes-d-urbanisme">
+<h3><a class="toc-backref" href="#id45">2.3.1 Contraintes d'urbanisme</a></h3>
+<p>Le client lourd doit s'intégrer dans SimExplorer RCP.</p>
+<p>Les services déployés sur le serveur et mis à disposition du client lourd doivent pouvoir être réutilisés par des applications tierces.</p>
+<p>Le serveur doit être en mesure de lancer des simulations et de récupérer les résultats.</p>
+</div>
+<div class="section" id="exigences-et-contraintes-li-es-des-fonctionnalit-s-particuli-res">
+<h3><a class="toc-backref" href="#id46">2.3.2 Exigences et contraintes liées à des fonctionnalités particuliÚres</a></h3>
+<p>Un serveur d'authentification.existant pourra être réutilisé dans la mesure où il est accessible via des protocoles standards. Une note précisant le fonctionnement de ce serveur devra être fourni afin de rendre possible son utilisation. ex : LDAP</p>
+<p>Les appels de lancement des simulations devra être formalisés dans une note. Ceux ci pourront alors être intégrés dans les services.</p>
+<p>L'authentification implique l'établissement d'une connexion sécurisée entre le client et le serveur, afin de ne pas faire passer en clair les mots de passe sur le réseau. Le serveur disposera d'un certificat afin de crypter les flux.</p>
+</div>
+<div class="section" id="contraintes-d-ergonomie">
+<h3><a class="toc-backref" href="#id47">2.3.3 Contraintes d'ergonomie</a></h3>
+<p>L'application web se doit d'être compatible avec les navigateurs récents : Firefox2+ et IE6+.</p>
+<p>L'application client lourd est un application standard type bureautique, et doit être compatible avec le maximum de plateformes. Le lancement de l'application doit se faire simplement par un raccourci.</p>
+</div>
+<div class="section" id="volum-trie">
+<h3><a class="toc-backref" href="#id48">2.3.4 Volumétrie</a></h3>
+<p>Les données associées aux simulations sont parfois trÚs volumineuses (>100Mo). Ces données doivent être stockées en local mais aussi sur le serveur, avec des transferts entre le client et le serveur.</p>
+</div>
+<div class="section" id="contraintes-et-exigences-li-es-l-exploitation">
+<h3><a class="toc-backref" href="#id49">2.3.5 Contraintes et exigences liées à l'exploitation</a></h3>
+<p>Lors de la mise à jour de l'application, la base de données doit être synchrone avec l'applicatif. De même, le client lourd doit être à jour par rapport à la version déployée sur le serveur.</p>
+<p>Les données doivent pouvoir être simplement sauvegardées et restaurées.</p>
+</div>
+</div>
+</div>
+<div class="section" id="architecture-logique">
+<h1><a class="toc-backref" href="#id50">3 Architecture logique</a></h1>
+<div class="section" id="sch-ma-d-architecture-logique">
+<h2><a class="toc-backref" href="#id51">3.1 Schéma d'architecture logique</a></h2>
+<img alt="diagramme1.png" src="diagramme1.png" />
+</div>
+<div class="section" id="description-des-flux">
+<h2><a class="toc-backref" href="#id52">3.2 Description des flux</a></h2>
+<blockquote>
+<ol class="arabic">
+<li><p class="first">Serveur web</p>
+<p>L'interface client léger passe par ce flux. L'authentification se fera en HTTPS, le reste de l'application pourra être au choix en HTTP ou en HTTPS. Le contenu sera constitué de pages XHTML compatibles avec les navigateurs récents.</p>
+</li>
+<li><p class="first">Interface client lourd</p>
+<p>C'est à travers ce canal que l'utilisateur interagit avec l'application.</p>
+</li>
+<li><p class="first">Serveur d'authentification</p>
+<p>Le framework d'authentification utilise un serveur externe afin d'authentifier les utilisateurs. Ce flux dépend du serveur.</p>
+</li>
+<li><p class="first">Autorisations</p>
+<p>Toutes les informations relatives à la protection des accÚs aux simulations sont retrouvées via ce lien vers une base de données.</p>
+</li>
+<li><p class="first">Persistance cÎté serveur</p>
+<p>Les objets sont stockés dans une base de donnée à travers ce flux.</p>
+</li>
+<li><p class="first">Persistance cÎté client</p>
+<p>De même, les objets sont stockés dans une base de données. Nous sommes ici en présence d'une base de données embarquée, afin de rendre le client lourd autonome.</p>
+</li>
+<li><p class="first">SystÚme de fichiers serveur</p>
+<p>Les données volumineuses sont stockées dans le systÚme de fichier plutÎt que dans la base.</p>
+</li>
+<li><p class="first">SystÚme de fichiers client</p>
+<p>De la même façon que sur le serveur, les données sont stockées sous forme de fichiers dans le systÚme de fichier de l'utilisateur.</p>
+</li>
+<li><p class="first">Services distants</p>
+<p>La communication entre le client lourd et le serveur passe par ce flux. Celui ci est crypté et intégré à haut niveau dans l'application. Les appels de service se font de façon transparente, de façon similaire à un appel local.</p>
+</li>
+</ol>
+</blockquote>
+</div>
+<div class="section" id="initialisation-des-entrep-ts-de-donn-es">
+<h2><a class="toc-backref" href="#id53">3.3 Initialisation des entrepÎts de données</a></h2>
+<p>Pour l'authentification, un groupe d'utilisateur doit être créé afin d'accueillir les personnes accréditées. De plus, un groupe d'administrateur avec un utilisateur doit exister afin de permettre l'administration des utilisateurs. Ces deux groupes seront à spécifier lors de l'installation.</p>
+<p>Si l'application doit utiliser un serveur d'authentification existant, le groupe des administrateurs doit avoir les droits de lister les utilisateurs amenés à être ajouté aux personnes accréditées.</p>
+<p>Les bases de données d'autorisation et de stockage peuvent être initialisés lors du lancement de l'application de façon automatique. Si les droits de création de table et de champs n'est pas autorisé pour l'application, un script doit être exécuté avant le déploiement d'une nouvelle version afin de mettre à jour la base et migrer les données.</p>
+<p>CÎté client, le problÚme ne se pose pas, la base de données est embarquée dans l'application.</p>
+</div>
+<div class="section" id="les-modules-de-l-application">
+<h2><a class="toc-backref" href="#id54">3.4 Les modules de l'application</a></h2>
+<div class="section" id="le-module-authentification">
+<h3><a class="toc-backref" href="#id55">3.4.1 Le module authentification</a></h3>
+<p>La technologie JAAS (Java Authentication and Authorization Service) a été retenue. La partie autorisation est utilisée uniquement pour valider l'accÚs de l'utilisateur authentifié à l'application.</p>
+<p>Plusieurs méthodes d'authentification sont déjà implantées (login/mot de passe/groupes dans une base de données avec JDBC, LDAP, ...).</p>
+</div>
+<div class="section" id="les-modules-services">
+<h3><a class="toc-backref" href="#id56">3.4.2 Les modules services</a></h3>
+<p>Les services sont contenus dans des EJB (Entreprise Java Bean). Chaque service est un composant disposant d'outils facilitant la mise en oeuvre des transactions et la distribution.</p>
+<p>Ces services sont destinés à contenir toute la logique métier.</p>
+<p>Les services contiennent aussi le contexte d'authentification de l'appelant.</p>
+</div>
+<div class="section" id="le-module-autorisation">
+<h3><a class="toc-backref" href="#id57">3.4.3 Le module autorisation</a></h3>
+<p>Grâce au contexte d'authentification des EJB, les appels au module d'autorisation vont sécurisés les accÚs aux données.</p>
+</div>
+<div class="section" id="le-module-stockage">
+<h3><a class="toc-backref" href="#id58">3.4.4 Le module stockage</a></h3>
+<p>Ce module repose en grande partie sur la technologie JPA (Java Persistence API). Elle permet un mapping entre les objets et la base de données de façon transparente et interropérable. Le choix de la base de données n'est alors plus vérouillé, de nombreux systÚmes étant compatibles. Afin de gérer les volumétries associées aux simulations, certaines propriétés seront stockées sur le disque dur.</p>
+<p>Lors de l'accÚs à une donnée, le module gérant les autorisations est appelé afin de vérifier les droits. De même, lorsque l'utilisateur crée une nouvelle entité, les droits lui sont associés via ce service.</p>
+</div>
+<div class="section" id="le-module-interface">
+<h3><a class="toc-backref" href="#id59">3.4.5 Le module interface</a></h3>
+<p>CÎté client léger, le site est réalisé avec Tapestry 5. Ce framework apporte le développement orienté objet au applications web. De nombreuses fonctionnalités sont incluses et facilitent le développement.</p>
+<p>CÎté client lourd, le framework JAXX est utilisé. Ce framework transforme des XML décrivant l'interface en classes Java.</p>
+</div>
+</div>
+<div class="section" id="d-veloppement-de-l-application">
+<h2><a class="toc-backref" href="#id60">3.5 Développement de l'application</a></h2>
+<p>Lors de la construction de Simexplorer SI, nous utilisons le framework ToPIA ainsi que différents outils développés par Code Lutin. Ceux ci sont tous sous licence LGPL.</p>
+<dl class="docutils">
+<dt>A partir du modÚle conceptuel, le process de développement génÚre une partie de l'application, entre autre sous la forme d'interfaces à implémenter. Nous obtenons alors :</dt>
+<dd><ul class="first last simple">
+<li>les entités persistées</li>
+<li>les interfaces des services</li>
+<li>les interfaces des composants des pages web</li>
+</ul>
+</dd>
+</dl>
+</div>
+</div>
+<div class="section" id="architecture-physique">
+<h1><a class="toc-backref" href="#id61">4 Architecture physique</a></h1>
+<div class="section" id="architecture-logicielle">
+<h2><a class="toc-backref" href="#id62">4.1 Architecture logicielle</a></h2>
+<p>L'ensemble de l'application est développée avec le langage Java. La version de référence lors du développement de l'application est JRE 6 Update 3.</p>
+<div class="section" id="serveur-web">
+<h3><a class="toc-backref" href="#id63">4.1.1 Serveur Web</a></h3>
+<p>Le serveur web est constitué d'un Apache 2.2. Le module mod_proxy_ajp permet de ne pas lancer le serveur d'application en root et d'avoir accÚs au port HTTP et HTTPS.</p>
+</div>
+<div class="section" id="serveur-applicatif">
+<h3><a class="toc-backref" href="#id64">4.1.2 Serveur Applicatif</a></h3>
+<table border="1" class="docutils">
+<colgroup>
+<col width="20%" />
+<col width="20%" />
+<col width="20%" />
+<col width="20%" />
+<col width="20%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head"> </th>
+<th class="head">JBoss 4.2.2 GA</th>
+<th class="head">Geronimo JEE5 2.0.2</th>
+<th class="head">JOnAS 5.0 M1</th>
+<th class="head">GlassFish V2</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td>EJB3</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jba" id="id1">[1]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#grc" id="id2">[11]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#joa" id="id3">[21]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>RemoteBinding</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbb" id="id4">[2]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#grd" id="id5">[12]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>SSL</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbc" id="id6">[3]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gra" id="id7">[13]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gfd" id="id8">[29]</a></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>SecurityDomain</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbd" id="id9">[4]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#joc" id="id10">[22]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gfe" id="id11">[30]</a></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>WebService</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbe" id="id12">[5]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gre" id="id13">[14]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#job" id="id14">[23]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gfa" id="id15">[31]</a></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>Sécurisé</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbe" id="id16">[5]</a></td>
+<td><img alt="uok" src="uok.png" /> <a class="footnote-reference" href="#gre" id="id17">[14]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gff" id="id18">[32]</a></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>WebServiceContext</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbe" id="id19">[5]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gre" id="id20">[14]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#job" id="id21">[23]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>SessionContext</li>
+</ul>
+</td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td>JPA</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbf" id="id22">[6]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#grf" id="id23">[15]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jof" id="id24">[24]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gfb" id="id25">[33]</a></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>XML datasource</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbg" id="id26">[7]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#grj" id="id27">[16]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#joe" id="id28">[25]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>persistence.xml</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbh" id="id29">[8]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#grg" id="id30">[17]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jog" id="id31">[26]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>orm.xml</li>
+</ul>
+</td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#grh" id="id32">[18]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#joh" id="id33">[27]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gfc" id="id34">[34]</a></td>
+</tr>
+<tr><td>Servlet</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbi" id="id35">[9]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#gri" id="id36">[19]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td><ul class="first last simple">
+<li>JAAS</li>
+</ul>
+</td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jbj" id="id37">[10]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#grb" id="id38">[20]</a></td>
+<td><img alt="ok" src="ok.png" /> <a class="footnote-reference" href="#jod" id="id39">[28]</a></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+<tr><td>Corba</td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+<td><img alt="uok" src="uok.png" /></td>
+</tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jba" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><a class="reference external" href="http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/ind…">http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/ind…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbb" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id4">[2]</a></td><td><a class="reference external" href="http://docs.jboss.org/ejb3/app-server/tutorial/jndibinding/jndi.html">http://docs.jboss.org/ejb3/app-server/tutorial/jndibinding/jndi.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbc" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id6">[3]</a></td><td><a class="reference external" href="http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/tra…">http://docs.jboss.org/ejb3/app-server/reference/build/reference/en/html/tra…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbd" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id9">[4]</a></td><td><a class="reference external" href="http://docs.jboss.org/ejb3/app-server/tutorial/security/security.html">http://docs.jboss.org/ejb3/app-server/tutorial/security/security.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbe" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label">[5]</td><td><em>(<a class="fn-backref" href="#id12">1</a>, <a class="fn-backref" href="#id16">2</a>, <a class="fn-backref" href="#id19">3</a>)</em> <a class="reference external" href="http://labs.jboss.com/jbossws/docs/jaxws_userguide-2.0/index.html">http://labs.jboss.com/jbossws/docs/jaxws_userguide-2.0/index.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbf" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id22">[6]</a></td><td><a class="reference external" href="http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…">http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbg" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id26">[7]</a></td><td><a class="reference external" href="http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…">http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbh" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id29">[8]</a></td><td><a class="reference external" href="http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…">http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbi" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id35">[9]</a></td><td><a class="reference external" href="http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Get…">http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Get…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jbj" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id37">[10]</a></td><td><a class="reference external" href="http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…">http://labs.jboss.com/file-access/default/members/jbossas/freezone/docs/Ser…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="grc" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id2">[11]</a></td><td><a class="reference external" href="http://openejb.apache.org/">http://openejb.apache.org/</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="grd" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id5">[12]</a></td><td><a class="reference external" href="http://openejb.apache.org/jndi-names.html">http://openejb.apache.org/jndi-names.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gra" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id7">[13]</a></td><td><a class="reference external" href="http://www.ibm.com/developerworks/opensource/library/os-ag-corba1/">http://www.ibm.com/developerworks/opensource/library/os-ag-corba1/</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gre" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label">[14]</td><td><em>(<a class="fn-backref" href="#id13">1</a>, <a class="fn-backref" href="#id17">2</a>, <a class="fn-backref" href="#id20">3</a>)</em> <a class="reference external" href="http://cwiki.apache.org/GMOxPMGT/geronimo-20-web-services-support.html">http://cwiki.apache.org/GMOxPMGT/geronimo-20-web-services-support.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="grf" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id23">[15]</a></td><td><a class="reference external" href="http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…">http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="grj" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id27">[16]</a></td><td><a class="reference external" href="http://cwiki.apache.org/GMOxDOC11/geronimo-connector-11xsd.html#geronimo-co…">http://cwiki.apache.org/GMOxDOC11/geronimo-connector-11xsd.html#geronimo-co…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="grg" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id30">[17]</a></td><td><a class="reference external" href="http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…">http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="grh" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id32">[18]</a></td><td><a class="reference external" href="http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…">http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gri" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id36">[19]</a></td><td><a class="reference external" href="http://cwiki.apache.org/GMOxKB/jetty-or-tomcat.html">http://cwiki.apache.org/GMOxKB/jetty-or-tomcat.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="grb" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id38">[20]</a></td><td><a class="reference external" href="http://www.ibm.com/developerworks/opensource/library/os-ag-security/">http://www.ibm.com/developerworks/opensource/library/os-ag-security/</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="joa" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id3">[21]</a></td><td><a class="reference external" href="http://www.easybeans.org/doc/userguide/en/chunk-integrated/ejb3_introductio…">http://www.easybeans.org/doc/userguide/en/chunk-integrated/ejb3_introductio…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="joc" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id10">[22]</a></td><td><a class="reference external" href="http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…">http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="job" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label">[23]</td><td><em>(<a class="fn-backref" href="#id14">1</a>, <a class="fn-backref" href="#id21">2</a>)</em> <a class="reference external" href="http://wiki.easybeans.org/xwiki/bin/view/Main/JAXWS">http://wiki.easybeans.org/xwiki/bin/view/Main/JAXWS</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jof" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id24">[24]</a></td><td><a class="reference external" href="http://www.jpox.org/docs/jpa/index.html">http://www.jpox.org/docs/jpa/index.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="joe" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id28">[25]</a></td><td><a class="reference external" href="http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…">http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jog" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id31">[26]</a></td><td><a class="reference external" href="http://www.jpox.org/docs/jpa/persistence_xml.html">http://www.jpox.org/docs/jpa/persistence_xml.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="joh" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id33">[27]</a></td><td><a class="reference external" href="http://www.jpox.org/docs/jpa/orm_xml.html">http://www.jpox.org/docs/jpa/orm_xml.html</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="jod" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id39">[28]</a></td><td><a class="reference external" href="http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…">http://jonas.objectweb.org/current/doc/doc-en/integrated/configuration_guid…</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gfd" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id8">[29]</a></td><td><a class="reference external" href="http://blogs.sun.com/swchan/entry/enterprise_java_bean_over_ssl">http://blogs.sun.com/swchan/entry/enterprise_java_bean_over_ssl</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gfe" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id11">[30]</a></td><td><a class="reference external" href="http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/">http://java.sun.com/developer/technicalArticles/J2EE/security_annotation/</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gfa" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id15">[31]</a></td><td><a class="reference external" href="http://wiki.glassfish.java.net/Wiki.jsp?page=WebServicesTechnologies">http://wiki.glassfish.java.net/Wiki.jsp?page=WebServicesTechnologies</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gff" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id18">[32]</a></td><td><a class="reference external" href="https://glassfish.dev.java.net/javaee5/docs/AG/ablrk.html#ablry">https://glassfish.dev.java.net/javaee5/docs/AG/ablrk.html#ablry</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gfb" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id25">[33]</a></td><td><a class="reference external" href="https://glassfish.dev.java.net/javaee5/persistence/">https://glassfish.dev.java.net/javaee5/persistence/</a></td></tr>
+</tbody>
+</table>
+<table class="docutils footnote" frame="void" id="gfc" rules="none">
+<colgroup><col class="label" /><col /></colgroup>
+<tbody valign="top">
+<tr><td class="label"><a class="fn-backref" href="#id34">[34]</a></td><td><a class="reference external" href="https://glassfish.dev.java.net/javaee5/persistence/persistence_faq.html#5">https://glassfish.dev.java.net/javaee5/persistence/persistence_faq.html#5</a></td></tr>
+</tbody>
+</table>
+</div>
+<div class="section" id="sgbd">
+<h3><a class="toc-backref" href="#id65">4.1.3 SGBD</a></h3>
+<p>Pour la base sur le serveur, les performances et la stabilité de PostgreSQL ont été retenues. CÎté client lourd, la base de donnée embarquée H2 est utilisée. Un export XML sera réalisé pour l'interopérabilité.</p>
+</div>
+<div class="section" id="choix-technologiques-transverses">
+<h3><a class="toc-backref" href="#id66">4.1.4 Choix technologiques transverses</a></h3>
+<p>Dans la perspective de réutilisation, les services publiés utiliseront des protocoles standardisés et inter opérables, afin de ne pas limiter le choix du langage.</p>
+<p>La technologie ... a été choisie pour son support de la sécurité et son utilisation courante dans différents langages et sur différents systÚmes d'exploitation.</p>
+</div>
+<div class="section" id="solution-aux-contraintes-d-ergonomie">
+<h3><a class="toc-backref" href="#id67">4.1.5 Solution aux contraintes d'ergonomie</a></h3>
+<p>L'application web respectera les standards W3C XHTML.</p>
+<p>L'application client lourd utilise le framework Swing, disponible sur un grand nombre de plateformes. Sur celles où Java Web Start est disponible, l'application pourra être installée par un simple clic sur le site du client léger.</p>
+</div>
+<div class="section" id="dimensionnement">
+<h3><a class="toc-backref" href="#id68">4.1.6 Dimensionnement</a></h3>
+<p>Une attention particuliÚre devra être faite à la taille des partitions lors de l'intégration en fonction de la volumétrie cible. De même, cÎté client, l'utilisateur doit être informé de l'espace utilisé par l'application par rapport à son espace disponible. La synchronisation doit vérifier au préalable la suffisance d'espace.</p>
+<p>En supposant que chaque simulation prend environ 100ko de paramÚtres, que 10 utilisateurs utilisent l'application en créant 5 simulations par jour, on obtient environ 10Go de paramÚtres de simulation sur 10 ans.</p>
+</div>
+<div class="section" id="solution-pour-l-exploitation-du-syst-me">
+<h3><a class="toc-backref" href="#id69">4.1.7 Solution pour l'exploitation du systÚme</a></h3>
+<p>Lors de la mise à jour de l'application, plusieurs aspects doivent être gérés. Tout d'abord la base de données doit être synchrone avec l'applicatif. Ceci devra se faire automatiquement avec une migration des données executée lors du déploiement d'une nouvelle version.</p>
+<p>Dans un environnement client/serveur, il est nécessaire de garantir la compatibilité entre les deux applications. Ainsi, le serveur mettra à disposition dans la mesure du possible les services avec une compatibilité ascendante. Si la version du client est obsolÚte, l'utilisateur est notifié et il ne peut plus utiliser l'application en mode connecté.</p>
+</div>
+</div>
+<div class="section" id="mod-le-conceptuel">
+<h2><a class="toc-backref" href="#id70">4.2 ModÚle conceptuel</a></h2>
+<div class="section" id="entit-s-des-donn-es">
+<h3><a class="toc-backref" href="#id71">4.2.1 Entités des données</a></h3>
+<img alt="../../../../xmi/images/data.png" src="../../../../xmi/images/data.png" />
+</div>
+<div class="section" id="entit-s-des-authorisations">
+<h3><a class="toc-backref" href="#id72">4.2.2 Entités des authorisations</a></h3>
+<img alt="../../../../xmi/images/entities.png" src="../../../../xmi/images/entities.png" />
+</div>
+<div class="section" id="services-de-stockage">
+<h3><a class="toc-backref" href="#id73">4.2.3 Services de stockage</a></h3>
+<img alt="../../../../xmi/images/storage.png" src="../../../../xmi/images/storage.png" />
+</div>
+<div class="section" id="services-d-authorisation">
+<h3><a class="toc-backref" href="#id74">4.2.4 Services d'authorisation</a></h3>
+<img alt="../../../../xmi/images/authorization.png" src="../../../../xmi/images/authorization.png" />
+</div>
+<div class="section" id="application-web">
+<h3><a class="toc-backref" href="#id75">4.2.5 Application web</a></h3>
+<img alt="../../../../xmi/images/applications.png" src="../../../../xmi/images/applications.png" />
+</div>
+</div>
+<div class="section" id="s-quences-d-utilisation">
+<h2><a class="toc-backref" href="#id76">4.3 Séquences d'utilisation</a></h2>
+<div class="section" id="gestion-des-authorisations">
+<h3><a class="toc-backref" href="#id77">4.3.1 Gestion des authorisations</a></h3>
+<img alt="./authorization.jpg" src="./authorization.jpg" />
+</div>
+</div>
+<div class="section" id="crans-de-l-application">
+<h2><a class="toc-backref" href="#id78">4.4 Ãcrans de l'application</a></h2>
+<div class="section" id="liste-des-l-ments">
+<h3><a class="toc-backref" href="#id79">4.4.1 Liste des éléments</a></h3>
+<img alt="./screenshots/Screenshot.png" src="./screenshots/Screenshot.png" />
+</div>
+<div class="section" id="importer-un-l-ment">
+<h3><a class="toc-backref" href="#id80">4.4.2 Importer un élément</a></h3>
+<img alt="./screenshots/Screenshot-1.png" src="./screenshots/Screenshot-1.png" />
+</div>
+<div class="section" id="liste-des-utilisateurs">
+<h3><a class="toc-backref" href="#id81">4.4.3 Liste des utilisateurs</a></h3>
+<img alt="./screenshots/Screenshot-2.png" src="./screenshots/Screenshot-2.png" />
+</div>
+<div class="section" id="ajouter-diter-un-utilisateur">
+<h3><a class="toc-backref" href="#id82">4.4.4 Ajouter/éditer un utilisateur</a></h3>
+<img alt="./screenshots/Screenshot-3.png" src="./screenshots/Screenshot-3.png" />
+</div>
+<div class="section" id="liste-des-groupes">
+<h3><a class="toc-backref" href="#id83">4.4.5 Liste des groupes</a></h3>
+<img alt="./screenshots/Screenshot-4.png" src="./screenshots/Screenshot-4.png" />
+</div>
+<div class="section" id="ajouter-diter-un-groupe">
+<h3><a class="toc-backref" href="#id84">4.4.6 Ajouter/éditer un groupe</a></h3>
+<img alt="./screenshots/Screenshot-5.png" src="./screenshots/Screenshot-5.png" />
+</div>
+</div>
+</div>
+</div>
+</body>
+</html>
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/architecture.xhtml
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/simexplorer-si/src/site/fr/rst/devel/authorization.jpg
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/authorization.jpg
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/authorization.uxf
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/authorization.uxf (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/authorization.uxf 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.SequenceDiagram</type><coordinates><x>20</x><y>20</y><w>790</w><h>510</h></coordinates><panel_attributes>user|_storageManager_|_loggableManager_|_credentialManager_
+1->>2:1,2:getElement(12)
+2->>4:1,2,4:getCurrentLoggedActor()
+4->2:1,2,4:actor
+2->>2:1,2:getElement(12)
+2->>3:1,2,3:getCredentials(element)
+3->2:1,2,3:itemCredential
+2->1:1,2:element
+1->1:1:Modify element
+1->>2:1,2:saveElement(element)
+2->>3:1,2,3:getCredentials(element.parent)
+3->2:1,2,3:itemCredential
+2->>2:1,2:saveElement(element)
+2->>3:1,2:registerElement(element)
+2->1:1,2:element
+</panel_attributes><additional_attributes></additional_attributes></element></umlet_diagram>
\ No newline at end of file
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/authorization.uxf
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/simexplorer-si/src/site/fr/rst/devel/developpement.abw
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/developpement.abw (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/developpement.abw 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE abiword PUBLIC "-//ABISOURCE//DTD AWML 1.0 Strict//EN" "http://www.abisource.com/awml.dtd">
+<abiword template="false" styles="unlocked" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:math="http://www.w3.org/1998/Math/MathML" xid-max="32" xmlns:dc="http://purl.org/dc/elements/1.1/" fileformat="1.1" xmlns:svg="http://www.w3.org/2000/svg" xmlns:awml="http://www.abisource.com/awml.dtd" xmlns="http://www.abisource.com/awml.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.9.1" xml:space="preserve" props="dom-dir:ltr; document-footnote-restart-section:0; document-endnote-type:numeric; document-endnote-place-enddoc:1; document-endnote-initial:1; lang:fr-FR; document-endnote-restart-section:0; document-footnote-restart-page:0; document-footnote-type:numeric; document-footnote-initial:1; document-endnote-place-endsection:0">
+<!-- ======================================================================== -->
+<!-- This file is an AbiWord document. -->
+<!-- AbiWord is a free, Open Source word processor. -->
+<!-- More information about AbiWord is available at http://www.abisource.com/ -->
+<!-- You should not edit this file by hand. -->
+<!-- ======================================================================== -->
+
+<metadata>
+<m key="dc.format">application/x-abiword</m>
+<m key="abiword.generator">AbiWord</m>
+</metadata>
+<history version="10" edit-time="2201" last-saved="1197912765" uid="f4025158-acc0-11dc-9495-ead58c2affe3">
+<version id="10" started="1197910595" uid="13efae3e-acc6-11dc-9495-ead58c2affe3" auto="0" top-xid="2"/>
+</history>
+<styles>
+<s type="P" name="Normal" followedby="Current Settings" props="font-family:Times New Roman; margin-top:0pt; color:000000; margin-left:0pt; text-position:normal; widows:2; font-style:normal; text-indent:0in; font-variant:normal; margin-right:0pt; lang:fr-FR; line-height:1.0; font-size:12pt; text-decoration:none; margin-bottom:0pt; font-weight:normal; bgcolor:transparent; text-align:left; font-stretch:normal"/>
+</styles>
+<pagesize pagetype="Custom" orientation="portrait" width="450.000000" height="297.000000" units="mm" page-scale="1.000000"/>
+<section xid="1" props="page-margin-right:25.4mm; page-margin-footer:12.7mm; page-margin-header:12.7mm; page-margin-left:25.4mm; page-margin-top:25.4mm; page-margin-bottom:25.4mm">
+<p style="Normal" xid="2"><c props="font-family:Bitstream Vera Sans Mono">Documentation développement Simexplorer-SI</c></p>
+<p style="Normal" xid="3"></p>
+<p style="Normal" xid="4"><c props="font-family:Bitstream Vera Sans Mono">Stockage des données</c></p>
+<p style="Normal" xid="5"></p>
+<p style="Normal" xid="6"><c props="font-family:Bitstream Vera Sans Mono">Découpage</c></p>
+<p style="Normal" xid="7"></p>
+<p style="Normal" xid="8" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Les données ont été décomposées en trois groupes :</c></p>
+<p style="Normal" xid="9" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono"> * les meta-données de chaque élément, permettant de l'identifier, de connaître son type, son parent en version, etc</c></p>
+<p style="Normal" xid="10" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono"> * le contenu indexé, provenant d'une librairie, de résultat, etc. C'est sur ce contenu que la recherche full text sera faite</c></p>
+<p style="Normal" xid="11" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono"> * les données à proprement parler, qui sont stockées sur le systÚme de fichier. On conserve dans ces fichiers les meta données, afin de permettre la reconstruction d'une base à partir d'un dossier.</c></p>
+<p style="Normal" xid="12" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="13" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Stockage des meta données</c></p>
+<p style="Normal" xid="14" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="15" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Une interface permet la gestion de meta-données : Database.</c></p>
+<p style="Normal" xid="16" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Son implémentation est faite par LuceneDatabase.</c></p>
+<p style="Normal" xid="17" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="18" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Stockage des données</c></p>
+<p style="Normal" xid="19" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="20" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Une interface permet la gestion du stockage de données : AttachmentHandler.</c></p>
+<p style="Normal" xid="21" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Son implémentation est faite par FileSystemAttachmentHandler.</c></p>
+<p style="Normal" xid="22" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="23" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Stockage des données et des meta données</c></p>
+<p style="Normal" xid="24" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="25" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Les deux interfaces sont utilisées dans StorageEngine. Cette classe permet en plus de stocker des données temporaires.</c></p>
+<p style="Normal" xid="26" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="27" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Service de gestion des données</c></p>
+<p style="Normal" xid="28" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="31" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="32" props="text-align:left; dom-dir:ltr"></p>
+<p style="Normal" xid="29" props="text-align:left; dom-dir:ltr"><c props="font-family:Bitstream Vera Sans Mono">Service publié</c></p>
+</section>
+</abiword>
Added: trunk/simexplorer-si/src/site/fr/rst/devel/diagramme1.dia
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/diagramme1.dia
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/diagramme1.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/diagramme1.png
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/implementation.rst
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/implementation.rst (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/implementation.rst 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,99 @@
+===============================
+SimExplorer SI - Implémentation
+===============================
+
+.. contents:: :depth: 3
+.. sectnum::
+
+Découpage
+=========
+
+Module entities
+---------------
+
+Ce premier module a trois objectifs :
+ #. les classes de données
+ #. les types de contenus attachés aux données
+ #. les "usines" à instances, capables d'instancier les données, et de sérialiser/désérialiser en XML
+
+Classes de données
+__________________
+
+Ce sont des classes sérializables. Elles représentent le modèle de données fournies.
+Le type "LoggableElement" se voit rattaché une association vers un "MetaDataEntity". Cette classe contient
+toutes les propriétés nécessaires au fonctionnement de Simexplorer SI.
+
+Types de contenus
+_________________
+
+Afin de traiter les contenus attachés aux données, ContentType permet de spécifier le type d'un contenu en
+fournissant le MIME type et une méthode virtuelle de conversion d'un flux en texte, afin de l'afficher ou de
+l'indexer pour la recherche.
+
+Factories
+_________
+
+Ces classes servent à charger/sauver les objets sous la forme de fichiers XML.
+
+Module storage
+--------------
+
+Database
+________
+
+Cette interface spécifie comment les meta données doivent être gérées.
+On y trouvera :
+ #. ouverture/fermeture/commit
+ #. insertion d'élément
+ #. Récupération d'un élément dans sa dernière version, ou dans une version spécifique
+ grâce à l'obtention de toutes ses versions
+ #. Recherche paginée d'élements (ie comptage et extraction d'un sous ensemble des résultats) :
+ - par propriétés
+ - par type
+ - par recherche dans le contenu
+ #. Suppression d'un élément
+
+Une implémentation est fournie, basée sur Lucene.
+
+Attachment
+__________
+
+On trouvera dans cette interface les méthodes nécessaires à la gestion du stockage des flux.
+Ainsi, on peut stocker/retrouver/effacer un flux.
+Un flux est l'association d'une meta donnée, d'un champ et d'un contenu (InputStream).
+
+Une implementation est fournie, basée sur le système de fichiers.
+
+Engine
+______
+
+On trouvera dans ce dernier package l'association de "Database" et "Attachment".
+On retrouvera grosso modo les méthodes disponibles dans "Database", agrémentées des flux de contenu,
+en convertissant les contenus attaché aux meta données en données indexables par exemple.
+StorageEngine propose aussi le stockage de flux temporaires, afin de dupliquer des InputStream.
+
+Module service
+--------------
+
+Ce module est constitué d'une interface du service et de ses implémentations.
+On retrouvera dans cette interface tout ce qui est nécessaire au fonctionnement de :
+ #. l'application web, en accès EJB
+ #. le service de stockage local du client lourd, en instance locale
+ #. la connexion au serveur central, en accès EJB
+
+Module web
+----------
+
+L'accès au service EJB se fait via StorageServiceFactory. Si le proxy n'a pas été initialisé,
+on recherche l'EJB via des propriétés JNDI propres à JBoss.
+Un ContextListener ouvre le service lors du lancement du serveur, et le ferme à son arrêt.
+
+Un composant Layout permet de définir toutes les pages. Les autres pages utilisent alors
+uniquement ce composant dans leur page, et mette leur contenu propre à l'intérieur.
+
+Authentification/Autorisations
+==============================
+
+On souhaite pouvoir gérer des utilisateurs et des groupes ayant des droits sur les entités de l'application.
+
+L'authentification
\ No newline at end of file
Added: trunk/simexplorer-si/src/site/fr/rst/devel/migration.rst
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/migration.rst (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/migration.rst 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,190 @@
+ToPIA Migration Service
+=======================
+
+ToPIA Migration Service est un module ToPIA chargᅵ d'effectuer la migration
+d'une base de donnᅵes existante sans perte de donnᅵes.
+
+Configuration
+-------------
+Ce service doit disposer de quelques proprietᅵs de configuration pour effectuer
+la migration d'une base de donnᅵes.
+
+Ces propriᅵtᅵs sont fournies au service via un TopiaContext et font donc partie
+de la configuration de l'application.
+
+
+Configuration de la base de donnᅵes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+::
+
+ hibernate.dialect=org.hibernate.dialect.H2Dialect
+ hibernate.connection.username=sa
+ hibernate.connection.password=
+ hibernate.connection.driver_class=org.h2.Driver
+
+ topia.persistence.directories=directory1,directory2
+ topia.persistence.classes=classImpl1,classImpl2
+ topia.persistence.properties.file=???
+
+Ces informations servent ᅵ crᅵer une configuration hibernate (qui contient les
+informations de connexion et les mappings de l'application).
+
+Les lignes commencant par "hibernate" sont spᅵcifiques ᅵ hibernate et au type de
+base de donnᅵes utilisᅵ. Les lignes suivantes sont spᅵcifiques ᅵ ToPIA mais
+contiennent les mappings indispensable pour crᅵer le schᅵma de la base de
+donnᅵes aprᅵs migration.
+
+
+Configuration des mappings
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+La configuration doit contenir ces propriᅵtᅵs :
+
+::
+
+ topia.service.migration.mappingsdir=oldmappings
+ topia.service.migration.modelnames=model1,model2,model3
+
+qui spᅵcifie le rᅵpertoire de recherche des anciens mappings pour les diffᅵrents
+modᅵles.
+
+Ce dossier contient ensuite un sous-dossier par modᅵle comportant chacun un
+sous-dossier par version par version (nommᅵ X, *X* ᅵtant la version), avec pour
+chaque dossier, l'ensemble des mappings hibernate de cette version.
+
+Exemple :
+
+::
+
+ oldmappings/
+ model1/
+ 1/
+ Class1.hbm.xml
+ Class2.hbm.xml
+ Class3.hbm.xml
+ 2/
+ Class1.hbm.xml
+ Class2New.hbm.xml
+ Class3.hbm.xml
+ 2.2/
+ Class2.hbm.xml
+ Class3.hbm.xml
+ Class4New.hbm.xml
+
+
+Configuration de la version
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+La configuration doit contenir une propriᅵtᅵ :
+
+::
+
+ topia.service.migration.version=3.5.1 (exemple)
+
+Cette propriᅵtᅵs renseigne la version *courante* de l'application.
+
+
+Configuration du callback
+~~~~~~~~~~~~~~~~~~~~~~~~~
+Il est possible de dᅵfinir une classe de type MigrationCallbackHandler, pour
+interagir, par exemple, avec l'utilisateur et lui demander s'il faut migrer la
+base de donnᅵes.
+
+Ces //callback// doivent implᅵmenter MigrationCallbackHandler et se trouver dans
+la configuration:
+
+::
+
+ topia.service.migration.callbackhandlers=org.codelutin.test.SwingCallbackHandler
+
+
+Configuration du service
+~~~~~~~~~~~~~~~~~~~~~~~~
+Enfin pour utiliser le service, il faut l'activer. La configuration doit
+contenir la propriᅵtᅵs suivante :
+
+::
+
+ topia.service.migration=org.codelutin.topia.security.TopiaSecurityServiceImpl
+
+
+Utilisation
+-----------
+Ce module ᅵtant un service ToPIA, il doit ᅵtre activᅵ pour pouvoir s'exᅵcuter.
+
+Il commence par se connecter au SGBD, vᅵrifie si les versions diffᅵrent, et
+effectue la migration si besoin.
+
+Classes de migration
+~~~~~~~~~~~~~~~~~~~~
+Pour savoir comment migrer les donnᅵes, le dᅵveloppeur utilisant le module de
+migration doit produire des classes Java de migration (une par classe
+nᅵcᅵssitant une modification et par version).
+
+Ces classes doivent :
+
+- hᅵriter de la classe ``AbstractMigration`` ou de l'interface ``Migration``
+- se trouver dans un sous package des classes d'implᅵmentation rᅵfᅵrencᅵes
+ par les mappings. Ce package doit se nommer VnVm oᅵ:
+
+ - *n* est la version de dᅵpart de migration
+ - *m* la version d'arrivᅵe
+
+- respecter une convention de nommage de la forme
+ MigrationClass oᅵ:
+
+ - *Class* est le nom de l'entitᅵ devant ᅵtre migrᅵe
+
+ Exemple, pour migrer une Personne d'une version 2 ᅵ 2.1:
+ ``V2V2_1.MigratePersonne.java``
+
+ Note: les "." ᅵtant interdits dans le nom de fichier, ils sont remplacᅵs par
+ le caractᅵre "_".
+
+Ensuite, chaque classe doit :
+
+- implᅵmenter au moins la mᅵthode ``migrate(MapAdapter, MapHelper)``
+ cette mᅵthode prend une MapAdapter en paramᅵtre, pour modifier un tuple et un
+ MapHelper pouvant servir ᅵ retrouver des informations sur le reste des tuples
+ de la base
+- surcharger (si besoin) la mᅵthode ``public ProxyClass migrateFrom()`` dans le
+ cas oᅵ les tuples ᅵ modifier proviennent d'une classe diffᅵrente de la classe
+ courante.
+
+Exemple :
+
+Ici, la modification porte sur la transformation de l'attribut ``timestampNaissance``
+de la classe ``domaine.Personne`` en une nouvelle table ``domaine.Naissance``, effectᅵe
+dans le changement de la version 1 ᅵ la version 2 :
+
+::
+
+ // migrateFrom()
+ public ProxyClass migrateFrom() {
+ return new SimpleProxyClass("domaine.Personne");
+ }
+
+ // migrate(MapAdapter, MapHelper)
+ public void migrate(MapAdapter map, MapHelper helper) {
+
+ // map d'entree vide, conversion du timestamp
+ // en jour, mois, annee
+ try {
+ Long timestamp = (Long) map.getOldValue("timestampNaissance");
+ Calendar c = Calendar.getInstance();
+ c.setTimeInMillis(timestamp);
+ map.setValue("jour", c.get(Calendar.DAY_OF_MONTH));
+ map.setValue("mois", c.get(Calendar.MONTH));
+ map.setValue("annee", c.get(Calendar.YEAR));
+ } catch (ExceptionAttributeUndefined e) {
+ e.printStackTrace();
+ }
+ }
+
+Donc cette classe :
+
+- doit se nommer ``MigrateNaissance.java`` et se trouver dans le package
+ ``domaine.V1V2``
+- redᅵfinit la methode migrateFrom() pour indiquer que les donnees proviennent de
+ ``domaine.Personne``
+- implᅵmente ``migrate()`` pour produire des tuples de type ``domaine.Naissance``
+ ᅵ partir de tuples ``domaine.Personne``
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/migration.rst
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/simexplorer-si/src/site/fr/rst/devel/nok.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/nok.png
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/ok.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/ok.png
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-1.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-1.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-2.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-2.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-3.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-3.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-4.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-4.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-5.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot-5.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/screenshots/Screenshot.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/sequence1.uxf
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/sequence1.uxf (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/sequence1.uxf 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.SequenceDiagram</type><coordinates><x>0</x><y>0</y><w>750</w><h>180</h></coordinates><panel_attributes>ui|_storageManager_|_versionManager_|_loggableManager_
+1->>2:1,2:saveElement(element, true)
+2->>3:1,2,3:getVersions(element.id)
+3.>2:1,2,3:[1.0, 1.1, 1.2, 2.0, 2.1]</panel_attributes><additional_attributes></additional_attributes></element></umlet_diagram>
\ No newline at end of file
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/sequence1.uxf
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/simexplorer-si/src/site/fr/rst/devel/template.uxf
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/template.uxf (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/template.uxf 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.SequenceDiagram</type><coordinates><x>20</x><y>20</y><w>390</w><h>330</h></coordinates><panel_attributes>_alpha:A_|_beta:B_|_gamma:G_
+1->>2:1,2
+2-/>1:async Msg.
+3->>>1:1,3
+1.>3:1,3:async return Msg
+1->1:1:self
+iframe{:interaction frame
+2->3:2,3:async Msg.
+iframe}</panel_attributes><additional_attributes></additional_attributes></element></umlet_diagram>
\ No newline at end of file
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/template.uxf
___________________________________________________________________
Name: svn:executable
+ *
Added: trunk/simexplorer-si/src/site/fr/rst/devel/uok.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/site/fr/rst/devel/uok.png
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/site/fr/rst/devel/version.uxf
===================================================================
--- trunk/simexplorer-si/src/site/fr/rst/devel/version.uxf (rev 0)
+++ trunk/simexplorer-si/src/site/fr/rst/devel/version.uxf 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><umlet_diagram><element><type>com.umlet.element.base.SequenceDiagram</type><coordinates><x>20</x><y>20</y><w>330</w><h>390</h></coordinates><panel_attributes>_server_|user1|_user2_
+2->>2:2:création/édition
+2->>1:1,2:commit
+
+1->>2:1,2
+2-/>1:async Msg.
+3->>>1:1,3
+1.>3:1,3:async return Msg
+1->1:1:self
+iframe{:interaction frame
+2->3:2,3:async Msg.
+iframe}</panel_attributes><additional_attributes></additional_attributes></element></umlet_diagram>
\ No newline at end of file
Added: trunk/simexplorer-si/src/test.xml
===================================================================
--- trunk/simexplorer-si/src/test.xml (rev 0)
+++ trunk/simexplorer-si/src/test.xml 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,1633 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ExplorationApplication>
+ <metadata>
+ <uuid>f7c5c08a-a029-405d-8682-3c8f33fb738e</uuid>
+ <name>c5d910c6-2db5-4a53-a5cb-21638d01894b</name>
+ <type>ExplorationApplication</type>
+ <description>test</description>
+ <version>3.4</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035626</creationdate>
+ <hash>b252f70d-be3c-447b-af4b-6a72323bfe39</hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>9cc17dd8-af7e-4426-878c-b81f97287d15</value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>0081a9bf-54c5-41db-ba91-5811f152d210</value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>3b1e1037-bca2-413d-9ece-367e89301bfb</value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>bb821dbe-5a00-44ce-90c0-5f727ce7ce51</value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>ccfa1dae-48d5-40a5-bf60-7efd75f7420e</value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>24e48660-ffa2-47b3-867b-ba13c2b02aae</value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>6b3b3892-6741-4c30-8a2a-465cc76f242f</value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>e8c2cba4-816b-45df-aeed-751fa711b8a4</value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <data>
+ <explorationdata>
+ <metadata>
+ <uuid>f7300135-3581-4328-93d1-dc11ceba88e9</uuid>
+ <name>5d61898e-cb72-480f-a99a-33bed9cc12ed</name>
+ <type>ExplorationData</type>
+ <description>test</description>
+ <version>1.2.0</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035642</creationdate>
+ <hash>e2e8800d-43b5-477f-8d44-167367d2c9c1</hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 0399d385-c362-4fab-89cc-48f1bc841475
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 2f57461c-5f0f-4d66-9c3b-6243068e483f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ cc63a1fb-2351-48aa-8b96-a2889eca460f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ b1a140ed-75d6-4bb8-af16-8f602bdfd37f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ e1814825-5bec-449e-bb29-a4870d82ee1a
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 202b6835-191b-4552-9cb2-1b29839180c7
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 1ccf5683-f760-4ca8-b230-e99b1588c0e9
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 992670b7-8e06-4dc2-87f4-b7e9762bf58e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ f39b8cea-e856-4301-9eb2-62bea3d98ab5
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <result />
+ <values>
+ <value>
+ <constant>
+ <name>
+ b5421c19-bfe0-481c-b9f1-6cba51b0b3d4
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-251042343</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ 464f7352-9c1b-4993-9784-b67a731f3d8a
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>1330352354</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ 0d32576f-2f9e-4239-8bee-0271179a443a
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-1292071150</value>
+ </value>
+ </values>
+ </explorationdata>
+ <explorationdata>
+ <metadata>
+ <uuid>90dbf702-25fd-43eb-a3b3-cc1c39b6d24b</uuid>
+ <name>904634d2-5179-48f7-9344-eaf4882452fe</name>
+ <type>ExplorationData</type>
+ <description>test</description>
+ <version>1.0.1</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035640</creationdate>
+ <hash>4bdb8884-6a50-4a13-98d4-e4dbe3d8cbdc</hash>
+ <descriptors>
+ <descriptor>
+ <name>11</name>
+ <value>
+ 0ec5c273-fda2-4037-91c4-6f557f1d623d
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>12</name>
+ <value>
+ 82452a7a-8b2f-4d55-b339-275c26e15589
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 6d36fee4-3907-4dcd-b09b-5bec05df6383
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ b53058be-fc38-4c14-b392-b1d5f70e5ba1
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 53d24cb2-68fe-4a00-9dba-f231b45652b1
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>10</name>
+ <value>
+ 6364e6a5-387a-4626-9757-be4a88df22f7
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 133480c8-d195-4e73-b5ef-83ebfe5dfeb9
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ e97e30b0-c15f-426f-a9ce-1837a8de582f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 3a797f5a-f264-427a-a09f-95b6ee41ffb9
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 61187423-ca4b-483d-be55-bcb6c1005c70
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 799fd1ba-706a-4e72-ba20-d61b1b62cb4f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>9</name>
+ <value>
+ b480113a-e61a-4c70-8836-19d41e98c5f3
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ 87aa8075-542f-4e69-811b-ed0e36b70b2f
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <result />
+ <values>
+ <value>
+ <constant>
+ <name>
+ 805b6571-e663-436b-ac0f-5ae3460f70de
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>1421994135</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ cdb6223b-5f45-46f9-b760-56370968e55d
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-1869214744</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ a1e0a32b-1b6d-4fb4-a986-67f368c6e734
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-1707015162</value>
+ </value>
+ </values>
+ </explorationdata>
+ <explorationdata>
+ <metadata>
+ <uuid>51c71f31-63aa-4d3f-bccc-c8809d89c9cd</uuid>
+ <name>ac37ddab-f5f5-4679-b65b-1f2b3ce6151b</name>
+ <type>ExplorationData</type>
+ <description>test</description>
+ <version>1.3.0</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035639</creationdate>
+ <hash>b3ba77d4-e889-4a41-95a8-6e3dc20584c5</hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 3aa7a4dd-7e47-42c7-a1d8-7b122cef0a5b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 86669376-3b57-4a71-ac1f-c0178dccbaa7
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 4cb8d1dc-5163-45b4-8854-105a2e1ff8c9
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 5e7b4c08-8588-45f9-89e9-03c64ce41804
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 2e799975-5b00-4408-9d66-e253671e35d9
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 54c7366d-1090-4904-9a37-50f2cb0a0b62
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ db13a9c6-0671-4b9b-bee5-5160800a6b97
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 0d5c8074-2879-4591-a7a7-b2984bb6fb2b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ a611cfdf-d7d0-41b3-bdea-d8405298c2d7
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <result />
+ <values>
+ <value>
+ <constant>
+ <name>
+ b3d67f99-e185-4d4c-86d6-c989caf2178b
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-1272664950</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ df4d1c9a-c5bd-48d7-b068-4e8009316926
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>349253762</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ 8595032c-21a4-4beb-978a-6a5bca7dfbcb
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-2034017147</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ d824e208-906e-49dd-86fd-92e091b73461
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-63517148</value>
+ </value>
+ </values>
+ </explorationdata>
+ <explorationdata>
+ <metadata>
+ <uuid>e96a758f-4c0e-4ef3-bf67-216ec451033c</uuid>
+ <name>1c58ff6a-b903-4062-982a-c3fdcfd3acfe</name>
+ <type>ExplorationData</type>
+ <description>test</description>
+ <version>3.4</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035638</creationdate>
+ <hash>a34c80e2-5aab-4386-9d5e-a7941e5bb17f</hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ da7e32eb-8ef7-4dc0-8413-394f1fa6a904
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ cf3be1ab-4a18-4291-8638-5b029e664d77
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ fc1a898d-e75e-4f90-ae7a-b122b454bce5
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ b33847d7-33e7-4c12-8f16-af3d6ebc5da4
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ e3da71f4-d716-474f-93cc-0f4a09c4233c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 092c0d5e-6708-4294-b150-fc1efb87a616
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 6d7e1d1d-8199-4122-adc6-fd58898f8137
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 04b97275-6abe-481b-b11a-f90b4201ff62
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ c6012864-70a3-4054-833a-f52dbc3b8d9d
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <result />
+ <values>
+ <value>
+ <constant>
+ <name>
+ 1c534910-1ffb-445d-bd9e-6b40a811e0cf
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-606798577</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ 0e166e06-63bd-4157-9a6e-548fa60edd38
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>565097214</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ 8a9034ee-8770-4d3a-a910-19325779fda2
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>-1686499581</value>
+ </value>
+ <value>
+ <constant>
+ <name>
+ ca8959e4-923c-4672-87b5-05a540906113
+ </name>
+ <type>java.lang.Integer</type>
+ </constant>
+ <value>1952692035</value>
+ </value>
+ </values>
+ </explorationdata>
+ </data>
+ <components>
+ <component>
+ <metadata>
+ <uuid>780746b4-4d85-4c1b-bc22-2d8e408a8794</uuid>
+ <name>5f792ae5-6e9c-4a5c-8a85-8b723218b822</name>
+ <type>Component</type>
+ <description>test</description>
+ <version>1.4.4</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035662</creationdate>
+ <hash>fc274528-2e2e-4ccf-9f6e-f91e823cd7fe</hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ ceba242a-0986-4cd9-884a-079795c82952
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 0352b7e0-4d71-4031-a015-c785720f4bff
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 388d7d75-801e-4067-9fbb-585f0d5b32fc
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ bcd1b47e-5cb7-49a5-ae2e-859659b2757d
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 9af36ac5-bf0e-4e25-9962-228e5100df27
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 53fb696d-2c55-47c7-af94-9aef5dbba3c2
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ e9c1eb39-9751-4e44-896a-8cfe0cf80efc
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ a1a6a2a8-69e7-4475-9813-ddde38d63b50
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ 22bf7aa8-1055-4431-bcb8-927d30d3d273
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <constants>
+ <constant>
+ <name>59b4349d-58ff-4b17-a42f-1cfb699f8e87</name>
+ <type>java.lang.String</type>
+ </constant>
+ <constant>
+ <name>fd24040e-5426-47b6-a0b8-802ab0d61f28</name>
+ <type>java.lang.String</type>
+ </constant>
+ <constant>
+ <name>ece9449d-bdcb-4891-8871-9bd5f9a213b5</name>
+ <type>java.lang.String</type>
+ </constant>
+ <constant>
+ <name>deef705a-4cca-49f6-9699-b78974295011</name>
+ <type>java.lang.String</type>
+ </constant>
+ </constants>
+ <codes>
+ <code>
+ <language>
+ 0be149ec-0fad-447d-bfe5-60bea93447c1
+ </language>
+ <code>ce410204-c193-4849-ba14-3366fcf5793f</code>
+ </code>
+ <code>
+ <language>
+ 1311b469-81cc-4172-aa9a-be5ada24845a
+ </language>
+ <code>6bd8e47f-010e-4069-a30d-231b160a23e3</code>
+ </code>
+ <code>
+ <language>
+ 5522b5e0-bc41-4045-a6df-b664a4193407
+ </language>
+ <code>fa06611f-6297-4b24-a2d6-35123ca1e8f6</code>
+ </code>
+ </codes>
+ <libraries>
+ <library>
+ <metadata>
+ <uuid>
+ 1a388016-0ca1-4040-9577-7bcfe22ef859
+ </uuid>
+ <name>
+ 0d05df09-5aeb-4a1a-ba3b-cf0d9628c75d
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>2.3</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035678</creationdate>
+ <hash>
+ de2a143b-d5cf-4a7e-b1ce-84b5a58f3130
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 6331fed8-3cdb-4a2e-979b-eba79b64af74
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ b29e8777-9c4d-4470-9e00-0adc6cf419fc
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>10</name>
+ <value>
+ 3f4c5332-6aff-4b28-9ae3-6bc7aa564b2c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 1902fb52-62c0-41c0-b9a9-5608c78c7361
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 56da036f-e9e9-4170-8e35-a49dd8f9e01d
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ a7374808-3d0d-42f1-9e97-88d7558541de
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 202998d6-dc36-4586-ba6a-8ff8c2a4985a
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ a914b872-b3fa-42f1-b619-10e7bca10d3f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 35724543-9044-4a87-94fd-f0759c6e6f8f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>9</name>
+ <value>
+ e9d6218d-4757-40c2-85a8-bb076e92fedb
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ 5e04183b-6f1b-48a6-bf6d-b44a799e32c7
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ 254b9105-720c-4350-a2d8-a92db19ee388
+ </uuid>
+ <name>
+ f09a4526-49c1-4a4e-8dc2-e3239ac51c58
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>1.3</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035674</creationdate>
+ <hash>
+ d9bc5d6c-1e9c-42d4-a5c3-d51317436a16
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ d60e441e-9c65-4a49-a555-47fa73a01cc7
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 74730122-d73d-4a0a-bce7-551640d0695b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 49100e40-323d-4137-ad62-237a074b4d4c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 33ef7950-18e9-41d2-9378-62a5a5a4d223
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 6fd4ba41-2b59-4fb4-ba4f-3ed6e7ce940f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ efdab15f-d65a-44ea-8623-db9f09207756
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ 83d4a361-a180-4c08-8fd9-9cb5cad77f9c
+ </uuid>
+ <name>
+ c404c318-7860-45d0-b660-4f6c404c8664
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>3.2</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035672</creationdate>
+ <hash>
+ 49d7fe09-7d8d-41b5-8d7a-37c052a4acf1
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>11</name>
+ <value>
+ 51990c64-3063-4275-8466-3c5728c0eb5b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>12</name>
+ <value>
+ 9d638958-9e78-4dc8-b18d-09b8f6f4691f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 476d493d-805b-4ddd-b148-cba8e096f3cb
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ bd33efc8-0500-4115-806a-3cd5d19d9fd2
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ dbd48e8e-119f-40e7-8f55-5025a462b9a7
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>10</name>
+ <value>
+ 90e574f4-80a6-4c42-8238-cb0a8a87f32b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ fdf9345a-df3f-4fbc-87ac-44ff3d80c723
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 53a17894-14cb-4897-a567-eb68b21a6dd2
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 74187f2c-2694-4076-bc11-6e72fb940f2b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ fe3f2dcd-5437-4381-b39a-713ed07f371e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ c373a86a-ba75-4b4d-8e17-fa01233bc0d3
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>9</name>
+ <value>
+ cb8a5759-aaf8-48b2-b4e0-99c28811273a
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ 4117edc6-7597-42fd-a9a4-13d355d82d95
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ 152295b1-9869-40ef-8554-d9a6a4763dde
+ </uuid>
+ <name>
+ b1652685-1655-457d-bbb8-7a08535f2fac
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>4.4</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035675</creationdate>
+ <hash>
+ 2caf9e86-80a9-4fa7-867b-5850321f1dd3
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ f80b25e7-683a-4456-baa7-26aac2cb7043
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 609ba46f-5d0c-4148-8e8b-af85b98517a3
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 4371755d-92fd-44b5-b9cd-0f2073602b47
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ ee2e68e4-d470-4f0b-a921-c69ec24bf332
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 7aa9d35f-a239-42d3-8549-ac6ed6f95668
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ a812f592-d572-4301-a5f4-c6914bfef48c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 59fedb12-08f9-46ed-8025-30034cea4d80
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ </libraries>
+ </component>
+ <component>
+ <metadata>
+ <uuid>670d1eeb-7398-4469-b6d0-eb733fb5f519</uuid>
+ <name>95654093-4b99-4573-a966-01e1c6c453da</name>
+ <type>Component</type>
+ <description>test</description>
+ <version>4.3</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035663</creationdate>
+ <hash>6797366c-0b5e-4057-8ee9-40f9a3be55e2</hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ e5838159-28c6-4f04-84b5-aaa3f695b0ba
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 9f05d3fd-5c81-40d7-8678-ef75211d56be
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 1c7eff18-152a-4d46-8014-aff462239171
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ efe91657-742d-4933-9415-96268eccd4ab
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ d5e9e19a-791f-49fb-9b30-72305c6ceb71
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 7480222c-cb6a-4d8f-9b27-cb6e24aaa408
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ aa43cc4e-0a65-4f3a-a3a8-79b86b14e17b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ ab11f7c6-e5e3-4531-a8bc-631c9cbc9ff1
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <constants>
+ <constant>
+ <name>979e4310-8b7c-44b6-b788-e58a2db94a4f</name>
+ <type>java.lang.String</type>
+ </constant>
+ <constant>
+ <name>5dde5c4e-4139-4abd-90b4-343f24a9708f</name>
+ <type>java.lang.String</type>
+ </constant>
+ <constant>
+ <name>2c9acc6a-3a1a-4c10-878c-47f2b1bc81a7</name>
+ <type>java.lang.String</type>
+ </constant>
+ </constants>
+ <codes>
+ <code>
+ <language>
+ f42acf3a-84c6-484f-8351-32e3240d8bc3
+ </language>
+ <code>621f4446-02e5-4551-9b10-d98c91bd7d28</code>
+ </code>
+ <code>
+ <language>
+ 8ea39aff-39eb-4438-a019-01f8b73f0b05
+ </language>
+ <code>7fe3a735-95d6-4e88-9747-35ef70f0845c</code>
+ </code>
+ <code>
+ <language>
+ 0fc241dd-4acb-4dd3-8c12-10202e634823
+ </language>
+ <code>131fee52-6cfb-4de0-acb5-4533bb913bde</code>
+ </code>
+ <code>
+ <language>
+ 77021bf5-e73a-4d50-8661-bf30fef6c30d
+ </language>
+ <code>06b136d6-9169-46a9-8b1c-6b9f635054d8</code>
+ </code>
+ </codes>
+ <libraries>
+ <library>
+ <metadata>
+ <uuid>
+ abceccca-12de-4642-9735-c3c89027d442
+ </uuid>
+ <name>
+ 7b2b3a07-7829-4069-955b-8291d8dce440
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>3.2</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035680</creationdate>
+ <hash>
+ ac2f3669-e90a-4be6-8844-f986994a145c
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ f8c4e55c-5497-4780-895a-163b43eea1cc
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ aa286d5e-0965-4750-960e-feb3c23e772a
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>10</name>
+ <value>
+ 0a5167f9-c2d9-4504-a728-97a045f3347a
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ b113e7a4-dd4f-42fa-b253-fb4a862e76b9
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 0a370804-981f-42fd-8f41-faa6f8f08d2e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 68a99e09-c7a1-43bc-956a-ac9a1966e20c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 104b99a7-5850-4606-b038-57517c4f9086
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ f50e113e-c1ff-40b4-a10e-aaf088af44f3
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ d11ba719-2802-453b-878d-0c6079542b4e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>9</name>
+ <value>
+ b21328d2-19c1-4c0a-92ab-dc36f31c4404
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ 911e3de1-9df3-4ec1-b160-8e4d925e15cb
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>11</name>
+ <value>
+ 076d4305-fd1e-4e54-8c9c-40bbb72c80ae
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ be41ccc8-3ff3-478f-8709-b9cb77938525
+ </uuid>
+ <name>
+ c63ffd86-95b2-4dd3-85ff-a5865e01b851
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>4.4</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035681</creationdate>
+ <hash>
+ 62e2f90f-039f-471e-bbcf-3a32fa0cecc5
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 552dc19a-6b26-44d1-91ad-eb3f788c349b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 01207df6-8b6f-4b9f-988a-1f697fc714d2
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>10</name>
+ <value>
+ 463f90b7-c81d-4bd7-ab60-2033b9e034a0
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 6766d9c9-ab63-4cc9-acb8-29548a448e0f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 2011369e-d8fe-4142-94e6-5ebd1f70ba65
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 523cd69a-7560-4f78-9b16-2928985848d8
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 0e242647-b402-4646-aa26-84bed9f5a18c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 39d6d890-6311-4e99-a1e4-fb6a2224d9fa
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 3de7e60d-50db-482f-8fdb-155ce2b37282
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>9</name>
+ <value>
+ b32cc483-174c-47f2-ade8-3ce19a569d12
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ a0a37d20-9f5a-4961-889e-b96d75e8dc3d
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ 0ed955e4-da66-4f84-b134-a01cc1907d57
+ </uuid>
+ <name>
+ 9351aad9-fa32-4580-88a2-09f843e2b212
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>2.3.3</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035683</creationdate>
+ <hash>
+ efd0e393-1a78-4585-8b4e-54a907624dae
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ cd364723-d0c2-4a92-ac64-8f2f392c7093
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 87048fb0-36f5-485a-9d9e-f8bf1622e169
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 61a1bb67-c8b6-4528-b447-9b3337b7e8f8
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 75da3f45-a17f-49c6-8df7-afe85d19ff41
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 28dd472a-77af-409e-bb07-6dc1d8aa0789
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ c54ad1cd-00ef-4100-b4c2-14c6ae1b59b4
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 4aa51666-bf78-4496-81c5-ea6ff89c8f4a
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 2dbc2587-0148-4882-84e9-b895887fbe43
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ 99783169-ef28-457b-af18-8a67716b1c72
+ </uuid>
+ <name>
+ 8a44a9fc-8469-44a3-9a99-6347c2543579
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>2.3</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035681</creationdate>
+ <hash>
+ 9e769d9f-0732-42de-baa4-79a802aeda88
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 6f8511c1-8d09-4bb4-85b2-0fab7040ec13
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 243a9adb-347d-4824-a4af-cfb1eff1231e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 365b46f6-1aff-441c-8a76-c5614727895e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ bda11d43-becd-43d4-b123-b78c19cf5bcb
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 459fd238-2d1b-4b82-9516-880ec5d2db23
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 68b89242-e3b5-4718-93dd-8d28fedb3108
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ c59c569b-bbde-4a6b-af6a-3728f4ae8557
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 3467ad2f-dfff-4de9-ba0d-6019611e91bc
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ 269275b6-830c-4fd2-b376-5d42cdc6108d
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ </libraries>
+ </component>
+ <component>
+ <metadata>
+ <uuid>553770f9-621b-4486-9c16-a50dc0fa1a60</uuid>
+ <name>33769065-a05d-48ec-b7d1-fb8f7da0f284</name>
+ <type>Component</type>
+ <description>test</description>
+ <version>4.1.3</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035651</creationdate>
+ <hash>f0c9d9bc-b01f-4946-b77d-510c8a254be5</hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ ad87c7b4-ac1f-4e2f-8939-8caa420445ed
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ f6a2884a-f1b8-41f5-9eb0-c845aee7d1e3
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ d897c3c9-bfb7-4269-a261-efab5da2222c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 0283d422-25ba-4eb4-afc4-f081334e7eb7
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ faf2d7fc-0757-40a5-8113-5c37d9a63ef4
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 17e632aa-d1be-4a54-9929-aa90b88af8ad
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ 3df3fc2f-fcc1-4f41-9bac-68f1b6bcddd2
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ <constants>
+ <constant>
+ <name>d4e38ebd-f1fc-4b86-9a81-1525f26d54bb</name>
+ <type>java.lang.String</type>
+ </constant>
+ <constant>
+ <name>2171229a-9fa6-4d74-9460-6c07c33e1995</name>
+ <type>java.lang.String</type>
+ </constant>
+ <constant>
+ <name>3b01fea1-35ea-465a-944b-f76bee0808ad</name>
+ <type>java.lang.String</type>
+ </constant>
+ </constants>
+ <codes>
+ <code>
+ <language>
+ 2f3fd2d8-c331-4005-b48b-45c284a7a32a
+ </language>
+ <code>5def8bef-2bbb-4cf7-8f8c-59115f4244eb</code>
+ </code>
+ <code>
+ <language>
+ fb84167a-787e-45c6-b758-97ac24cbf483
+ </language>
+ <code>c7ec8d67-c5e1-4224-931f-096af3834aac</code>
+ </code>
+ <code>
+ <language>
+ 2e8856b8-5c0a-42a4-9dfd-ad4384ede34c
+ </language>
+ <code>0f9957d4-c6d8-48ec-9e90-52355b320bbc</code>
+ </code>
+ </codes>
+ <libraries>
+ <library>
+ <metadata>
+ <uuid>
+ acdfb388-ad0d-400e-83da-64f12baf5e5e
+ </uuid>
+ <name>
+ 08fcbbbb-6a12-4360-968f-f10cf7a3693f
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>3.3.1</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035684</creationdate>
+ <hash>
+ 7e7caf9f-9b01-4539-8ae2-2ba90a81fb96
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 063a85e3-4df2-4c26-a674-19e8e1788c2c
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ ded33cf7-10d3-4c67-bf4e-9b6fb7c9a134
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 3c22a9e0-384a-4590-a0aa-ae8d7e95006d
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 520b213e-4ef5-4318-8429-b821749b8e17
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 65635cd6-0d1d-4918-89ef-9d3841ed793e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ 81fd92ce-dcb8-4653-ba15-0a1cef15c36f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ f4331f88-42ee-4bf5-b432-fcc48930c710
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ c450f134-aa08-441e-830a-76a8fab0d47e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>9</name>
+ <value>
+ 258ff3b1-cd5a-41f9-9f5e-281ac70057d5
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ 76b06c86-d007-4d25-af45-85c38abde3fe
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ 748f5ba0-3e24-4056-ae7d-e8db5790f594
+ </uuid>
+ <name>
+ 59a74744-0a8b-40a1-8a7f-bddda1511c3a
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>2.1.4</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035684</creationdate>
+ <hash>
+ 46b71761-4513-430e-a790-eb026b7a6b87
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 4aeb2eaf-0d7c-4d7e-88fb-ae63addc959e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 625b096f-c393-4260-87a2-bbe252ac041f
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 4a865f21-d34d-4241-845f-6cd81ab0a823
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ 76e2cb83-6f23-41b8-b8ff-3af56d92d3c1
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 5b9b0b80-3f79-4eff-bc10-fc7289d00821
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ b1a51e9c-6df8-47d4-bf10-43afbd6ead2e
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ 2a8771d1-333b-42a7-9fbd-61621300b59b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ fa2b9c11-3126-48b1-a10e-5e1f25bfaa16
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>8</name>
+ <value>
+ a037353c-7eee-4566-83a0-de898b2ac043
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ <library>
+ <metadata>
+ <uuid>
+ 4aa2d328-8cb5-4eb2-8ea0-313270149569
+ </uuid>
+ <name>
+ b383b520-df0f-4b11-9299-e87e31aea22f
+ </name>
+ <type>Library</type>
+ <description>test</description>
+ <version>0.2</version>
+ <latestversion>1</latestversion>
+ <creationdate>1199700035685</creationdate>
+ <hash>
+ a85871fd-a5a2-4e51-8d68-2d0ab68f07f0
+ </hash>
+ <descriptors>
+ <descriptor>
+ <name>3</name>
+ <value>
+ 123a171d-6c3c-4d78-bfbe-6edaf7517e04
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>2</name>
+ <value>
+ 8dd77075-56bf-434d-91b6-2441a1fcb611
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>1</name>
+ <value>
+ 86397ada-708e-4cee-9436-886eab22e331
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>0</name>
+ <value>
+ b8abefd7-48ad-48ad-b7b7-27dda8c01deb
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>7</name>
+ <value>
+ 4ff40a21-a5ab-4c38-b1e0-3979d6826f0b
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>6</name>
+ <value>
+ b8ea399d-54f1-402a-baad-6d36a9c61cf4
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>5</name>
+ <value>
+ fa6fcbe6-25c3-479e-9787-9a08379e9fbe
+ </value>
+ </descriptor>
+ <descriptor>
+ <name>4</name>
+ <value>
+ dbb4e6d8-6ab4-4d18-95cb-1529365f2cd2
+ </value>
+ </descriptor>
+ </descriptors>
+ </metadata>
+ </library>
+ </libraries>
+ </component>
+ </components>
+</ExplorationApplication>
\ No newline at end of file
Added: trunk/simexplorer-si/src/test.xsd
===================================================================
--- trunk/simexplorer-si/src/test.xsd (rev 0)
+++ trunk/simexplorer-si/src/test.xsd 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified">
+ <xs:element name="ExplorationApplication">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="metadata">
+ <xs:sequence>
+ <xs:element ref="data" />
+ <xs:element ref="components" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="data">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="explorationdata" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="explorationdata">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="metadata">
+ <xs:sequence>
+ <xs:element ref="result" />
+ <xs:element ref="values" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="result">
+ <xs:complexType />
+ </xs:element>
+ <xs:element name="values">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="value" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="components">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="component" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="component">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="metadata">
+ <xs:sequence>
+ <xs:element ref="constants" />
+ <xs:element ref="codes" />
+ <xs:element ref="libraries" />
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="constants">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="constant" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="codes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="code" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="libraries">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="library" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="library" type="metadata" />
+ <xs:complexType name="metadata">
+ <xs:sequence>
+ <xs:element ref="metadata" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="metadata">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="uuid" />
+ <xs:element ref="name" />
+ <xs:element ref="type" />
+ <xs:element ref="description" />
+ <xs:element ref="version" />
+ <xs:element ref="latestversion" />
+ <xs:element ref="creationdate" />
+ <xs:element ref="hash" />
+ <xs:element ref="descriptors" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="uuid" type="xs:string" />
+ <xs:element name="description" type="xs:NCName" />
+ <xs:element name="version" type="xs:NMTOKEN" />
+ <xs:element name="latestversion" type="xs:integer" />
+ <xs:element name="creationdate" type="xs:integer" />
+ <xs:element name="hash" type="xs:string" />
+ <xs:element name="descriptors">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="descriptor" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="descriptor">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name" />
+ <xs:element ref="value" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="value">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="constant" />
+ <xs:element ref="value" />
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="constant">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="name" />
+ <xs:element ref="type" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="code">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="code" />
+ <xs:element ref="language" />
+ </xs:choice>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="language" type="xs:string" />
+ <xs:element name="name" type="xs:NMTOKEN" />
+ <xs:element name="type" type="xs:NCName" />
+</xs:schema>
Added: trunk/simexplorer-si/src/xmi/images/applications.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/xmi/images/applications.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/simexplorer-si/src/xmi/images/authorization.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/xmi/images/authorization.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/simexplorer-si/src/xmi/images/data.png
===================================================================
(Binary files differ)
Modified: trunk/simexplorer-si/src/xmi/images/entities.png
===================================================================
(Binary files differ)
Added: trunk/simexplorer-si/src/xmi/images/storage.png
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-si/src/xmi/images/storage.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/simexplorer-si/src/xmi/simexplorer-si.zargo
===================================================================
(Binary files differ)
Added: trunk/simexplorer-si/src/xmi/specsSI.xmi
===================================================================
--- trunk/simexplorer-si/src/xmi/specsSI.xmi (rev 0)
+++ trunk/simexplorer-si/src/xmi/specsSI.xmi 2008-01-10 16:00:55 UTC (rev 110)
@@ -0,0 +1,736 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2007-11-29T14:29:37" xmi.version="1.2" >
+ <XMI.header>
+ <XMI.documentation>
+ <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
+ <XMI.exporterVersion>1.5.8</XMI.exporterVersion>
+ <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
+ </XMI.documentation>
+ <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
+ </XMI.header>
+ <XMI.content>
+ <UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="ModÚle UML" >
+ <UML:Namespace.ownedElement>
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="11" isRoot="false" isAbstract="false" name="datatype" />
+ <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" />
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="1" isRoot="false" isAbstract="false" name="Logical View" >
+ <UML:Namespace.ownedElement>
+ <UML:Package stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="8" isRoot="false" isAbstract="false" name="Datatypes" >
+ <UML:Namespace.ownedElement>
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="10" isRoot="false" isAbstract="false" name="int" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="12" isRoot="false" isAbstract="false" name="char" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="13" isRoot="false" isAbstract="false" name="bool" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="14" isRoot="false" isAbstract="false" name="float" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="15" isRoot="false" isAbstract="false" name="double" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="16" isRoot="false" isAbstract="false" name="short" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="17" isRoot="false" isAbstract="false" name="long" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="18" isRoot="false" isAbstract="false" name="unsigned int" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="19" isRoot="false" isAbstract="false" name="unsigned short" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="20" isRoot="false" isAbstract="false" name="unsigned long" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="21" isRoot="false" isAbstract="false" name="string" />
+ <UML:DataType stereotype="11" isSpecification="false" isLeaf="false" visibility="public" namespace="8" xmi.id="8KwjAV84slCS" isRoot="false" isAbstract="false" name="undef" />
+ </UML:Namespace.ownedElement>
+ </UML:Package>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="23" isRoot="false" isAbstract="false" name="SI" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="24" isRoot="false" isAbstract="false" name="SimExplorer Client" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="25" isRoot="false" isAbstract="false" name="HTTP Client" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="30" isRoot="false" isAbstract="false" name="LoggableElement" >
+ <UML:Classifier.feature>
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="48" type="49" name="name" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="OQwmRjL3VZFG" type="49" name="type" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="50" type="49" name="description" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="52" type="10" name="versionID" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="53" type="17" name="creationDate" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="55" type="10" name="owner" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="56" type="10" name="group" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="57" type="10" name="rights" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="70" type="49" name="checksum" />
+ <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="212" isRoot="false" isAbstract="true" isQuery="false" name="diff" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter isSpecification="false" visibility="private" xmi.id="213" value="" type="30" name="element" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="228" isRoot="false" isAbstract="false" isQuery="false" name="addSubversion" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter isSpecification="false" visibility="private" xmi.id="229" value="" type="30" name="element" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="230" isRoot="false" isAbstract="false" isQuery="false" name="deleteCurrentVersion" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter isSpecification="false" visibility="private" xmi.id="232" value="" type="231" name="recursive" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="31" isRoot="false" isAbstract="false" name="Library" >
+ <UML:GeneralizableElement.generalization>
+ <UML:Generalization xmi.idref="71" />
+ </UML:GeneralizableElement.generalization>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="32" isRoot="false" isAbstract="false" name="Component" >
+ <UML:GeneralizableElement.generalization>
+ <UML:Generalization xmi.idref="74" />
+ </UML:GeneralizableElement.generalization>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="33" isRoot="false" isAbstract="false" name="Function" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="34" isRoot="false" isAbstract="false" name="ExplorationApplication" >
+ <UML:GeneralizableElement.generalization>
+ <UML:Generalization xmi.idref="80" />
+ </UML:GeneralizableElement.generalization>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="35" isRoot="false" isAbstract="false" name="ExplorationData" >
+ <UML:GeneralizableElement.generalization>
+ <UML:Generalization xmi.idref="77" />
+ </UML:GeneralizableElement.generalization>
+ <UML:Classifier.feature>
+ <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="205" isRoot="false" isAbstract="false" isQuery="false" name="setConstantValue" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter isSpecification="false" visibility="private" xmi.id="206" value="" type="86" name="c" />
+ <UML:Parameter isSpecification="false" visibility="private" xmi.id="207" value="" type="185" name="value" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="sDZBZ5ClNq0L" isRoot="false" isAbstract="false" isQuery="false" name="getConstantValue" >
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" xmi.id="fAdB7O3w7Dcb" type="185" />
+ <UML:Parameter isSpecification="false" visibility="private" xmi.id="0KUxEe9rtkFt" value="" type="86" name="constant" />
+ </UML:BehavioralFeature.parameter>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="49" isRoot="false" isAbstract="false" name="String" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="58" isRoot="false" isAbstract="false" name="Descriptor" >
+ <UML:Classifier.feature>
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="59" type="49" name="name" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="60" type="49" name="value" />
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="86" isRoot="false" isAbstract="false" name="Constant" >
+ <UML:Classifier.feature>
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="154" type="49" name="name" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="155" type="156" name="type" />
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="96" isRoot="false" isAbstract="false" name="File" >
+ <UML:Classifier.feature>
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="97" type="49" name="name" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="98" type="49" name="location" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="99" type="49" name="checksum" />
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="149" isRoot="false" isAbstract="false" name="nouvelle_classe" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="151" isRoot="false" isAbstract="false" name="Object[]" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="153" isRoot="false" isAbstract="false" name="String[]" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="156" isRoot="false" isAbstract="false" name="Class" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="183" isRoot="false" isAbstract="false" name="ConstantValue" >
+ <UML:Classifier.feature>
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="184" type="185" name="value" />
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="185" isRoot="false" isAbstract="false" name="Object" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="186" isRoot="false" isAbstract="false" name="Repository" />
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="231" isRoot="false" isAbstract="false" name="boolean" />
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="36" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="OehXMzc6R5S7" aggregation="aggregate" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zQlN0Bsscn4o" aggregation="none" type="31" name="" multiplicity="n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="39" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="k6QcvETJsArD" aggregation="aggregate" type="35" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="7TJYYjdV7Oq8" aggregation="none" type="32" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="42" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ai0AV2wD8Lo3" aggregation="aggregate" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ZHLQPCdUdu09" aggregation="none" type="33" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="61" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="1DkgwikeDJHe" aggregation="none" type="30" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zqk1VKjvTVf9" aggregation="none" type="58" name="" multiplicity="0..*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Generalization isSpecification="false" child="31" visibility="public" namespace="1" xmi.id="71" parent="30" discriminator="" name="" />
+ <UML:Generalization isSpecification="false" child="32" visibility="public" namespace="1" xmi.id="74" parent="30" discriminator="" name="" />
+ <UML:Generalization isSpecification="false" child="35" visibility="public" namespace="1" xmi.id="77" parent="30" discriminator="" name="" />
+ <UML:Generalization isSpecification="false" child="34" visibility="public" namespace="1" xmi.id="80" parent="30" discriminator="" name="" />
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="90" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Vak8SkH4NtoM" aggregation="aggregate" type="35" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="MdwVRe7IKxFI" aggregation="none" type="86" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="93" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ZFrQZog4MOBo" aggregation="aggregate" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6QtRIfoeGk7i" aggregation="none" type="86" name="constants" multiplicity="1..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="100" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="OCyg8DyhQn8z" aggregation="aggregate" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Zm2tBDiHbZjt" aggregation="none" type="96" name="codes" multiplicity="n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="103" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="EXVUFcAbp6Fx" aggregation="aggregate" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="JCckzihXVjQg" aggregation="none" type="96" name="structures" multiplicity="n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="122" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="u6vWfcPr7vKM" aggregation="aggregate" type="34" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="VSxIZBDqNoYK" aggregation="none" type="32" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="125" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="WGr1xGfsKbO0" aggregation="aggregate" type="31" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BlpJe7f8abQ7" aggregation="none" type="33" name="" multiplicity="n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="128" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="mcx9QWTukJwh" aggregation="none" type="33" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="XZZr8vpKhfdJ" aggregation="none" type="96" name="code" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="131" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="kGRKrqRbQNiq" aggregation="none" type="33" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="tAkbTeI0CspK" aggregation="none" type="96" name="inputDataStructure" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="134" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="nfeSIHk2YBNN" aggregation="none" type="33" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zmxP9fF0pybG" aggregation="none" type="96" name="outputDataStructure" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="158" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="auEmk47Vhjwz" aggregation="composite" type="34" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zg1VrMsr7pEE" aggregation="none" type="35" name="explorations" multiplicity="1..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="161" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="TUFGQoVygjlQ" aggregation="composite" type="34" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lquQXqPWWP1L" aggregation="none" type="32" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="164" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="jsAqhP58rIPF" aggregation="composite" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="6uDnbwBLk5lI" aggregation="none" type="86" name="constants" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="171" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="v9mPYolHgt6L" aggregation="composite" type="34" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="I9U7RrMVjaII" aggregation="none" type="32" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="174" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="UUdFXNVTWHs4" aggregation="composite" type="34" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="5bJjVP5lWXtx" aggregation="none" type="35" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="180" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="MDT3njLGBxVj" aggregation="aggregate" type="34" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KyAqF0sJaB23" aggregation="none" type="32" name="components" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="187" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Z5o5af3wtUze" aggregation="composite" type="186" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="BJuNGN4aJEQZ" aggregation="none" type="34" name="applications" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="190" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="CIqmRsp0wc6W" aggregation="composite" type="186" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="F7R8ZOlkhd7x" aggregation="none" type="31" name="libraries" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="197" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="z9XINvrYBhKd" aggregation="none" type="35" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Y8dSkhwzmN6L" aggregation="none" type="183" name="valuesMap" multiplicity="1..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="200" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="mp6TSBPRLwig" aggregation="composite" type="186" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="qZE1FXelfGDP" aggregation="none" type="32" name="components" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="214" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="v9MiVQ1HF5ig" aggregation="composite" type="30" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="H75a2nGsLTtY" aggregation="none" type="30" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="217" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="0WHfmU2hbMN4" aggregation="none" type="30" name="childs" multiplicity="0..n" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="nPJ0U2gj7kJ9" aggregation="none" type="30" name="parent" multiplicity="1" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="233" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="XYzq1tO1Pfg9" aggregation="aggregate" type="30" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="7goh2ClnZ5o1" aggregation="none" type="58" name="descriptors" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="B2zME5gw4DaC" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="gIrxFvmXAZOS" aggregation="none" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="xshuetfptfC7" aggregation="none" type="31" name="" multiplicity="n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="0pBuvPUWvg71" isRoot="false" isAbstract="true" name="Structure" />
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="DS8SoqJnhmyf" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="c7ZVW21Ri8Rt" aggregation="composite" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="mSOyciinBoGx" aggregation="none" type="0pBuvPUWvg71" name="" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="SANjhlRxGZ3W" isRoot="false" isAbstract="false" name="Code" >
+ <UML:Classifier.feature>
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="lZfoWZ2BKBPT" type="49" name="language" />
+ <UML:Attribute isSpecification="false" visibility="private" xmi.id="UHYhe0GPL1w1" type="49" name="code" />
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="8WjIhfF3OQKi" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="CLOF02ESAaBs" aggregation="composite" type="32" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="JbnZ8o3EKnW1" aggregation="none" type="SANjhlRxGZ3W" name="" multiplicity="0..n" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="1" xmi.id="I4mI36G7DZSn" isRoot="false" isAbstract="false" name="Result" />
+ <UML:Association isSpecification="false" visibility="public" namespace="1" xmi.id="jdf9In4cX0Dg" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="IpkaFFTVJDoM" aggregation="none" type="35" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="I2RTctGJUtQk" aggregation="none" type="I4mI36G7DZSn" name="" multiplicity="0..1" />
+ </UML:Association.connection>
+ </UML:Association>
+ </UML:Namespace.ownedElement>
+ <XMI.extension xmi.extender="umbrello" >
+ <diagrams>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="112" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="990" snapy="10" showatts="1" xmi.id="9" documentation="" type="1" showops="1" showpackage="0" name="diagramme de classes" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="628" >
+ <widgets>
+ <classwidget usesdiagramfillcolor="0" width="292" showattsigs="601" x="238" fillcolor="#ffffc0" y="22" showopsigs="601" linewidth="none" height="208" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="30" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,1,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="1" width="61" showattsigs="601" x="732" fillcolor="none" y="358" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="31" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolor="0" width="91" showattsigs="601" x="537" fillcolor="#ffffc0" y="350" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="32" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="0" width="224" showattsigs="601" x="253" fillcolor="#ffffc0" y="274" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="34" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="0" width="313" showattsigs="601" x="46" fillcolor="#ffffc0" y="355" showopsigs="601" linewidth="none" height="56" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="35" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="0" width="104" showattsigs="601" x="677" fillcolor="#ffffc0" y="66" showopsigs="601" linewidth="none" height="56" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="58" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="0" width="104" showattsigs="601" x="305" fillcolor="#ffffc0" y="502" showopsigs="601" linewidth="none" height="56" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="86" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="0" width="116" showattsigs="601" x="135" fillcolor="#ffffc0" y="472" showopsigs="601" linewidth="none" height="40" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="183" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="1" width="88" showattsigs="601" x="670" fillcolor="none" y="155" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="186" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <notewidget usesdiagramfillcolor="1" width="101" x="833" fillcolor="none" y="357" linewidth="none" height="50" usefillcolor="1" isinstance="0" xmi.id="204" showstereotype="1" text="Plugin architecture" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <notewidget usesdiagramfillcolor="1" width="99" x="28" fillcolor="none" y="23" linewidth="none" height="118" usefillcolor="1" isinstance="0" xmi.id="DQlyKHw7rVUH" text="type value belongs to an enumeration defining." usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <interfacewidget usesdiagramfillcolor="1" width="89" x="486" fillcolor="none" y="510" drawascircle="0" showopsigs="601" linewidth="none" height="48" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="0pBuvPUWvg71" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,1,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolor="0" width="125" showattsigs="601" x="613" fillcolor="#ffffc0" y="440" showopsigs="601" linewidth="none" height="56" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="SANjhlRxGZ3W" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+ <classwidget usesdiagramfillcolor="1" width="55" showattsigs="601" x="41" fillcolor="none" y="504" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="I4mI36G7DZSn" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <notewidget usesdiagramfillcolor="1" width="214" x="80" fillcolor="none" y="549" linewidth="none" height="75" usefillcolor="1" isinstance="0" xmi.id="GCOqzDx6ErUV" text="Contains all the result of the exploration and its simulation results. All these datas are zipped in a archive." usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </widgets>
+ <messages/>
+ <associations>
+ <assocwidget totalcounta="3" indexa="1" totalcountb="5" indexb="1" linewidth="none" widgetbid="30" widgetaid="31" xmi.id="71" type="500" linecolor="none" >
+ <linepath>
+ <startpoint startx="746" starty="358" />
+ <endpoint endx="330" endy="230" />
+ <point x="746" y="264" />
+ <point x="330" y="264" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="1" totalcountb="5" indexb="2" linewidth="none" widgetbid="30" widgetaid="32" xmi.id="74" type="500" linecolor="none" >
+ <linepath>
+ <startpoint startx="558" starty="350" />
+ <endpoint endx="330" endy="230" />
+ <point x="558" y="264" />
+ <point x="330" y="264" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="1" totalcountb="5" indexb="3" linewidth="none" widgetbid="30" widgetaid="35" xmi.id="77" type="500" linecolor="none" >
+ <linepath>
+ <startpoint startx="180" starty="355" />
+ <endpoint endx="330" endy="230" />
+ <point x="180" y="264" />
+ <point x="330" y="264" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="5" indexb="4" linewidth="none" widgetbid="30" widgetaid="34" xmi.id="80" type="500" linecolor="none" >
+ <linepath>
+ <startpoint startx="365" starty="274" />
+ <endpoint endx="365" endy="230" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="1" totalcountb="3" indexb="2" linewidth="none" widgetbid="35" widgetaid="34" xmi.id="158" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="327" starty="306" />
+ <endpoint endx="327" endy="355" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="251" fillcolor="none" y="330" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="AtaXWEgeuTJx" text="1..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="95" x="283" fillcolor="none" y="333" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="5SlCC2KiaJWb" text="explorations" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="4" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="86" aclsegindex="0" assocclass="183" widgetaid="32" xmi.id="164" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="537" starty="382" />
+ <endpoint endx="409" endy="502" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="384" fillcolor="none" y="476" linewidth="none" posttext="" role="702" height="20" usefillcolor="1" pretext="" isinstance="0" xmi.id="zfpXwM77Fhel" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="77" x="411" fillcolor="none" y="480" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="d2kC7WBAzwL9" text="constants" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="32" widgetaid="34" xmi.id="180" type="501" linecolor="none" >
+ <linepath>
+ <startpoint startx="419" starty="306" />
+ <endpoint endx="537" endy="367" />
+ <point x="419" y="367" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="501" fillcolor="none" y="338" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="0kxzfI7evw9r" showstereotype="1" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="96" x="440" fillcolor="none" y="363" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="wLNqmglPhUZm" text="components" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="4" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="34" widgetaid="186" xmi.id="187" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="710" starty="187" />
+ <endpoint endx="477" endy="294" />
+ <point x="710" y="294" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="481" fillcolor="none" y="268" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="HU7wygiwOfu3" showstereotype="1" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="94" x="478" fillcolor="none" y="297" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="GGyVydFuwcii" text="applications" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="4" indexa="2" totalcountb="3" indexb="2" linewidth="none" widgetbid="31" widgetaid="186" xmi.id="190" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="710" starty="187" />
+ <endpoint endx="792" endy="358" />
+ <point x="710" y="245" />
+ <point x="792" y="245" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="764" fillcolor="none" y="330" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="JutDVcvk40g0" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="68" x="796" fillcolor="none" y="332" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="v1fqvpiC5gf1" text="libraries" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="183" widgetaid="35" xmi.id="197" type="512" linecolor="none" >
+ <linepath>
+ <startpoint startx="188" starty="411" />
+ <endpoint endx="188" endy="472" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="142" fillcolor="none" y="438" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="bWveCYgUTXhw" text="1..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="84" x="188" fillcolor="none" y="439" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="gOw32o6xpmoj" text="valuesMap" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="4" indexa="3" totalcountb="3" indexb="2" linewidth="none" widgetbid="32" widgetaid="186" xmi.id="200" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="710" starty="187" />
+ <endpoint endx="618" endy="350" />
+ <point x="710" y="294" />
+ <point x="618" y="294" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="588" fillcolor="none" y="325" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="sPeg9QPkuIN4" showstereotype="1" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="96" x="622" fillcolor="none" y="329" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="7beBbK9Gg4Jg" text="components" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="31" widgetaid="204" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
+ <linepath>
+ <startpoint startx="833" starty="374" />
+ <endpoint endx="793" endy="374" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="5" indexb="4" linewidth="none" widgetbid="30" widgetaid="30" xmi.id="217" type="512" linecolor="none" >
+ <linepath>
+ <startpoint startx="238" starty="74" />
+ <endpoint endx="238" endy="178" />
+ <point x="130" y="70" />
+ <point x="130" y="166" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="204" fillcolor="none" y="45" linewidth="none" posttext="" role="701" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="UuDOAaT1ZzG7" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="32" x="207" fillcolor="none" y="176" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="DSl0FbPNY39X" text="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="54" x="183" fillcolor="none" y="73" linewidth="none" posttext="" role="709" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="q1YHYEBgpppO" text="childs" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="60" x="176" fillcolor="none" y="156" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="7zem1xStL6XU" text="parent" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="58" widgetaid="30" xmi.id="233" type="501" linecolor="none" >
+ <linepath>
+ <startpoint startx="530" starty="94" />
+ <endpoint endx="677" endy="94" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="626" fillcolor="none" y="44" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="X0y6zECBexBu" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="89" x="592" fillcolor="none" y="101" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="zbOKgwm8ozXz" text="descriptors" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="3" indexb="1" linewidth="none" widgetbid="30" widgetaid="DQlyKHw7rVUH" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
+ <linepath>
+ <startpoint startx="127" starty="46" />
+ <endpoint endx="238" endy="46" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="31" widgetaid="32" xmi.id="B2zME5gw4DaC" type="512" linecolor="none" >
+ <linepath>
+ <startpoint startx="628" starty="372" />
+ <endpoint endx="732" endy="372" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="16" x="714" fillcolor="none" y="349" linewidth="none" posttext="" role="702" height="20" usefillcolor="1" pretext="" isinstance="0" xmi.id="xJwnyoRrSHi7" text="n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="4" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="0pBuvPUWvg71" widgetaid="32" xmi.id="DS8SoqJnhmyf" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="569" starty="382" />
+ <endpoint endx="569" endy="510" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="571" fillcolor="none" y="488" linewidth="none" posttext="" role="702" height="20" usefillcolor="1" pretext="" isinstance="0" xmi.id="vzMjDJMm2g5f" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="4" indexa="3" totalcountb="2" indexb="1" linewidth="none" widgetbid="SANjhlRxGZ3W" widgetaid="32" xmi.id="8WjIhfF3OQKi" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="612" starty="382" />
+ <endpoint endx="613" endy="440" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="615" fillcolor="none" y="418" linewidth="none" posttext="" role="702" height="20" usefillcolor="1" pretext="" isinstance="0" xmi.id="JKucthA1VDGq" text="0..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="I4mI36G7DZSn" widgetaid="35" xmi.id="jdf9In4cX0Dg" type="503" linecolor="none" >
+ <linepath>
+ <startpoint startx="59" starty="411" />
+ <endpoint endx="59" endy="504" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="61" fillcolor="none" y="482" linewidth="none" posttext="" role="702" height="20" usefillcolor="1" pretext="" isinstance="0" xmi.id="j0rDtIyYlJjG" text="0..1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="GCOqzDx6ErUV" widgetaid="I4mI36G7DZSn" roleBdoc="" documentation="" roleAdoc="" type="513" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
+ <linepath>
+ <startpoint startx="80" starty="536" />
+ <endpoint endx="80" endy="549" />
+ </linepath>
+ </assocwidget>
+ </associations>
+ </diagram>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="957" snapy="10" showatts="1" xmi.id="157" documentation="" type="1" showops="1" showpackage="0" name="v1" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="576" >
+ <widgets>
+ <classwidget usesdiagramfillcolor="1" width="170" showattsigs="601" x="73" fillcolor="none" y="95" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="34" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolor="1" width="313" showattsigs="601" x="264" fillcolor="none" y="176" showopsigs="601" linewidth="none" height="56" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="35" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolor="1" width="91" showattsigs="601" x="364" fillcolor="none" y="81" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="32" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <notewidget usesdiagramfillcolor="1" width="340" x="137" fillcolor="none" y="219" linewidth="none" height="89" usefillcolor="1" isinstance="0" xmi.id="179" showstereotype="1" text="Chaque composant peut avoir un arbre de versions. Donc chaque exploration d'une EA doit préciser quelle version de chaque composant utiliser." usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </widgets>
+ <messages/>
+ <associations>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="32" widgetaid="35" xmi.id="39" type="501" linecolor="none" >
+ <linepath>
+ <startpoint startx="448" starty="187" />
+ <endpoint endx="448" endy="113" />
+ <point x="448" y="187" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="32" widgetaid="34" xmi.id="171" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="243" starty="109" />
+ <endpoint endx="364" endy="109" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="35" widgetaid="34" xmi.id="174" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="153" starty="127" />
+ <endpoint endx="264" endy="190" />
+ <point x="153" y="190" />
+ </linepath>
+ </assocwidget>
+ </associations>
+ </diagram>
+ <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="957" snapy="10" showatts="1" xmi.id="177" documentation="" type="1" showops="1" showpackage="0" name="v2" localid="900000" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="576" >
+ <widgets>
+ <classwidget usesdiagramfillcolor="1" width="170" showattsigs="601" x="73" fillcolor="none" y="179" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="34" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolor="1" width="313" showattsigs="601" x="168" fillcolor="none" y="82" showopsigs="601" linewidth="none" height="56" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="35" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <classwidget usesdiagramfillcolor="1" width="91" showattsigs="601" x="347" fillcolor="none" y="163" showopsigs="601" linewidth="none" height="32" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="32" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,75,0,0,0,0,0" linecolor="none" />
+ <notewidget usesdiagramfillcolor="1" width="272" x="83" fillcolor="none" y="249" linewidth="none" height="80" usefillcolor="1" isinstance="0" xmi.id="178" showstereotype="1" text="Une version d'une EA a sa liste de composant qui est utilisée pour chaque exploration se référant à cette EA." usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </widgets>
+ <messages/>
+ <associations>
+ <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="35" widgetaid="34" xmi.id="158" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="243" starty="179" />
+ <endpoint endx="243" endy="138" />
+ </linepath>
+ <floatingtext usesdiagramfillcolor="1" width="32" x="158" fillcolor="none" y="142" linewidth="none" posttext="" role="702" height="32" usefillcolor="1" pretext="" isinstance="0" xmi.id="ufkidFh8FfDC" text="1..n" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ <floatingtext usesdiagramfillcolor="1" width="95" x="43" fillcolor="none" y="140" linewidth="none" posttext="" role="710" height="20" usefillcolor="1" pretext="+" isinstance="0" xmi.id="WaF2eMZbxytb" text="explorations" usesdiagramusefillcolor="1" font="Sans Serif,9,-1,5,50,0,0,0,0,0" linecolor="none" />
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="1" totalcountb="3" indexb="1" linewidth="none" widgetbid="32" widgetaid="34" xmi.id="122" type="501" linecolor="none" >
+ <linepath>
+ <startpoint startx="243" starty="181" />
+ <endpoint endx="347" endy="181" />
+ </linepath>
+ </assocwidget>
+ <assocwidget totalcounta="3" indexa="2" totalcountb="3" indexb="2" linewidth="none" widgetbid="32" widgetaid="34" xmi.id="161" type="510" linecolor="none" >
+ <linepath>
+ <startpoint startx="243" starty="195" />
+ <endpoint endx="347" endy="195" />
+ </linepath>
+ </assocwidget>
+ </associations>
+ </diagram>
+ </diagrams>
+ </XMI.extension>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="3" isRoot="false" isAbstract="false" name="Use Case View" >
+ <UML:Namespace.ownedElement>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="45" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="iQ9TfmZ7KZxU" aggregation="none" type="8KwjAV84slCS" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Vb2PTkfzhjy4" aggregation="none" type="42" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="51" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="kVZfSgY84fZh" aggregation="none" type="8KwjAV84slCS" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="S9okilEBLHYm" aggregation="none" type="8KwjAV84slCS" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="61" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="1DkgwikeDJHe" aggregation="none" type="30" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="zqk1VKjvTVf9" aggregation="none" type="58" name="" multiplicity="0..*" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="87" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="HsKa7sK834my" aggregation="none" type="8KwjAV84slCS" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="kWcwpuamiKnD" aggregation="none" type="74" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Dependency isSpecification="false" visibility="public" namespace="3" xmi.id="95" client="-1" name="<<includes>>" supplier="42" />
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="126" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="cW952mEHeWpl" aggregation="none" type="8KwjAV84slCS" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="M9rQCdMw9ysw" aggregation="none" type="125" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="135" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="qQiYjWkL2rP2" aggregation="none" type="125" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="dbJG881SGrqS" aggregation="none" type="8KwjAV84slCS" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="141" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="UCMc9FYxfFUM" aggregation="none" type="125" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="lEil55ogg5wm" aggregation="none" type="74" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="144" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="CwFQn3sHGCrN" aggregation="none" type="125" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="ROK5doRO2775" aggregation="none" type="8KwjAV84slCS" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ <UML:Association isSpecification="false" visibility="public" namespace="3" xmi.id="147" name="" >
+ <UML:Association.connection>
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="Ctmtzgd9csZP" aggregation="none" type="125" name="" />
+ <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="uPfAbUX1sp6V" aggregation="none" type="42" name="" />
+ </UML:Association.connection>
+ </UML:Association>
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="4" isRoot="false" isAbstract="false" name="Component View" >
+ <UML:Namespace.ownedElement>
+ <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" namespace="4" xmi.id="vzxggfzIe8bb" isRoot="false" isAbstract="false" name="nouveau_composant" />
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="5" isRoot="false" isAbstract="false" name="Deployment View" >
+ <UML:Namespace.ownedElement/>
+ </UML:Model>
+ <UML:Model stereotype="2" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="6" isRoot="false" isAbstract="false" name="Entity Relationship Model" >
+ <UML:Namespace.ownedElement/>
+ </UML:Model>
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ </XMI.content>
+ <XMI.extensions xmi.extender="umbrello" >
+ <docsettings viewid="9" documentation="" uniqueid="GCOqzDx6ErUV" />
+ <listview>
+ <listitem open="1" type="800" label="Vues" >
+ <listitem open="1" type="801" id="1" >
+ <listitem open="0" type="807" id="9" label="diagramme de classes" />
+ <listitem open="0" type="807" id="157" label="v1" />
+ <listitem open="0" type="807" id="177" label="v2" />
+ <listitem open="1" type="813" id="156" />
+ <listitem open="1" type="813" id="SANjhlRxGZ3W" >
+ <listitem open="0" type="814" id="lZfoWZ2BKBPT" />
+ <listitem open="0" type="814" id="UHYhe0GPL1w1" />
+ </listitem>
+ <listitem open="0" type="813" id="32" />
+ <listitem open="0" type="813" id="86" >
+ <listitem open="0" type="814" id="154" />
+ <listitem open="0" type="814" id="155" />
+ </listitem>
+ <listitem open="1" type="813" id="183" >
+ <listitem open="0" type="814" id="184" />
+ </listitem>
+ <listitem open="0" type="813" id="58" >
+ <listitem open="0" type="814" id="59" />
+ <listitem open="0" type="814" id="60" />
+ </listitem>
+ <listitem open="1" type="813" id="34" />
+ <listitem open="1" type="813" id="35" >
+ <listitem open="0" type="815" id="205" />
+ <listitem open="0" type="815" id="sDZBZ5ClNq0L" />
+ </listitem>
+ <listitem open="0" type="813" id="96" >
+ <listitem open="0" type="814" id="97" />
+ <listitem open="0" type="814" id="98" />
+ <listitem open="0" type="814" id="99" />
+ </listitem>
+ <listitem open="1" type="813" id="33" />
+ <listitem open="1" type="813" id="25" />
+ <listitem open="1" type="813" id="31" />
+ <listitem open="1" type="813" id="30" >
+ <listitem open="0" type="814" id="48" />
+ <listitem open="0" type="814" id="OQwmRjL3VZFG" />
+ <listitem open="0" type="814" id="50" />
+ <listitem open="0" type="814" id="52" />
+ <listitem open="0" type="814" id="53" />
+ <listitem open="0" type="814" id="55" />
+ <listitem open="0" type="814" id="56" />
+ <listitem open="0" type="814" id="57" />
+ <listitem open="0" type="814" id="70" />
+ <listitem open="0" type="815" id="212" />
+ <listitem open="0" type="815" id="228" />
+ <listitem open="0" type="815" id="230" />
+ </listitem>
+ <listitem open="1" type="813" id="185" />
+ <listitem open="1" type="813" id="151" />
+ <listitem open="1" type="813" id="186" />
+ <listitem open="1" type="813" id="I4mI36G7DZSn" />
+ <listitem open="1" type="813" id="23" />
+ <listitem open="1" type="813" id="24" />
+ <listitem open="1" type="813" id="49" />
+ <listitem open="1" type="813" id="153" />
+ <listitem open="1" type="813" id="231" />
+ <listitem open="1" type="813" id="149" />
+ <listitem open="1" type="817" id="0pBuvPUWvg71" />
+ <listitem open="0" type="830" id="8" >
+ <listitem open="1" type="829" id="13" />
+ <listitem open="1" type="829" id="12" />
+ <listitem open="1" type="829" id="15" />
+ <listitem open="1" type="829" id="14" />
+ <listitem open="1" type="829" id="10" />
+ <listitem open="1" type="829" id="17" />
+ <listitem open="1" type="829" id="16" />
+ <listitem open="1" type="829" id="21" />
+ <listitem open="0" type="829" id="8KwjAV84slCS" />
+ <listitem open="1" type="829" id="18" />
+ <listitem open="1" type="829" id="20" />
+ <listitem open="1" type="829" id="19" />
+ </listitem>
+ </listitem>
+ <listitem open="1" type="802" id="3" />
+ <listitem open="1" type="821" id="4" >
+ <listitem open="1" type="822" id="vzxggfzIe8bb" />
+ </listitem>
+ <listitem open="1" type="827" id="5" />
+ <listitem open="1" type="836" id="6" />
+ </listitem>
+ </listview>
+ <codegeneration>
+ <codegenerator language="Java" />
+ </codegeneration>
+ </XMI.extensions>
+</XMI>
1
0
r109 - in trunk/simexplorer-is-web/src/main: java/fr/cemagref/simexplorer/is/ui/web java/fr/cemagref/simexplorer/is/ui/web/components java/fr/cemagref/simexplorer/is/ui/web/grid java/fr/cemagref/simexplorer/is/ui/web/pages resources/fr/cemagref/simexplorer/is/ui/web/components resources/fr/cemagref/simexplorer/is/ui/web/pages webapp
by glandais@users.labs.libre-entreprise.org 10 Jan '08
by glandais@users.labs.libre-entreprise.org 10 Jan '08
10 Jan '08
Author: glandais
Date: 2008-01-10 16:00:01 +0000 (Thu, 10 Jan 2008)
New Revision: 109
Added:
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.java
trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.properties
trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.properties
trunk/simexplorer-is-web/src/main/webapp/ElementDetail.tml
trunk/simexplorer-is-web/src/main/webapp/ElementList.tml
Removed:
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/base/
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ApplicationDataSource.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationDetail.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationExport.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationImport.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationList.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupEdit.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupList.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserEdit.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserList.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.java
trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.properties
trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.properties
trunk/simexplorer-is-web/src/main/webapp/ApplicationDetail.tml
trunk/simexplorer-is-web/src/main/webapp/ApplicationList.tml
Modified:
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationExport.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java
trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.properties
trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.tml
trunk/simexplorer-is-web/src/main/webapp/index.html
Log:
Affichage de tous les types d'?\195?\169l?\195?\169ments
Recherche
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/components/Layout.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -20,15 +20,17 @@
import java.util.Locale;
-import org.apache.tapestry.Asset;
+import org.apache.tapestry.annotations.Component;
import org.apache.tapestry.annotations.IncludeStylesheet;
import org.apache.tapestry.annotations.InjectPage;
import org.apache.tapestry.annotations.Parameter;
-import org.apache.tapestry.annotations.Path;
import org.apache.tapestry.annotations.Service;
+import org.apache.tapestry.corelib.components.Form;
+import org.apache.tapestry.corelib.components.TextField;
import org.apache.tapestry.ioc.annotations.Inject;
import org.apache.tapestry.services.PersistentLocale;
+import fr.cemagref.simexplorer.is.ui.web.pages.ElementList;
import fr.cemagref.simexplorer.is.ui.web.pages.UserList;
/**
@@ -46,6 +48,17 @@
@InjectPage
private UserList userList;
+ @Component
+ private TextField searchField;
+
+ private String searchText;
+
+ @Component
+ private Form form;
+
+ @InjectPage
+ private ElementList elementList;
+
/**
* page title
*/
@@ -91,5 +104,25 @@
public boolean getAdministrator() {
return true;
}
-
+
+ Object onSuccess() {
+ elementList.searchQuery(searchText);
+ // form.recordError(searchField, "Invalid request.");
+ // return null;
+ return elementList;
+ }
+
+ public Object onActionFromApplicationList() throws Exception {
+ elementList.searchQuery(null);
+ return elementList;
+ }
+
+ public String getSearchText() {
+ return searchText;
+ }
+
+ public void setSearchText(String searchText) {
+ this.searchText = searchText;
+ }
+
}
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ApplicationDataSource.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ApplicationDataSource.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ApplicationDataSource.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,87 +0,0 @@
-package fr.cemagref.simexplorer.is.ui.web.grid;
-
-import javax.naming.NamingException;
-
-import org.apache.tapestry.beaneditor.PropertyModel;
-import org.apache.tapestry.grid.GridDataSource;
-
-import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.ui.web.services.StorageServiceFactory;
-
-public class ApplicationDataSource implements GridDataSource {
-
- private String query = "";
- private int indexStart = 0;
- private MetaDataEntity[] entities = null;
-
- public ApplicationDataSource(String query) {
- super();
- this.query = query;
- }
-
- public ApplicationDataSource() {
- super();
- this.query = "";
- }
-
- public int getAvailableRows() {
- int result = 0;
- try {
- if (query.isEmpty()) {
- result = StorageServiceFactory.getService()
- .findApplicationsCount(false);
- } else {
- result = StorageServiceFactory.getService().findFullTextCount(
- query, false);
- }
- } catch (NamingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return result;
- }
-
- public Class getRowType() {
- return MetaDataEntity.class;
- }
-
- public Object getRowValue(int index) {
- return entities[index - indexStart];
- }
-
- public void prepare(int startIndex, int endIndex, PropertyModel sortModel,
- boolean ascending) {
- try {
- this.indexStart = startIndex;
-
- int dateOrder = 0;
- if (sortModel != null
- && "creationDate".equals(sortModel.getPropertyName())) {
- if (ascending) {
- dateOrder = 1;
- } else {
- dateOrder = -1;
- }
- }
-
- if (query.isEmpty()) {
- entities = StorageServiceFactory.getService()
- .findApplications(false, startIndex,
- 1 + endIndex - startIndex, dateOrder);
- } else {
- entities = StorageServiceFactory.getService().findFullText(
- query, false, startIndex, 1 + endIndex - startIndex,
- dateOrder);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- this.indexStart = 0;
- entities = new MetaDataEntity[0];
- }
- }
-
-}
Copied: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java (from rev 106, trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ApplicationDataSource.java)
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java (rev 0)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/grid/ElementDataSource.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -0,0 +1,91 @@
+package fr.cemagref.simexplorer.is.ui.web.grid;
+
+import javax.naming.NamingException;
+
+import org.apache.tapestry.beaneditor.PropertyModel;
+import org.apache.tapestry.grid.GridDataSource;
+
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.ui.web.services.StorageServiceFactory;
+
+public class ElementDataSource implements GridDataSource {
+
+ private String query = "";
+ private int indexStart = 0;
+ private MetaDataEntity[] entities = null;
+
+ public ElementDataSource(String query) {
+ super();
+ this.query = query;
+ }
+
+ public ElementDataSource() {
+ super();
+ this.query = "";
+ }
+
+ public int getAvailableRows() {
+ int result = 0;
+ try {
+ if (query.isEmpty()) {
+ result = StorageServiceFactory.getService()
+ .findApplicationsCount(false);
+ } else {
+ result = StorageServiceFactory.getService().findFullTextCount(
+ query, false);
+ }
+ } catch (NamingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+ public Class getRowType() {
+ return MetaDataEntity.class;
+ }
+
+ public Object getRowValue(int index) {
+ return entities[index - indexStart];
+ }
+
+ public void prepare(int startIndex, int endIndex, PropertyModel sortModel,
+ boolean ascending) {
+ try {
+ this.indexStart = startIndex;
+
+ int dateOrder = 0;
+ if (sortModel != null
+ && "creationDate".equals(sortModel.getPropertyName())) {
+ if (ascending) {
+ dateOrder = 1;
+ } else {
+ dateOrder = -1;
+ }
+ }
+
+ if (query.isEmpty()) {
+ entities = StorageServiceFactory.getService()
+ .findApplications(false, startIndex,
+ 1 + endIndex - startIndex, dateOrder);
+ } else {
+ entities = StorageServiceFactory.getService().findFullText(
+ query, false, startIndex, 1 + endIndex - startIndex,
+ dateOrder);
+ }
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ this.indexStart = 0;
+ entities = new MetaDataEntity[0];
+ }
+ }
+
+ public String getQuery() {
+ return query;
+ }
+
+}
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationDetail.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationDetail.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationDetail.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,30 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractApplicationDetail
- */
-public abstract class AbstractApplicationDetail extends UseCasePage {
-
- /* linked state "ApplicationList" */
- @InjectPage
- private ApplicationList applicationList;
-
- /* getter for state "ApplicationList" */
- protected ApplicationList getApplicationList() {
- return applicationList;
- }
-
- /* transition on "retour" event */
- public Object onActionFromRetour() {
- return applicationList;
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "ad";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationExport.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationExport.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationExport.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,30 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractApplicationExport
- */
-public abstract class AbstractApplicationExport extends UseCasePage {
-
- /* linked state "ApplicationList" */
- @InjectPage
- private ApplicationList applicationList;
-
- /* getter for state "ApplicationList" */
- protected ApplicationList getApplicationList() {
- return applicationList;
- }
-
- /* transition on "retour" event */
- public Object onActionFromRetour() {
- return applicationList;
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "ae";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationImport.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationImport.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationImport.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,30 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractApplicationImport
- */
-public abstract class AbstractApplicationImport extends UseCasePage {
-
- /* linked state "ApplicationList" */
- @InjectPage
- private ApplicationList applicationList;
-
- /* getter for state "ApplicationList" */
- protected ApplicationList getApplicationList() {
- return applicationList;
- }
-
- /* transition on "retour" event */
- public Object onActionFromRetour() {
- return applicationList;
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "ai";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationList.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationList.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractApplicationList.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,73 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractApplicationList
- */
-public abstract class AbstractApplicationList extends UseCasePage {
-
- /* linked state "ApplicationDetail" */
- @InjectPage
- private ApplicationDetail applicationDetail;
-
- /* getter for state "ApplicationDetail" */
- protected ApplicationDetail getApplicationDetail() {
- return applicationDetail;
- }
-
- /* transition on "detail" event */
- public Object onActionFromDetail() {
- return applicationDetail;
- }
-
- /* linked state "ApplicationImport" */
- @InjectPage
- private ApplicationImport applicationImport;
-
- /* getter for state "ApplicationImport" */
- protected ApplicationImport getApplicationImport() {
- return applicationImport;
- }
-
- /* transition on "importer" event */
- public Object onActionFromImporter() {
- return applicationImport;
- }
-
- /* linked state "ApplicationExport" */
- @InjectPage
- private ApplicationExport applicationExport;
-
- /* getter for state "ApplicationExport" */
- protected ApplicationExport getApplicationExport() {
- return applicationExport;
- }
-
- /* transition on "export" event */
- public Object onActionFromExport() {
- return applicationExport;
- }
-
- /* linked state "UserAdministration" */
- @InjectPage
- private UserList userList;
-
- /* getter for state "UserAdministration" */
- protected UserList getUserList() {
- return userList;
- }
-
- /* transition on administration event */
- public Object onActionFromAdministration() {
- enterUseCase();
- return userList;
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "al";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupEdit.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupEdit.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupEdit.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,30 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractGroupEdit
- */
-public abstract class AbstractGroupEdit extends UseCasePage {
-
- /* linked state "GroupList" */
- @InjectPage
- private GroupList groupList;
-
- /* getter for state "GroupList" */
- protected GroupList getGroupList() {
- return groupList;
- }
-
- /* transition on "retour" event */
- public Object onActionFromRetour() {
- return groupList;
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "ge";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupList.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupList.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractGroupList.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,58 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractGroupList
- */
-public abstract class AbstractGroupList extends UseCasePage {
-
- /* linked state "UserList" */
- @InjectPage
- private UserList userList;
-
- /* getter for state "UserList" */
- protected UserList getUserList() {
- return userList;
- }
-
- /* transition on "retour" event */
- public Object onActionFromRetour() {
- return userList;
- }
-
- /* linked state "GroupEdit" */
- @InjectPage
- private GroupEdit groupEdit;
-
- /* getter for state "GroupEdit" */
- protected GroupEdit getGroupEdit() {
- return groupEdit;
- }
-
- /* transition on "edit" event */
- public Object onActionFromEdit() {
- return groupEdit;
- }
-
- /* linked state "UserEdit" */
- @InjectPage
- private UserEdit userEdit;
-
- /* getter for state "UserEdit" */
- protected UserEdit getUserEdit() {
- return userEdit;
- }
-
- /* transition on "usergroup" event */
- public Object onActionFromUsergroup() {
- return userEdit;
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "gl";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserEdit.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserEdit.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserEdit.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,44 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractUserEdit
- */
-public abstract class AbstractUserEdit extends UseCasePage {
-
- /* linked state "UserList" */
- @InjectPage
- private UserList userList;
-
- /* getter for state "UserList" */
- protected UserList getUserList() {
- return userList;
- }
-
- /* transition on "retour" event */
- public Object onActionFromRetour() {
- return userList;
- }
-
- /* linked state "GroupList" */
- @InjectPage
- private GroupList groupList;
-
- /* getter for state "GroupList" */
- protected GroupList getGroupList() {
- return groupList;
- }
-
- /* transition on "" event */
- public Object onActionFrom() {
- return groupList;
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "ue";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserList.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserList.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/AbstractUserList.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,49 +0,0 @@
-// Automatically generated by LutinGenerator
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import org.apache.tapestry.annotations.InjectPage;
-import fr.cemagref.simexplorer.is.ui.web.base.UseCasePage;
-
-/*
- * State AbstractUserList
- */
-public abstract class AbstractUserList extends UseCasePage {
-
- /* linked state "GroupList" */
- @InjectPage
- private GroupList groupList;
-
- /* getter for state "GroupList" */
- protected GroupList getGroupList() {
- return groupList;
- }
-
- /* transition on "group" event */
- public Object onActionFromGroup() {
- return groupList;
- }
-
- /* linked state "UserEdit" */
- @InjectPage
- private UserEdit userEdit;
-
- /* getter for state "UserEdit" */
- protected UserEdit getUserEdit() {
- return userEdit;
- }
-
- /* transition on "edit" event */
- public Object onActionFromEdit() {
- return userEdit;
- }
-
- /* transition on "retour" event */
- public Object onActionFromRetour() {
- return leaveUseCase();
- }
-
- /* return a unique state id for model */
- protected final String getUseCaseName() {
- return "ul";
- }
-}
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,281 +0,0 @@
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.apache.tapestry.ComponentResources;
-import org.apache.tapestry.Link;
-import org.apache.tapestry.StreamResponse;
-import org.apache.tapestry.annotations.Persist;
-import org.apache.tapestry.ioc.annotations.Inject;
-import org.apache.tapestry.util.TextStreamResponse;
-import org.codelutin.tapestry.beans.TreeNode;
-
-import com.healthmarketscience.rmiio.RemoteOutputStreamServer;
-import com.healthmarketscience.rmiio.SimpleRemoteOutputStream;
-
-import fr.cemagref.simexplorer.is.entities.data.Code;
-import fr.cemagref.simexplorer.is.entities.data.Component;
-import fr.cemagref.simexplorer.is.entities.data.Constant;
-import fr.cemagref.simexplorer.is.entities.data.ConstantValue;
-import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
-import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
-import fr.cemagref.simexplorer.is.entities.data.Library;
-import fr.cemagref.simexplorer.is.entities.data.Result;
-import fr.cemagref.simexplorer.is.entities.data.Structure;
-import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.ui.web.services.StorageServiceFactory;
-import fr.cemagref.simexplorer.is.ui.web.tools.XMLAttachment;
-
-public class ApplicationDetail extends AbstractApplicationDetail {
-
- @Inject
- private ComponentResources resources;
-
- @Persist
- private ExplorationApplication explorationApplication;
-
- public void setup(String uuid, String version) throws Exception {
- explorationApplication = StorageServiceFactory.getService()
- .getExplorationApplication(uuid, version);
- }
-
- public List<String> getHeaders() {
- List<String> result = new ArrayList<String>();
- result.add("");
- result.add("");
- result.add("");
- result.add("");
- return result;
- }
-
- public List<TreeNode> getNodes() {
- List<TreeNode> nodes = new ArrayList<TreeNode>();
- nodes.add(generateAppllication());
- return nodes;
- }
-
- public Object exportElement(String uuid, String version) throws Exception {
- StreamResponse response = null;
-
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- RemoteOutputStreamServer xmlRemoteOutputStream = new SimpleRemoteOutputStream(
- bos);
- StorageServiceFactory.getService().exportElement(
- xmlRemoteOutputStream.export(), uuid, version);
-
- MetaDataEntity mde = StorageServiceFactory.getService().getMetadata(
- uuid, version);
- ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
- response = new XMLAttachment(bis, mde.getType() + "." + mde.getUuid() + ".v"
- + mde.getVersion());
-
- return response;
- }
-
- public Object onExportea(String context) throws Exception {
- return exportElement(explorationApplication.getMetaData().getUuid(),
- explorationApplication.getMetaData().getVersion().toString());
- }
-
- public Object onExportElement(String context) throws Exception {
- StringTokenizer st = new StringTokenizer(context, ",");
- String uuid = st.nextToken();
- String version = st.nextToken();
- return exportElement(uuid, version);
- }
-
- private String[] generateStringArray(String s1, String s2, String s3) {
- List<String> result = new ArrayList<String>();
- result.add(s1);
- result.add(s2);
- result.add(s3);
- result.add("");
- return result.toArray(new String[0]);
- }
-
- private String[] generateStringArray(String s1, String s2, String s3,
- String actionCaption, String action, Object context) {
- List<String> result = new ArrayList<String>();
- result.add(s1);
- result.add(s2);
- result.add(s3);
- Link link = resources.createActionLink(action, false, context);
- StringBuffer sb = new StringBuffer("");
- sb.append("<a href=\"");
- sb.append(link.toString());
- sb.append("\">");
- sb.append(actionCaption);
- sb.append("</a>");
- result.add(sb.toString());
- return result.toArray(new String[0]);
- }
-
- private TreeNode generateAppllication() {
- TreeNode node = new TreeNode();
- node.setType(TreeNode.TYPE_FOLDER);
-
- node.setColumns(generateStringArray("Exploration Application",
- explorationApplication.getMetaData().getDescription(),
- explorationApplication.getMetaData().getVersion().toString(),
- "Export", "exportea", null));
- TreeNode[] children = new TreeNode[2];
- children[0] = new TreeNode();
- children[0].setType(TreeNode.TYPE_FOLDER);
- children[0].setColumns(generateStringArray("Components", "", ""));
- children[0].setChildren(generateComponents());
-
- children[1] = new TreeNode();
- children[1].setType(TreeNode.TYPE_FOLDER);
- children[1].setColumns(generateStringArray("Explorations", "", ""));
- children[1].setChildren(generateExplorations());
-
- node.setChildren(children);
-
- return node;
- }
-
- private TreeNode[] generateExplorations() {
- TreeNode[] res = new TreeNode[explorationApplication.getExplorations()
- .size()];
- int i = 0;
- for (ExplorationData explorationData : explorationApplication
- .getExplorations()) {
- res[i] = new TreeNode();
- res[i].setType(TreeNode.TYPE_FOLDER);
- res[i]
- .setColumns(generateStringArray("Exploration data",
- explorationData.getMetaData().getDescription(),
- explorationData.getMetaData().getVersion()
- .toString(), "Export", "exportElement",
- explorationData.getMetaData().getUuid()
- + ","
- + explorationData.getMetaData()
- .getVersion()));
- TreeNode[] children = new TreeNode[2];
- children[0] = generateResult(explorationData.getResult());
- children[1] = new TreeNode();
- children[1].setType(TreeNode.TYPE_FOLDER);
- children[1].setColumns(generateStringArray("Values", "", ""));
- children[1].setChildren(generateValues(explorationData));
- res[i].setChildren(children);
- i++;
- }
- return res;
- }
-
- private TreeNode[] generateValues(ExplorationData explorationData) {
- Set<ConstantValue> values = explorationData.getValuesMap();
- TreeNode[] res = new TreeNode[values.size()];
- int i = 0;
- for (ConstantValue value : values) {
- res[i] = new TreeNode();
- res[i].setType(TreeNode.TYPE_DOCUMENT);
- res[i].setColumns(generateStringArray(
- value.getConstant().getName(), value.getValue(), value
- .getConstant().getType().getSimpleName()));
- i++;
- }
-
- return res;
- }
-
- private TreeNode generateResult(Result result) {
- TreeNode res = new TreeNode();
- res.setType(TreeNode.TYPE_DOCUMENT);
- res.setColumns(generateStringArray("Result", "", ""));
- return res;
- }
-
- private TreeNode[] generateComponents() {
- Set<Component> components = explorationApplication.getComponents();
- TreeNode[] res = new TreeNode[components.size()];
-
- int i = 0;
- for (Component component : components) {
- res[i] = new TreeNode();
- res[i].setType(TreeNode.TYPE_FOLDER);
- res[i].setColumns(generateStringArray("Component", component
- .getMetaData().getDescription(), component.getMetaData()
- .getVersion().toString(), "Export", "exportElement",
- component.getMetaData().getUuid() + ","
- + component.getMetaData().getVersion()));
- TreeNode[] children = new TreeNode[4];
- for (int j = 0; j < children.length; j++) {
- children[j] = new TreeNode();
- children[j].setType(TreeNode.TYPE_FOLDER);
- }
- children[0].setColumns(generateStringArray("Constants", "", ""));
- children[0]
- .setChildren(generateConstants(component.getConstants()));
- children[1].setColumns(generateStringArray("Structures", "", ""));
- children[1].setChildren(generateStructures(component
- .getStructures()));
- children[2].setColumns(generateStringArray("Codes", "", ""));
- children[2].setChildren(generateCodes(component.getCodes()));
- children[3].setColumns(generateStringArray("Libraries", "", ""));
- children[3]
- .setChildren(generateLibraries(component.getLibraries()));
- res[i].setChildren(children);
- i++;
- }
-
- return res;
- }
-
- private TreeNode[] generateLibraries(Set<Library> libraries) {
- TreeNode[] res = new TreeNode[libraries.size()];
- int i = 0;
- for (Library library : libraries) {
- res[i] = new TreeNode();
- res[i].setType(TreeNode.TYPE_DOCUMENT);
- res[i].setColumns(generateStringArray("Library", "", ""));
- i++;
- }
- return res;
- }
-
- private TreeNode[] generateCodes(Set<Code> codes) {
- TreeNode[] res = new TreeNode[codes.size()];
- int i = 0;
- for (Code code : codes) {
- res[i] = new TreeNode();
- res[i].setType(TreeNode.TYPE_DOCUMENT);
- res[i].setColumns(generateStringArray("Code", code.getLanguage(),
- code.getCode()));
- i++;
- }
- return res;
- }
-
- private TreeNode[] generateStructures(Set<Structure> structures) {
- TreeNode[] res = new TreeNode[structures.size()];
- int i = 0;
- for (Structure structure : structures) {
- res[i] = new TreeNode();
- res[i].setType(TreeNode.TYPE_DOCUMENT);
- res[i].setColumns(generateStringArray("Structure", "", ""));
- i++;
- }
- return res;
- }
-
- private TreeNode[] generateConstants(Set<Constant> constants) {
- TreeNode[] res = new TreeNode[constants.size()];
- int i = 0;
- for (Constant constant : constants) {
- res[i] = new TreeNode();
- res[i].setType(TreeNode.TYPE_DOCUMENT);
- res[i].setColumns(generateStringArray("Constant", constant
- .getName(), constant.getType().getSimpleName()));
- i++;
- }
- return res;
- }
-
-}
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationExport.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationExport.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationExport.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -4,6 +4,6 @@
import fr.cemagref.simexplorer.is.ui.web.components.Layout;
-public class ApplicationExport extends AbstractApplicationExport {
+public class ApplicationExport {
}
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationImport.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -9,7 +9,7 @@
import fr.cemagref.simexplorer.is.ui.web.components.Layout;
import fr.cemagref.simexplorer.is.ui.web.services.StorageServiceFactory;
-public class ApplicationImport extends AbstractApplicationImport {
+public class ApplicationImport {
private UploadedFile fileEA;
private UploadedFile fileLib;
Deleted: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,82 +0,0 @@
-package fr.cemagref.simexplorer.is.ui.web.pages;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.apache.tapestry.ComponentResources;
-import org.apache.tapestry.annotations.InjectPage;
-import org.apache.tapestry.annotations.Retain;
-import org.apache.tapestry.beaneditor.BeanModel;
-import org.apache.tapestry.internal.beaneditor.BeanModelImpl;
-import org.apache.tapestry.ioc.annotations.Inject;
-import org.apache.tapestry.services.BeanModelSource;
-
-import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.ui.web.grid.ApplicationDataSource;
-
-public class ApplicationList extends AbstractApplicationList {
-
- @Retain
- private BeanModel model;
-
- @Inject
- private BeanModelSource beanModelSource;
-
- @Inject
- private ComponentResources resources;
-
- private MetaDataEntity application;
-
- @InjectPage
- private ApplicationDetail applicationDetail;
-
- void pageLoaded() {
- model = beanModelSource.create(MetaDataEntity.class, true, resources);
- List<String> wantedProperties = new ArrayList<String>();
- wantedProperties.add("uuid");
- wantedProperties.add("name");
- wantedProperties.add("description");
- wantedProperties.add("version");
- wantedProperties.add("creationDate");
- List<String> properties = model.getPropertyNames();
- for (String property : properties) {
- if (!"creationDate".equals(property)) {
- model.get(property).sortable(false);
- }
- if (!wantedProperties.contains(property)) {
- model = model.remove(property);
- }
- }
- }
-
- public BeanModel getModel() {
- return model;
- }
-
- public ApplicationDataSource getApplications() {
- return new ApplicationDataSource();
- }
-
- public MetaDataEntity getApplication() {
- return application;
- }
-
- public void setApplication(MetaDataEntity application) {
- this.application = application;
- }
-
- public String getDetailApplicationContext() {
- String result = application.getUuid() + "," + application.getVersion();
- return result;
- }
-
- public Object onActionFromDetailApplication(String context) throws Exception {
- StringTokenizer st = new StringTokenizer(context, ",");
- String uuid = st.nextToken();
- String version = st.nextToken();
- applicationDetail.setup(uuid, version);
- return applicationDetail;
- }
-
-}
Copied: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java (from rev 106, trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java)
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java (rev 0)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -0,0 +1,299 @@
+package fr.cemagref.simexplorer.is.ui.web.pages;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.Link;
+import org.apache.tapestry.StreamResponse;
+import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.ioc.annotations.Inject;
+import org.codelutin.tapestry.beans.TreeNode;
+
+import com.healthmarketscience.rmiio.RemoteOutputStreamServer;
+import com.healthmarketscience.rmiio.SimpleRemoteOutputStream;
+
+import fr.cemagref.simexplorer.is.entities.data.Code;
+import fr.cemagref.simexplorer.is.entities.data.Component;
+import fr.cemagref.simexplorer.is.entities.data.Constant;
+import fr.cemagref.simexplorer.is.entities.data.ConstantValue;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
+import fr.cemagref.simexplorer.is.entities.data.Library;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
+import fr.cemagref.simexplorer.is.entities.data.Result;
+import fr.cemagref.simexplorer.is.entities.data.Structure;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.ui.web.services.StorageServiceFactory;
+import fr.cemagref.simexplorer.is.ui.web.tools.XMLAttachment;
+
+public class ElementDetail {
+
+ @Inject
+ private ComponentResources resources;
+
+ @Persist
+ private LoggableElement element;
+
+ public void setup(String uuid, String version) throws Exception {
+ element = StorageServiceFactory.getService().getElement(uuid, version);
+ }
+
+ public List<String> getHeaders() {
+ List<String> result = new ArrayList<String>();
+ result.add("");
+ result.add("");
+ result.add("");
+ result.add("");
+ return result;
+ }
+
+ public List<TreeNode> getNodes() {
+ List<TreeNode> nodes = new ArrayList<TreeNode>();
+ nodes.add(generateElement());
+ return nodes;
+ }
+
+ public Object exportElement(String uuid, String version) throws Exception {
+ StreamResponse response = null;
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ RemoteOutputStreamServer xmlRemoteOutputStream = new SimpleRemoteOutputStream(
+ bos);
+ StorageServiceFactory.getService().exportElement(
+ xmlRemoteOutputStream.export(), uuid, version);
+
+ MetaDataEntity mde = StorageServiceFactory.getService().getMetadata(
+ uuid, version);
+ ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+ response = new XMLAttachment(bis, mde.getType() + "." + mde.getUuid()
+ + ".v" + mde.getVersion());
+
+ return response;
+ }
+
+ public Object onExportElement(String context) throws Exception {
+ StringTokenizer st = new StringTokenizer(context, ",");
+ String uuid = st.nextToken();
+ String version = st.nextToken();
+ return exportElement(uuid, version);
+ }
+
+ private String[] generateStringArray(String s1, String s2, String s3) {
+ List<String> result = new ArrayList<String>();
+ result.add(s1);
+ result.add(s2);
+ result.add(s3);
+ result.add("");
+ return result.toArray(new String[0]);
+ }
+
+ private String[] generateStringArray(String s1, String s2, String s3,
+ String actionCaption, String action, Object context) {
+ List<String> result = new ArrayList<String>();
+ result.add(s1);
+ result.add(s2);
+ result.add(s3);
+ Link link = resources.createActionLink(action, false, context);
+ StringBuffer sb = new StringBuffer("");
+ sb.append("<a href=\"");
+ sb.append(link.toString());
+ sb.append("\">");
+ sb.append(actionCaption);
+ sb.append("</a>");
+ result.add(sb.toString());
+ return result.toArray(new String[0]);
+ }
+
+ private TreeNode generateElement() {
+ TreeNode node = null;
+ if (element instanceof ExplorationApplication) {
+ node = generateExplorationApplication();
+ }
+ if (element instanceof ExplorationData) {
+ node = generateExplorationData((ExplorationData) element);
+ }
+ if (element instanceof Component) {
+ node = generateComponent((Component) element);
+ }
+
+ return node;
+ }
+
+ private TreeNode generateExplorationApplication() {
+ TreeNode node;
+ node = new TreeNode();
+
+ node.setType(TreeNode.TYPE_FOLDER);
+
+ node.setColumns(generateStringArray("Application exploration", element
+ .getMetaData().getDescription(), element.getMetaData()
+ .getVersion().toString(), "Export", "exportElement", element
+ .getMetaData().getUuid()
+ + "," + element.getMetaData().getVersion()));
+
+ TreeNode[] children = new TreeNode[2];
+ children[0] = new TreeNode();
+ children[0].setType(TreeNode.TYPE_FOLDER);
+ children[0].setColumns(generateStringArray("Components", "", ""));
+ children[0]
+ .setChildren(generateComponents((ExplorationApplication) element));
+
+ children[1] = new TreeNode();
+ children[1].setType(TreeNode.TYPE_FOLDER);
+ children[1].setColumns(generateStringArray("Explorations", "", ""));
+ children[1]
+ .setChildren(generateExplorations((ExplorationApplication) element));
+
+ node.setChildren(children);
+ return node;
+ }
+
+ private TreeNode[] generateExplorations(
+ ExplorationApplication explorationApplication) {
+ TreeNode[] res = new TreeNode[explorationApplication.getExplorations()
+ .size()];
+ int i = 0;
+ for (ExplorationData explorationData : explorationApplication
+ .getExplorations()) {
+ res[i] = generateExplorationData(explorationData);
+ i++;
+ }
+ return res;
+ }
+
+ private TreeNode generateExplorationData(ExplorationData explorationData) {
+ TreeNode explorationDataNode = new TreeNode();
+ explorationDataNode.setType(TreeNode.TYPE_FOLDER);
+ explorationDataNode.setColumns(generateStringArray("Exploration data",
+ explorationData.getMetaData().getDescription(), explorationData
+ .getMetaData().getVersion().toString(), "Export",
+ "exportElement", explorationData.getMetaData().getUuid() + ","
+ + explorationData.getMetaData().getVersion()));
+ TreeNode[] children = new TreeNode[2];
+ children[0] = generateResult(explorationData.getResult());
+ children[1] = new TreeNode();
+ children[1].setType(TreeNode.TYPE_FOLDER);
+ children[1].setColumns(generateStringArray("Values", "", ""));
+ children[1].setChildren(generateValues(explorationData));
+ explorationDataNode.setChildren(children);
+ return explorationDataNode;
+ }
+
+ private TreeNode[] generateValues(ExplorationData explorationData) {
+ Set<ConstantValue> values = explorationData.getValuesMap();
+ TreeNode[] res = new TreeNode[values.size()];
+ int i = 0;
+ for (ConstantValue value : values) {
+ res[i] = new TreeNode();
+ res[i].setType(TreeNode.TYPE_DOCUMENT);
+ res[i].setColumns(generateStringArray(
+ value.getConstant().getName(), value.getValue(), value
+ .getConstant().getType().getSimpleName()));
+ i++;
+ }
+
+ return res;
+ }
+
+ private TreeNode generateResult(Result result) {
+ TreeNode res = new TreeNode();
+ res.setType(TreeNode.TYPE_DOCUMENT);
+ res.setColumns(generateStringArray("Result", "", ""));
+ return res;
+ }
+
+ private TreeNode[] generateComponents(
+ ExplorationApplication explorationApplication) {
+ Set<Component> components = explorationApplication.getComponents();
+ TreeNode[] res = new TreeNode[components.size()];
+
+ int i = 0;
+ for (Component component : components) {
+ res[i] = generateComponent(component);
+ i++;
+ }
+
+ return res;
+ }
+
+ private TreeNode generateComponent(Component component) {
+ TreeNode componentNode = new TreeNode();
+ componentNode.setType(TreeNode.TYPE_FOLDER);
+ componentNode.setColumns(generateStringArray("Component", component
+ .getMetaData().getDescription(), component.getMetaData()
+ .getVersion().toString(), "Export", "exportElement", component
+ .getMetaData().getUuid()
+ + "," + component.getMetaData().getVersion()));
+ TreeNode[] children = new TreeNode[4];
+ for (int j = 0; j < children.length; j++) {
+ children[j] = new TreeNode();
+ children[j].setType(TreeNode.TYPE_FOLDER);
+ }
+ children[0].setColumns(generateStringArray("Constants", "", ""));
+ children[0].setChildren(generateConstants(component.getConstants()));
+ children[1].setColumns(generateStringArray("Structures", "", ""));
+ children[1].setChildren(generateStructures(component.getStructures()));
+ children[2].setColumns(generateStringArray("Codes", "", ""));
+ children[2].setChildren(generateCodes(component.getCodes()));
+ children[3].setColumns(generateStringArray("Libraries", "", ""));
+ children[3].setChildren(generateLibraries(component.getLibraries()));
+ componentNode.setChildren(children);
+ return componentNode;
+ }
+
+ private TreeNode[] generateLibraries(Set<Library> libraries) {
+ TreeNode[] res = new TreeNode[libraries.size()];
+ int i = 0;
+ for (Library library : libraries) {
+ res[i] = new TreeNode();
+ res[i].setType(TreeNode.TYPE_DOCUMENT);
+ res[i].setColumns(generateStringArray("Library", "", ""));
+ i++;
+ }
+ return res;
+ }
+
+ private TreeNode[] generateCodes(Set<Code> codes) {
+ TreeNode[] res = new TreeNode[codes.size()];
+ int i = 0;
+ for (Code code : codes) {
+ res[i] = new TreeNode();
+ res[i].setType(TreeNode.TYPE_DOCUMENT);
+ res[i].setColumns(generateStringArray("Code", code.getLanguage(),
+ code.getCode()));
+ i++;
+ }
+ return res;
+ }
+
+ private TreeNode[] generateStructures(Set<Structure> structures) {
+ TreeNode[] res = new TreeNode[structures.size()];
+ int i = 0;
+ for (Structure structure : structures) {
+ res[i] = new TreeNode();
+ res[i].setType(TreeNode.TYPE_DOCUMENT);
+ res[i].setColumns(generateStringArray("Structure", "", ""));
+ i++;
+ }
+ return res;
+ }
+
+ private TreeNode[] generateConstants(Set<Constant> constants) {
+ TreeNode[] res = new TreeNode[constants.size()];
+ int i = 0;
+ for (Constant constant : constants) {
+ res[i] = new TreeNode();
+ res[i].setType(TreeNode.TYPE_DOCUMENT);
+ res[i].setColumns(generateStringArray("Constant", constant
+ .getName(), constant.getType().getSimpleName()));
+ i++;
+ }
+ return res;
+ }
+
+}
Copied: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.java (from rev 106, trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.java)
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.java (rev 0)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -0,0 +1,111 @@
+package fr.cemagref.simexplorer.is.ui.web.pages;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.apache.tapestry.ComponentResources;
+import org.apache.tapestry.annotations.InjectPage;
+import org.apache.tapestry.annotations.Persist;
+import org.apache.tapestry.annotations.Retain;
+import org.apache.tapestry.beaneditor.BeanModel;
+import org.apache.tapestry.ioc.annotations.Inject;
+import org.apache.tapestry.services.BeanModelSource;
+
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.ui.web.grid.ElementDataSource;
+
+public class ElementList {
+
+ @Retain
+ private BeanModel model;
+
+ @Inject
+ private BeanModelSource beanModelSource;
+
+ @Inject
+ private ComponentResources resources;
+
+ @Persist
+ private ElementDataSource elementDataSource;
+
+ private MetaDataEntity element;
+
+ @InjectPage
+ private ElementDetail elementDetail;
+
+ void pageLoaded() {
+ model = beanModelSource.create(MetaDataEntity.class, true, resources);
+ List<String> wantedProperties = new ArrayList<String>();
+ wantedProperties.add("type");
+ wantedProperties.add("uuid");
+ wantedProperties.add("name");
+ wantedProperties.add("description");
+ wantedProperties.add("version");
+ wantedProperties.add("creationDate");
+ List<String> properties = model.getPropertyNames();
+ for (String property : properties) {
+ if (!"creationDate".equals(property)) {
+ model.get(property).sortable(false);
+ }
+ if (!wantedProperties.contains(property)) {
+ model = model.remove(property);
+ }
+ }
+ elementDataSource = new ElementDataSource();
+ }
+
+ public BeanModel getModel() {
+ return model;
+ }
+
+ public void searchQuery(String query) {
+ if (query == null || query.isEmpty()) {
+ elementDataSource = new ElementDataSource();
+ } else {
+ elementDataSource = new ElementDataSource(query);
+ }
+ }
+
+ public ElementDataSource getElements() {
+ if (elementDataSource == null) {
+ elementDataSource = new ElementDataSource();
+ }
+ return elementDataSource;
+ }
+
+ public MetaDataEntity getElement() {
+ return element;
+ }
+
+ public void setElement(MetaDataEntity element) {
+ this.element = element;
+ }
+
+ public String getDetailElementContext() {
+ String result = element.getUuid() + "," + element.getVersion();
+ return result;
+ }
+
+ public Object onActionFromDetailElement(String context)
+ throws Exception {
+ StringTokenizer st = new StringTokenizer(context, ",");
+ String uuid = st.nextToken();
+ String version = st.nextToken();
+ elementDetail.setup(uuid, version);
+ return elementDetail;
+ }
+
+ public String getWindowTitle() {
+ String windowTitle = null;
+ if (elementDataSource.getQuery() != null
+ && !elementDataSource.getQuery().isEmpty()) {
+ windowTitle = String.format("Search results for \"%s\"",
+ elementDataSource.getQuery());
+ } else {
+ windowTitle = "Application list";
+ }
+ return windowTitle;
+ }
+
+}
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupEdit.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,18 +1,14 @@
package fr.cemagref.simexplorer.is.ui.web.pages;
-import org.apache.tapestry.annotations.Component;
import org.apache.tapestry.annotations.Persist;
-import fr.cemagref.simexplorer.is.ui.web.components.Layout;
+public class GroupEdit {
-public class GroupEdit extends AbstractGroupEdit {
-
@Persist
private int groupId;
void onActivate(int groupId) {
this.groupId = groupId;
- this.onActivate();
}
}
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/GroupList.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,9 +1,6 @@
package fr.cemagref.simexplorer.is.ui.web.pages;
-import org.apache.tapestry.annotations.Component;
-import fr.cemagref.simexplorer.is.ui.web.components.Layout;
+public class GroupList {
-public class GroupList extends AbstractGroupList {
-
}
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserEdit.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,18 +1,14 @@
package fr.cemagref.simexplorer.is.ui.web.pages;
-import org.apache.tapestry.annotations.Component;
import org.apache.tapestry.annotations.Persist;
-import fr.cemagref.simexplorer.is.ui.web.components.Layout;
+public class UserEdit {
-public class UserEdit extends AbstractUserEdit {
-
@Persist
private int userId;
void onActivate(int userId) {
this.userId = userId;
- this.onActivate();
}
}
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/UserList.java 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,9 +1,6 @@
package fr.cemagref.simexplorer.is.ui.web.pages;
-import org.apache.tapestry.annotations.Component;
-import fr.cemagref.simexplorer.is.ui.web.components.Layout;
+public class UserList {
-public class UserList extends AbstractUserList {
-
}
Modified: trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.properties
===================================================================
--- trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.properties 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.properties 2008-01-10 16:00:01 UTC (rev 109)
@@ -20,3 +20,5 @@
abstractpage-administration=Administration
abstractpage-copyright=Copyright © 2007. Code Lutin - GPL
+
+search=Search
\ No newline at end of file
Modified: trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.tml
===================================================================
--- trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.tml 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/components/Layout.tml 2008-01-10 16:00:01 UTC (rev 109)
@@ -32,7 +32,9 @@
<h2 class="Title">${message:abstractpage-menusubtitle1}</h2>
<menu class="menu">
- <li><t:pagelink page="ApplicationList">${message:abstractpage-menuitem1-1}</t:pagelink></li>
+ <li>
+ <t:actionlink t:id="applicationList">${message:abstractpage-menuitem1-1}</t:actionlink>
+ </li>
<li><t:pagelink page="ApplicationImport">${message:abstractpage-menuitem1-2}</t:pagelink></li>
</menu>
@@ -45,10 +47,24 @@
</menu -->
</div>
+
+ <!-- menu -->
+ <h1 class="tab">${message:search}</h1>
+ <div id="tabMenu">
+
+ <t:form>
+ <t:errors/>
+ <h2 class="Title"><t:label for="searchField"/>:</h2>
+ <input t:type="TextField" t:id="searchField" t:value="searchText" t:validate="required,minlength=3" size="30"/>
+ <input type="submit" value="${message:search}"/>
+ </t:form>
+
+ </div>
+
</div>
<div id="Content">
- <!-- main template here -->
+ <!-- main template here -->
<t:body/>
</div>
Deleted: trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.properties
===================================================================
--- trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.properties 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.properties 2008-01-10 16:00:01 UTC (rev 109)
@@ -1 +0,0 @@
-windowtitle=Application detail
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.properties
===================================================================
--- trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.properties 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.properties 2008-01-10 16:00:01 UTC (rev 109)
@@ -1 +0,0 @@
-windowtitle=Application list
\ No newline at end of file
Copied: trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.properties (from rev 106, trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.properties)
===================================================================
--- trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.properties (rev 0)
+++ trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementDetail.properties 2008-01-10 16:00:01 UTC (rev 109)
@@ -0,0 +1 @@
+windowtitle=Element detail
\ No newline at end of file
Copied: trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.properties (from rev 106, trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationList.properties)
===================================================================
--- trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.properties (rev 0)
+++ trunk/simexplorer-is-web/src/main/resources/fr/cemagref/simexplorer/is/ui/web/pages/ElementList.properties 2008-01-10 16:00:01 UTC (rev 109)
@@ -0,0 +1 @@
+windowtitle=Application list
\ No newline at end of file
Deleted: trunk/simexplorer-is-web/src/main/webapp/ApplicationDetail.tml
===================================================================
--- trunk/simexplorer-is-web/src/main/webapp/ApplicationDetail.tml 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/webapp/ApplicationDetail.tml 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,7 +0,0 @@
-<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"
- title="message:windowtitle">
-
- <table t:type="cl/TreeGrid" source="nodes" columnHeaders="headers">
- </table>
-
-</t:layout>
Deleted: trunk/simexplorer-is-web/src/main/webapp/ApplicationList.tml
===================================================================
--- trunk/simexplorer-is-web/src/main/webapp/ApplicationList.tml 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/webapp/ApplicationList.tml 2008-01-10 16:00:01 UTC (rev 109)
@@ -1,10 +0,0 @@
-<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"
- title="message:windowtitle">
-
- <table t:type="Grid" source="applications" row="application" model="model">
- <t:parameter name="uuidCell">
- <t:actionlink t:id="detailApplication" context="${detailApplicationContext}">Details</t:actionlink>
- </t:parameter>
- </table>
-
-</t:layout>
Copied: trunk/simexplorer-is-web/src/main/webapp/ElementDetail.tml (from rev 106, trunk/simexplorer-is-web/src/main/webapp/ApplicationDetail.tml)
===================================================================
--- trunk/simexplorer-is-web/src/main/webapp/ElementDetail.tml (rev 0)
+++ trunk/simexplorer-is-web/src/main/webapp/ElementDetail.tml 2008-01-10 16:00:01 UTC (rev 109)
@@ -0,0 +1,7 @@
+<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"
+ title="message:windowtitle">
+
+ <table t:type="cl/TreeGrid" source="nodes" columnHeaders="headers">
+ </table>
+
+</t:layout>
Copied: trunk/simexplorer-is-web/src/main/webapp/ElementList.tml (from rev 106, trunk/simexplorer-is-web/src/main/webapp/ApplicationList.tml)
===================================================================
--- trunk/simexplorer-is-web/src/main/webapp/ElementList.tml (rev 0)
+++ trunk/simexplorer-is-web/src/main/webapp/ElementList.tml 2008-01-10 16:00:01 UTC (rev 109)
@@ -0,0 +1,12 @@
+<t:layout xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"
+ title="${windowtitle}">
+
+ <h1 class="Title">${windowtitle}</h1>
+
+ <table t:type="Grid" source="elements" row="element" model="model">
+ <t:parameter name="uuidCell">
+ <t:actionlink t:id="detailElement" context="${detailElementContext}">Details</t:actionlink>
+ </t:parameter>
+ </table>
+
+</t:layout>
Modified: trunk/simexplorer-is-web/src/main/webapp/index.html
===================================================================
--- trunk/simexplorer-is-web/src/main/webapp/index.html 2008-01-10 15:59:16 UTC (rev 108)
+++ trunk/simexplorer-is-web/src/main/webapp/index.html 2008-01-10 16:00:01 UTC (rev 109)
@@ -4,7 +4,7 @@
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
<meta http-equiv="refresh"
- content="0; url=applicationlist"/>
+ content="0; url=elementlist"/>
<title></title>
<meta name="robots" content="noindex,follow"/>
</head>
1
0
r108 - in trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage: database database/lucene engine
by glandais@users.labs.libre-entreprise.org 10 Jan '08
by glandais@users.labs.libre-entreprise.org 10 Jan '08
10 Jan '08
Author: glandais
Date: 2008-01-10 15:59:16 +0000 (Thu, 10 Jan 2008)
New Revision: 108
Modified:
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
Log:
Stateless database
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java
===================================================================
--- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-01-10 15:58:24 UTC (rev 107)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-01-10 15:59:16 UTC (rev 108)
@@ -53,6 +53,7 @@
/**
* Insert an element into database
+ * Delete existing element with same id/version if exists
*
* @param element
* Element to insert
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java
===================================================================
--- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-01-10 15:58:24 UTC (rev 107)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-01-10 15:59:16 UTC (rev 108)
@@ -70,24 +70,34 @@
/**
* Location of index
*/
- private Directory directory;
+ private static Directory directory;
/**
* Index writer
*/
- private IndexWriter writer = null;
+ private static IndexWriter writer = null;
/**
* Pool of searcher
*/
- private SearcherPool searcherPool = new SearcherPool();
+ private static SearcherPool searcherPool = null;
/**
* Searcher that should be used for new queries
*/
- private Searcher cachedSearcher = null;
+ private static Searcher cachedSearcher = null;
/**
* Date of latest optimization
*/
- private Date lastOptimize = new Date();
+ private static Date lastOptimize = new Date();
+ private static Object searcherSynchronizer = new Object();
+ private static Object writerSynchronizer = new Object();
+
+ private SearcherPool getSearcherPool() {
+ if (searcherPool == null) {
+ searcherPool = new SearcherPool();
+ }
+ return searcherPool;
+ }
+
/**
* Retrieve searcher for a new query
*
@@ -96,14 +106,14 @@
* @throws IOException
*/
private Searcher getSearcher() throws CorruptIndexException, IOException {
- synchronized (this) {
+ synchronized (searcherSynchronizer) {
// If cached searcher is null (as after an index write)
if (cachedSearcher == null) {
// Instanciate a new searcher
cachedSearcher = new IndexSearcher(directory);
}
// Mark searcher as being used in a new query
- searcherPool.capture(cachedSearcher);
+ getSearcherPool().capture(cachedSearcher);
return cachedSearcher;
}
}
@@ -116,8 +126,8 @@
* @throws IOException
*/
private void releaseSearcher(Searcher searcher) throws IOException {
- synchronized (this) {
- searcherPool.release(searcher);
+ synchronized (searcherSynchronizer) {
+ getSearcherPool().release(searcher);
}
}
@@ -127,11 +137,11 @@
* @throws IOException
*/
private void resetReader() throws IOException {
- synchronized (this) {
+ synchronized (searcherSynchronizer) {
// Reset searcher
if (cachedSearcher != null) {
// Mark as should be closed asap
- searcherPool.mark(cachedSearcher);
+ getSearcherPool().mark(cachedSearcher);
cachedSearcher = null;
}
}
@@ -139,39 +149,45 @@
@Override
public void open(boolean create) throws Exception {
- // Create an analyzer
- Analyzer analyzer = new SimpleAnalyzer();
+ if (writer == null) {
+ // Create an analyzer
+ Analyzer analyzer = new SimpleAnalyzer();
- File indexDir = new File(dbFolder);
- // Create directories
- File resultFolder = new File(indexDir.getParent());
- if (!resultFolder.exists()) {
- resultFolder.mkdirs();
- }
+ File indexDir = new File(dbFolder);
+ // Create directories
+ File resultFolder = new File(indexDir.getParent());
+ if (!resultFolder.exists()) {
+ resultFolder.mkdirs();
+ }
- // Base directory index
- directory = FSDirectory.getDirectory(indexDir, lockFactory);
+ // Base directory index
+ directory = FSDirectory.getDirectory(indexDir, lockFactory);
- // force creation if index doesn't exist
- boolean realCreate = create;
- if (!IndexReader.indexExists(directory)) {
- realCreate = true;
- }
+ // force creation if index doesn't exist
+ boolean realCreate = create;
+ if (!IndexReader.indexExists(directory)) {
+ realCreate = true;
+ }
- // Instanciate unique writer
- writer = new IndexWriter(directory, true, analyzer, realCreate);
+ // Instanciate unique writer
+ writer = new IndexWriter(directory, true, analyzer, realCreate);
- // Write index on create
- if (realCreate) {
- commit();
+ // Write index on create
+ if (realCreate) {
+ commit();
+ }
}
}
@Override
public void close() throws Exception {
- // Close writer and invalidate reader
- writer.close();
+ synchronized (writerSynchronizer) {
+ // Close writer and invalidate reader
+ writer.close();
+ writer = null;
+ }
resetReader();
+ searcherPool = null;
}
/**
@@ -180,17 +196,18 @@
* @throws CorruptIndexException
* @throws IOException
*/
- private synchronized void synchedCommit() throws CorruptIndexException,
- IOException {
- // Flush in ram data
- writer.flush();
- // Check if an optimization is required
- Date now = new Date();
- long elapsed = now.getTime() - lastOptimize.getTime();
- // One optimize per period, if readers are closed
- if (elapsed > optimizePeriod * 1000 && searcherPool.allClosed()) {
- writer.optimize();
- lastOptimize = new Date();
+ private void synchedCommit() throws CorruptIndexException, IOException {
+ synchronized (writerSynchronizer) {
+ // Flush in ram data
+ writer.flush();
+ // Check if an optimization is required
+ Date now = new Date();
+ long elapsed = now.getTime() - lastOptimize.getTime();
+ // One optimize per period, if readers are closed
+ if (elapsed > optimizePeriod * 1000 && getSearcherPool().allClosed()) {
+ writer.optimize();
+ lastOptimize = new Date();
+ }
}
// Invalidate reader
resetReader();
@@ -217,8 +234,10 @@
deleteElement(element);
}
- // add document to index
- writer.addDocument(document);
+ synchronized (writerSynchronizer) {
+ // add document to index
+ writer.addDocument(document);
+ }
}
@Override
@@ -461,7 +480,9 @@
terms[0] = new Term(KEY_UUID, uuid);
terms[1] = new Term(KEY_VERSION, version.toString());
- writer.deleteDocuments(terms);
+ synchronized (writerSynchronizer) {
+ writer.deleteDocuments(terms);
+ }
}
/**
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
===================================================================
--- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-10 15:58:24 UTC (rev 107)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-10 15:59:16 UTC (rev 108)
@@ -2,6 +2,7 @@
import java.io.InputStream;
import java.io.Reader;
+import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -27,7 +28,7 @@
/**
* Indexing
*/
- protected static Database database;
+ protected Database database;
/**
* Storage
@@ -45,9 +46,7 @@
public StorageEngine() {
super();
// Indexing
- if (database == null) {
- database = new LuceneDatabase();
- }
+ database = new LuceneDatabase();
// Storage
attachmentHandler = new FileSystemAttachmentHandler();
// Storing tmp data
@@ -119,6 +118,15 @@
}
}
+ if (element.getName() != null) {
+ Reader reader = new StringReader(element.getName());
+ readers.add(reader);
+ }
+ if (element.getDescription() != null) {
+ Reader reader = new StringReader(element.getDescription());
+ readers.add(reader);
+ }
+
// Insert element in database
database.insertElement(element, readers);
}
1
0
r107 - in trunk/simexplorer-is-service/src: main/java/fr/cemagref/simexplorer/is/service test/java/fr/cemagref/simexplorer/is/service/test
by glandais@users.labs.libre-entreprise.org 10 Jan '08
by glandais@users.labs.libre-entreprise.org 10 Jan '08
10 Jan '08
Author: glandais
Date: 2008-01-10 15:58:24 +0000 (Thu, 10 Jan 2008)
New Revision: 107
Modified:
trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java
trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java
Log:
Chargement d'un LoggableElement plut?\195?\180t qu'uniquement les EA
Modified: trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java
===================================================================
--- trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-01-09 14:14:17 UTC (rev 106)
+++ trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-01-10 15:58:24 UTC (rev 107)
@@ -8,6 +8,7 @@
import com.healthmarketscience.rmiio.RemoteOutputStream;
import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
/**
@@ -144,14 +145,14 @@
int dateOrder) throws Exception;
/**
- * Fully load an exploration application
+ * Fully load an element
*
* @param uuid
* @param version
* @return
* @throws Exception
*/
- ExplorationApplication getExplorationApplication(String uuid, String version)
+ LoggableElement getElement(String uuid, String version)
throws Exception;
}
Modified: trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java
===================================================================
--- trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java 2008-01-09 14:14:17 UTC (rev 106)
+++ trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java 2008-01-10 15:58:24 UTC (rev 107)
@@ -24,7 +24,8 @@
import com.healthmarketscience.rmiio.RemoteOutputStream;
import com.healthmarketscience.rmiio.RemoteOutputStreamClient;
-import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.BaseEntity;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.factories.BaseEntityFactory;
@@ -98,8 +99,8 @@
}
public int findApplicationsCount(boolean onlyLatest) throws Exception {
- return storageEngine.findElementsByTypeCount(
- VALUE_METADATA_TYPE_EA, onlyLatest);
+ return storageEngine.findElementsByTypeCount(VALUE_METADATA_TYPE_EA,
+ onlyLatest);
}
public MetaDataEntity[] findApplications(boolean onlyLatest, int start,
@@ -108,13 +109,15 @@
onlyLatest, start, count, dateOrder);
}
- public ExplorationApplication getExplorationApplication(String uuid,
- String version) throws Exception {
+ public LoggableElement getElement(String uuid, String version)
+ throws Exception {
MetaDataEntity mde = getMetadata(uuid, version);
- ExplorationApplication ea = (ExplorationApplication) BaseEntityFactory
- .getFactory(ExplorationApplication.class).loadElement(
- storageEngine.retrieveData(mde, KEY_XML));
- return ea;
+
+ LoggableElement le = (LoggableElement) BaseEntityFactory.getFactory(
+ LoggableElement.class.getPackage().getName() + "." + mde.getType())
+ .loadElement(storageEngine.retrieveData(mde, KEY_XML));
+
+ return le;
}
private MetaDataEntity saveElement(InputStream zipStream) throws Exception {
Modified: trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java
===================================================================
--- trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java 2008-01-09 14:14:17 UTC (rev 106)
+++ trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java 2008-01-10 15:58:24 UTC (rev 107)
@@ -40,9 +40,17 @@
metaData.setUuid(shortString());
metaData.setName(longString());
metaData.setType(element.getClass().getSimpleName());
- metaData.setDescription("test");
+
+ StringBuffer sb = new StringBuffer("");
+ int c = 3 + r.nextInt(5);
+ for (int i = 0; i < c; i++) {
+ sb.append(shortString());
+ sb.append(" ");
+ }
+ metaData.setDescription(sb.toString());
+
Version v = new Version("0");
- int c = 2 + r.nextInt(2);
+ c = 2 + r.nextInt(2);
for (int i = 0; i < c; i++) {
v.setVersion(i, r.nextInt(5));
}
1
0
r106 - in trunk/simexplorer-is-web: . .settings src/main/java/fr/cemagref/simexplorer/is/ui/web src/main/java/fr/cemagref/simexplorer/is/ui/web/pages src/main/java/fr/cemagref/simexplorer/is/ui/web/services src/main/java/fr/cemagref/simexplorer/is/ui/web/tools src/main/webapp/WEB-INF/lib
by glandais@users.labs.libre-entreprise.org 09 Jan '08
by glandais@users.labs.libre-entreprise.org 09 Jan '08
09 Jan '08
Author: glandais
Date: 2008-01-09 14:14:17 +0000 (Wed, 09 Jan 2008)
New Revision: 106
Added:
trunk/simexplorer-is-web/.settings/libcopy.prefs
trunk/simexplorer-is-web/.settings/org.eclipse.wst.validation.prefs
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/AttachmentStreamResponse.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/XMLAttachment.java
trunk/simexplorer-is-web/src/main/webapp/WEB-INF/lib/tapestry5-treegrid-0.0.1-SNAPSHOT.jar
Removed:
trunk/simexplorer-is-web/.classpath.tmp
trunk/simexplorer-is-web/.svn.ok/
Modified:
trunk/simexplorer-is-web/.classpath
trunk/simexplorer-is-web/.project
trunk/simexplorer-is-web/.settings/org.eclipse.wst.common.component
trunk/simexplorer-is-web/pom.xml
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java
trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/services/StorageServiceFactory.java
Log:
Re import (changed web path)
Modified: trunk/simexplorer-is-web/.classpath
===================================================================
--- trunk/simexplorer-is-web/.classpath 2008-01-09 14:13:13 UTC (rev 105)
+++ trunk/simexplorer-is-web/.classpath 2008-01-09 14:14:17 UTC (rev 106)
@@ -1,17 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v5.5"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
- <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
- <attributes>
- <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
- </attributes>
- </classpathentry>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
<classpathentry combineaccessrules="false" kind="src" path="/simexplorer-is-entities"/>
<classpathentry combineaccessrules="false" kind="src" path="/simexplorer-is-service"/>
<classpathentry combineaccessrules="false" kind="src" path="/tapestry5-treegrid"/>
- <classpathentry kind="output" path="build/classes"/>
+ <classpathentry kind="output" path="target/classes"/>
</classpath>
Deleted: trunk/simexplorer-is-web/.classpath.tmp
===================================================================
--- trunk/simexplorer-is-web/.classpath.tmp 2008-01-09 14:13:13 UTC (rev 105)
+++ trunk/simexplorer-is-web/.classpath.tmp 2008-01-09 14:14:17 UTC (rev 106)
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v5.5"/>
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
- <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
- <attributes>
- <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
- </attributes>
- </classpathentry>
- <classpathentry combineaccessrules="false" kind="src" path="/simexplorer-is-entities"/>
- <classpathentry combineaccessrules="false" kind="src" path="/simexplorer-is-service"/>
- <classpathentry combineaccessrules="false" kind="src" path="/tapestry5-treegrid"/>
- <classpathentry kind="output" path="build/classes"/>
-</classpath>
Modified: trunk/simexplorer-is-web/.project
===================================================================
--- trunk/simexplorer-is-web/.project 2008-01-09 14:13:13 UTC (rev 105)
+++ trunk/simexplorer-is-web/.project 2008-01-09 14:14:17 UTC (rev 106)
@@ -28,6 +28,11 @@
<arguments>
</arguments>
</buildCommand>
+ <buildCommand>
+ <name>libcopy.libcopyBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
@@ -35,5 +40,113 @@
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>libcopy.libcopyNature</nature>
</natures>
+ <linkedResources>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/jboss-ejb3x-4.2.2.GA.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/jboss/jboss-ejb3x/4.2.2.GA/jboss-ejb3x-4.2.2.GA.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/tapestry-core-5.0.7.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/apache/tapestry/tapestry-core/5.0.7/tapestry-core-5.0.7.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/commons-logging-1.1.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/commons-logging/commons-logging/1.1/commons-logging-1.1.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/logkit-1.0.1.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/logkit/logkit/1.0.1/logkit-1.0.1.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/tapestry-upload-5.0.7.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/apache/tapestry/tapestry-upload/5.0.7/tapestry-upload-5.0.7.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/servlet-api-2.3.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/commons-fileupload-1.2.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/commons-fileupload/commons-fileupload/1.2/commons-fileupload-1.2.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/tapestry-ioc-5.0.7.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/apache/tapestry/tapestry-ioc/5.0.7/tapestry-ioc-5.0.7.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/commons-io-1.3.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/commons-io/commons-io/1.3/commons-io-1.3.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/junit-3.8.1.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/log4j-1.2.14.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/jbossall-client-4.2.2.GA.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/jboss/jbossall-client/4.2.2.GA/jbossall-client-4.2.2.GA.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/javassist-3.6.ga.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/jboss/javassist/3.6.ga/javassist-3.6.ga.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/lucene-core-2.2.0.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/slf4j-api-1.4.3.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/slf4j/slf4j-api/1.4.3/slf4j-api-1.4.3.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/avalon-framework-4.1.3.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/tapestry-annotations-5.0.7.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/apache/tapestry/tapestry-annotations/5.0.7/tapestry-annotations-5.0.7.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/rmiio-2.0.0.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/com/healthmarketscience/rmiio/rmiio/2.0.0/rmiio-2.0.0.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/commons-codec-1.3.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/commons-codec/commons-codec/1.3/commons-codec-1.3.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/slf4j-log4j12-1.4.3.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/slf4j/slf4j-log4j12/1.4.3/slf4j-log4j12-1.4.3.jar</location>
+ </link>
+ <link>
+ <name>src/main/webapp/WEB-INF/lib/testng-5.1-jdk15.jar</name>
+ <type>1</type>
+ <location>/home/glandais/.m2/repository/org/testng/testng/5.1/testng-5.1-jdk15.jar</location>
+ </link>
+ </linkedResources>
</projectDescription>
Added: trunk/simexplorer-is-web/.settings/libcopy.prefs
===================================================================
--- trunk/simexplorer-is-web/.settings/libcopy.prefs (rev 0)
+++ trunk/simexplorer-is-web/.settings/libcopy.prefs 2008-01-09 14:14:17 UTC (rev 106)
@@ -0,0 +1 @@
+#Wed Jan 09 11:27:29 CET 2008
Modified: trunk/simexplorer-is-web/.settings/org.eclipse.wst.common.component
===================================================================
--- trunk/simexplorer-is-web/.settings/org.eclipse.wst.common.component 2008-01-09 14:13:13 UTC (rev 105)
+++ trunk/simexplorer-is-web/.settings/org.eclipse.wst.common.component 2008-01-09 14:14:17 UTC (rev 106)
@@ -3,6 +3,7 @@
<wb-module deploy-name="simexplorer-is-web">
<wb-resource deploy-path="/" source-path="/src/main/webapp"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+ <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/tapestry5-treegrid/tapestry5-treegrid">
<dependency-type>uses</dependency-type>
</dependent-module>
Added: trunk/simexplorer-is-web/.settings/org.eclipse.wst.validation.prefs
===================================================================
--- trunk/simexplorer-is-web/.settings/org.eclipse.wst.validation.prefs (rev 0)
+++ trunk/simexplorer-is-web/.settings/org.eclipse.wst.validation.prefs 2008-01-09 14:14:17 UTC (rev 106)
@@ -0,0 +1,6 @@
+#Wed Jan 09 10:44:58 CET 2008
+DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;org.eclipse.jst.j2ee.internal.web.validation.UIWarValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;
+USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationtrueversion1.1.102.v200709122200
+eclipse.preferences.version=1
Modified: trunk/simexplorer-is-web/pom.xml
===================================================================
--- trunk/simexplorer-is-web/pom.xml 2008-01-09 14:13:13 UTC (rev 105)
+++ trunk/simexplorer-is-web/pom.xml 2008-01-09 14:14:17 UTC (rev 106)
@@ -46,14 +46,14 @@
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
- <groupId>jboss</groupId>
- <artifactId>jbossall-client</artifactId>
- <version>3.2.3</version>
- </dependency>
- <dependency>
<groupId>org.apache.tapestry</groupId>
<artifactId>tapestry-upload</artifactId>
<version>5.0.7</version>
</dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jbossall-client</artifactId>
+ <version>4.2.2.GA</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java 2008-01-09 14:13:13 UTC (rev 105)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/pages/ApplicationDetail.java 2008-01-09 14:14:17 UTC (rev 106)
@@ -1,5 +1,6 @@
package fr.cemagref.simexplorer.is.ui.web.pages;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
@@ -27,7 +28,9 @@
import fr.cemagref.simexplorer.is.entities.data.Library;
import fr.cemagref.simexplorer.is.entities.data.Result;
import fr.cemagref.simexplorer.is.entities.data.Structure;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
import fr.cemagref.simexplorer.is.ui.web.services.StorageServiceFactory;
+import fr.cemagref.simexplorer.is.ui.web.tools.XMLAttachment;
public class ApplicationDetail extends AbstractApplicationDetail {
@@ -65,8 +68,13 @@
bos);
StorageServiceFactory.getService().exportElement(
xmlRemoteOutputStream.export(), uuid, version);
- response = new TextStreamResponse("text/xml", bos.toString());
+ MetaDataEntity mde = StorageServiceFactory.getService().getMetadata(
+ uuid, version);
+ ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+ response = new XMLAttachment(bis, mde.getType() + "." + mde.getUuid() + ".v"
+ + mde.getVersion());
+
return response;
}
Modified: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/services/StorageServiceFactory.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/services/StorageServiceFactory.java 2008-01-09 14:13:13 UTC (rev 105)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/services/StorageServiceFactory.java 2008-01-09 14:14:17 UTC (rev 106)
@@ -24,7 +24,7 @@
Context context = new InitialContext(properties);
serviceProjets = (StorageService) context
- .lookup("ejb3/StorageService");
+ .lookup("StorageService");
}
return serviceProjets;
}
Added: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/AttachmentStreamResponse.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/AttachmentStreamResponse.java (rev 0)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/AttachmentStreamResponse.java 2008-01-09 14:14:17 UTC (rev 106)
@@ -0,0 +1,49 @@
+package fr.cemagref.simexplorer.is.ui.web.tools;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.tapestry.StreamResponse;
+import org.apache.tapestry.services.Response;
+
+public class AttachmentStreamResponse implements StreamResponse {
+ private InputStream is = null;
+
+ protected String contentType = "text/plain";
+
+ protected String extension = "txt";
+
+ protected String filename = "default";
+
+ public AttachmentStreamResponse(InputStream is, String filenameIn) {
+ this.is = is;
+ if (filenameIn != null) {
+ this.filename = filenameIn;
+ }
+ }
+
+ public AttachmentStreamResponse(InputStream is) {
+ this.is = is;
+ }
+
+ public String getContentType() {
+ return contentType;
+ }
+
+ public InputStream getStream() throws IOException {
+ return is;
+ }
+
+ public void prepareResponse(Response arg0) {
+ arg0.setHeader("Content-Disposition", "attachment; filename="
+ + filename + ((extension == null) ? "" : ("." + extension)));
+ arg0.setHeader("Expires", "0");
+ arg0.setHeader("Cache-Control",
+ "must-revalidate, post-check=0, pre-check=0");
+ arg0.setHeader("Pragma", "public");
+ // We can't set the length here because we only have an Input Stream at
+ // this point. (Although we'd like to.)
+ // We can only get size from an output stream.
+ // arg0.setContentLength(.length);
+ }
+}
\ No newline at end of file
Added: trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/XMLAttachment.java
===================================================================
--- trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/XMLAttachment.java (rev 0)
+++ trunk/simexplorer-is-web/src/main/java/fr/cemagref/simexplorer/is/ui/web/tools/XMLAttachment.java 2008-01-09 14:14:17 UTC (rev 106)
@@ -0,0 +1,19 @@
+package fr.cemagref.simexplorer.is.ui.web.tools;
+
+import java.io.InputStream;
+
+public class XMLAttachment extends AttachmentStreamResponse {
+
+ public XMLAttachment(InputStream is, String filenameIn) {
+ super(is, filenameIn);
+ this.contentType = "text/xml";
+ this.extension = "xml";
+ }
+
+ public XMLAttachment(InputStream is) {
+ super(is);
+ this.contentType = "text/xml";
+ this.extension = "xml";
+ }
+
+}
Added: trunk/simexplorer-is-web/src/main/webapp/WEB-INF/lib/tapestry5-treegrid-0.0.1-SNAPSHOT.jar
===================================================================
(Binary files differ)
Property changes on: trunk/simexplorer-is-web/src/main/webapp/WEB-INF/lib/tapestry5-treegrid-0.0.1-SNAPSHOT.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
1
0
r105 - in trunk/simexplorer-si-storage: . .settings src src/main src/main/java/fr/cemagref/simexplorer/is/storage src/main/java/fr/cemagref/simexplorer/is/storage/attachment src/main/java/fr/cemagref/simexplorer/is/storage/database src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene src/main/java/fr/cemagref/simexplorer/is/storage/engine src/main/java/fr/cemagref/simexplorer/is/storage/util src/main/resources src/main/resources/properties src/test src/test/java src/test
by glandais@users.labs.libre-entreprise.org 09 Jan '08
by glandais@users.labs.libre-entreprise.org 09 Jan '08
09 Jan '08
Author: glandais
Date: 2008-01-09 14:13:13 +0000 (Wed, 09 Jan 2008)
New Revision: 105
Added:
trunk/simexplorer-si-storage/pom.xml
trunk/simexplorer-si-storage/src/main/
trunk/simexplorer-si-storage/src/main/java/
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java
trunk/simexplorer-si-storage/src/main/resources/
trunk/simexplorer-si-storage/src/main/resources/properties/
trunk/simexplorer-si-storage/src/main/resources/properties/config.properties
trunk/simexplorer-si-storage/src/test/java/
trunk/simexplorer-si-storage/src/test/java/fr/
trunk/simexplorer-si-storage/src/test/resources/
trunk/simexplorer-si-storage/src/test/resources/properties2/
trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties
trunk/simexplorer-si-storage/src/test/resources/testImport/
Removed:
trunk/simexplorer-si-storage/pom.xml
trunk/simexplorer-si-storage/src/java/
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/handler/
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/type/
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/entities/
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/factories/
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/service/
trunk/simexplorer-si-storage/src/ressources/
trunk/simexplorer-si-storage/src/test/fr/
trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java
trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/service/
Modified:
trunk/simexplorer-si-storage/.classpath
trunk/simexplorer-si-storage/.project
trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs
trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component
trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java
trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java
trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java
trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java
trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java
Log:
Service&entities split
Modified: trunk/simexplorer-si-storage/.classpath
===================================================================
--- trunk/simexplorer-si-storage/.classpath 2008-01-09 14:11:23 UTC (rev 104)
+++ trunk/simexplorer-si-storage/.classpath 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,10 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src/java"/>
- <classpathentry kind="src" path="src/test"/>
- <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.generic.runtimeTarget/JBoss v4.2"/>
- <classpathentry exported="true" kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar" sourcepath="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar" sourcepath="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/simexplorer-is/simexplorer-is-entities/0.0.1-SNAPSHOT/simexplorer-is-entities-0.0.1-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.12/log4j-1.2.12.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/testng/testng/5.1/testng-5.1-jdk15.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java-6-sun-1.6.0.03"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>
Modified: trunk/simexplorer-si-storage/.project
===================================================================
--- trunk/simexplorer-si-storage/.project 2008-01-09 14:11:23 UTC (rev 104)
+++ trunk/simexplorer-si-storage/.project 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,42 +1,26 @@
-<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>simexplorer-is-storage</name>
- <comment>simexploreris stockage</comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.maven.ide.eclipse.maven2Builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.common.project.facet.core.builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.wst.validation.validationbuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.maven.ide.eclipse.maven2Nature</nature>
- <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature>
- <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
- <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
- <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
- </natures>
-</projectDescription>
+ <name>simexplorer-is-storage</name>
+ <comment></comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Modified: trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs 2008-01-09 14:11:23 UTC (rev 104)
+++ trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,4 +1,4 @@
-#Fri Dec 21 11:44:03 CET 2007
+#Tue Jan 08 17:55:15 CET 2008
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
org.eclipse.jdt.core.compiler.compliance=1.5
Modified: trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component
===================================================================
--- trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component 2008-01-09 14:11:23 UTC (rev 104)
+++ trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="simexplorer-is-storage">
- <wb-resource deploy-path="/" source-path="/src/java"/>
- <wb-resource deploy-path="/" source-path="/src/test"/>
- <property name="java-output-path" value="build/classes"/>
+ <wb-resource deploy-path="/" source-path="/src/main/java"/>
+ <wb-resource deploy-path="/" source-path="/src/main/resources"/>
+ <wb-resource deploy-path="/" source-path="/src/test/java"/>
+ <wb-resource deploy-path="/" source-path="/src/test/resources"/>
</wb-module>
</project-modules>
Modified: trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml
===================================================================
--- trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml 2008-01-09 14:11:23 UTC (rev 104)
+++ trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
- <runtime name="JBoss v4.2"/>
- <fixed facet="jst.ejb"/>
+ <runtime name="JBoss 4.2 Runtime"/>
<fixed facet="jst.java"/>
+ <fixed facet="jst.utility"/>
+ <installed facet="jst.utility" version="1.0"/>
<installed facet="jst.java" version="5.0"/>
- <installed facet="jst.ejb" version="3.0"/>
</faceted-project>
Deleted: trunk/simexplorer-si-storage/pom.xml
===================================================================
--- trunk/simexplorer-si-storage/pom.xml 2008-01-09 14:11:23 UTC (rev 104)
+++ trunk/simexplorer-si-storage/pom.xml 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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">
- <parent>
- <artifactId>lutinproject</artifactId>
- <groupId>lutinlib</groupId>
- <version>2.2</version>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>simexplorer-is-storage</groupId>
- <artifactId>simexplorer-is-storage</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <description></description>
-
- <profiles>
- <profile>
- <id>project</id>
-
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
-
- <properties>
- <!--Source base dir-->
- <maven.src.dir>
- ${basedir}/target/src-build
- </maven.src.dir>
-
- <!--Test-->
- <maven.test.skip>true</maven.test.skip>
-
- <!--Compile with ?-->
- <maven.compile.source>1.5</maven.compile.source>
- <maven.compile.target>1.5</maven.compile.target>
-
- <!--Verbose-->
- <maven.verbose>false</maven.verbose>
- </properties>
- </profile>
- </profiles>
-
- <dependencies>
- <dependency>
- <groupId>com.healthmarketscience.rmiio</groupId>
- <artifactId>rmiio</artifactId>
- <version>2.0.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- <version>2.2.0</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.4</version>
- </dependency>
- <dependency>
- <groupId>lutinlib</groupId>
- <artifactId>lutinutil</artifactId>
- <version>0.26</version>
- </dependency>
- </dependencies>
- <reporting>
- <outputDirectory>target/site</outputDirectory>
- </reporting>
-</project>
\ No newline at end of file
Added: trunk/simexplorer-si-storage/pom.xml
===================================================================
--- trunk/simexplorer-si-storage/pom.xml (rev 0)
+++ trunk/simexplorer-si-storage/pom.xml 2008-01-09 14:13:13 UTC (rev 105)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-storage</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <description></description>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.1</version>
+ <classifier>jdk15</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-entities</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-core</artifactId>
+ <version>2.2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1</version>
+ </dependency>
+
+ </dependencies>
+</project>
\ No newline at end of file
Copied: trunk/simexplorer-si-storage/src/main/java (from rev 94, trunk/simexplorer-si-storage/src/java)
Copied: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java (from rev 94, trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/handler/AttachmentHandler.java)
===================================================================
--- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java (rev 0)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -0,0 +1,54 @@
+package fr.cemagref.simexplorer.is.storage.attachment;
+
+import java.io.InputStream;
+
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+
+/**
+ * Store, retrieve and delete content
+ *
+ * @author landais
+ *
+ */
+public abstract class AttachmentHandler {
+
+ /**
+ * Store content
+ *
+ * @param entity
+ * DataEntity related to content
+ * @param field
+ * Unique field for content
+ * @param is
+ * Content
+ * @throws Exception
+ */
+ public abstract void storeData(MetaDataEntity entity, String field,
+ InputStream is) throws Exception;
+
+ /**
+ * Retrieve content
+ *
+ * @param entity
+ * DataEntity related to content
+ * @param field
+ * Unique field for content
+ * @return Content
+ * @throws Exception
+ */
+ public abstract InputStream retrieveData(MetaDataEntity entity, String field)
+ throws Exception;
+
+ /**
+ * Delete content
+ *
+ * @param entity
+ * DataEntity related to content
+ * @param field
+ * Unique field for content
+ * @throws Exception
+ */
+ public abstract void deleteData(MetaDataEntity entity, String field)
+ throws Exception;
+
+}
\ No newline at end of file
Copied: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java (from rev 94, trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/handler/FileSystemAttachmentHandler.java)
===================================================================
--- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java (rev 0)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -0,0 +1,98 @@
+package fr.cemagref.simexplorer.is.storage.attachment;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.storage.util.Config;
+
+/**
+ * File system implementation
+ *
+ * @author landais
+ *
+ */
+public class FileSystemAttachmentHandler extends AttachmentHandler {
+
+ /**
+ * Base folder
+ */
+ private static String baseFolder = Config.getProperties().getProperty(
+ "simexplorer.data");
+
+ /**
+ * Retrieve file associated to content Create directories associated to file
+ *
+ * @param entity
+ * DataEntity related to content
+ * @param field
+ * Unique field for content
+ * @return Instance of file
+ * @throws Exception
+ */
+ private File getFile(MetaDataEntity entity, String field) {
+ String resultPath = baseFolder;
+
+ // Create file path
+ if (entity.getUuid().length() > 3) {
+ resultPath = resultPath + entity.getUuid().substring(0, 1) + "/"
+ + entity.getUuid().substring(1, 2) + "/"
+ + entity.getUuid().substring(2, 3) + "/" + entity.getUuid();
+ } else {
+ resultPath = resultPath + entity.getUuid();
+ }
+ resultPath = resultPath + "/" + entity.getVersion().toString() + "/"
+ + field;
+
+ File result = new File(resultPath);
+ // Create directories
+ File resultFolder = new File(result.getParent());
+ if (!resultFolder.exists()) {
+ resultFolder.mkdirs();
+ }
+
+ return result;
+ }
+
+ @Override
+ public InputStream retrieveData(MetaDataEntity entity, String field)
+ throws Exception {
+ // Simple stream on file
+ FileInputStream fis = new FileInputStream(getFile(entity, field));
+ return fis;
+ }
+
+ @Override
+ public void storeData(MetaDataEntity entity, String field, InputStream is)
+ throws Exception {
+ // Simple stream on file
+ FileOutputStream fos = new FileOutputStream(getFile(entity, field));
+
+ // Buffer copy stream to stream
+ BufferedInputStream bin = new BufferedInputStream(is);
+ BufferedOutputStream bout = new BufferedOutputStream(fos);
+
+ while (true) {
+ int datum = bin.read();
+ if (datum == -1)
+ break;
+ bout.write(datum);
+ }
+ bout.flush();
+
+ // Close file
+ fos.close();
+ }
+
+ @Override
+ public void deleteData(MetaDataEntity entity, String field)
+ throws Exception {
+ // Simple delete on file
+ getFile(entity, field).delete();
+ }
+
+}
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java
===================================================================
--- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -6,8 +6,8 @@
import java.util.Map;
import java.util.Set;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
/**
* Interface of a database able to manage metadata elements
@@ -140,6 +140,15 @@
public abstract int findElementsByPropertiesCount(
Map<String, String> properties) throws Exception;
+ /**
+ * Prepare properties for query
+ *
+ * @param type
+ * Type of entity wanted
+ * @param onlyLatest
+ * Only wanted elements
+ * @return Properties for query
+ */
private Map<String, String> getPropertiesByType(String type,
boolean onlyLatest) {
Map<String, String> properties = new HashMap<String, String>();
@@ -150,12 +159,39 @@
return properties;
}
+ /**
+ * Retrieve elements of a certain type
+ *
+ * @param type
+ * Type wanted
+ * @param onlyLatest
+ * Only latest elements
+ * @param start
+ * Start index
+ * @param count
+ * Number of documents
+ * @param dateOrder
+ * Sorting
+ * @return Element list
+ * @throws Exception
+ */
public Set<MetaDataEntity> findElementsByType(String type,
- boolean onlyLatest, int start, int count, int dateOrder) throws Exception {
+ boolean onlyLatest, int start, int count, int dateOrder)
+ throws Exception {
return findElementsByProperties(getPropertiesByType(type, onlyLatest),
start, count, dateOrder);
}
+ /**
+ * Number of elements of the type
+ *
+ * @param type
+ * Type wanted
+ * @param onlyLatest
+ * Only latest elements
+ * @return Number of elements
+ * @throws Exception
+ */
public int findElementsByTypeCount(String type, boolean onlyLatest)
throws Exception {
return findElementsByPropertiesCount(getPropertiesByType(type,
@@ -176,8 +212,8 @@
* @throws Exception
*/
public abstract Set<MetaDataEntity> findElementsByContentSearch(
- String queryText, boolean onlyLatest, int start, int count, int dateOrder)
- throws Exception;
+ String queryText, boolean onlyLatest, int start, int count,
+ int dateOrder) throws Exception;
/**
* Retrieve element count with specific content
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java
===================================================================
--- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -50,19 +50,19 @@
*/
public static final String KEY_ATTACHMENT = "simexplorer.attachment";
/**
- * Field name for id
+ * Field name for id of parent data
*/
public static final String KEY_PARENTDATA_UUID = "simexplorer.parentdata.uuid";
/**
- * Field name for id
+ * Field name for version of parent data
*/
public static final String KEY_PARENTDATA_VERSION = "simexplorer.parentdata.version";
/**
- * Field name for id
+ * Field name for id of parent version
*/
public static final String KEY_PARENTVERSION_UUID = "simexplorer.parentversion.uuid";
/**
- * Field name for id
+ * Field name for version of parent version
*/
public static final String KEY_PARENTVERSION_VERSION = "simexplorer.parentversion.version";
/**
@@ -70,19 +70,19 @@
*/
public static final String KEY_SEARCHABLE_CONTENT = "simexplorer.searchablecontent";
/**
- *
+ * Field name for sorting
*/
public static final String SORT_DATE_FIELD = KEY_CREATIONDATE;
/**
- *
+ * No date sort
*/
public static final int SORT_DATE_NONE = 0;
/**
- *
+ * Sort element by date (ascending)
*/
public static final int SORT_DATE_ASCENDING = 1;
/**
- *
+ * Sort element by date (descending)
*/
public static final int SORT_DATE_DESCENDING = -1;
}
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java
===================================================================
--- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -36,11 +36,12 @@
import org.apache.lucene.store.LockFactory;
import org.apache.lucene.store.NoLockFactory;
-import fr.cemagref.simexplorer.is.storage.attachment.type.ContentType;
-import fr.cemagref.simexplorer.is.storage.attachment.type.ContentTypeFactory;
+import fr.cemagref.simexplorer.is.contenttype.ContentType;
+import fr.cemagref.simexplorer.is.contenttype.ContentTypeFactory;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.storage.database.Database;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.storage.util.Config;
/**
* Lucene implementation
@@ -51,6 +52,18 @@
public class LuceneDatabase extends Database {
/**
+ * DB folder
+ */
+ private static String dbFolder = Config.getProperties().getProperty(
+ "simexplorer.db");
+
+ /**
+ * Optimize period
+ */
+ private static Integer optimizePeriod = new Integer(Config.getProperties()
+ .getProperty("simexplorer.optimizeperiod"));
+
+ /**
* Lock factory for Lucene writer
*/
private static LockFactory lockFactory = new NoLockFactory();
@@ -129,14 +142,17 @@
// Create an analyzer
Analyzer analyzer = new SimpleAnalyzer();
- // FIXME index location
- // File indexDir = new File("./index/");
- // File indexDir = new File("/home/glandais/lucene/index.big");
- File indexDir = new File("/var/local/simexplorer/db1");
+ File indexDir = new File(dbFolder);
+ // Create directories
+ File resultFolder = new File(indexDir.getParent());
+ if (!resultFolder.exists()) {
+ resultFolder.mkdirs();
+ }
// Base directory index
directory = FSDirectory.getDirectory(indexDir, lockFactory);
+ // force creation if index doesn't exist
boolean realCreate = create;
if (!IndexReader.indexExists(directory)) {
realCreate = true;
@@ -145,6 +161,7 @@
// Instanciate unique writer
writer = new IndexWriter(directory, true, analyzer, realCreate);
+ // Write index on create
if (realCreate) {
commit();
}
@@ -152,10 +169,17 @@
@Override
public void close() throws Exception {
+ // Close writer and invalidate reader
writer.close();
resetReader();
}
+ /**
+ * Push commit to db
+ *
+ * @throws CorruptIndexException
+ * @throws IOException
+ */
private synchronized void synchedCommit() throws CorruptIndexException,
IOException {
// Flush in ram data
@@ -163,18 +187,18 @@
// Check if an optimization is required
Date now = new Date();
long elapsed = now.getTime() - lastOptimize.getTime();
- // FIXME One optimize per hour, if readers are closed
- if (elapsed > 3600 * 1000 && searcherPool.allClosed()) {
+ // One optimize per period, if readers are closed
+ if (elapsed > optimizePeriod * 1000 && searcherPool.allClosed()) {
writer.optimize();
lastOptimize = new Date();
}
- // System.out.println(writer.docCount());
// Invalidate reader
resetReader();
}
@Override
public void commit() throws Exception {
+ // Allows concurent access
synchedCommit();
}
@@ -352,6 +376,14 @@
return result;
}
+ /**
+ * Retrieve a Lucene Sort for date sorting
+ *
+ * @param dateOrder
+ * sort wanted SORT_DATE_NONE, SORT_DATE_DESCENDING,
+ * SORT_DATE_ASCENDING,
+ * @return null if no sort
+ */
private Sort getSortDate(int dateOrder) {
Sort sort = null;
if (dateOrder == SORT_DATE_DESCENDING) {
@@ -386,21 +418,39 @@
return result;
}
+ /**
+ * Retrieve a Lucene Query for a full text search
+ *
+ * @param queryText
+ * String to match
+ * @param onlyLatest
+ * Latest flag
+ * @return Query
+ * @throws ParseException
+ */
private Query getQueryByContentSearch(String queryText, boolean onlyLatest)
throws ParseException {
Query query;
+ // Create an analyzer for query parsing
Analyzer analyzer = new SimpleAnalyzer();
+ // Create an parser to handle query
QueryParser parser = new QueryParser(KEY_SEARCHABLE_CONTENT, analyzer);
+ // Parse query
Query searchQuery = parser.parse(queryText);
+
if (onlyLatest) {
+ // If we want only latest items
+ // Boolean search with content and latest field
query = new BooleanQuery();
((BooleanQuery) query).add(searchQuery, BooleanClause.Occur.MUST);
((BooleanQuery) query).add(
new TermQuery(new Term(KEY_LATEST, "1")),
BooleanClause.Occur.MUST);
} else {
+ // No change
query = searchQuery;
}
+
return query;
}
@@ -437,7 +487,7 @@
}
/**
- * Convert all Lucene documents to real entities
+ * Convert Lucene documents to real entities
*
* @param hits
* Document collection
@@ -476,6 +526,9 @@
private MetaDataEntity loadLuceneElement(Document document)
throws Exception {
MetaDataEntity element = new MetaDataEntity();
+
+ // Fill element with Lucene document
+
element.setUuid(document.get(KEY_UUID));
element.setName(document.get(KEY_NAME));
element.setType(document.get(KEY_TYPE));
@@ -532,8 +585,19 @@
return element;
}
+ /**
+ * Add a field to a document
+ *
+ * @param document
+ * Document to add the field
+ * @param name
+ * Field name
+ * @param value
+ * Field value
+ */
private void addSimpleField(Document document, String name, String value) {
if (value != null) {
+ // Create a simple field
Field f = new Field(name, value, Field.Store.YES,
Field.Index.UN_TOKENIZED);
document.add(f);
@@ -552,6 +616,8 @@
List<Reader> readers) {
Document document = new Document();
+ // Store all element properties in Lucene document
+
addSimpleField(document, KEY_UUID, element.getUuid());
addSimpleField(document, KEY_NAME, element.getName());
addSimpleField(document, KEY_TYPE, element.getType());
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java
===================================================================
--- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,7 +1,6 @@
package fr.cemagref.simexplorer.is.storage.database.lucene;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
===================================================================
--- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -8,13 +8,13 @@
import java.util.Set;
import java.util.UUID;
-import fr.cemagref.simexplorer.is.storage.attachment.handler.AttachmentHandler;
-import fr.cemagref.simexplorer.is.storage.attachment.handler.FileSystemAttachmentHandler;
-import fr.cemagref.simexplorer.is.storage.attachment.type.ContentType;
+import fr.cemagref.simexplorer.is.contenttype.ContentType;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler;
+import fr.cemagref.simexplorer.is.storage.attachment.FileSystemAttachmentHandler;
import fr.cemagref.simexplorer.is.storage.database.Database;
import fr.cemagref.simexplorer.is.storage.database.lucene.LuceneDatabase;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.Version;
/**
* Handle data storage and indexing
@@ -27,7 +27,7 @@
/**
* Indexing
*/
- protected Database database;
+ protected static Database database;
/**
* Storage
@@ -45,7 +45,9 @@
public StorageEngine() {
super();
// Indexing
- database = new LuceneDatabase();
+ if (database == null) {
+ database = new LuceneDatabase();
+ }
// Storage
attachmentHandler = new FileSystemAttachmentHandler();
// Storing tmp data
@@ -95,11 +97,13 @@
public void saveElement(MetaDataEntity element,
Map<String, InputStream> attachments) throws Exception {
+ // Save all attachments in system
for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
attachmentHandler.storeData(element, entry.getKey(), entry
.getValue());
}
+ // Parse all attachments for indexing
List<Reader> readers = new ArrayList<Reader>();
for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
String field = entry.getKey();
@@ -108,12 +112,14 @@
if (element.getAttachments() != null) {
ContentType contentType = element.getAttachments().get(field);
if (contentType != null) {
+ // Transform stream into indexable text
Reader reader = contentType.renderToText(content);
readers.add(reader);
}
}
}
+ // Insert element in database
database.insertElement(element, readers);
}
@@ -164,17 +170,46 @@
return mde;
}
+ /**
+ * Get data associated to an element
+ *
+ * @param entity
+ * Element related
+ * @param field
+ * Data field
+ * @return Data stream
+ * @throws Exception
+ */
public InputStream retrieveData(MetaDataEntity entity, String field)
throws Exception {
InputStream result = attachmentHandler.retrieveData(entity, field);
return result;
}
+ /**
+ * Get number of items corresponding to query
+ *
+ * @param query
+ * @param onlyLatest
+ * @return
+ * @throws Exception
+ */
public int findFullTextCount(String query, boolean onlyLatest)
throws Exception {
return database.findElementsByContentSearchCount(query, onlyLatest);
}
+ /**
+ * Retrieve list of items corresponding to query
+ *
+ * @param query
+ * @param onlyLatest
+ * @param indexStart
+ * @param count
+ * @param dateOrder
+ * @return
+ * @throws Exception
+ */
public MetaDataEntity[] findFullText(String query, boolean onlyLatest,
int indexStart, int count, int dateOrder) throws Exception {
MetaDataEntity[] result = database.findElementsByContentSearch(query,
@@ -183,6 +218,17 @@
return result;
}
+ /**
+ * Retrieve list of items of type wanted
+ *
+ * @param type
+ * @param onlyLatest
+ * @param start
+ * @param count
+ * @param dateOrder
+ * @return
+ * @throws Exception
+ */
public MetaDataEntity[] findElementsByType(String type, boolean onlyLatest,
int start, int count, int dateOrder) throws Exception {
MetaDataEntity[] result = database.findElementsByType(type, onlyLatest,
@@ -190,6 +236,14 @@
return result;
}
+ /**
+ * Retrieve number of items of type wanted
+ *
+ * @param type
+ * @param onlyLatest
+ * @return
+ * @throws Exception
+ */
public int findElementsByTypeCount(String type, boolean onlyLatest)
throws Exception {
return database.findElementsByTypeCount(type, onlyLatest);
@@ -197,6 +251,12 @@
// Delete
+ /**
+ * Delete elements
+ *
+ * @param uuid
+ * @throws Exception
+ */
public void deleteElements(String uuid) throws Exception {
List<Version> versions = getVersions(uuid);
for (Version version : versions) {
@@ -204,6 +264,13 @@
}
}
+ /**
+ * Delete one element
+ *
+ * @param uuid
+ * @param version
+ * @throws Exception
+ */
public void deleteElement(String uuid, Version version) throws Exception {
MetaDataEntity element = getMetadata(uuid, version);
Map<String, ContentType> attachments = element.getAttachments();
@@ -215,17 +282,39 @@
// Tools
+ /**
+ * Store temporary data, for stream duplication
+ *
+ * @param stream
+ * Stream to store
+ * @return id for retrieval
+ * @throws Exception
+ */
public String storeTempData(InputStream stream) throws Exception {
String id = UUID.randomUUID().toString();
attachmentHandler.storeData(mdTmp, id, stream);
return id;
}
+ /**
+ * Retrieve temporary data
+ *
+ * @param id
+ * Id associated
+ * @return Data stream
+ * @throws Exception
+ */
public InputStream retrieveTempData(String id) throws Exception {
InputStream is = attachmentHandler.retrieveData(mdTmp, id);
return is;
}
+ /**
+ * Delete temporary data
+ *
+ * @param id
+ * @throws Exception
+ */
public void deleteTempData(String id) throws Exception {
attachmentHandler.deleteData(mdTmp, id);
}
Added: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java
===================================================================
--- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java (rev 0)
+++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -0,0 +1,44 @@
+package fr.cemagref.simexplorer.is.storage.util;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class Config {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ private static final Log log = LogFactory.getLog(Config.class);
+
+ private static Properties properties = null;
+ private static final String propertiesLocation = "/properties/config.properties";
+
+ private static void initProperties() throws IOException {
+ log.info("Loading properties");
+
+ properties = new Properties();
+
+ URL inClasspath = ClassLoader.getSystemClassLoader().getResource(
+ propertiesLocation);
+ if (inClasspath == null) {
+ inClasspath = Config.class.getResource(propertiesLocation);
+ }
+ if (inClasspath != null) {
+ properties.load(inClasspath.openStream());
+ }
+ }
+
+ public static Properties getProperties() {
+ if (properties == null) {
+ try {
+ initProperties();
+ } catch (Exception e) {
+ log.error(e);
+ }
+ }
+ return properties;
+ }
+
+}
Added: trunk/simexplorer-si-storage/src/main/resources/properties/config.properties
===================================================================
--- trunk/simexplorer-si-storage/src/main/resources/properties/config.properties (rev 0)
+++ trunk/simexplorer-si-storage/src/main/resources/properties/config.properties 2008-01-09 14:13:13 UTC (rev 105)
@@ -0,0 +1,3 @@
+simexplorer.db=/var/local/simexplorer/db3
+simexplorer.data=/var/local/simexplorer/data3/
+simexplorer.optimizeperiod=3600
Copied: trunk/simexplorer-si-storage/src/test/java/fr (from rev 94, trunk/simexplorer-si-storage/src/test/fr)
Deleted: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java
===================================================================
--- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -1,139 +0,0 @@
-package fr.cemagref.simexplorer.is.storage.test;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.UUID;
-
-import fr.cemagref.simexplorer.is.storage.entities.data.Code;
-import fr.cemagref.simexplorer.is.storage.entities.data.Component;
-import fr.cemagref.simexplorer.is.storage.entities.data.Constant;
-import fr.cemagref.simexplorer.is.storage.entities.data.ConstantValue;
-import fr.cemagref.simexplorer.is.storage.entities.data.DataEntity;
-import fr.cemagref.simexplorer.is.storage.entities.data.ExplorationApplication;
-import fr.cemagref.simexplorer.is.storage.entities.data.ExplorationData;
-import fr.cemagref.simexplorer.is.storage.entities.data.Library;
-import fr.cemagref.simexplorer.is.storage.entities.data.LoggableElement;
-import fr.cemagref.simexplorer.is.storage.entities.data.Result;
-import fr.cemagref.simexplorer.is.storage.entities.data.Structure;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory;
-
-public class ElementGenerator {
-
- private Random r = new Random();
-
- private void update(LoggableElement element) throws Exception {
- MetaDataEntity metaData = new MetaDataEntity();
- metaData.setUuid(UUID.randomUUID().toString());
- metaData.setName(UUID.randomUUID().toString());
- metaData.setType(element.getClass().getSimpleName());
- metaData.setDescription("test");
- metaData.setVersion(Integer.toString(r.nextInt(100)));
- metaData.setCreationDate(new Date());
- metaData.setHash(UUID.randomUUID().toString());
- metaData.setLatest(true);
-
- Map<String, String> descriptors = new HashMap<String, String>();
- int i = 5 + r.nextInt(10);
- for (int j = 0; j < i; j++) {
- descriptors.put(Integer.toString(j), UUID.randomUUID().toString());
- }
- metaData.setDescriptors(descriptors);
-
- element.setMetaData(metaData);
- }
-
- private <T extends DataEntity> Set<T> generateArray(Class<T> clazz)
- throws Exception {
- Set<T> elements = new HashSet<T>();
- int i = 1 + r.nextInt(2);
- for (int j = 0; j < i; j++) {
- T element = (T) BaseEntityFactory.getFactory(clazz)
- .createInstance();
- if (element instanceof LoggableElement) {
- update((LoggableElement) element);
- }
- elements.add(element);
- }
- return elements;
- }
-
- public ExplorationApplication generateRandomEA() throws Exception {
- ExplorationApplication ea = new ExplorationApplication();
- update(ea);
- Set<ExplorationData> datas = generateArray(ExplorationData.class);
- for (ExplorationData object : datas) {
- processExplorationData(object);
- }
- ea.setExplorations(datas);
- Set<Component> components = generateArray(Component.class);
- for (Component object : components) {
- processComponent(object);
- }
- ea.setComponents(components);
- return ea;
- }
-
- private void processComponent(Component component) throws Exception {
- Set<Constant> constants = generateArray(Constant.class);
- for (Constant constant : constants) {
- processConstant(constant);
- }
- component.setConstants(constants);
-
- component.setStructures(new HashSet<Structure>());
-
- Set<Code> codes = generateArray(Code.class);
- for (Code code : codes) {
- processCode(code);
- }
- component.setCodes(codes);
-
- Set<Library> libraries = generateArray(Library.class);
- for (Library library : libraries) {
- processLibrary(library);
- }
- component.setLibraries(libraries);
-
- }
-
- private void processLibrary(Library library) {
- }
-
- private void processCode(Code code) {
- code.setCode(UUID.randomUUID().toString());
- code.setLanguage(UUID.randomUUID().toString());
- }
-
- private void processConstant(Constant constant) {
- constant.setName(UUID.randomUUID().toString());
- constant.setType(String.class);
- }
-
- private void processExplorationData(ExplorationData explorationData)
- throws Exception {
- Result result = new Result();
- explorationData.setResult(result);
-
- Set<ConstantValue> constantValues = generateArray(ConstantValue.class);
- for (ConstantValue constantValue : constantValues) {
- processConstantValue(constantValue);
- }
- explorationData.setValuesMap(constantValues);
-
- }
-
- private void processConstantValue(ConstantValue constantValue) {
- Constant constant = new Constant();
- constant.setName(UUID.randomUUID().toString());
- constant.setType(Integer.class);
-
- constantValue.setConstant(constant);
- constantValue.setValue(Integer.toString(r.nextInt()));
- }
-
-}
Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java
===================================================================
--- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -9,9 +9,9 @@
import java.util.Set;
import junit.framework.TestCase;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
import fr.cemagref.simexplorer.is.storage.database.Database;
import fr.cemagref.simexplorer.is.storage.database.lucene.LuceneDatabase;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
public class LuceneDatabaseLoadTestCase extends TestCase {
Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java
===================================================================
--- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -4,19 +4,15 @@
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.Random;
import java.util.Set;
-import java.util.UUID;
import junit.framework.TestCase;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.storage.database.Database;
import fr.cemagref.simexplorer.is.storage.database.lucene.LuceneDatabase;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.Version;
public class LuceneDatabaseTestCase extends TestCase {
Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java
===================================================================
--- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -5,8 +5,8 @@
import java.util.Random;
import java.util.Set;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
import fr.cemagref.simexplorer.is.storage.database.Database;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
public class LuceneDatabaseThread extends Thread {
Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java
===================================================================
--- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java 2008-01-04 15:59:36 UTC (rev 94)
+++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java 2008-01-09 14:13:13 UTC (rev 105)
@@ -6,9 +6,9 @@
import java.util.Random;
import java.util.UUID;
-import fr.cemagref.simexplorer.is.storage.attachment.type.ContentType;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity;
-import fr.cemagref.simexplorer.is.storage.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.contenttype.ContentType;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
public class MetaDataGenerator {
Added: trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties
===================================================================
--- trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties (rev 0)
+++ trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties 2008-01-09 14:13:13 UTC (rev 105)
@@ -0,0 +1,3 @@
+simexplorer.db=/var/local/simexplorer/dbtest
+simexplorer.data=/var/local/simexplorer/datatest/
+simexplorer.optimizeperiod=3600
Copied: trunk/simexplorer-si-storage/src/test/resources/testImport (from rev 94, trunk/simexplorer-si-storage/src/ressources/testImport)
1
0
r104 - in trunk/simexplorer-is-service: . .settings src src/main src/main/java src/main/java/META-INF src/main/java/fr src/main/java/fr/cemagref src/main/java/fr/cemagref/simexplorer src/main/java/fr/cemagref/simexplorer/is src/main/java/fr/cemagref/simexplorer/is/service src/test src/test/java src/test/java/fr src/test/java/fr/cemagref src/test/java/fr/cemagref/simexplorer src/test/java/fr/cemagref/simexplorer/is src/test/java/fr/cemagref/simexplorer/is/service src/test/java/fr/cem
by glandais@users.labs.libre-entreprise.org 09 Jan '08
by glandais@users.labs.libre-entreprise.org 09 Jan '08
09 Jan '08
Author: glandais
Date: 2008-01-09 14:11:23 +0000 (Wed, 09 Jan 2008)
New Revision: 104
Added:
trunk/simexplorer-is-service/.classpath
trunk/simexplorer-is-service/.project
trunk/simexplorer-is-service/.settings/
trunk/simexplorer-is-service/.settings/org.eclipse.jdt.core.prefs
trunk/simexplorer-is-service/.settings/org.eclipse.jst.common.project.facet.core.prefs
trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.component
trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.project.facet.core.xml
trunk/simexplorer-is-service/.settings/org.eclipse.wst.validation.prefs
trunk/simexplorer-is-service/pom.xml
trunk/simexplorer-is-service/src/
trunk/simexplorer-is-service/src/main/
trunk/simexplorer-is-service/src/main/java/
trunk/simexplorer-is-service/src/main/java/META-INF/
trunk/simexplorer-is-service/src/main/java/META-INF/MANIFEST.MF
trunk/simexplorer-is-service/src/main/java/fr/
trunk/simexplorer-is-service/src/main/java/fr/cemagref/
trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/
trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/
trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/
trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java
trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java
trunk/simexplorer-is-service/src/test/
trunk/simexplorer-is-service/src/test/java/
trunk/simexplorer-is-service/src/test/java/fr/
trunk/simexplorer-is-service/src/test/java/fr/cemagref/
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceMassInsert.java
trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceTest.java
Log:
Service split
Added: trunk/simexplorer-is-service/.classpath
===================================================================
--- trunk/simexplorer-is-service/.classpath (rev 0)
+++ trunk/simexplorer-is-service/.classpath 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER/noworkspace"/>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/test/java"/>
+ <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java-6-sun-1.6.0.03"/>
+ <classpathentry kind="lib" path="/home/glandais/dev/tools/jboss-4.2.2.GA/client/jboss-annotations-ejb3.jar"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Added: trunk/simexplorer-is-service/.project
===================================================================
--- trunk/simexplorer-is-service/.project (rev 0)
+++ trunk/simexplorer-is-service/.project 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>simexplorer-is-service</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ </natures>
+</projectDescription>
Added: trunk/simexplorer-is-service/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- trunk/simexplorer-is-service/.settings/org.eclipse.jdt.core.prefs (rev 0)
+++ trunk/simexplorer-is-service/.settings/org.eclipse.jdt.core.prefs 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,7 @@
+#Tue Jan 08 14:35:19 CET 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
Added: trunk/simexplorer-is-service/.settings/org.eclipse.jst.common.project.facet.core.prefs
===================================================================
--- trunk/simexplorer-is-service/.settings/org.eclipse.jst.common.project.facet.core.prefs (rev 0)
+++ trunk/simexplorer-is-service/.settings/org.eclipse.jst.common.project.facet.core.prefs 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,4 @@
+#Wed Jan 09 10:45:48 CET 2008
+classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER\:\:org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType\:\:java-6-sun-1.6.0.03/owners=jst.java\:6.0
+classpath.helper/org.jboss.ide.eclipse.as.classpath.core.runtime.ProjectRuntimeInitializer\:\:JBoss\ 4.2\ Runtime/owners=jst.ejb\:3.0
+eclipse.preferences.version=1
Added: trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.component
===================================================================
--- trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.component (rev 0)
+++ trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.component 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+ <wb-module deploy-name="simexplorer-is-service">
+ <wb-resource deploy-path="/" source-path="/src/main/java"/>
+ <wb-resource deploy-path="/" source-path="/src/test/java"/>
+ <property name="java-output-path" value="build/classes"/>
+ </wb-module>
+</project-modules>
Added: trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.project.facet.core.xml
===================================================================
--- trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.project.facet.core.xml (rev 0)
+++ trunk/simexplorer-is-service/.settings/org.eclipse.wst.common.project.facet.core.xml 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <runtime name="JBoss 4.2 Runtime"/>
+ <fixed facet="jst.java"/>
+ <fixed facet="jst.ejb"/>
+ <installed facet="jst.java" version="6.0"/>
+ <installed facet="jst.ejb" version="3.0"/>
+</faceted-project>
Added: trunk/simexplorer-is-service/.settings/org.eclipse.wst.validation.prefs
===================================================================
--- trunk/simexplorer-is-service/.settings/org.eclipse.wst.validation.prefs (rev 0)
+++ trunk/simexplorer-is-service/.settings/org.eclipse.wst.validation.prefs 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,6 @@
+#Wed Jan 09 10:19:58 CET 2008
+DELEGATES_PREFERENCE=delegateValidatorListorg.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator\=org.eclipse.wst.xsd.core.internal.validation.eclipse.Validator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator\=org.eclipse.wst.wsdl.validation.internal.eclipse.Validator;
+USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;
+USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.jsp.core.internal.validation.JSPContentValidator;org.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator;org.eclipse.wst.common.componentcore.internal.ModuleCoreValidator;org.eclipse.wst.wsi.ui.internal.WSIMessageValidator;org.eclipse.wst.wsdl.validation.internal.eclipse.WSDLDelegatingValidator;org.eclipse.jst.jsp.core.internal.validation.JSPBatchValidator;org.eclipse.wst.xml.core.internal.validation.eclipse.Validator;org.eclipse.wst.xsd.core.internal.validation.eclipse.XSDDelegatingValidator;org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator;org.eclipse.wst.dtd.core.internal.validation.eclipse.Validator;org.eclipse.wst.html.internal.validation.HTMLValidator;org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator;
+USER_PREFERENCE=overrideGlobalPreferencesfalse
+eclipse.preferences.version=1
Added: trunk/simexplorer-is-service/pom.xml
===================================================================
--- trunk/simexplorer-is-service/pom.xml (rev 0)
+++ trunk/simexplorer-is-service/pom.xml 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-service</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <description></description>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.1</version>
+ <classifier>jdk15</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-entities</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-storage</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>com.healthmarketscience.rmiio</groupId>
+ <artifactId>rmiio</artifactId>
+ <version>2.0.0</version>
+ </dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jboss-ejb3x</artifactId>
+ <version>4.2.2.GA</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Added: trunk/simexplorer-is-service/src/main/java/META-INF/MANIFEST.MF
===================================================================
--- trunk/simexplorer-is-service/src/main/java/META-INF/MANIFEST.MF (rev 0)
+++ trunk/simexplorer-is-service/src/main/java/META-INF/MANIFEST.MF 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path: simexplorer-is-entities.jar simexplorer-is-service.jar simexplorer-is-storage.jar
+
Added: trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java
===================================================================
--- trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java (rev 0)
+++ trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,157 @@
+package fr.cemagref.simexplorer.is.service;
+
+import java.util.Map;
+
+import javax.ejb.Remote;
+
+import com.healthmarketscience.rmiio.RemoteInputStream;
+import com.healthmarketscience.rmiio.RemoteOutputStream;
+
+import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+
+/**
+ * Service interface
+ *
+ * @author glandais
+ *
+ */
+ at Remote
+public interface StorageService {
+
+ /**
+ * Open storage
+ *
+ * @throws Exception
+ */
+ void open() throws Exception;
+
+ /**
+ * Close storage
+ *
+ * @throws Exception
+ */
+ void close() throws Exception;
+
+ /**
+ * Commit in storage
+ *
+ * @throws Exception
+ */
+ void commit() throws Exception;
+
+ /**
+ * Save a remote element
+ *
+ * @param zipRemoteStream
+ * RIIO stream containing data inside a zip
+ * @return Metadata of element imported
+ * @throws Exception
+ */
+ MetaDataEntity saveElement(RemoteInputStream zipRemoteStream)
+ throws Exception;
+
+ /**
+ * Save a remote element
+ *
+ * @param xmlRemoteStream
+ * RIIO stream containing XML Stream
+ * @param attachmentsRemoteStream
+ * RIIO stream containing attached data. Key matches metadata
+ * attachment keys
+ * @return Metadata of element saved
+ * @throws Exception
+ */
+ MetaDataEntity saveElement(RemoteInputStream xmlRemoteStream,
+ Map<String, RemoteInputStream> attachmentsRemoteStream)
+ throws Exception;
+
+ /**
+ * Retrieve metadata (latest version)
+ *
+ * @param uuid
+ * @return
+ * @throws Exception
+ */
+ MetaDataEntity getMetadata(String uuid) throws Exception;
+
+ /**
+ * Retrieve metadata
+ *
+ * @param uuid
+ * @param version
+ * @return
+ * @throws Exception
+ */
+ MetaDataEntity getMetadata(String uuid, String version) throws Exception;
+
+ /**
+ * Export element to a remote stream
+ *
+ * @param xmlOutputStream
+ * RMIIO stream where to save data
+ * @param uuid
+ * @param version
+ * @throws Exception
+ */
+ void exportElement(RemoteOutputStream xmlOutputStream, String uuid,
+ String version) throws Exception;
+
+ /**
+ * Retrieve number of elements matching query
+ *
+ * @param query
+ * @param onlyLatest
+ * @return
+ * @throws Exception
+ */
+ int findFullTextCount(String query, boolean onlyLatest) throws Exception;
+
+ /**
+ * Find elements matching query
+ *
+ * @param query
+ * @param onlyLatest
+ * @param indexStart
+ * @param count
+ * @param dateOrder
+ * @return
+ * @throws Exception
+ */
+ MetaDataEntity[] findFullText(String query, boolean onlyLatest,
+ int indexStart, int count, int dateOrder) throws Exception;
+
+ /**
+ * Retrieve number of applications
+ *
+ * @param onlyLatest
+ * @return
+ * @throws Exception
+ */
+ int findApplicationsCount(boolean onlyLatest) throws Exception;
+
+ /**
+ * Get a list of applications
+ *
+ * @param onlyLatest
+ * @param start
+ * @param count
+ * @param dateOrder
+ * @return
+ * @throws Exception
+ */
+ MetaDataEntity[] findApplications(boolean onlyLatest, int start, int count,
+ int dateOrder) throws Exception;
+
+ /**
+ * Fully load an exploration application
+ *
+ * @param uuid
+ * @param version
+ * @return
+ * @throws Exception
+ */
+ ExplorationApplication getExplorationApplication(String uuid, String version)
+ throws Exception;
+
+}
Added: trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java
===================================================================
--- trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java (rev 0)
+++ trunk/simexplorer-is-service/src/main/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,325 @@
+package fr.cemagref.simexplorer.is.service;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import javax.ejb.Remote;
+import javax.ejb.Stateless;
+
+import org.jboss.annotation.ejb.RemoteBinding;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import com.healthmarketscience.rmiio.RemoteInputStream;
+import com.healthmarketscience.rmiio.RemoteInputStreamClient;
+import com.healthmarketscience.rmiio.RemoteOutputStream;
+import com.healthmarketscience.rmiio.RemoteOutputStreamClient;
+
+import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.factories.BaseEntityFactory;
+import fr.cemagref.simexplorer.is.factories.MetaDataEntityFactory;
+import fr.cemagref.simexplorer.is.factories.XmlConstants;
+import fr.cemagref.simexplorer.is.storage.engine.StorageEngine;
+
+ at Stateless(name = "StorageService")
+ at Remote(StorageService.class)
+ at RemoteBinding(jndiBinding = "StorageService")
+public class StorageServiceImpl implements StorageService, XmlConstants {
+
+ private StorageEngine storageEngine = null;
+
+ private static final String KEY_XML = "_xml";
+
+ public StorageServiceImpl() {
+ super();
+ storageEngine = new StorageEngine();
+ }
+
+ public void open() throws Exception {
+ storageEngine.open();
+ }
+
+ public void close() throws Exception {
+ storageEngine.close();
+ }
+
+ public void commit() throws Exception {
+ storageEngine.commit();
+ }
+
+ public MetaDataEntity saveElement(RemoteInputStream zipRemoteStream)
+ throws Exception {
+ InputStream zipStream = RemoteInputStreamClient.wrap(zipRemoteStream);
+ return saveElement(zipStream);
+ }
+
+ public MetaDataEntity saveElement(RemoteInputStream xmlRemoteStream,
+ Map<String, RemoteInputStream> attachmentsRemoteStream)
+ throws Exception {
+ InputStream xmlStream = RemoteInputStreamClient.wrap(xmlRemoteStream);
+ Map<String, InputStream> attachmentStreams = new HashMap<String, InputStream>();
+ for (Map.Entry<String, RemoteInputStream> entry : attachmentsRemoteStream
+ .entrySet()) {
+ InputStream stream = RemoteInputStreamClient.wrap(entry.getValue());
+ attachmentStreams.put(entry.getKey(), stream);
+ }
+ return saveElement(xmlStream, attachmentStreams);
+ }
+
+ public MetaDataEntity getMetadata(String uuid) throws Exception {
+ return storageEngine.getMetadata(uuid);
+ }
+
+ public MetaDataEntity getMetadata(String uuid, String version)
+ throws Exception {
+ return storageEngine.getMetadata(uuid, new Version(version));
+ }
+
+ public MetaDataEntity[] findFullText(String query, boolean onlyLatest,
+ int indexStart, int count, int dateOrder) throws Exception {
+ return storageEngine.findFullText(query, onlyLatest, indexStart, count,
+ dateOrder);
+ }
+
+ public int findFullTextCount(String query, boolean onlyLatest)
+ throws Exception {
+ return storageEngine.findFullTextCount(query, onlyLatest);
+ }
+
+ public int findApplicationsCount(boolean onlyLatest) throws Exception {
+ return storageEngine.findElementsByTypeCount(
+ VALUE_METADATA_TYPE_EA, onlyLatest);
+ }
+
+ public MetaDataEntity[] findApplications(boolean onlyLatest, int start,
+ int count, int dateOrder) throws Exception {
+ return storageEngine.findElementsByType(VALUE_METADATA_TYPE_EA,
+ onlyLatest, start, count, dateOrder);
+ }
+
+ public ExplorationApplication getExplorationApplication(String uuid,
+ String version) throws Exception {
+ MetaDataEntity mde = getMetadata(uuid, version);
+ ExplorationApplication ea = (ExplorationApplication) BaseEntityFactory
+ .getFactory(ExplorationApplication.class).loadElement(
+ storageEngine.retrieveData(mde, KEY_XML));
+ return ea;
+ }
+
+ private MetaDataEntity saveElement(InputStream zipStream) throws Exception {
+ String xmlFile = null;
+ Map<String, String> attachments = new HashMap<String, String>();
+
+ ZipInputStream zis = new ZipInputStream(zipStream);
+
+ ZipEntry entry;
+ while ((entry = zis.getNextEntry()) != null) {
+ if (!entry.isDirectory()) {
+ String entryName = entry.getName();
+ if (entryName.equals(FILE_XML)) {
+ xmlFile = storageEngine.storeTempData(zis);
+ } else {
+ if (entryName.startsWith(FILE_DATA_PREFIX)) {
+ String fileName = entryName.replace(FILE_DATA_PREFIX
+ + "/", "");
+ String idFile = storageEngine.storeTempData(zis);
+ attachments.put(fileName, idFile);
+ }
+ }
+ }
+ }
+
+ return saveElement(xmlFile, attachments);
+ }
+
+ public MetaDataEntity saveElement(InputStream xmlFile,
+ Map<String, InputStream> attachments) throws Exception {
+ // Store temporary data
+ String idxml = storageEngine.storeTempData(xmlFile);
+ Map<String, String> idsattachment = new HashMap<String, String>();
+ for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
+ String idattachment = storageEngine.storeTempData(entry.getValue());
+ idsattachment.put(entry.getKey(), idattachment);
+ }
+ return saveElement(idxml, idsattachment);
+ }
+
+ public void exportElement(RemoteOutputStream xmlOutputStream, String uuid,
+ String version) throws Exception {
+ MetaDataEntity mde = getMetadata(uuid, version);
+ InputStream xmlStream = storageEngine.retrieveData(mde, KEY_XML);
+ OutputStream os = RemoteOutputStreamClient.wrap(xmlOutputStream);
+
+ // Buffer copy stream to stream
+ BufferedInputStream bin = new BufferedInputStream(xmlStream);
+ BufferedOutputStream bout = new BufferedOutputStream(os);
+ while (true) {
+ int datum = bin.read();
+ if (datum == -1)
+ break;
+ bout.write(datum);
+ }
+ bout.flush();
+
+ }
+
+ /**
+ * Real implementation of saveElement
+ *
+ * @param idxml
+ * @param idsattachment
+ * @return
+ * @throws Exception
+ */
+ private MetaDataEntity saveElement(String idxml,
+ Map<String, String> idsattachment) throws Exception {
+ // Load metadata xml
+ MetaDataEntityFactory mdeFactory = (MetaDataEntityFactory) BaseEntityFactory
+ .getFactory(MetaDataEntity.class);
+ MetaDataEntity metaData = mdeFactory
+ .loadElementFromParentXML(storageEngine.retrieveTempData(idxml));
+
+ if (metaData.getType() != null
+ && VALUE_METADATA_TYPE_EA.equals(metaData.getType())) {
+
+ /*
+ ExplorationApplication ea = (ExplorationApplication) BaseEntityFactory
+ .getFactory(ExplorationApplication.class).loadElement(
+ storageEngine.retrieveTempData(idxml));
+ */
+
+ // If element is an EA, save inner Components and Data
+ List<String> components = new ArrayList<String>();
+ List<String[]> explorationDatas = new ArrayList<String[]>();
+
+ // Retrieve elements
+ extractChildren(idxml, idsattachment, components, explorationDatas);
+
+ // For each exploration data
+ for (String[] explorationData : explorationDatas) {
+ // where is stored xml
+ String idxmlED = explorationData[0];
+
+ // where is stored result
+ Map<String, String> attachmentsED = new HashMap<String, String>();
+ if (explorationData.length > 1) {
+ attachmentsED.put(explorationData[1], idsattachment
+ .get(explorationData[1]));
+ }
+ // recursive save
+ saveElement(idxmlED, attachmentsED);
+
+ }
+
+ // For each component
+ for (String idComponent : components) {
+ saveElement(idComponent, new HashMap<String, String>());
+ }
+
+ }
+
+ // Process version rules
+ processVersionRules(metaData);
+
+ // Prepare saving
+ Map<String, InputStream> attachments = new HashMap<String, InputStream>();
+
+ attachments.put(KEY_XML, storageEngine.retrieveTempData(idxml));
+ if (metaData.getType() != null
+ && !VALUE_METADATA_TYPE_EA.equals(metaData.getType())) {
+ for (Map.Entry<String, String> entry : idsattachment.entrySet()) {
+ attachments.put(entry.getKey(), storageEngine
+ .retrieveTempData(entry.getValue()));
+ }
+ }
+ storageEngine.saveElement(metaData, attachments);
+ storageEngine.commit();
+
+ return metaData;
+ }
+
+ private void processVersionRules(MetaDataEntity metaData) throws Exception {
+
+ // Check existing version in storage
+ MetaDataEntity previousVersion = storageEngine.getMetadata(metaData
+ .getUuid(), metaData.getVersion());
+ /*
+ * MetaDataEntity parentData = storageEngine.getElementVersion(metaData
+ * .getParentData().getUuid(), metaData.getParentData() .getVersion());
+ * MetaDataEntity parentVersion =
+ * storageEngine.getElementVersion(metaData
+ * .getParentVersion().getUuid(), metaData.getParentVersion()
+ * .getVersion());
+ */
+
+ // Version rules
+ if (previousVersion != null) {
+ metaData.setVersion(previousVersion.getVersion().incVersion(0)
+ .toString());
+ }
+
+ }
+
+ private void extractChildren(String idxml,
+ Map<String, String> idsattachment, List<String> components,
+ List<String[]> explorationDatas) throws Exception {
+
+ MetaDataEntityFactory<MetaDataEntity> elementFactory = (MetaDataEntityFactory) BaseEntityFactory
+ .getFactory(MetaDataEntity.class);
+
+ Document document = BaseEntityFactory.getXMLBuilder().parse(
+ storageEngine.retrieveTempData(idxml));
+
+ Element rootElement = (Element) document.getFirstChild();
+
+ // Components
+ Element componentsElement = elementFactory.getXMLElementByTagName(
+ rootElement, KEY_EXPLORATIONAPPLICATION_COMPONENTS);
+ Set<Element> componentElements = elementFactory
+ .getXMLElementsByTagName(componentsElement,
+ KEY_EXPLORATIONAPPLICATION_COMPONENT_NODE);
+ for (Element element : componentElements) {
+ components.add(storageEngine.storeTempData(elementFactory
+ .serializeElement(element)));
+ }
+
+ Element applicationDatasElement = elementFactory
+ .getXMLElementByTagName(rootElement,
+ KEY_EXPLORATIONAPPLICATION_DATA);
+ Set<Element> applicationDataElements = elementFactory
+ .getXMLElementsByTagName(applicationDatasElement,
+ KEY_EXPLORATIONAPPLICATION_DATA_NODE);
+
+ for (Element elementAD : applicationDataElements) {
+ Element element = elementFactory.getXMLElementByTagName(elementAD,
+ KEY_EXPLORATIONDATA_RESULT);
+ String result = elementFactory.getXMLProperty(element,
+ KEY_RESULT_FILE);
+
+ String[] explorationDataArray = null;
+ if (result != null) {
+ explorationDataArray = new String[2];
+ explorationDataArray[1] = result;
+ } else {
+ explorationDataArray = new String[1];
+ }
+ explorationDataArray[0] = storageEngine
+ .storeTempData(elementFactory.serializeElement(elementAD));
+
+ explorationDatas.add(explorationDataArray);
+ }
+
+ }
+
+}
Added: trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java
===================================================================
--- trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java (rev 0)
+++ trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/ElementGenerator.java 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,153 @@
+package fr.cemagref.simexplorer.is.service.test;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.UUID;
+
+import fr.cemagref.simexplorer.is.entities.data.Code;
+import fr.cemagref.simexplorer.is.entities.data.Component;
+import fr.cemagref.simexplorer.is.entities.data.Constant;
+import fr.cemagref.simexplorer.is.entities.data.ConstantValue;
+import fr.cemagref.simexplorer.is.entities.data.DataEntity;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
+import fr.cemagref.simexplorer.is.entities.data.Library;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
+import fr.cemagref.simexplorer.is.entities.data.Result;
+import fr.cemagref.simexplorer.is.entities.data.Structure;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.factories.BaseEntityFactory;
+
+public class ElementGenerator {
+
+ private Random r = new Random();
+
+ private String shortString() {
+ return Long.toHexString(r.nextLong());
+ }
+
+ private String longString() {
+ return UUID.randomUUID().toString();
+ }
+
+ private void update(LoggableElement element) throws Exception {
+ MetaDataEntity metaData = new MetaDataEntity();
+ metaData.setUuid(shortString());
+ metaData.setName(longString());
+ metaData.setType(element.getClass().getSimpleName());
+ metaData.setDescription("test");
+ Version v = new Version("0");
+ int c = 2 + r.nextInt(2);
+ for (int i = 0; i < c; i++) {
+ v.setVersion(i, r.nextInt(5));
+ }
+ metaData.setVersion(v.toString());
+ metaData.setCreationDate(new Date());
+ metaData.setHash(shortString());
+ metaData.setLatest(true);
+
+ Map<String, String> descriptors = new HashMap<String, String>();
+ int i = 5 + r.nextInt(10);
+ for (int j = 0; j < i; j++) {
+ descriptors.put(Integer.toString(j), shortString());
+ }
+ metaData.setDescriptors(descriptors);
+
+ element.setMetaData(metaData);
+ }
+
+ private <T extends DataEntity> Set<T> generateArray(Class<T> clazz)
+ throws Exception {
+ Set<T> elements = new HashSet<T>();
+ int i = 3 + r.nextInt(2);
+ for (int j = 0; j < i; j++) {
+ T element = (T) BaseEntityFactory.getFactory(clazz)
+ .createInstance();
+ if (element instanceof LoggableElement) {
+ update((LoggableElement) element);
+ }
+ elements.add(element);
+ }
+ return elements;
+ }
+
+ public ExplorationApplication generateRandomEA() throws Exception {
+ ExplorationApplication ea = new ExplorationApplication();
+ update(ea);
+ Set<ExplorationData> datas = generateArray(ExplorationData.class);
+ for (ExplorationData object : datas) {
+ processExplorationData(object);
+ }
+ ea.setExplorations(datas);
+ Set<Component> components = generateArray(Component.class);
+ for (Component object : components) {
+ processComponent(object);
+ }
+ ea.setComponents(components);
+ return ea;
+ }
+
+ private void processComponent(Component component) throws Exception {
+ Set<Constant> constants = generateArray(Constant.class);
+ for (Constant constant : constants) {
+ processConstant(constant);
+ }
+ component.setConstants(constants);
+
+ component.setStructures(new HashSet<Structure>());
+
+ Set<Code> codes = generateArray(Code.class);
+ for (Code code : codes) {
+ processCode(code);
+ }
+ component.setCodes(codes);
+
+ Set<Library> libraries = generateArray(Library.class);
+ for (Library library : libraries) {
+ processLibrary(library);
+ }
+ component.setLibraries(libraries);
+
+ }
+
+ private void processLibrary(Library library) {
+ }
+
+ private void processCode(Code code) {
+ code.setCode(shortString());
+ code.setLanguage(shortString());
+ }
+
+ private void processConstant(Constant constant) {
+ constant.setName(shortString());
+ constant.setType(String.class);
+ }
+
+ private void processExplorationData(ExplorationData explorationData)
+ throws Exception {
+ Result result = new Result();
+ explorationData.setResult(result);
+
+ Set<ConstantValue> constantValues = generateArray(ConstantValue.class);
+ for (ConstantValue constantValue : constantValues) {
+ processConstantValue(constantValue);
+ }
+ explorationData.setValuesMap(constantValues);
+
+ }
+
+ private void processConstantValue(ConstantValue constantValue) {
+ Constant constant = new Constant();
+ constant.setName(shortString());
+ constant.setType(Integer.class);
+
+ constantValue.setConstant(constant);
+ constantValue.setValue(Integer.toString(r.nextInt()));
+ }
+
+}
Added: trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceMassInsert.java
===================================================================
--- trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceMassInsert.java (rev 0)
+++ trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceMassInsert.java 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,83 @@
+package fr.cemagref.simexplorer.is.service.test;
+
+import java.io.InputStream;
+import java.util.Date;
+import java.util.HashMap;
+
+import junit.framework.TestCase;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.factories.BaseEntityFactory;
+import fr.cemagref.simexplorer.is.factories.XmlConstants;
+import fr.cemagref.simexplorer.is.service.StorageServiceImpl;
+
+public class StorageServiceMassInsert extends TestCase {
+
+ private StorageServiceImpl storageService;
+ private ElementGenerator elementGenerator;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ elementGenerator = new ElementGenerator();
+
+ storageService = new StorageServiceImpl();
+ storageService.open();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ storageService.close();
+ }
+
+ /*
+ public void testExportXML() throws Exception {
+ ExplorationApplication ea = elementGenerator.generateRandomEA();
+ InputStream xmlStream = BaseEntityFactory.getFactory(
+ ExplorationApplication.class).saveElement(ea);
+
+ FileOutputStream os = new FileOutputStream(
+ "/var/local/simexplorer/test.xml");
+
+ // Buffer copy stream to stream
+ BufferedInputStream bin = new BufferedInputStream(xmlStream);
+ BufferedOutputStream bout = new BufferedOutputStream(os);
+
+ while (true) {
+ int datum = bin.read();
+ if (datum == -1)
+ break;
+ bout.write(datum);
+ }
+ bout.flush();
+ }
+ */
+
+ public void testMassInsert() throws Exception {
+ int c = 350;
+
+ Date begin = new Date();
+
+ ExplorationApplication ea = null;
+ for (int i = 0; i < c; i++) {
+ ea = elementGenerator.generateRandomEA();
+ InputStream xmlStream = BaseEntityFactory.getFactory(
+ ExplorationApplication.class).saveElement(
+ XmlConstants.VALUE_METADATA_TYPE_EA, ea);
+
+ storageService.saveElement(xmlStream,
+ new HashMap<String, InputStream>());
+
+ if (i > 0 && i % 100 == 0) {
+ Date end = new Date();
+ long time = end.getTime() - begin.getTime();
+ System.out.println("Insert " + i + " : Time taken : " + time
+ + "ms");
+ double timePerElement = time / i;
+ System.out.println("Insert " + i
+ + " : Time taken per element : " + timePerElement
+ + "ms");
+ }
+
+ }
+ }
+
+}
Added: trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceTest.java
===================================================================
--- trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceTest.java (rev 0)
+++ trunk/simexplorer-is-service/src/test/java/fr/cemagref/simexplorer/is/service/test/StorageServiceTest.java 2008-01-09 14:11:23 UTC (rev 104)
@@ -0,0 +1,126 @@
+package fr.cemagref.simexplorer.is.service.test;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
+
+import junit.framework.TestCase;
+
+import com.healthmarketscience.rmiio.RemoteInputStream;
+import com.healthmarketscience.rmiio.RemoteInputStreamServer;
+import com.healthmarketscience.rmiio.SimpleRemoteInputStream;
+
+import fr.cemagref.simexplorer.is.service.StorageService;
+import fr.cemagref.simexplorer.is.service.StorageServiceImpl;
+
+public class StorageServiceTest extends TestCase {
+
+ private StorageService storageService;
+ private Random r = new Random();
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ storageService = new StorageServiceImpl();
+ storageService.open();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ storageService.close();
+ }
+
+ public void testInsertElementZip() throws Exception {
+ InputStream zipStream = new FileInputStream(
+ "./src/ressources/testImport/test.zip");
+ RemoteInputStreamServer zipRemoteStream = new SimpleRemoteInputStream(
+ zipStream);
+ storageService.saveElement(zipRemoteStream);
+ storageService.commit();
+ assertNotNull(storageService.getMetadata("abcd"));
+ }
+
+ public void testInsertElementStreams() throws Exception {
+ String id = UUID.randomUUID().toString();
+ String[] randomcontent = new String[2];
+ for (int i = 0; i < randomcontent.length; i++) {
+ randomcontent[i] = Long.toHexString(r.nextLong());
+ }
+
+ StringBuffer xmlString = new StringBuffer(
+ "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
+ xmlString.append("<data>");
+ xmlString.append("<metadata>");
+ xmlString.append("<uuid>" + id + "</uuid>");
+ xmlString.append("<version>1.0</version>");
+ xmlString.append("<name>Test element</name>");
+ xmlString.append("<type>TEST</type>");
+ xmlString.append("<description>Element test</description>");
+ xmlString.append("<creationdate>0</creationdate>");
+ xmlString.append("<hash>AAAAA</hash>");
+ /*
+ * xmlString.append("<parentdatauuid></parentdatauuid>");
+ * xmlString.append("<parentdataversion></parentdataversion>");
+ * xmlString.append("<parentversionuuid></parentversionuuid>");
+ * xmlString.append("<parentversionversion></parentversionversion>");
+ */
+ xmlString.append("<descriptors>");
+ xmlString
+ .append("<descriptor><name>a</name><value>1</value></descriptor>");
+ xmlString
+ .append("<descriptor><name>b</name><value>2</value></descriptor>");
+ xmlString
+ .append("<descriptor><name>c</name><value>3</value></descriptor>");
+ xmlString.append("</descriptors>");
+ xmlString.append("<attachments>");
+ for (int i = 0; i < randomcontent.length; i++) {
+ xmlString.append("<attachment>");
+ xmlString.append("<name>content" + i
+ + "</name><type>RawType</type>");
+ xmlString.append("</attachment>");
+ }
+ xmlString.append("</attachments>");
+ xmlString.append("</metadata>");
+ xmlString.append("</data>");
+
+ InputStream xmlStream = new ByteArrayInputStream(xmlString.toString()
+ .getBytes());
+ RemoteInputStreamServer xmlRemoteStream = new SimpleRemoteInputStream(
+ xmlStream);
+
+ Map<String, RemoteInputStream> attachmentsRemoteStream = new HashMap<String, RemoteInputStream>();
+
+ for (int j = 0; j < randomcontent.length; j++) {
+
+ StringBuffer contentString = new StringBuffer("");
+ for (int i = 0; i < 50; i++) {
+ contentString.append(Long.toHexString(r.nextLong()))
+ .append(" ");
+ }
+ contentString.append(randomcontent[j]).append(" ");
+ for (int i = 0; i < 100; i++) {
+ contentString.append(Long.toHexString(r.nextLong()))
+ .append(" ");
+ }
+
+ InputStream contentStream = new ByteArrayInputStream(contentString
+ .toString().getBytes());
+ RemoteInputStreamServer contentRemoteStream = new SimpleRemoteInputStream(
+ contentStream);
+ attachmentsRemoteStream.put("content" + j, contentRemoteStream);
+
+ }
+
+ storageService.saveElement(xmlRemoteStream, attachmentsRemoteStream);
+ storageService.commit();
+ assertNotNull(storageService.getMetadata(id));
+ for (int i = 0; i < randomcontent.length; i++) {
+ assertTrue(storageService.findFullTextCount(randomcontent[i], false) > 0);
+ }
+ }
+
+}
1
0
r103 - in trunk/simexplorer-is-entities: . .settings src src/main src/main/java src/main/java/META-INF src/main/java/fr src/main/java/fr/cemagref src/main/java/fr/cemagref/simexplorer src/main/java/fr/cemagref/simexplorer/is src/main/java/fr/cemagref/simexplorer/is/contenttype src/main/java/fr/cemagref/simexplorer/is/entities src/main/java/fr/cemagref/simexplorer/is/entities/data src/main/java/fr/cemagref/simexplorer/is/entities/metadata src/main/java/fr/cemagref/simexplorer/is/fact
by glandais@users.labs.libre-entreprise.org 09 Jan '08
by glandais@users.labs.libre-entreprise.org 09 Jan '08
09 Jan '08
Author: glandais
Date: 2008-01-09 14:10:43 +0000 (Wed, 09 Jan 2008)
New Revision: 103
Added:
trunk/simexplorer-is-entities/.classpath
trunk/simexplorer-is-entities/.project
trunk/simexplorer-is-entities/.settings/
trunk/simexplorer-is-entities/.settings/org.eclipse.jdt.core.prefs
trunk/simexplorer-is-entities/.settings/org.eclipse.jst.common.project.facet.core.prefs
trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.component
trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.project.facet.core.xml
trunk/simexplorer-is-entities/pom.xml
trunk/simexplorer-is-entities/src/
trunk/simexplorer-is-entities/src/main/
trunk/simexplorer-is-entities/src/main/java/
trunk/simexplorer-is-entities/src/main/java/META-INF/
trunk/simexplorer-is-entities/src/main/java/META-INF/MANIFEST.MF
trunk/simexplorer-is-entities/src/main/java/fr/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentType.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentTypeFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/RawType.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/BaseEntity.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Code.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Component.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Constant.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ConstantValue.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/DataEntity.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationApplication.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationData.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Library.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/LoggableElement.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Repository.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Result.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Structure.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/MetaDataEntity.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/CodeFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ComponentFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantValueFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationApplicationFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationDataFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LibraryFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/RepositoryFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ResultFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/StructureFactory.java
trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java
trunk/simexplorer-is-entities/src/main/resources/
trunk/simexplorer-is-entities/src/test/
trunk/simexplorer-is-entities/src/test/java/
trunk/simexplorer-is-entities/src/test/resources/
Log:
Entities split
Added: trunk/simexplorer-is-entities/.classpath
===================================================================
--- trunk/simexplorer-is-entities/.classpath (rev 0)
+++ trunk/simexplorer-is-entities/.classpath 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/testng/testng/5.1/testng-5.1-jdk15.jar"/>
+ <classpathentry kind="con" path="org.jboss.ide.eclipse.as.classpath.core.runtime.ProjectRuntimeInitializer/JBoss 4.2 Runtime"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java-6-sun-1.6.0.03"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Added: trunk/simexplorer-is-entities/.project
===================================================================
--- trunk/simexplorer-is-entities/.project (rev 0)
+++ trunk/simexplorer-is-entities/.project 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,26 @@
+<projectDescription>
+ <name>simexplorer-is-entities</name>
+ <comment></comment>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Added: trunk/simexplorer-is-entities/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- trunk/simexplorer-is-entities/.settings/org.eclipse.jdt.core.prefs (rev 0)
+++ trunk/simexplorer-is-entities/.settings/org.eclipse.jdt.core.prefs 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,7 @@
+#Tue Jan 08 17:50:25 CET 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
Added: trunk/simexplorer-is-entities/.settings/org.eclipse.jst.common.project.facet.core.prefs
===================================================================
--- trunk/simexplorer-is-entities/.settings/org.eclipse.jst.common.project.facet.core.prefs (rev 0)
+++ trunk/simexplorer-is-entities/.settings/org.eclipse.jst.common.project.facet.core.prefs 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,4 @@
+#Wed Jan 09 10:45:48 CET 2008
+classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER\:\:org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType\:\:java-6-sun-1.6.0.03/owners=jst.java\:5.0
+classpath.helper/org.jboss.ide.eclipse.as.classpath.core.runtime.ProjectRuntimeInitializer\:\:JBoss\ 4.2\ Runtime/owners=jst.utility\:1.0
+eclipse.preferences.version=1
Added: trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.component
===================================================================
--- trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.component (rev 0)
+++ trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.component 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+ <wb-module deploy-name="simexplorer-is-entities">
+ <wb-resource deploy-path="/" source-path="/src/main/java"/>
+ <wb-resource deploy-path="/" source-path="/src/main/resources"/>
+ <wb-resource deploy-path="/" source-path="/src/test/java"/>
+ <wb-resource deploy-path="/" source-path="/src/test/resources"/>
+ </wb-module>
+</project-modules>
Added: trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.project.facet.core.xml
===================================================================
--- trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.project.facet.core.xml (rev 0)
+++ trunk/simexplorer-is-entities/.settings/org.eclipse.wst.common.project.facet.core.xml 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <runtime name="JBoss 4.2 Runtime"/>
+ <fixed facet="jst.java"/>
+ <fixed facet="jst.utility"/>
+ <installed facet="jst.utility" version="1.0"/>
+ <installed facet="jst.java" version="5.0"/>
+</faceted-project>
Added: trunk/simexplorer-is-entities/pom.xml
===================================================================
--- trunk/simexplorer-is-entities/pom.xml (rev 0)
+++ trunk/simexplorer-is-entities/pom.xml 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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>simexplorer-is</groupId>
+ <artifactId>simexplorer-is-entities</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <description></description>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>5.1</version>
+ <classifier>jdk15</classifier>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
Added: trunk/simexplorer-is-entities/src/main/java/META-INF/MANIFEST.MF
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/META-INF/MANIFEST.MF (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/META-INF/MANIFEST.MF 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentType.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentType.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentType.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,62 @@
+package fr.cemagref.simexplorer.is.contenttype;
+
+import java.io.InputStream;
+import java.io.Reader;
+
+/**
+ * Content handler
+ *
+ * @author landais
+ *
+ */
+public abstract class ContentType {
+
+ /**
+ * MIME type
+ */
+ private String mimeType;
+ /**
+ * Text description
+ */
+ private String description;
+
+ /**
+ * Index content
+ *
+ * @param is
+ * Input stream
+ * @return Indexable text
+ */
+ public abstract Reader renderToText(InputStream is) throws Exception;
+
+ /**
+ * @return the mimeType
+ */
+ public String getMimeType() {
+ return mimeType;
+ }
+
+ /**
+ * @param mimeType
+ * the mimeType to set
+ */
+ protected void setMimeType(String mimeType) {
+ this.mimeType = mimeType;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @param description
+ * the description to set
+ */
+ protected void setDescription(String description) {
+ this.description = description;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentTypeFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentTypeFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/ContentTypeFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,48 @@
+package fr.cemagref.simexplorer.is.contenttype;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Cache content types
+ *
+ * @author landais
+ *
+ */
+public class ContentTypeFactory {
+
+ /**
+ * Content type cache
+ */
+ private static Map<String, ContentType> contentTypes = null;
+
+ /**
+ * Retrieve a content type instance
+ *
+ * @param contentTypeClassSimpleName
+ * Class required
+ * @return Instance
+ * @throws Exception
+ */
+ public static ContentType getContentTypeInstance(
+ String contentTypeClassSimpleName) throws Exception {
+
+ // Create cache if doesn't exist
+ if (contentTypes == null) {
+ contentTypes = new HashMap<String, ContentType>();
+ }
+ // Check cache
+ ContentType result = contentTypes.get(contentTypeClassSimpleName);
+ // Create instance if doesn't exist, and puts it in cache
+ if (result == null) {
+ Class<?> contentTypeClass = Class.forName(ContentTypeFactory.class
+ .getPackage().getName()
+ + "." + contentTypeClassSimpleName);
+ result = (ContentType) contentTypeClass.newInstance();
+ contentTypes.put(contentTypeClass.getSimpleName(), result);
+ }
+ return result;
+
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/RawType.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/RawType.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/contenttype/RawType.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,30 @@
+package fr.cemagref.simexplorer.is.contenttype;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+/**
+ * Raw content type
+ *
+ * @author landais
+ *
+ */
+public class RawType extends ContentType {
+
+ /**
+ * Set inner properties
+ */
+ public RawType() {
+ super();
+ setDescription("rawtype");
+ setMimeType("text/text");
+ }
+
+ @Override
+ public Reader renderToText(InputStream is) {
+ // No parsing
+ return new InputStreamReader(is);
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/BaseEntity.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/BaseEntity.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/BaseEntity.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,7 @@
+package fr.cemagref.simexplorer.is.entities;
+
+import java.io.Serializable;
+
+public abstract class BaseEntity implements Serializable {
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Code.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Code.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Code.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,28 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+
+public class Code extends DataEntity implements Serializable {
+
+ private static final long serialVersionUID = 1232989963544650014L;
+
+ private String language;
+ private String code;
+
+ public String getLanguage() {
+ return language;
+ }
+
+ public void setLanguage(String language) {
+ this.language = language;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Component.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Component.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Component.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,47 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+import java.util.Set;
+
+public class Component extends LoggableElement implements Serializable {
+
+ private static final long serialVersionUID = -1759921918565071510L;
+
+ Set<Constant> constants;
+ Set<Structure> structures;
+ Set<Code> codes;
+ Set<Library> libraries;
+
+ public Set<Constant> getConstants() {
+ return constants;
+ }
+
+ public void setConstants(Set<Constant> constants) {
+ this.constants = constants;
+ }
+
+ public Set<Structure> getStructures() {
+ return structures;
+ }
+
+ public void setStructures(Set<Structure> structures) {
+ this.structures = structures;
+ }
+
+ public Set<Code> getCodes() {
+ return codes;
+ }
+
+ public void setCodes(Set<Code> codes) {
+ this.codes = codes;
+ }
+
+ public Set<Library> getLibraries() {
+ return libraries;
+ }
+
+ public void setLibraries(Set<Library> libraries) {
+ this.libraries = libraries;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Constant.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Constant.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Constant.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,28 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+
+public class Constant extends DataEntity implements Serializable {
+
+ private static final long serialVersionUID = 5473300963328292128L;
+
+ private String name;
+ private Class<?> type;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Class<?> getType() {
+ return type;
+ }
+
+ public void setType(Class<?> type) {
+ this.type = type;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ConstantValue.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ConstantValue.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ConstantValue.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,28 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+
+public class ConstantValue extends DataEntity implements Serializable {
+
+ private static final long serialVersionUID = -5434140706898012637L;
+
+ private String value;
+ private Constant constant;
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public Constant getConstant() {
+ return constant;
+ }
+
+ public void setConstant(Constant constant) {
+ this.constant = constant;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/DataEntity.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/DataEntity.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/DataEntity.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,39 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import fr.cemagref.simexplorer.is.entities.BaseEntity;
+
+public abstract class DataEntity extends BaseEntity {
+
+ private DataEntity parentData;
+
+ public LoggableElement getParentLoggableElement() {
+ LoggableElement parentLoggableElement = null;
+ if (getParentData() instanceof LoggableElement) {
+ parentLoggableElement = (LoggableElement) getParentData();
+ } else {
+ if (getParentData() == null) {
+ parentLoggableElement = null;
+ } else {
+ parentLoggableElement = getParentData()
+ .getParentLoggableElement();
+ }
+ }
+ return parentLoggableElement;
+ }
+
+ /**
+ * @return the parentData
+ */
+ public DataEntity getParentData() {
+ return parentData;
+ }
+
+ /**
+ * @param parentData
+ * the parentData to set
+ */
+ public void setParentData(DataEntity parentData) {
+ this.parentData = parentData;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationApplication.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationApplication.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationApplication.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,29 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+import java.util.Set;
+
+public class ExplorationApplication extends LoggableElement implements Serializable {
+
+ private static final long serialVersionUID = 122049347724394193L;
+
+ private Set<ExplorationData> explorations;
+ private Set<Component> components;
+
+ public Set<ExplorationData> getExplorations() {
+ return explorations;
+ }
+
+ public void setExplorations(Set<ExplorationData> explorations) {
+ this.explorations = explorations;
+ }
+
+ public Set<Component> getComponents() {
+ return components;
+ }
+
+ public void setComponents(Set<Component> components) {
+ this.components = components;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationData.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationData.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/ExplorationData.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,57 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+import java.util.Set;
+
+public class ExplorationData extends LoggableElement implements Serializable {
+
+ private static final long serialVersionUID = -6439801837608358754L;
+
+ private Set<ConstantValue> valuesMap;
+ private Result result;
+
+ private ConstantValue findConstantValue(Constant c) {
+ for (ConstantValue constantValue : valuesMap) {
+ if (c.equals(constantValue.getConstant())) {
+ return constantValue;
+ }
+ }
+ return null;
+ }
+
+ public void setConstantValue(Constant c, String value) {
+ ConstantValue constantValue = findConstantValue(c);
+ if (constantValue == null) {
+ constantValue = new ConstantValue();
+ constantValue.setConstant(c);
+ valuesMap.add(constantValue);
+ }
+ constantValue.setValue(value);
+ }
+
+ public Object getConstantValue(Constant c) {
+ ConstantValue constantValue = findConstantValue(c);
+ if (constantValue == null) {
+ return null;
+ } else {
+ return constantValue.getValue();
+ }
+ }
+
+ public Result getResult() {
+ return result;
+ }
+
+ public void setResult(Result result) {
+ this.result = result;
+ }
+
+ public Set<ConstantValue> getValuesMap() {
+ return valuesMap;
+ }
+
+ public void setValuesMap(Set<ConstantValue> valuesMap) {
+ this.valuesMap = valuesMap;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Library.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Library.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Library.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,9 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+
+public class Library extends LoggableElement implements Serializable {
+
+ private static final long serialVersionUID = -5635619075345573945L;
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/LoggableElement.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/LoggableElement.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/LoggableElement.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,24 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+
+public abstract class LoggableElement extends DataEntity {
+
+ private MetaDataEntity metaData;
+
+ /**
+ * @return the metaData
+ */
+ public MetaDataEntity getMetaData() {
+ return metaData;
+ }
+
+ /**
+ * @param metaData
+ * the metaData to set
+ */
+ public void setMetaData(MetaDataEntity metaData) {
+ this.metaData = metaData;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Repository.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Repository.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Repository.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,9 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+
+public class Repository extends DataEntity implements Serializable {
+
+ private static final long serialVersionUID = 1232065724338066924L;
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Result.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Result.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Result.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,9 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+import java.io.Serializable;
+
+public class Result extends DataEntity implements Serializable {
+
+ private static final long serialVersionUID = 2111484866027162494L;
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Structure.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Structure.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/data/Structure.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,5 @@
+package fr.cemagref.simexplorer.is.entities.data;
+
+public abstract class Structure extends DataEntity {
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/MetaDataEntity.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/MetaDataEntity.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/MetaDataEntity.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,232 @@
+package fr.cemagref.simexplorer.is.entities.metadata;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Map;
+
+import fr.cemagref.simexplorer.is.contenttype.ContentType;
+import fr.cemagref.simexplorer.is.entities.BaseEntity;
+
+public class MetaDataEntity extends BaseEntity implements Serializable {
+
+ private static final long serialVersionUID = -7916932464982315229L;
+
+ private String uuid;
+ private String name;
+ private String type;
+ private String description;
+ private Version version;
+ private Date creationDate;
+ private String hash;
+ private Map<String, String> descriptors;
+ private Map<String, ContentType> attachments;
+ private String parentDataUuid;
+ private String parentDataVersion;
+ private String parentVersionUuid;
+ private String parentVersionVersion;
+ private boolean latest;
+
+ /**
+ * @return the uuid
+ */
+ public String getUuid() {
+ return uuid;
+ }
+
+ /**
+ * @param uuid
+ * the uuid to set
+ */
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ /**
+ * @return the name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * @param name
+ * the name to set
+ */
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ /**
+ * @return the type
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * @param type
+ * the type to set
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ /**
+ * @return the description
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ /**
+ * @param description
+ * the description to set
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * @return the version
+ */
+ public Version getVersion() {
+ return version;
+ }
+
+ /**
+ * @param version
+ * the version to set
+ */
+ public void setVersion(String version) {
+ this.version = new Version(version);
+ }
+
+ /**
+ * @return the creationDate
+ */
+ public Date getCreationDate() {
+ return creationDate;
+ }
+
+ /**
+ * @param creationDate
+ * the creationDate to set
+ */
+ public void setCreationDate(Date creationDate) {
+ this.creationDate = creationDate;
+ }
+
+ /**
+ * @return the hash
+ */
+ public String getHash() {
+ return hash;
+ }
+
+ /**
+ * @param hash
+ * the hash to set
+ */
+ public void setHash(String hash) {
+ this.hash = hash;
+ }
+
+ /**
+ * @return the descriptors
+ */
+ public Map<String, String> getDescriptors() {
+ return descriptors;
+ }
+
+ /**
+ * @param descriptors
+ * the descriptors to set
+ */
+ public void setDescriptors(Map<String, String> descriptors) {
+ this.descriptors = descriptors;
+ }
+
+ /**
+ * @return the attachments
+ */
+ public Map<String, ContentType> getAttachments() {
+ return attachments;
+ }
+
+ /**
+ * @param attachments
+ * the attachments to set
+ */
+ public void setAttachments(Map<String, ContentType> attachments) {
+ this.attachments = attachments;
+ }
+
+ /**
+ * @return the parentDataUuid
+ */
+ public String getParentDataUuid() {
+ return parentDataUuid;
+ }
+
+ /**
+ * @param parentDataUuid
+ * the parentDataUuid to set
+ */
+ public void setParentDataUuid(String parentDataUuid) {
+ this.parentDataUuid = parentDataUuid;
+ }
+
+ /**
+ * @return the parentDataVersion
+ */
+ public String getParentDataVersion() {
+ return parentDataVersion;
+ }
+
+ /**
+ * @param parentDataVersion
+ * the parentDataVersion to set
+ */
+ public void setParentDataVersion(String parentDataVersion) {
+ this.parentDataVersion = parentDataVersion;
+ }
+
+ /**
+ * @return the parentVersionUuid
+ */
+ public String getParentVersionUuid() {
+ return parentVersionUuid;
+ }
+
+ /**
+ * @param parentVersionUuid
+ * the parentVersionUuid to set
+ */
+ public void setParentVersionUuid(String parentVersionUuid) {
+ this.parentVersionUuid = parentVersionUuid;
+ }
+
+ /**
+ * @return the parentVersionVersion
+ */
+ public String getParentVersionVersion() {
+ return parentVersionVersion;
+ }
+
+ /**
+ * @param parentVersionVersion
+ * the parentVersionVersion to set
+ */
+ public void setParentVersionVersion(String parentVersionVersion) {
+ this.parentVersionVersion = parentVersionVersion;
+ }
+
+ public boolean isLatest() {
+ return latest;
+ }
+
+ public void setLatest(boolean latest) {
+ this.latest = latest;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,140 @@
+package fr.cemagref.simexplorer.is.entities.metadata;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/**
+ * Pointed version class
+ *
+ * @author glandais
+ *
+ */
+public class Version implements Comparable<Version>, Serializable {
+
+ private static final long serialVersionUID = 8982527036997002451L;
+ /**
+ * Inner storage
+ */
+ private List<Integer> pointedVersion;
+
+ /**
+ * Default constructor
+ *
+ * @param version
+ * String version
+ */
+ public Version(String version) {
+ super();
+ // Initialize list
+ pointedVersion = new ArrayList<Integer>();
+ if (version != null) {
+ // tokenize on dot
+ StringTokenizer st = new StringTokenizer(version, ".");
+ while (st.hasMoreTokens()) {
+ pointedVersion.add(new Integer(st.nextToken()));
+ }
+ }
+ }
+
+ /**
+ * Retrieve sub version
+ *
+ * @param position
+ * Sub version wanted
+ * @return
+ */
+ public Integer getVersion(int position) {
+ if (position < pointedVersion.size()) {
+ return pointedVersion.get(position);
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set a sub version
+ *
+ * @param position
+ * Sub version to modify
+ * @param subVersion
+ * New value
+ */
+ public void setVersion(int position, int subVersion) {
+ while (getVersion(position) == null) {
+ addSubVersion(0);
+ }
+ pointedVersion.set(position, subVersion);
+ }
+
+ /**
+ * Add a new sub version
+ *
+ * @param subVersion
+ * Sub version value
+ */
+ public void addSubVersion(int subVersion) {
+ pointedVersion.add(subVersion);
+ }
+
+ /**
+ * Increment a sub version
+ *
+ * @param position
+ * Sub version position
+ * @return
+ */
+ public Version incVersion(int position) {
+ Version result = new Version(toString());
+ while (result.getVersion(position) == null) {
+ result.addSubVersion(0);
+ }
+ result.setVersion(position, result.getVersion(position) + 1);
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ StringBuffer result = new StringBuffer("");
+ for (Integer i : pointedVersion) {
+ result.append(i).append(".");
+ }
+ if (result.length() > 0) {
+ result.setLength(result.length() - 1);
+ }
+ return result.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+ public int compareTo(Version v) {
+ int result = 0;
+ int position = 0;
+ boolean compared = false;
+ while (!compared) {
+ if (getVersion(position) == null && v.getVersion(position) == null) {
+ result = 0;
+ compared = true;
+ } else {
+ if (getVersion(position) == null) {
+ result = -1;
+ compared = true;
+ } else {
+ if (v.getVersion(position) == null) {
+ result = 1;
+ compared = true;
+ } else {
+ result = getVersion(position).compareTo(
+ v.getVersion(position));
+ compared = (result != 0);
+ }
+ }
+ }
+ position++;
+ }
+ return result;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/BaseEntityFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,368 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+import fr.cemagref.simexplorer.is.entities.BaseEntity;
+import fr.cemagref.simexplorer.is.entities.data.DataEntity;
+
+public abstract class BaseEntityFactory<E extends BaseEntity> implements
+ XmlConstants {
+
+ private static DocumentBuilder documentBuilder = null;
+
+ private static Map<String, BaseEntityFactory<? extends DataEntity>> factories = new HashMap<String, BaseEntityFactory<? extends DataEntity>>();
+
+ /*
+ * Static methods - Retrieve factories, get XML document builder
+ */
+
+ /**
+ * Retrieve instance of the factory
+ *
+ * @param <T>
+ * Factory spec. class
+ * @param entityClass
+ * Class wanted
+ * @return Factory
+ * @throws Exception
+ */
+ @SuppressWarnings("unchecked")
+ public static <T extends DataEntity> BaseEntityFactory<T> getFactory(
+ Class entityClass) throws Exception {
+ BaseEntityFactory<T> result = (BaseEntityFactory<T>) factories
+ .get(entityClass.getSimpleName());
+ if (result == null) {
+ String elementFactoryClassName = BaseEntityFactory.class
+ .getPackage().getName()
+ + "." + entityClass.getSimpleName() + "Factory";
+
+ Class<? extends BaseEntityFactory<T>> factoryClass = (Class<? extends BaseEntityFactory<T>>) Class
+ .forName(elementFactoryClassName).asSubclass(
+ BaseEntityFactory.class);
+
+ result = factoryClass.newInstance();
+ factories.put(entityClass.getSimpleName(), result);
+ }
+ return result;
+ }
+
+ /**
+ * Retrieve a factory with class name
+ *
+ * @param entityClassName
+ * @return
+ * @throws Exception
+ */
+ public static BaseEntityFactory<? extends DataEntity> getFactory(
+ String entityClassName) throws Exception {
+ Class<? extends DataEntity> entityClass = Class
+ .forName(entityClassName).asSubclass(DataEntity.class);
+ return getFactory(entityClass);
+ }
+
+ /**
+ * Retrieve an instance of document builder
+ *
+ * @return XML document builder
+ * @throws Exception
+ */
+ public static synchronized DocumentBuilder getXMLBuilder() throws Exception {
+ if (documentBuilder == null) {
+ DocumentBuilderFactory factory = DocumentBuilderFactory
+ .newInstance();
+ documentBuilder = factory.newDocumentBuilder();
+ return documentBuilder;
+ }
+ return documentBuilder;
+ }
+
+ /*
+ * Entity methods - Instanciate, load and save to XML/streams
+ */
+
+ /**
+ * Instanciate an element
+ *
+ * @return Element
+ */
+ public abstract E createInstance();
+
+ /**
+ * Load an element from an XML node
+ *
+ * @param xmlElement
+ * @return
+ * @throws Exception
+ */
+ public E loadElement(Element xmlElement) throws Exception {
+ E element = createInstance();
+ return element;
+ }
+
+ /**
+ * Load an element from a XML stream
+ *
+ * @param stream
+ * @return
+ * @throws Exception
+ */
+ public E loadElement(InputStream stream) throws Exception {
+ Document document = getXMLBuilder().parse(stream);
+ Element rootElement = (Element) document.getFirstChild();
+ E element = loadElement(rootElement);
+ return element;
+ }
+
+ /**
+ * Save an element to a XML node
+ *
+ * @param document
+ * XML document
+ * @param xmlElement
+ * XML node storing the element (not null)
+ * @param element
+ * Element to save
+ * @throws Exception
+ */
+ public abstract void saveElement(Document document, Element xmlElement,
+ E element) throws Exception;
+
+ /**
+ * Save an element to a XML stream
+ *
+ * @param element
+ * @return
+ * @throws Exception
+ */
+ public InputStream saveElement(String rootNodeName, E element)
+ throws Exception {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+ org.w3c.dom.Document xmlDocument = getXMLBuilder().newDocument();
+ // DOM properties
+ xmlDocument.setXmlVersion("1.0");
+ xmlDocument.setXmlStandalone(true);
+ // DOM tree
+ Element rootNode = xmlDocument.createElement(rootNodeName);
+
+ saveElement(xmlDocument, rootNode, element);
+
+ xmlDocument.appendChild(rootNode);
+ DOMSource domSource = new DOMSource(xmlDocument);
+ StreamResult result = new StreamResult(os);
+ TransformerFactory tf = TransformerFactory.newInstance();
+ Transformer transformer = tf.newTransformer();
+ transformer.transform(domSource, result);
+
+ InputStream is = new ByteArrayInputStream(os.toByteArray());
+
+ return is;
+ }
+
+ /*
+ * Collection methods : Help load/save of inner collections
+ */
+
+ /**
+ * Load a collection inside a node
+ *
+ * @param <T>
+ * Type of element of the collection
+ * @param tagSetName
+ * Tag of the node of the collection
+ * @param tagName
+ * Tag of the node containing an item
+ * @param clazz
+ * Class type
+ * @param xmlElement
+ * Node containing the collection
+ * @param parentData
+ * Element holding the collection
+ * @return
+ * @throws Exception
+ */
+ public <T extends DataEntity> Set<T> loadCollection(String tagSetName,
+ String tagName, Class<T> clazz, Element xmlElement,
+ DataEntity parentData) throws Exception {
+ Set<T> entities = new HashSet<T>();
+
+ // Retrieve XML node containing the collection
+ Element xmlCollection = getXMLElementByTagName(xmlElement, tagSetName);
+ if (xmlCollection != null) {
+ // Retrieve element factory
+ BaseEntityFactory<T> elementFactory = getFactory(clazz);
+
+ // Retrieve all XML elements
+ Set<Element> list = getXMLElementsByTagName(xmlCollection, tagName);
+ for (Element element : list) {
+ // Convert the XML node to entity
+ T entity = elementFactory.loadElement(element);
+ entity.setParentData(parentData);
+ entities.add(entity);
+ }
+ }
+
+ return entities;
+ }
+
+ /**
+ * Save a collection of elements to XML node
+ *
+ * @param <T>
+ * @param entities
+ * @param tagSetName
+ * @param tagName
+ * @param clazz
+ * @param document
+ * @param xmlElement
+ * @throws Exception
+ */
+ public <T extends DataEntity> void saveCollection(Set<T> entities,
+ String tagSetName, String tagName, Class<T> clazz,
+ Document document, Element xmlElement) throws Exception {
+ if (entities != null && entities.size() > 0) {
+ Element xmlCollection = document.createElement(tagSetName);
+ BaseEntityFactory<T> elementFactory = getFactory(clazz);
+ for (T entity : entities) {
+ Element childElement = document.createElement(tagName);
+ elementFactory.saveElement(document, childElement, entity);
+ xmlCollection.appendChild(childElement);
+ }
+ xmlElement.appendChild(xmlCollection);
+ }
+ }
+
+ /**
+ * Save an element as a XML stream
+ *
+ * @param rootNode
+ * @return
+ * @throws Exception
+ */
+ public static InputStream serializeElement(Element node) throws Exception {
+ org.w3c.dom.Document xmlDocument = getXMLBuilder().newDocument();
+ // DOM properties
+ xmlDocument.setXmlVersion("1.0");
+ xmlDocument.setXmlStandalone(true);
+ // DOM tree
+ xmlDocument.appendChild(xmlDocument.importNode(node, true));
+ DOMSource domSource = new DOMSource(xmlDocument);
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ StreamResult result = new StreamResult(os);
+ TransformerFactory tf = TransformerFactory.newInstance();
+ Transformer transformer = tf.newTransformer();
+ transformer.transform(domSource, result);
+
+ ByteArrayInputStream inputStream = new ByteArrayInputStream(os
+ .toByteArray());
+
+ return inputStream;
+ }
+
+ /*
+ * XML methods : set, get properties
+ */
+
+ /**
+ * Set a property in XML
+ *
+ * @param document
+ * XML document
+ * @param xmlElement
+ * Node to modify
+ * @param tagName
+ * Tag of created node
+ * @param value
+ * Value of node
+ */
+ protected void setXMLProperty(Document document, Element xmlElement,
+ String tagName, Object value) {
+ if (value != null) {
+ Element xmlProperty = document.createElement(tagName);
+ Text xmlDescriptionText = document.createTextNode(value.toString());
+ xmlProperty.appendChild(xmlDescriptionText);
+ xmlElement.appendChild(xmlProperty);
+ }
+ }
+
+ /**
+ * Get a property in XML
+ *
+ * @param xmlElement
+ * Source node
+ * @param tagName
+ * Tag name of property
+ * @return Property value
+ */
+ public String getXMLProperty(Element xmlElement, String tagName) {
+ Element element = getXMLElementByTagName(xmlElement, tagName);
+ if (element != null) {
+ return element.getFirstChild().getNodeValue();
+ } else {
+ return null;
+ }
+ }
+
+ /*
+ * XML methods : retrieve nodes
+ */
+
+ /**
+ * Retrieve XML element just under with specified tag name
+ *
+ * @param xmlElement
+ * @param tagName
+ * @return
+ */
+ public Element getXMLElementByTagName(Element xmlElement, String tagName) {
+ Set<Element> elements = getXMLElementsByTagName(xmlElement, tagName);
+ if (elements.size() > 0) {
+ return elements.iterator().next();
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Retrieve all XML elements just under with specified tag name
+ *
+ * @param xmlElement
+ * @param tagName
+ * @return
+ */
+ public Set<Element> getXMLElementsByTagName(Element xmlElement,
+ String tagName) {
+ Set<Element> elements = new HashSet<Element>();
+
+ NodeList nodes = xmlElement.getChildNodes();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node node = nodes.item(i);
+ if (node instanceof Element
+ && tagName.equals(((Element) node).getTagName())) {
+ elements.add((Element) node);
+ }
+ }
+ return elements;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/CodeFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/CodeFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/CodeFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,31 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.Code;
+
+public class CodeFactory<E extends Code> extends BaseEntityFactory<Code> {
+
+ @Override
+ public Code createInstance() {
+ return new Code();
+ }
+
+ @Override
+ public Code loadElement(Element xmlElement) throws Exception {
+ Code code = super.loadElement(xmlElement);
+ code.setLanguage(getXMLProperty(xmlElement, KEY_CODE_LANGUAGE));
+ code.setCode(getXMLProperty(xmlElement, KEY_CODE_CODE));
+ return code;
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement, Code element)
+ throws Exception {
+ setXMLProperty(document, xmlElement, KEY_CODE_LANGUAGE, element
+ .getLanguage());
+ setXMLProperty(document, xmlElement, KEY_CODE_CODE, element.getCode());
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ComponentFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ComponentFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ComponentFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,57 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.Code;
+import fr.cemagref.simexplorer.is.entities.data.Component;
+import fr.cemagref.simexplorer.is.entities.data.Constant;
+import fr.cemagref.simexplorer.is.entities.data.Library;
+import fr.cemagref.simexplorer.is.entities.data.Structure;
+
+public class ComponentFactory<E extends Component> extends
+ LoggableElementFactory<Component> {
+
+ @Override
+ public Component createInstance() {
+ return new Component();
+ }
+
+ @Override
+ public Component loadElement(Element xmlElement) throws Exception {
+ Component component = super.loadElement(xmlElement);
+
+ component.setConstants(loadCollection(KEY_COMPONENT_CONSTANTS,
+ KEY_COMPONENT_CONSTANT_NODE, Constant.class, xmlElement,
+ component));
+ component.setStructures(loadCollection(KEY_COMPONENT_STRUCTURE,
+ KEY_COMPONENT_STRUCTURE_NODE, Structure.class, xmlElement,
+ component));
+ component.setCodes(loadCollection(KEY_COMPONENT_CODES,
+ KEY_COMPONENT_CODE_NODE, Code.class, xmlElement, component));
+ component.setLibraries(loadCollection(KEY_COMPONENT_LIBRARIES,
+ KEY_COMPONENT_LIBRARY_NODE, Library.class, xmlElement,
+ component));
+
+ return component;
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ Component element) throws Exception {
+
+ super.saveElement(document, xmlElement, element);
+
+ saveCollection(element.getConstants(), KEY_COMPONENT_CONSTANTS,
+ KEY_COMPONENT_CONSTANT_NODE, Constant.class, document,
+ xmlElement);
+ saveCollection(element.getStructures(), KEY_COMPONENT_STRUCTURE,
+ KEY_COMPONENT_STRUCTURE_NODE, Structure.class, document,
+ xmlElement);
+ saveCollection(element.getCodes(), KEY_COMPONENT_CODES,
+ KEY_COMPONENT_CODE_NODE, Code.class, document, xmlElement);
+ saveCollection(element.getLibraries(), KEY_COMPONENT_LIBRARIES,
+ KEY_COMPONENT_LIBRARY_NODE, Library.class, document, xmlElement);
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,34 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.Constant;
+
+public class ConstantFactory<E extends Constant> extends
+ BaseEntityFactory<Constant> {
+
+ @Override
+ public Constant createInstance() {
+ return new Constant();
+ }
+
+ @Override
+ public Constant loadElement(Element xmlElement) throws Exception {
+ Constant constant = super.loadElement(xmlElement);
+ constant.setName(getXMLProperty(xmlElement, KEY_CONSTANT_NAME));
+ String className = getXMLProperty(xmlElement, KEY_CONSTANT_TYPE);
+ constant.setType(Class.forName(className));
+ return constant;
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ Constant element) throws Exception {
+ setXMLProperty(document, xmlElement, KEY_CONSTANT_NAME, element
+ .getName());
+ String className = element.getType().getName();
+ setXMLProperty(document, xmlElement, KEY_CONSTANT_TYPE, className);
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantValueFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantValueFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ConstantValueFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,43 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.Constant;
+import fr.cemagref.simexplorer.is.entities.data.ConstantValue;
+
+public class ConstantValueFactory<E extends ConstantValue> extends
+ BaseEntityFactory<ConstantValue> {
+
+ @Override
+ public ConstantValue createInstance() {
+ return new ConstantValue();
+ }
+
+ @Override
+ public ConstantValue loadElement(Element xmlElement) throws Exception {
+ ConstantValue constantValue = super.loadElement(xmlElement);
+ constantValue.setConstant((Constant) getFactory(Constant.class)
+ .loadElement(
+ getXMLElementByTagName(xmlElement,
+ KEY_CONSTANTVALUE_CONSTANT)));
+ constantValue.setValue(getXMLProperty(xmlElement,
+ KEY_CONSTANTVALUE_VALUE));
+ return constantValue;
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ ConstantValue element) throws Exception {
+
+ Element xmlConstant = document
+ .createElement(KEY_CONSTANTVALUE_CONSTANT);
+ getFactory(Constant.class).saveElement(document, xmlConstant,
+ element.getConstant());
+ xmlElement.appendChild(xmlConstant);
+
+ setXMLProperty(document, xmlElement, KEY_CONSTANTVALUE_VALUE, element
+ .getValue());
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationApplicationFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationApplicationFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationApplicationFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,42 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.Component;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
+
+public class ExplorationApplicationFactory extends
+ LoggableElementFactory<ExplorationApplication> {
+
+ @Override
+ public ExplorationApplication createInstance() {
+ return new ExplorationApplication();
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ ExplorationApplication element) throws Exception {
+ super.saveElement(document, xmlElement, element);
+ saveCollection(element.getExplorations(), KEY_EXPLORATIONAPPLICATION_DATA, KEY_EXPLORATIONAPPLICATION_DATA_NODE,
+ ExplorationData.class, document, xmlElement);
+ saveCollection(element.getComponents(), KEY_EXPLORATIONAPPLICATION_COMPONENTS,
+ KEY_EXPLORATIONAPPLICATION_COMPONENT_NODE, Component.class, document, xmlElement);
+ }
+
+ @Override
+ public ExplorationApplication loadElement(Element xmlElement)
+ throws Exception {
+ ExplorationApplication explorationApplication = super
+ .loadElement(xmlElement);
+ explorationApplication.setExplorations(loadCollection(KEY_EXPLORATIONAPPLICATION_DATA,
+ KEY_EXPLORATIONAPPLICATION_DATA_NODE, ExplorationData.class, xmlElement,
+ explorationApplication));
+ explorationApplication.setComponents(loadCollection(KEY_EXPLORATIONAPPLICATION_COMPONENTS,
+ KEY_EXPLORATIONAPPLICATION_COMPONENT_NODE, Component.class, xmlElement,
+ explorationApplication));
+ return explorationApplication;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationDataFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationDataFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ExplorationDataFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,47 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.ConstantValue;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
+import fr.cemagref.simexplorer.is.entities.data.Result;
+
+public class ExplorationDataFactory extends
+ LoggableElementFactory<ExplorationData> {
+
+ @Override
+ public ExplorationData createInstance() {
+ return new ExplorationData();
+ }
+
+ @Override
+ public ExplorationData loadElement(Element xmlElement) throws Exception {
+ ExplorationData explorationData = super.loadElement(xmlElement);
+ explorationData.setResult((Result) getFactory(Result.class)
+ .loadElement(
+ getXMLElementByTagName(xmlElement,
+ KEY_EXPLORATIONDATA_RESULT)));
+ explorationData.setValuesMap(loadCollection(KEY_EXPLORATIONDATA_VALUES,
+ KEY_EXPLORATIONDATA_VALUE, ConstantValue.class, xmlElement,
+ explorationData));
+ return explorationData;
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ ExplorationData element) throws Exception {
+ super.saveElement(document, xmlElement, element);
+
+ Element xmlResult = document.createElement(KEY_EXPLORATIONDATA_RESULT);
+ getFactory(Result.class).saveElement(document, xmlResult,
+ element.getResult());
+ xmlElement.appendChild(xmlResult);
+
+ saveCollection(element.getValuesMap(), KEY_EXPLORATIONDATA_VALUES,
+ KEY_EXPLORATIONDATA_VALUE, ConstantValue.class, document,
+ xmlElement);
+
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LibraryFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LibraryFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LibraryFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,12 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import fr.cemagref.simexplorer.is.entities.data.Library;
+
+public class LibraryFactory extends LoggableElementFactory<Library> {
+
+ @Override
+ public Library createInstance() {
+ return new Library();
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/LoggableElementFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,38 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+
+public abstract class LoggableElementFactory<E extends LoggableElement> extends
+ BaseEntityFactory<E> {
+
+ @Override
+ public E loadElement(Element xmlElement) throws Exception {
+ E element = super.loadElement(xmlElement);
+
+ MetaDataEntityFactory elementFactory = (MetaDataEntityFactory) BaseEntityFactory
+ .getFactory(MetaDataEntity.class);
+
+ // Load metadata informations
+ Element mdeElement = getXMLElementByTagName(xmlElement, KEY_METADATA);
+ MetaDataEntity metaData = elementFactory.loadElement(mdeElement);
+ element.setMetaData(metaData);
+
+ return element;
+ }
+
+ @Override
+ public void saveElement(org.w3c.dom.Document document, Element xmlElement,
+ E element) throws Exception {
+ MetaDataEntityFactory elementFactory = (MetaDataEntityFactory) BaseEntityFactory
+ .getFactory(MetaDataEntity.class);
+
+ // Save metadata informations
+ Element mdeElement = document.createElement(KEY_METADATA);
+ elementFactory.saveElement(document, mdeElement, element.getMetaData());
+ xmlElement.appendChild(mdeElement);
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/MetaDataEntityFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,205 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.contenttype.ContentType;
+import fr.cemagref.simexplorer.is.contenttype.ContentTypeFactory;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+
+public class MetaDataEntityFactory<E extends MetaDataEntity> extends
+ BaseEntityFactory<MetaDataEntity> {
+
+ private static final SimpleDateFormat sdf = new SimpleDateFormat(
+ "yyyy-MM-dd'T'HH:mm:ss");
+
+ @Override
+ public MetaDataEntity createInstance() {
+ return new MetaDataEntity();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory#loadXMLElement(org.w3c.dom.Element)
+ */
+ @Override
+ public MetaDataEntity loadElement(Element xmlElement) throws Exception {
+ MetaDataEntity entity = super.loadElement(xmlElement);
+ entity.setUuid(getXMLProperty(xmlElement, KEY_METADATA_UUID));
+ entity.setName(getXMLProperty(xmlElement, KEY_METADATA_NAME));
+ entity.setType(getXMLProperty(xmlElement, KEY_METADATA_TYPE));
+ entity.setDescription(getXMLProperty(xmlElement,
+ KEY_METADATA_DESCRIPTION));
+ entity.setVersion(getXMLProperty(xmlElement, KEY_METADATA_VERSION));
+
+ String latestVersion = getXMLProperty(xmlElement,
+ KEY_METADATA_LATESTVERSION);
+ if (latestVersion != null && "1".equals(latestVersion)) {
+ entity.setLatest(true);
+ } else {
+ entity.setLatest(false);
+ }
+
+ String creationDate = getXMLProperty(xmlElement,
+ KEY_METADATA_CREATIONDATE);
+ if (creationDate != null) {
+ Date date = sdf.parse(creationDate);
+ entity.setCreationDate(date);
+ }
+
+ entity.setHash(getXMLProperty(xmlElement, KEY_METADATA_HASH));
+ entity.setParentDataUuid(getXMLProperty(xmlElement,
+ KEY_METADATA_PARENTDATA_UUID));
+ entity.setParentDataVersion(getXMLProperty(xmlElement,
+ KEY_METADATA_PARENTDATA_VERSION));
+ entity.setParentVersionUuid(getXMLProperty(xmlElement,
+ KEY_METADATA_PARENTVERSION_UUID));
+ entity.setParentVersionVersion(getXMLProperty(xmlElement,
+ KEY_METADATA_PARENTVERSION_VERSION));
+
+ Map<String, String> descriptors = new HashMap<String, String>();
+
+ Element descriptorsElement = getXMLElementByTagName(xmlElement,
+ KEY_METADATA_DESCRIPTORS);
+ if (descriptorsElement != null) {
+ Set<Element> descriptorElements = getXMLElementsByTagName(
+ descriptorsElement, KEY_METADATA_DESCRIPTOR);
+ for (Element descriptorElement : descriptorElements) {
+ String name = getXMLProperty(descriptorElement,
+ KEY_METADATA_DESCRIPTOR_NAME);
+ String value = getXMLProperty(descriptorElement,
+ KEY_METADATA_DESCRIPTOR_VALUE);
+ descriptors.put(name, value);
+ }
+ }
+ entity.setDescriptors(descriptors);
+
+ Map<String, ContentType> attachments = new HashMap<String, ContentType>();
+
+ Element attachmentsElement = getXMLElementByTagName(xmlElement,
+ KEY_METADATA_ATTACHMENTS);
+ if (attachmentsElement != null) {
+ Set<Element> attachmentElements = getXMLElementsByTagName(
+ attachmentsElement, KEY_METADATA_ATTACHMENT);
+ for (Element attachmentElement : attachmentElements) {
+ String name = getXMLProperty(attachmentElement,
+ KEY_METADATA_ATTACHMENT_NAME);
+ String type = getXMLProperty(attachmentElement,
+ KEY_METADATA_ATTACHMENT_TYPE);
+ ContentType contentType = ContentTypeFactory
+ .getContentTypeInstance(type);
+ attachments.put(name, contentType);
+ }
+ }
+
+ entity.setAttachments(attachments);
+
+ return entity;
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ MetaDataEntity element) throws Exception {
+
+ setXMLProperty(document, xmlElement, KEY_METADATA_UUID, element
+ .getUuid());
+ setXMLProperty(document, xmlElement, KEY_METADATA_NAME, element
+ .getName());
+ setXMLProperty(document, xmlElement, KEY_METADATA_TYPE, element
+ .getType());
+ setXMLProperty(document, xmlElement, KEY_METADATA_DESCRIPTION, element
+ .getDescription());
+ setXMLProperty(document, xmlElement, KEY_METADATA_VERSION, element
+ .getVersion().toString());
+
+ if (element.isLatest()) {
+ setXMLProperty(document, xmlElement, KEY_METADATA_LATESTVERSION,
+ "1");
+ } else {
+ setXMLProperty(document, xmlElement, KEY_METADATA_LATESTVERSION,
+ "0");
+ }
+
+ if (element.getCreationDate() != null) {
+ setXMLProperty(document, xmlElement, KEY_METADATA_CREATIONDATE, sdf
+ .format(element.getCreationDate()));
+ }
+
+ setXMLProperty(document, xmlElement, KEY_METADATA_HASH, element
+ .getHash());
+ setXMLProperty(document, xmlElement, KEY_METADATA_PARENTDATA_UUID,
+ element.getParentDataUuid());
+ setXMLProperty(document, xmlElement, KEY_METADATA_PARENTDATA_VERSION,
+ element.getParentDataVersion());
+ setXMLProperty(document, xmlElement, KEY_METADATA_PARENTVERSION_UUID,
+ element.getParentVersionUuid());
+ setXMLProperty(document, xmlElement,
+ KEY_METADATA_PARENTVERSION_VERSION, element
+ .getParentVersionVersion());
+
+ Map<String, String> descriptors = element.getDescriptors();
+
+ Element descriptorsElement = document
+ .createElement(KEY_METADATA_DESCRIPTORS);
+
+ for (Map.Entry<String, String> kv : descriptors.entrySet()) {
+ Element descriptorElement = document
+ .createElement(KEY_METADATA_DESCRIPTOR);
+ setXMLProperty(document, descriptorElement,
+ KEY_METADATA_DESCRIPTOR_NAME, kv.getKey());
+ setXMLProperty(document, descriptorElement,
+ KEY_METADATA_DESCRIPTOR_VALUE, kv.getValue());
+ descriptorsElement.appendChild(descriptorElement);
+ }
+
+ xmlElement.appendChild(descriptorsElement);
+
+ Map<String, ContentType> attachments = element.getAttachments();
+
+ if (attachments != null) {
+
+ Element attachmentsElement = document
+ .createElement(KEY_METADATA_ATTACHMENTS);
+
+ for (Map.Entry<String, ContentType> kv : attachments.entrySet()) {
+ Element attachmentElement = document
+ .createElement(KEY_METADATA_ATTACHMENT);
+ setXMLProperty(document, attachmentElement,
+ KEY_METADATA_ATTACHMENT_NAME, kv.getKey());
+ setXMLProperty(document, attachmentElement,
+ KEY_METADATA_ATTACHMENT_TYPE, kv.getValue().getClass()
+ .getSimpleName());
+ attachmentsElement.appendChild(attachmentElement);
+ }
+ xmlElement.appendChild(attachmentsElement);
+
+ }
+
+ }
+
+ /**
+ * As metadata is stored inside an entity, this method loads metadata with
+ * parsing stream and retrieve metadata node
+ *
+ * @param xmlStream
+ * @return
+ * @throws Exception
+ */
+ public MetaDataEntity loadElementFromParentXML(InputStream xmlStream)
+ throws Exception {
+ Document document = getXMLBuilder().parse(xmlStream);
+ Element rootElement = (Element) document.getFirstChild();
+ Element mdeElement = getXMLElementByTagName(rootElement, KEY_METADATA);
+ MetaDataEntity mde = loadElement(mdeElement);
+ return mde;
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/RepositoryFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/RepositoryFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/RepositoryFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,27 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.Repository;
+
+public class RepositoryFactory<E extends Repository> extends
+ BaseEntityFactory<Repository> {
+
+ @Override
+ public Repository createInstance() {
+ return new Repository();
+ }
+
+ @Override
+ public Repository loadElement(Element xmlElement) throws Exception {
+ return super.loadElement(xmlElement);
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ Repository element) throws Exception {
+
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ResultFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ResultFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/ResultFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,26 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import fr.cemagref.simexplorer.is.entities.data.Result;
+
+public class ResultFactory<E extends Result> extends BaseEntityFactory<Result> {
+
+ @Override
+ public Result createInstance() {
+ return new Result();
+ }
+
+ @Override
+ public Result loadElement(Element xmlElement) throws Exception {
+ return super.loadElement(xmlElement);
+ }
+
+ @Override
+ public void saveElement(Document document, Element xmlElement,
+ Result element) throws Exception {
+
+ }
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/StructureFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/StructureFactory.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/StructureFactory.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,8 @@
+package fr.cemagref.simexplorer.is.factories;
+
+import fr.cemagref.simexplorer.is.entities.data.Structure;
+
+public abstract class StructureFactory<E extends Structure> extends
+ BaseEntityFactory<Structure> {
+
+}
Added: trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java
===================================================================
--- trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java (rev 0)
+++ trunk/simexplorer-is-entities/src/main/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java 2008-01-09 14:10:43 UTC (rev 103)
@@ -0,0 +1,71 @@
+package fr.cemagref.simexplorer.is.factories;
+
+/**
+ * Store all XML constants
+ *
+ * @author glandais
+ *
+ */
+public interface XmlConstants {
+
+ public static final String KEY_CODE_LANGUAGE = "language";
+ public static final String KEY_CODE_CODE = "code";
+
+ public static final String KEY_COMPONENT_CONSTANTS = "constants";
+ public static final String KEY_COMPONENT_CONSTANT_NODE = "constant";
+ public static final String KEY_COMPONENT_STRUCTURE = "structures";
+ public static final String KEY_COMPONENT_STRUCTURE_NODE = "structure";
+ public static final String KEY_COMPONENT_CODES = "codes";
+ public static final String KEY_COMPONENT_CODE_NODE = "code";
+ public static final String KEY_COMPONENT_LIBRARIES = "libraries";
+ public static final String KEY_COMPONENT_LIBRARY_NODE = "library";
+
+ public static final String KEY_CONSTANT_NAME = "name";
+ public static final String KEY_CONSTANT_TYPE = "type";
+
+ public static final String KEY_CONSTANTVALUE_CONSTANT = "constant";
+ public static final String KEY_CONSTANTVALUE_VALUE = "value";
+
+ public static final String KEY_EXPLORATIONAPPLICATION_DATA = "data";
+ public static final String KEY_EXPLORATIONAPPLICATION_DATA_NODE = "explorationdata";
+ public static final String KEY_EXPLORATIONAPPLICATION_COMPONENTS = "components";
+ public static final String KEY_EXPLORATIONAPPLICATION_COMPONENT_NODE = "component";
+
+ public static final String KEY_EXPLORATIONDATA_RESULT = "result";
+ public static final String KEY_EXPLORATIONDATA_VALUES = "values";
+ public static final String KEY_EXPLORATIONDATA_VALUE = "value";
+
+ public static final String KEY_RESULT_FILE = "file";
+
+ public static final String KEY_METADATA = "metadata";
+
+ public static final String KEY_METADATA_UUID = "uuid";
+ public static final String KEY_METADATA_VERSION = "version";
+ public static final String KEY_METADATA_LATESTVERSION = "latestversion";
+ public static final String KEY_METADATA_NAME = "name";
+
+ public static final String KEY_METADATA_TYPE = "type";
+ public static final String VALUE_METADATA_TYPE_EA = "ExplorationApplication";
+
+ public static final String KEY_METADATA_DESCRIPTION = "description";
+ public static final String KEY_METADATA_CREATIONDATE = "creationdate";
+ public static final String KEY_METADATA_HASH = "hash";
+ public static final String KEY_METADATA_PARENTDATA_UUID = "parentdatauuid";
+ public static final String KEY_METADATA_PARENTDATA_VERSION = "parentdataversion";
+ public static final String KEY_METADATA_PARENTVERSION_UUID = "parentversionuuid";
+ public static final String KEY_METADATA_PARENTVERSION_VERSION = "parentversionversion";
+ public static final String KEY_METADATA_DESCRIPTORS = "descriptors";
+ public static final String KEY_METADATA_DESCRIPTOR = "descriptor";
+ public static final String KEY_METADATA_ATTACHMENTS = "attachments";
+ public static final String KEY_METADATA_ATTACHMENT = "attachment";
+
+ public static final String KEY_METADATA_DESCRIPTOR_NAME = "name";
+ public static final String KEY_METADATA_DESCRIPTOR_VALUE = "value";
+
+ public static final String KEY_METADATA_ATTACHMENT_NAME = "name";
+ public static final String KEY_METADATA_ATTACHMENT_TYPE = "type";
+
+ public static final String FILE_XML = "data.xml";
+ public static final String FILE_DATA_PREFIX = "attachment";
+
+}
1
0