|
From: <de...@us...> - 2010-10-01 11:04:21
|
Revision: 5965
http://fudaa.svn.sourceforge.net/fudaa/?rev=5965&view=rev
Author: deniger
Date: 2010-10-01 11:04:14 +0000 (Fri, 01 Oct 2010)
Log Message:
-----------
Modified Paths:
--------------
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dao/CrueXmlReaderWriterImpl.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dcsp/CrueConverterDCSP.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P0.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P1.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueDaoDRSO_V1P1.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/etu/CrueDaoStructureETU.java
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidatorForCrue9Export.java
trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/io/ioMessages.properties
trunk/soft/fudaa-crue/crue-server/src/main/resources/xsd/etu-1.0.0.xsd
trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/builder/EMHManagerBuilder.java
trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/explorer/CrueLauncher.java
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dao/CrueXmlReaderWriterImpl.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dao/CrueXmlReaderWriterImpl.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dao/CrueXmlReaderWriterImpl.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -22,9 +22,11 @@
import com.memoire.fu.FuLogCrue;
import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.converters.ConversionException;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer;
+import com.thoughtworks.xstream.mapper.CannotResolveClassException;
import org.apache.commons.lang.StringUtils;
import org.fudaa.ctulu.CtuluAnalyze;
@@ -50,6 +52,7 @@
*/
public class CrueXmlReaderWriterImpl<D extends AbstractCrueDao, M> implements CrueXmlReaderWriter<M> {
+ private static final String ENCODING = "UTF-8";
private final CrueConverter<D, M> converter;
private final CrueDaoStructure daoConfigurer;
@@ -108,7 +111,7 @@
return xsdId;
}
- protected final void configureXStream(final XStream xstream, final CtuluAnalyze analyse, CrueProperties props) {
+ protected final void configureXStream(final XStream xstream, final CtuluAnalyze analyse, final CrueProperties props) {
daoConfigurer.configureXStream(xstream, analyse, props);
}
@@ -126,9 +129,9 @@
return xsdPath;
}
- protected XStream initXmlParser(final CtuluAnalyze analyse, CrueProperties props) {
+ protected XStream initXmlParser(final CtuluAnalyze analyse, final CrueProperties props) {
final XmlFriendlyReplacer replacer = createReplacer();
- final DomDriver domDriver = new DomDriver("UTF-8", replacer);
+ final DomDriver domDriver = new DomDriver(ENCODING, replacer);
final XStream xstream = new XStream(domDriver);
xstream.setMode(XStream.NO_REFERENCES);
// -- creation des alias pour que ce soit + parlant dans le xml file --//
@@ -184,7 +187,7 @@
public static boolean isValide(final URL xml, final String xsd, final CtuluAnalyze res) {
res.setDefaultResourceBundle(IOMessages.RESOURCE_BUNDLE);
res.setDesc(IOMessages.getString("valid.xml", xml));
- if(xml==null){
+ if (xml == null) {
res.addFatalError("io.fileNotFound");
return false;
}
@@ -220,10 +223,12 @@
return null;
}
- protected CrueIOResu<M> createResu(D d, M m, CtuluAnalyze analyze) {
- CrueIOResu<M> res = new CrueIOResu<M>();
+ protected CrueIOResu<M> createResu(final D d, final M m, final CtuluAnalyze analyze) {
+ final CrueIOResu<M> res = new CrueIOResu<M>();
res.setMetier(m);
- res.setCrueCommentaire(d.getCommentaire());
+ if (d != null) {
+ res.setCrueCommentaire(d.getCommentaire());
+ }
res.setAnalyse(analyze);
return res;
}
@@ -256,15 +261,28 @@
* @param in
* @return le dao
*/
+ @SuppressWarnings("unchecked")
protected D readDao(final InputStream in, final CtuluAnalyze analyser, final CrueData dataLinked) {
analyser.setDefaultResourceBundle(IOMessages.RESOURCE_BUNDLE);
D newData = null;
try {
final XStream parser = initXmlParser(analyser, dataLinked.getCruePropertyDefinitionContainer());
- final BufferedReader contentRead = new BufferedReader(new InputStreamReader(in, "UTF-8"));
+ // The unicodeInputStream is used to eliminate the BOM bug from java:
+ UnicodeInputStream unicodeStream = new UnicodeInputStream(in, ENCODING);
+ unicodeStream.init();
+ final BufferedReader contentRead = new BufferedReader(new InputStreamReader(unicodeStream, ENCODING));
- newData = (D) parser.fromXML(contentRead);
+ newData = (D) parser.fromXML(contentRead);// we not that is a D object.
+ } catch (ConversionException conversionException) {
+ LOGGER.debug("io.unknown.bsalise", conversionException);
+ analyser.addFatalError("io.unknown.bsalise", StringUtils.substringBefore(conversionException.getShortMessage(),
+ " "));
+
+ } catch (CannotResolveClassException cannotResolveException) {
+ LOGGER.debug("io.unknown.bsalise", cannotResolveException);
+ analyser.addFatalError("io.unknown.bsalise", cannotResolveException.getMessage());
+
} catch (final Exception e) {
LOGGER.debug("io.xml.error", e);
analyser.addFatalError("io.xml.error", e.getMessage());
@@ -320,7 +338,7 @@
analyzer.setDesc(IOMessages.getString("read.file", f.getName()));
final D d = readDao(f, analyzer, dataLinked);
if (d != null) { return createResu(d, converter.convertDaoToMetier(d, dataLinked, analyzer), analyzer); }
- return null;
+ return createResu(null, null, analyzer);
}
@@ -335,7 +353,7 @@
analyzer.setDesc(IOMessages.getString("read.file", pathToResource));
final D d = readDao(pathToResource, analyzer, dataLinked);
if (d != null) { return createResu(d, converter.convertDaoToMetier(d, dataLinked, analyzer), analyzer); }
- CrueIOResu<M> res=new CrueIOResu<M>();
+ final CrueIOResu<M> res = new CrueIOResu<M>();
res.setAnalyse(analyzer);
return res;
@@ -348,13 +366,15 @@
this.isIndependant = isIndependant;
}
- protected boolean writeDAO(final File file, final D dao, final CtuluAnalyze analyser, CrueProperties props) {
+ protected boolean writeDAO(final File file, final D dao, final CtuluAnalyze analyser, final CrueProperties props) {
FileOutputStream out = null;
boolean ok = true;
try {
out = new FileOutputStream(file);
+ out.write(getBOM(ENCODING));
+ out.flush();
ok = writeDAO(out, dao, analyser, props);
- } catch (final FileNotFoundException e) {
+ } catch (final IOException e) {
FuLogCrue.error(e);
ok = false;
} finally {
@@ -364,16 +384,56 @@
}
+ public static byte[] getBOM(String enc) {
+ if (ENCODING.equals(enc)) {
+ byte[] bom = new byte[3];
+ bom[0] = (byte) 0xEF;
+ bom[1] = (byte) 0xBB;
+ bom[2] = (byte) 0xBF;
+ return bom;
+ // return new String(bom, enc);
+ } else if ("UTF-16BE".equals(enc)) {
+ byte[] bom = new byte[2];
+ bom[0] = (byte) 0xFE;
+ bom[1] = (byte) 0xFF;
+ return bom;
+ } else if ("UTF-16LE".equals(enc)) {
+ byte[] bom = new byte[2];
+ bom[0] = (byte) 0xFF;
+ bom[1] = (byte) 0xFE;
+ return bom;
+ } else if ("UTF-32BE".equals(enc)) {
+ byte[] bom = new byte[4];
+ bom[0] = (byte) 0x00;
+ bom[1] = (byte) 0x00;
+ bom[2] = (byte) 0xFE;
+ bom[3] = (byte) 0xFF;
+ return bom;
+ } else if ("UTF-32LE".equals(enc)) {
+ byte[] bom = new byte[4];
+ bom[0] = (byte) 0x00;
+ bom[1] = (byte) 0x00;
+ bom[2] = (byte) 0xFF;
+ bom[3] = (byte) 0xFE;
+ return bom;
+ } else {
+ return null;
+ }
+
+ }
+
/**
* @param out le flux de sortie
* @param dao le dao a persister
* @param analyser le receveur d'information
* @return
*/
- protected boolean writeDAO(final OutputStream out, final D dao, final CtuluAnalyze analyser, CrueProperties props) {
+ @SuppressWarnings("deprecation")
+ protected boolean writeDAO(final OutputStream out, final D dao, final CtuluAnalyze analyser,
+ final CrueProperties props) {
boolean isOk = true;
try {
- final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
+ final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, ENCODING));
writer.write(CrueHelper.ENTETE_XML + CtuluLibString.LINE_SEP);
if (dao.getCommentaire() == null) {
dao.setCommentaire(StringUtils.EMPTY);
@@ -437,7 +497,7 @@
* @return
*/
public final boolean writeXMLMetier(final CrueIOResu<M> metier, final File f, final CtuluAnalyze analyzer,
- CrueProperties props) {
+ final CrueProperties props) {
f.getParentFile().mkdirs();
analyzer.setDesc(IOMessages.getString("write.file", f.getName()));
analyzer.setDefaultResourceBundle(IOMessages.RESOURCE_BUNDLE);
@@ -457,7 +517,7 @@
* @return true si reussite
*/
public boolean writeXMLMetier(final CrueIOResu<M> metier, final OutputStream out, final CtuluAnalyze analyser,
- CrueProperties props) {
+ final CrueProperties props) {
analyser.setDesc(IOMessages.getString("write.file", getFileType().toString()));
analyser.setDefaultResourceBundle(IOMessages.RESOURCE_BUNDLE);
final D d = converter.convertMetierToDao(metier.getMetier(), analyser);
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dcsp/CrueConverterDCSP.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dcsp/CrueConverterDCSP.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/dcsp/CrueConverterDCSP.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -152,9 +152,7 @@
}
}
}
- if (res.DonCalcSansPrtCasiers.isEmpty()) {
- res.DonCalcSansPrtCasiers = null;
- }
+
}
/**
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P0.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P0.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P0.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -1,7 +1,6 @@
package org.fudaa.dodico.crue.io.drso;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -178,8 +177,7 @@
private List<BrancheAbstract> convertMetierToDaoBranche(final List<EMH> data, final CtuluAnalyze analyser) {
if (CollectionUtils.isEmpty(data)) {
- // CrueHelper.listEmpty("Branches", analyser);
- return Collections.emptyList();
+ return new ArrayList<BrancheAbstract>();//ne pas renvoyer une empty list pour xstream
}
final List<BrancheAbstract> listePersistante = new ArrayList<BrancheAbstract>();
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P1.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P1.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueConverterDRSO_V1P1.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -177,8 +177,7 @@
private List<BrancheAbstract> convertMetierToDaoBranche(final List<EMH> data, final CtuluAnalyze analyser) {
if (CollectionUtils.isEmpty(data)) {
- // CrueHelper.listEmpty("Branches", analyser);
- return Collections.emptyList();
+ return new ArrayList<BrancheAbstract>();//ne pas renvoyer une empty list pour xstream
}
final List<BrancheAbstract> listePersistante = new ArrayList<BrancheAbstract>();
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueDaoDRSO_V1P1.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueDaoDRSO_V1P1.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/drso/CrueDaoDRSO_V1P1.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -14,7 +14,6 @@
*
* @author Adrien Hadoux
*/
-@SuppressWarnings("PMD.VariableNamingConventions")
public class CrueDaoDRSO_V1P1 extends AbstractCrueDao {
/**
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/etu/CrueDaoStructureETU.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/etu/CrueDaoStructureETU.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/io/etu/CrueDaoStructureETU.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -130,6 +130,7 @@
public void initXmlParserForRun(final XStream xstream) {
xstream.alias("Run", Run.class);
xstream.alias("RunV9", Run.class);
+ xstream.omitField(Run.class, "Run-FichRuns");
xstream.useAttributeFor(Run.class, "Nom");
}
Modified: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidatorForCrue9Export.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidatorForCrue9Export.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/validation/ValidatorForCrue9Export.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -194,14 +194,12 @@
}
private boolean containsFiveLit(CatEMHSection section) {
- List<DonPrtGeoProfilSection> collectClass = EMHHelper.selectClass(section.getInfosEMH(),
+ List<DonPrtGeoProfilSection> sections = EMHHelper.selectClass(section.getInfosEMH(),
DonPrtGeoProfilSection.class);
- boolean res = false;
- for (DonPrtGeoProfilSection donPrtGeoProfilSection : collectClass) {
+ for (DonPrtGeoProfilSection donPrtGeoProfilSection : sections) {
if (donPrtGeoProfilSection.getNombreLitNumerote() != 5) { return false; }
- res = true;
}
- return false;
+ return true;
}
private void validateLitMineurName(DonPrtGeoProfilSection in) {
Modified: trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/io/ioMessages.properties
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/io/ioMessages.properties 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/resources/org/fudaa/dodico/crue/io/ioMessages.properties 2010-10-01 11:04:14 UTC (rev 5965)
@@ -137,7 +137,8 @@
io.unknownDataFromFile.error = {0}: Il n''existe pas de structure de donn\xE9e pour l''objet {1}
io.unknownEMH.error = {0}: Il n''existe pas de structure de donn\xE9e EMH pour l''objet {1}
io.unknownReference.error = Impossible de trouver {0} de r\xE9f\xE9rence {1}
-io.xml.error = Une erreur est survenue lors de l''analyse du fichier xml: {0}
+io.xml.error = Une erreur est survenue lors de l''analyse du fichier xml: {0}
+io.unknown.bsalise = Une incoh\xE9rence a \xE9t\xE9 d\xE9tect\xE9e: le fichier xml est valide mais les balises {0} ne sont pas support\xE9es par Fudaa-Crue
io.xml.validator.error = Line {0}: le fichier xml n''est pas valide. Message: {1}
io.dc.listSeuil.notConstant = EMHBrancheBarrageFilEau {0}: la liste des seuils ne contient pas des donn\xE9es constantes
Modified: trunk/soft/fudaa-crue/crue-server/src/main/resources/xsd/etu-1.0.0.xsd
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/resources/xsd/etu-1.0.0.xsd 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-server/src/main/resources/xsd/etu-1.0.0.xsd 2010-10-01 11:04:14 UTC (rev 5965)
@@ -219,11 +219,11 @@
<xs:complexType>
<xs:sequence>
<xs:element ref="Commentaire" />
+ <xs:element ref="Run-FichRuns" />
</xs:sequence>
<xs:attribute name="Nom" type="TypeForAttributeNom" use="required" />
</xs:complexType>
</xs:element>
-
<xs:element name="RunV9">
<xs:complexType>
<xs:sequence>
@@ -234,8 +234,43 @@
</xs:element>
+ <xs:element name="Run-FichRuns">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Modeles" type="TypeModelesRuns"
+ minOccurs="1" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="TypeModelesRuns">
+ <xs:sequence>
+ <xs:element name="Run-Modele" type="TypeModeleRun"
+ minOccurs="1" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TypeModeleRun">
+ <xs:sequence minOccurs="1" maxOccurs="1">
+ <xs:element ref="RPTR" />
+ <xs:element ref="RPTG" />
+ <xs:element ref="RPTI" />
+ <xs:element ref="RCAL" />
+
+ </xs:sequence>
+ <xs:attribute name="NomRef" type="TypeForAttributeNomRefDistant"
+ use="required" />
+ </xs:complexType>
+
+
+
+
+
+ <!--
+ REFERENCE <xs:complexType name="TypeReference"> <xs:attribute
+ name="NomRef" type="xs:string" /> </xs:complexType>
+ -->
+
<xs:complexType name="TypeListeReferencesFichierModele">
<xs:sequence>
<xs:element ref="OPTR" minOccurs="0" />
Modified: trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/builder/EMHManagerBuilder.java
===================================================================
--- trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/builder/EMHManagerBuilder.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/builder/EMHManagerBuilder.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -15,13 +15,13 @@
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
-import org.fudaa.ctulu.iterator.TickIterator;
import org.fudaa.dodico.crue.config.CrueProperties;
import org.fudaa.dodico.crue.io.common.CrueFileType;
import org.fudaa.dodico.crue.io.neuf.FCBSequentialReader.ResultatCalcul;
import org.fudaa.dodico.crue.io.neuf.FCBSequentialReader.ResultatCalculPasDeTemps;
import org.fudaa.dodico.crue.io.neuf.FCBValueObject.AbstractEntete;
import org.fudaa.dodico.crue.metier.emh.Calc;
+import org.fudaa.dodico.crue.metier.emh.CalcPseudoPermItem;
import org.fudaa.dodico.crue.metier.emh.CommentaireContainer;
import org.fudaa.dodico.crue.metier.emh.CommentaireItem;
import org.fudaa.dodico.crue.metier.emh.DonCLimM;
@@ -81,7 +81,7 @@
final Map.Entry entry = (Entry) it.next();
final String name = (String) entry.getKey();
if ("class".equals(name) || "resContainer".equals(name) || "type".equals(name) || "catType".equals(name)
- || name.equals(propToAvoid)) {
+ || name.equals(propToAvoid)|| ("value".equals(name) && parent instanceof CalcPseudoPermItem)) {
continue;
}
Object entryValue = entry.getValue();
@@ -232,7 +232,7 @@
if (!object.isActive()) {
toString = toString + " (non active)";
}
- child.add(new TreeNodeCleValeur(object.getNom(), toString));
+ child.add(new TreeNodeCleValeur(object.getValParamNom(), toString));
}
} else if (isAcceptedList) {
Modified: trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/explorer/CrueLauncher.java
===================================================================
--- trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/explorer/CrueLauncher.java 2010-09-30 15:26:05 UTC (rev 5964)
+++ trunk/soft/fudaa-crue/crue-ui/src/main/java/org/fudaa/fudaa/crue/explorer/CrueLauncher.java 2010-10-01 11:04:14 UTC (rev 5965)
@@ -69,8 +69,8 @@
infoCrue_.banner = new BuIcon(pathLogo);
// infoCrue_.logo = new BuIcon(pathLogo);
infoCrue_.name = "Fudaa-Crue";
- infoCrue_.version = "0.34";
- infoCrue_.date = "17-Septembre-2010";
+ infoCrue_.version = "0.35";
+ infoCrue_.date = "01-Octobre-2010";
infoCrue_.rights = "";
infoCrue_.contact = "fu...@ge...";
infoCrue_.license = "GPL2";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|