|
From: <de...@us...> - 2012-05-29 23:49:15
|
Revision: 7249
http://fudaa.svn.sourceforge.net/fudaa/?rev=7249&view=rev
Author: deniger
Date: 2012-05-29 23:49:08 +0000 (Tue, 29 May 2012)
Log Message:
-----------
Modified Paths:
--------------
trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java
trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java
trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java
trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java
Added Paths:
-----------
trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java
Added: trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java
===================================================================
--- trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java (rev 0)
+++ trunk/soft/fudaa-crue/crue-server/src/main/java/org/fudaa/dodico/crue/common/XtComparator.java 2012-05-29 23:49:08 UTC (rev 7249)
@@ -0,0 +1,14 @@
+package org.fudaa.dodico.crue.common;
+
+import org.fudaa.dodico.crue.config.CrueConfigMetier;
+
+/**
+ *
+ * @author deniger ( genesis)
+ */
+public class XtComparator extends DoubleComparator{
+
+ public XtComparator(CrueConfigMetier configMetier) {
+ super(configMetier.getEpsilon("xt"));
+ }
+}
Modified: trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java
===================================================================
--- trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java 2012-05-29 22:03:21 UTC (rev 7248)
+++ trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/SectionConfiguration.java 2012-05-29 23:49:08 UTC (rev 7249)
@@ -12,31 +12,32 @@
* @author deniger ( genesis)
*/
public class SectionConfiguration {
-
- TraceIconModel iconModel = new TraceIconModel(TraceIcon.CARRE_ARRONDI, 2, Color.LIGHT_GRAY);
+
+ TraceIconModel iconModel = new TraceIconModel(TraceIcon.CARRE_ARRONDI, 3, Color.BLUE);
LabelConfiguration labelConfiguration = new LabelConfiguration();
private final VisuConfiguration parent;
-
+
public SectionConfiguration(VisuConfiguration parent) {
labelConfiguration.alignment = SwingConstants.WEST;
iconModel.setTypeLigne(TraceLigne.LISSE);
iconModel.setEpaisseurLigne(1f);
+ iconModel.setBackgroundColor(Color.WHITE);
labelConfiguration.distance = 5;
this.parent = parent;
}
-
+
public LabelConfiguration getLabelConfiguration() {
return labelConfiguration;
}
-
+
public boolean isInactiveEMHVisible() {
return parent.isInactiveEMHVisible();
}
-
+
public int getDiameter() {
return iconModel.getTaille();
}
-
+
public void initTraceIcon(TraceIconModel _ligne, CatEMHSection section) {
_ligne.updateData(iconModel);
}
Modified: trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java
===================================================================
--- trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java 2012-05-29 22:03:21 UTC (rev 7248)
+++ trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/configuration/TraceConfiguration.java 2012-05-29 23:49:08 UTC (rev 7249)
@@ -2,7 +2,6 @@
import java.awt.Color;
import javax.swing.SwingConstants;
-import org.fudaa.dodico.crue.metier.emh.CatEMHSection;
import org.fudaa.ebli.trace.TraceIcon;
import org.fudaa.ebli.trace.TraceIconModel;
import org.fudaa.ebli.trace.TraceLigne;
@@ -15,27 +14,42 @@
public class TraceConfiguration {
TraceLigneModel lineModel = new TraceLigneModel(TraceLigne.LISSE, 1.5f, Color.BLACK);
- TraceIconModel iconModel = new TraceIconModel(TraceIcon.CARRE_PLEIN, 4, Color.BLACK);
- LabelConfiguration labelConfiguration = new LabelConfiguration();
+ TraceIconModel iconModel = new TraceIconModel(TraceIcon.CROIX, 4, Color.RED);
+ LabelConfiguration litLabelConfiguration = new LabelConfiguration();
+ LabelConfiguration sectionLabelConfiguration = new LabelConfiguration();
private final VisuConfiguration parent;
boolean profilVueDeAmont = false;
+ private int angleInDegree = 30;
+ //SwingConstants.RIGHT ou LEFT ou CENTER.
+ int sectionLabelPosition = SwingConstants.RIGHT;
public boolean isProfilVueDeAmont() {
return profilVueDeAmont;
}
public TraceConfiguration(VisuConfiguration parent) {
- labelConfiguration.alignment = SwingConstants.WEST;
+ litLabelConfiguration.alignment = SwingConstants.NORTH;
+ sectionLabelConfiguration.alignment = SwingConstants.EAST;
iconModel.setTypeLigne(TraceLigne.LISSE);
iconModel.setEpaisseurLigne(1f);
- labelConfiguration.distance = 5;
+ litLabelConfiguration.distance = 5;
this.parent = parent;
}
- public LabelConfiguration getLabelConfiguration() {
- return labelConfiguration;
+ public int getSectionLabelPosition() {
+ return sectionLabelPosition;
}
+
+ public LabelConfiguration getLitLabelConfiguration() {
+ return litLabelConfiguration;
+ }
+ public LabelConfiguration getSectionLabelConfiguration() {
+ return sectionLabelConfiguration;
+ }
+
+
+
public void initTraceLigne(TraceLigneModel _ligne, int _idxPoly) {
_ligne.updateData(lineModel);
}
@@ -44,14 +58,37 @@
return parent.isInactiveEMHVisible();
}
- public void initTraceIcon(TraceIconModel icon, CatEMHSection section) {
+ public void initTraceIcon(TraceIconModel icon, int idxBranche) {
icon.updateData(iconModel);
}
/**
* @return angle en radians.
*/
- public double getAngle() {
- return Math.toRadians(30);
+ public double getAngleInRadians() {
+ return Math.toRadians(angleInDegree);
}
+ boolean litLabelsPainted = true;
+ boolean sectionLabelPainted = true;
+
+ public boolean isLitLabelsPainted() {
+ return litLabelsPainted;
+ }
+
+ public void setLitLabelsPainted(boolean litLabelsPainted) {
+ this.litLabelsPainted = litLabelsPainted;
+ }
+
+ public void setSectionLabelPainted(boolean sectionLabelPainted) {
+ this.sectionLabelPainted = sectionLabelPainted;
+ }
+
+ public boolean isSectionLabelPainted() {
+ return sectionLabelPainted;
+ }
+
+ public void setAngleInDegree(int angleInDegree) {
+ this.angleInDegree = angleInDegree;
+ }
+
}
Modified: trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java
===================================================================
--- trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java 2012-05-29 22:03:21 UTC (rev 7248)
+++ trunk/soft/fudaa-crue/ui-planimetry/src/main/java/org/fudaa/fudaa/crue/planimetry/layer/PlanimetryTraceLayer.java 2012-05-29 23:49:08 UTC (rev 7249)
@@ -1,24 +1,31 @@
package org.fudaa.fudaa.crue.planimetry.layer;
import com.vividsolutions.jts.geom.Coordinate;
+import com.vividsolutions.jts.geom.CoordinateSequence;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.LinearRing;
import gnu.trove.TObjectDoubleHashMap;
import gnu.trove.TObjectDoubleIterator;
import java.awt.Graphics2D;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.TreeMap;
+import javax.swing.SwingConstants;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
import org.fudaa.ctulu.CtuluListSelection;
import org.fudaa.ctulu.gis.GISGeometryFactory;
import org.fudaa.ctulu.gis.GISPolyligne;
import org.fudaa.ctulu.gis.GisAbscCurviligneToCoordinate;
+import org.fudaa.dodico.crue.common.XtComparator;
import org.fudaa.dodico.crue.config.CrueConfigMetier;
import org.fudaa.dodico.crue.metier.emh.CatEMHBranche;
import org.fudaa.dodico.crue.metier.emh.DonPrtGeo;
import org.fudaa.dodico.crue.metier.emh.DonPrtGeoProfilSection;
-import org.fudaa.dodico.crue.metier.emh.DonPrtGeoSectionIdem;
import org.fudaa.dodico.crue.metier.emh.LitNumerote;
import org.fudaa.dodico.crue.metier.emh.PtProfil;
import org.fudaa.dodico.crue.metier.emh.RelationEMHSectionDansBranche;
@@ -29,8 +36,10 @@
import org.fudaa.ebli.geometrie.GrBoite;
import org.fudaa.ebli.geometrie.GrMorphisme;
import org.fudaa.ebli.geometrie.GrPoint;
+import org.fudaa.ebli.trace.TraceIcon;
import org.fudaa.ebli.trace.TraceLigne;
import org.fudaa.fudaa.crue.planimetry.LayerBrancheController;
+import org.fudaa.fudaa.crue.planimetry.configuration.TraceConfiguration;
import org.fudaa.fudaa.crue.planimetry.configuration.VisuConfiguration;
/**
@@ -83,7 +92,6 @@
TraceLigne traceLigne = new TraceLigne();
GrPoint pt = new GrPoint();
GrPoint pt2 = new GrPoint();
- Set<Long> uidDone = new HashSet<Long>();
for (int i = nb - 1; i >= 0; i--) {
if (!brancheModel.isGeometryVisible(i)) {
continue;
@@ -95,6 +103,8 @@
GISPolyligne brancheGis = modelController.getBrancheGis(i);
TObjectDoubleHashMap<RelationEMHSectionDansBranche> ratiosBySection = brancheModel.getRatio(i, branche, realDistance,
crueConfigMetier);
+ XtComparator xtComparator = new XtComparator(modelController.getCrueConfigMetier());
+ Coordinate intersectionBrancheSection = null;
for (TObjectDoubleIterator it = ratiosBySection.iterator(); it.hasNext();) {
it.advance();
double ratio = it.value();
@@ -115,32 +125,111 @@
}
GisAbscCurviligneToCoordinate.find(brancheGis, ratio, tmpResult);
pt.initialiseAvec(tmpResult.getCoordinate());
- if (!_clipReel.contientXY(pt)) {
- continue;
+ intersectionBrancheSection = new Coordinate(tmpResult.getCoordinate());
+ GISPolyligne traceGIS = createLine(profilSection, brancheGis, tmpResult);
+ if (isAllOut(traceGIS, _clipReel) && !_clipReel.contientXY(intersectionBrancheSection.x, intersectionBrancheSection.y)) {
+ return;
}
- GISPolyligne createLine = createLine(profilSection, brancheGis, tmpResult);
- pt.x_ = createLine.getCoordinateSequence().getX(0);
- pt.y_ = createLine.getCoordinateSequence().getY(0);
+ pt.x_ = traceGIS.getCoordinateSequence().getX(0);
+ pt.y_ = traceGIS.getCoordinateSequence().getY(0);
pt.autoApplique(_versEcran);
- visuConfiguration.getTraceConfiguration().initTraceLigne(traceLigne.getModel(), i);
- for (int j = 1; j < createLine.getCoordinateSequence().size(); j++) {
- pt2.x_ = createLine.getCoordinateSequence().getX(j);
- pt2.y_ = createLine.getCoordinateSequence().getY(j);
+ final TraceConfiguration traceConfiguration = visuConfiguration.getTraceConfiguration();
+ traceConfiguration.initTraceLigne(traceLigne.getModel(), i);
+ for (int j = 1; j < traceGIS.getCoordinateSequence().size(); j++) {
+ pt2.x_ = traceGIS.getCoordinateSequence().getX(j);
+ pt2.y_ = traceGIS.getCoordinateSequence().getY(j);
pt2.autoApplique(_versEcran);
traceLigne.dessineTrait(_g, pt.x_, pt.y_, pt2.x_, pt2.y_);
pt.initialiseAvec(pt2);
}
+ //on dessine les limite de lits
+ double xmin = profilSection.getPtProfil().get(0).getXt();
+ double length = (profilSection.getPtProfil().get(profilSection.getPtProfilSize() - 1)).getXt();
+ TraceIcon icon = new TraceIcon();
+ traceConfiguration.initTraceIcon(icon.getModel(), i);
+ if (icon.getTaille() > 0 && icon.getType() != TraceIcon.RIEN) {
+ List<LitNumerote> litNumerotes = profilSection.getLitNumerote();
+ for (LitNumerote litNumerote : litNumerotes) {
+ double x = litNumerote.getLimDeb().getXt();
+ GisAbscCurviligneToCoordinate.find(traceGIS, (x - xmin) / length, tmpResult);
+ if (tmpResult.isFound()) {
+ pt.initialiseAvec(tmpResult.getCoordinate());
+ if (_clipReel.contientXY(pt)) {
+ pt.autoApplique(_versEcran);
+ icon.paintIconCentre(_g, pt.x_, pt.y_);
+ }
+ }
+ x = litNumerote.getLimFin().getXt();
+ GisAbscCurviligneToCoordinate.find(traceGIS, (x - xmin) / length, tmpResult);
+ if (tmpResult.isFound()) {
+ pt.initialiseAvec(tmpResult.getCoordinate());
+ if (_clipReel.contientXY(pt)) {
+ pt.autoApplique(_versEcran);
+ icon.paintIconCentre(_g, pt.x_, pt.y_);
+ }
+ }
+
+ }
+ }
+ if (traceConfiguration.isLitLabelsPainted()) {
+ List<LitNumerote> litNumerotes = profilSection.getLitNumerote();
+ Map<Double, List<String>> nameByXt = new TreeMap<Double, List<String>>(xtComparator);
+ for (LitNumerote litNumerote : litNumerotes) {
+ if (litNumerote.getNomLit() == null || litNumerote.getNomLit().getNom() == null) {
+ continue;
+ }
+ Double xMiddle = (litNumerote.getLimDeb().getXt() + litNumerote.getLimFin().getXt()) / 2;
+ List<String> names = nameByXt.get(xMiddle);
+ if (names == null) {
+ names = new ArrayList<String>();
+ nameByXt.put(xMiddle, names);
+ }
+ names.add(litNumerote.getNomLit().getNom());
+ }
+ for (Map.Entry<Double, List<String>> entry : nameByXt.entrySet()) {
+ Double xLabel = entry.getKey();
+ GisAbscCurviligneToCoordinate.find(traceGIS, (xLabel - xmin) / length, tmpResult);
+ if (tmpResult.isFound()) {
+ List<String> list = entry.getValue();
+ String nom = null;
+ if (list.size() == 1) {
+ nom = list.get(0);
+ } else {
+ Collections.sort(list);
+ nom = StringUtils.join(list, '\n');
+ }
+ pt.initialiseAvec(tmpResult.getCoordinate());
+ if (_clipReel.contientXY(pt)) {
+ pt.autoApplique(_versEcran);
+ labelPainter.paintLabels(_g, pt, nom, traceConfiguration.getLitLabelConfiguration());
+ }
+ }
+
+ }
+ }
+ if (traceConfiguration.isSectionLabelPainted()) {
+ int position = traceConfiguration.getSectionLabelPosition();
+ pt.initialiseAvec(intersectionBrancheSection);
+ if (SwingConstants.LEFT == position) {
+ int nbPt = traceGIS.getNumPoints();
+ pt.x_ = traceGIS.getCoordinateN(nbPt).x;
+ pt.y_ = traceGIS.getCoordinateN(nbPt).y;
+ } else if (SwingConstants.RIGHT == position) {
+ pt.x_ = traceGIS.getCoordinateN(0).x;
+ pt.y_ = traceGIS.getCoordinateN(0).y;
+ }
+ if (_clipReel.contientXY(pt)) {
+ pt.autoApplique(_versEcran);
+ labelPainter.paintLabels(_g, pt, profilSection.getNom(), traceConfiguration.getSectionLabelConfiguration());
+ }
+ }
+
}
}
}
protected GISPolyligne createLine(DonPrtGeoProfilSection profilSection, GISPolyligne brancheGis,
GisAbscCurviligneToCoordinate.Result tmpResult) {
-// if (profilSection == null) {
-// DonPrtGeoSectionIdem sectionIdem = (DonPrtGeoSectionIdem) EMHHelper.selectClass(dptg, DonPrtGeoSectionIdem.class);
-// //TODO a voir ??
-//// sectionIdem.get
-// }
if (profilSection == null) {
return null;
}
@@ -184,13 +273,13 @@
double norm = amont.distance(aval);
double vx = aval.x - amont.x;
double vy = aval.y - amont.y;
- double vxTrace = (-vy) / norm;
- double vyTrace = (vx) / norm;
+ double vxTrace = (vy) / norm;
+ double vyTrace = -(vx) / norm;
if (visuConfiguration.getTraceConfiguration().isProfilVueDeAmont()) {
vxTrace = -vxTrace;
vyTrace = -vyTrace;
}
- double xAxeHydraulique = (maxMineur - minMineur) / 2;//retrouver la notion d'axe hydraulique...
+ double xAxeHydraulique = (maxMineur + minMineur) / 2;//retrouver la notion d'axe hydraulique...
final Coordinate accrochePt = tmpResult.getCoordinate();
Coordinate rd = new Coordinate();
Coordinate rdMineur = new Coordinate();
@@ -200,8 +289,28 @@
compute(accrochePt, vxTrace, vyTrace, (xAxeHydraulique - minMineur), rdMineur);
compute(accrochePt, vxTrace, vyTrace, (xAxeHydraulique - xmax), rg);
compute(accrochePt, vxTrace, vyTrace, (xAxeHydraulique - maxMineur), rgMineur);
- double angle = visuConfiguration.getTraceConfiguration().getAngle();
-
+ double angle = visuConfiguration.getTraceConfiguration().getAngleInRadians();
+ if (angle != 0) {
+ final double sinAlpha = Math.sin(angle);
+ final double cosAlpha = Math.cos(angle);
+ if (!rd.equals2D(rdMineur)) {
+ double vxMajeur = rd.x - rdMineur.x;
+ double vyMajeur = rd.y - rdMineur.y;
+ double vxAfterRotation = vxMajeur * cosAlpha - vyMajeur * sinAlpha;
+ double vyAfterRotation = vxMajeur * sinAlpha - vyMajeur * cosAlpha;
+ rd.x = rdMineur.x + vxAfterRotation;
+ rd.y = rdMineur.y + vyAfterRotation;
+ }
+ if (!rg.equals2D(rgMineur)) {
+ double vxMajeur = rg.x - rgMineur.x;
+ double vyMajeur = rg.y - rgMineur.y;
+ double vxAfterRotation = vxMajeur * cosAlpha - vyMajeur * sinAlpha;
+ double vyAfterRotation = vxMajeur * sinAlpha - vyMajeur * cosAlpha;
+ rg.x = rgMineur.x + vxAfterRotation;
+ rg.y = rgMineur.y + vyAfterRotation;
+ }
+ }
+
return (GISPolyligne) GISGeometryFactory.INSTANCE.createLineString(
new Coordinate[]{rd, rdMineur, rgMineur, rg});
}
@@ -235,4 +344,14 @@
@Override
public void paintSelection(Graphics2D _g, ZSelectionTrace _trace, GrMorphisme _versEcran, GrBoite _clipReel) {
}
+
+ private boolean isAllOut(GISPolyligne traceGIS, GrBoite _clipReel) {
+ CoordinateSequence coordinateSequence = traceGIS.getCoordinateSequence();
+ for (int i = coordinateSequence.size() - 1; i >= 0; i--) {
+ if (_clipReel.contientXY(coordinateSequence.getX(i), coordinateSequence.getY(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
}
Modified: trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java
===================================================================
--- trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java 2012-05-29 22:03:21 UTC (rev 7248)
+++ trunk/soft/fudaa-crue/ui-planimetry/src/test/java/org/fudaa/fudaa/crue/planimetry/TestScenarioBuilder.java 2012-05-29 23:49:08 UTC (rev 7249)
@@ -31,7 +31,7 @@
*/
@Category(org.fudaa.fudaa.crue.common.TestUI.class)
public class TestScenarioBuilder {
-
+
public static EMHScenario buildDefaultScenario() {
EMHScenario scenario = new EMHScenario(TestCrueConfigMetierLoaderDefault.DEFAULT, new CrueOptions());
EMHModeleBase modele = new EMHModeleBase(TestCrueConfigMetierLoaderDefault.DEFAULT);
@@ -64,9 +64,10 @@
addBranche("Br_5", nd6, nd7, 300, sousModele, 20);
return scenario;
}
-
+
protected static void addSection(EMHSectionProfil section) {
DonPrtGeoProfilSection profil = new DonPrtGeoProfilSection();
+ profil.setNom("Prof_" + section.getNom());
section.addInfosEMH(profil);
List<PtProfil> profils = new ArrayList<PtProfil>();
List<LitNumerote> litNumerotes = new ArrayList<LitNumerote>();
@@ -89,7 +90,7 @@
profil.setPtProfil(profils);
profil.setLitNumerote(litNumerotes);
}
-
+
protected static LitNumerote create(List<PtProfil> profils, int idxDeb, int idxFin, boolean mineure, String nom) {
LitNumerote stoDroit = new LitNumerote();
stoDroit.setLimDeb(profils.get(idxDeb));
@@ -97,9 +98,9 @@
stoDroit.setIsLitMineur(mineure);
stoDroit.setNomLit(new LitNomme(nom));
return stoDroit;
-
+
}
-
+
private static void addBranche(final String brName, CatEMHNoeud nd1, CatEMHNoeud nd2, double length, EMHSousModele sousModele,
int nbSection) {
CatEMHBranche br = new EMHBranchePdc(brName);
@@ -109,7 +110,7 @@
addSections(sousModele, br, length, nbSection);
EMHRelationFactory.addRelationContientEMH(sousModele, br);
}
-
+
private static void addSections(EMHSousModele sousModele, CatEMHBranche br, double length, int nbSection) {
EMHSectionSansGeometrie sectionAmont = new EMHSectionSansGeometrie("St_" + br.getNom() + "_Amont");
EMHSectionSansGeometrie sectionAval = new EMHSectionSansGeometrie("St_" + br.getNom() + "_Aval");
@@ -146,13 +147,13 @@
}
br.addListeSections(sections);
}
-
+
private static CatEMHNoeud createNode(EMHNoeudFactory fac, final String noeudName, EMHSousModele sousModele) {
CatEMHNoeud nd1 = fac.getCatEMHNoeud(noeudName);
EMHRelationFactory.addRelationContientEMH(sousModele, nd1);
return nd1;
}
-
+
private static CatEMHCasier createCasier(CatEMHNoeud noeud, EMHSousModele sousModele) {
EMHCasierMNT casier = new EMHCasierMNT("Ca_" + noeud.getNom());
casier.setNoeud(noeud);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|