From: <emm...@us...> - 2008-10-16 14:01:12
|
Revision: 4073 http://fudaa.svn.sourceforge.net/fudaa/?rev=4073&view=rev Author: emmanuel_martin Date: 2008-10-16 14:01:02 +0000 (Thu, 16 Oct 2008) Log Message: ----------- am?\195?\169liorations et corrections de bugs dans le wizard du modeleur. Modified Paths: -------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluLibArray.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeBoolean.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISGeometryFactory.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISLib.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/test/org/fudaa/ctulu/gis/TestGISDataModelAttributAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/dunes/io/DunesGEOWriter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/reflux/io/ReflucadBERReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/reflux/io/ReflucadPROReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/reflux/io/ReflucadSEMReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/rubar/io/RubarStReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/telemac/io/SerafinNewReaderInfo.java branches/FudaaModeleur_TC1Bis/fudaa_devel/dodico/src/org/fudaa/dodico/telemac/io/SinusxReader.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImport.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/modeleur/MdlWizardImportStepDestination.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/FSigExportImportAttributesMapper.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/layer/FSigLayerExporter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoadResult.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderCsv.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderGIS.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderGrid.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderInp.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderReflucadBER.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderReflucadPRO.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderReflucadSEM.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRefluxRefondeResult.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarCox.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarInx.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarSem.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderRubarSt.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderSerafin.java branches/FudaaModeleur_TC1Bis/fudaa_devel/fudaa/src/org/fudaa/fudaa/sig/wizard/FSigFileLoaderSinusX.java Added Paths: ----------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeSubstitutionAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligneAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointToMultiPointAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPolygoneToMultiPointAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPolyligneToMultiPointAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPolyligneToPolygoneAdapter.java Removed Paths: ------------- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributSubstitution.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligne.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPolygoneToMultiPoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPolyligneToMultiPoint.java branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPolyligneToPolygone.java Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluLibArray.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluLibArray.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/CtuluLibArray.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -477,7 +477,7 @@ * * @param _array le tableau a parcourir * @param _objectToFound l'entier cherche - * @return l'index de l'objet dans le tableau. null si non trouve + * @return l'index de l'objet dans le tableau. -1 si non trouve */ public static int findObjectEgalEgal(final Object[] _array, final Object _objectToFound) { if ((_array == null) || (_objectToFound == null)) { Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeBoolean.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeBoolean.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeBoolean.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -56,6 +56,10 @@ public GISAttributeBoolean(final String _name) { super(CtuluValueEditorDefaults.STRING_EDITOR, _name); } + + public GISAttributeBoolean(final String _name, final boolean _isAtomic) { + super(CtuluValueEditorDefaults.STRING_EDITOR, _name, _isAtomic); + } public final Class getDataClass() { return Boolean.class; Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISAttributeConstants.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -91,6 +91,21 @@ return "ATTRIBUTE_ETAT_GEOM"; } + protected Object createGlobalValues(Object _initValues) { + if (_initValues instanceof Object[]) { + // Si au moins une des valeurs est "modifi\xE9", on retourne "modifi\xE9". + boolean modifie=false; + int i=-1; + while (!modifie&&++i<((Object[])_initValues).length) + modifie=((Object[])_initValues)[i]==ATT_VAL_ETAT_MODI; + if (modifie) + _initValues=ATT_VAL_ETAT_MODI; + else + _initValues=ATT_VAL_ETAT_ORIG; + } + return super.createGlobalValues(_initValues); + } + public boolean isEditable() { return true; } Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributAdapter.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributAdapter.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -1,227 +0,0 @@ -/* - * @creation 7 oct. 2008 - * @modification $Date:$ - * @license GNU General Public License 2 - * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.ctulu.gis; - -import java.util.ArrayList; -import java.util.List; - -import org.fudaa.ctulu.CtuluLibArray; -import org.fudaa.ctulu.ProgressionInterface; - -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; - -/** - * Cet Adapter permet l'ajout d'attributs au DataModel. - * @author Emmanuel MARTIN - * @version $Id$ - */ -public class GISDataModelAttributAdapter implements GISDataModel{ - - // Le model adapt\xE9 - private GISDataModel dataModel_; - // Les nouveaux attributs - private List<GISAttributeInterface> newAttr_; - private List<Object[]> newValues_; - - public GISDataModelAttributAdapter(GISDataModel _dataModel){ - dataModel_ = _dataModel; - newAttr_ = new ArrayList<GISAttributeInterface>(1); - newValues_ = new ArrayList<Object[]>(1); - } - - /** - * Ajout un attribut pour tout les \xE9l\xE9ments si cet attribut n'existe pas d\xE9j\xE0. - * L'atomicit\xE9 (ou la globalit\xE9) de l'attribut est respect\xE9. - * @param _attr l'attribut a ajouter - * @param _value une valeur unique qui sera dupliquer pour toutes les g\xE9om\xE9tries - * @return 0 si l'attribut existe d\xE9j\xE0 (il n'est pas remplac\xE9) - * -2 si _attr ou _value sont null - */ - public int addAttribut(GISAttributeInterface _attr, Object _value){ - if(_attr==null||_value==null) - return -2; - if (dataModel_.getIndiceOf(_attr)==-1 && !newAttr_.contains(_attr)) { - newAttr_.add(_attr); - // Attribut atomique - if (_attr.isAtomicValue()) { - Object[] tmp=new Object[dataModel_.getNumGeometries()]; - for (int i=0; i<tmp.length; i++) - tmp[i]=_attr.createDataForGeom(_value, dataModel_.getGeometry(i).getNumPoints()); - newValues_.add(tmp); - } - // Attribut global - else { - Object[] tmp=new Object[dataModel_.getNumGeometries()]; - for (int i=0; i<tmp.length; i++) - tmp[i]=_value; - newValues_.add(tmp); - } - return 1; - } - else - return 0; - } - - /** - * Ajout un attribut pour tout les \xE9l\xE9ments si cet attribut n'existe pas d\xE9j\xE0. - * si _attr est un attribut atomique, chaque valeur sera dupliqu\xE9 pour - * chaque sommet de la g\xE9om\xE9trie. - * @param _attr l'attribut a ajouter - * @param _values une valeur pour chaque g\xE9om\xE9trie. - * @return 0 si l'attribut existe d\xE9j\xE0 (il n'est pas remplac\xE9) - * -1 en cas de tableau _values de mauvaise taille - * -2 si _attr ou _values sont null - */ - public int addAttribut(GISAttributeInterface _attr, Object[] _values){ - if(_attr==null||_values==null) - return -2; - if(dataModel_.getIndiceOf(_attr) == -1 && !newAttr_.contains(_attr)){ - if(_values.length != dataModel_.getNumGeometries()) - return -1; - // Attribut atomique - if (_attr.isAtomicValue()) { - Object[] tmp=new Object[dataModel_.getNumGeometries()]; - for (int i=0; i<tmp.length; i++) - tmp[i]=_attr.createDataForGeom(_values[i], dataModel_.getGeometry(i).getNumPoints()); - newAttr_.add(_attr); - newValues_.add(tmp); - } - // Attribut global - else { - newAttr_.add(_attr); - newValues_.add(_values); - } - return 1; - } - else - return 0; - } - - /** - * Ajout un attribut pour tout les \xE9l\xE9ments si cet attribut n'existe pas d\xE9j\xE0. - * Cette m\xE9thode n'est d\xE9finie que pour les attributs atomiques. - * @param _attr l'attribut a ajouter - * @param _values une valeur pour chaque sommet de chaque g\xE9om\xE9trie. - * @return 0 si l'attribut existe d\xE9j\xE0 (il n'est pas remplac\xE9) - * -1 en cas de tableau _values de mauvaise taille - * -2 si _attr ou _values sont null - * -3 si l'attribut n'est pas atomique - */ - public int addAttribut(GISAttributeInterface _attr, Object[][] _values){ - if(_attr==null||_values==null) - return -2; - if (_attr.isAtomicValue()) - if (dataModel_.getIndiceOf(_attr)==-1 && !newAttr_.contains(_attr)) { - if (_values.length!=dataModel_.getNumGeometries()) - return -1; - // Attribut atomique - Object[] tmp=new Object[dataModel_.getNumGeometries()]; - for (int i=0; i<tmp.length; i++){ - if(_values[i].length != dataModel_.getGeometry(i).getNumPoints()) - return -1; - tmp[i]=_attr.createDataForGeom(_values[i], _values[i].length); - } - newAttr_.add(_attr); - newValues_.add(tmp); - return 1; - } - else - return 0; - else - return -3; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getAttribute(int) - */ - public GISAttributeInterface getAttribute(int att) { - if(att<0) - return null; - if (dataModel_.getNbAttributes() > att) - return dataModel_.getAttribute(att); - else if(newAttr_.size() > att - dataModel_.getNbAttributes()) - return newAttr_.get(att - dataModel_.getNbAttributes()); - else return null; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getDoubleValue(int, int) - */ - public double getDoubleValue(int att, int geom) { - if(att>=0&&geom>=0){ - if (dataModel_.getNbAttributes() > att) - return dataModel_.getDoubleValue(att, geom); - else if(newAttr_.size() > att - dataModel_.getNbAttributes()) - return (Double)newValues_.get(att)[geom]; - else return 0; - } - return 0; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getEnvelopeInternal() - */ - public Envelope getEnvelopeInternal() { - return dataModel_.getEnvelopeInternal(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getGeometry(int) - */ - public Geometry getGeometry(int geom) { - if(geom<0||geom>=getNumGeometries()) - return null; - return dataModel_.getGeometry(geom); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getIndiceOf(org.fudaa.ctulu.gis.GISAttributeInterface) - */ - public int getIndiceOf(GISAttributeInterface _att) { - if(dataModel_.getIndiceOf(_att) != -1) - return dataModel_.getIndiceOf(_att); - else if(CtuluLibArray.findObjectEgalEgal(newAttr_, _att)!=-1) - return dataModel_.getNbAttributes()+CtuluLibArray.findObjectEgalEgal(newAttr_, _att); - else return -1; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getNbAttributes() - */ - public int getNbAttributes() { - return dataModel_.getNbAttributes()+newAttr_.size(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getNumGeometries() - */ - public int getNumGeometries() { - return dataModel_.getNumGeometries(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getValue(int, int) - */ - public Object getValue(int att, int geom) { - if (att<0||geom<0) - return null; - if (dataModel_.getNbAttributes()>att&&geom<dataModel_.getNumGeometries()) - return dataModel_.getValue(att, geom); - else if (newAttr_.size()>att-dataModel_.getNbAttributes()&&geom<dataModel_.getNumGeometries()) - return newValues_.get(att-dataModel_.getNbAttributes())[geom]; - return null; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#preload(org.fudaa.ctulu.gis.GISAttributeInterface[], org.fudaa.ctulu.ProgressionInterface) - */ - public void preload(GISAttributeInterface[] _att, ProgressionInterface _prog) { - dataModel_.preload(_att, _prog); - } -} Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributSubstitution.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributSubstitution.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributSubstitution.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -1,196 +0,0 @@ -/* - * @creation 14 oct. 2008 - * @modification $Date:$ - * @license GNU General Public License 2 - * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.ctulu.gis; - -import java.util.HashMap; -import java.util.Map; - -import org.fudaa.ctulu.ProgressionInterface; - -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; - -/** - * Cette adapter permet de substituer des attributs existant par d'autre. - * Par exemple, me model poss\xE8de deux attributs : V1 (type double) et Z - * (type double), l'adapter permet de substituer V& \xE0 Z. Ainsi toutes les - * requ\xEAtes sur Z seront redirig\xE9es sur V1. - * Les deux attributs doivent pr\xE9alablement exist\xE9s, avoir des types de valeur - * identique et \xEAtre de m\xEAme niveau (global ou atomique). - * A not\xE9 que se ne sont que les valeurs qui sont substituer. En cas d'appelle - * \xE0 la m\xE9thod getAttribut sur l'attribut substituer, sont GISAttributInterface - * sera toujours renvoy\xE9 comme avant. - * @author Emmanuel MARTIN - * @version $Id:$ - */ -public class GISDataModelAttributSubstitution implements GISDataModel { - - private final GISDataModel model_; - /** - * Table contenant les substitutions d'attributs \xE0 faire sur le model. - * Pour des raisons de performence, la substitution est m\xE9moris\xE9 par - * l'index des attributs. - */ - private final HashMap<Integer, Integer> substitutionTable_; - - /** - * Cette adapter permet de substituer des attributs existant par d'autre. Par - * exemple, me model poss\xE8de deux attributs : V1 (type double) et Z (type - * double), l'adapter permet de substituer V1 \xE0 Z. Ainsi toutes les requ\xEAtes - * sur Z seront redirig\xE9es sur V1. Les deux attributs doivent pr\xE9alablement - * exist\xE9s et avoir des types de valeur identique. Si les attributs sont de - * niveau (global ou atomique) diff\xE9rent, l'adapter converti les valeurs - * en utilisant la m\xE9thod createDataForGeom. - * A not\xE9 que se ne sont que les valeurs qui sont substituer. En - * cas d'appelle \xE0 la m\xE9thod getAttribut sur l'attribut substituer, sont - * GISAttributInterface sera toujours renvoy\xE9 comme avant. - * - * - * @param _model - * le model \xE0 adaoter - * @param _substitutionTable - * cette table contient les substitutions \xE0 faire. Une substitution - * est un tableau \xE0 deux \xE9l\xE9ments : le premier l'attribut a - * substituer et le second l'attribut par lequel le substituer. - * _substitutionTable est donc un tableau de tableau \xE0 deux \xE9l\xE9ments. - */ - public GISDataModelAttributSubstitution(GISDataModel _model, GISAttributeInterface[][] _substitutionTable){ - if(_substitutionTable==null||_model==null) - throw new IllegalArgumentException("_substitutionTable et _model ne doivent pas \xEAtre null."); - model_=_model; - substitutionTable_=new HashMap<Integer, Integer>(); - // Verification des substitutions - for(int i=0;i<_substitutionTable.length;i++){ - if(_substitutionTable[i].length!=2) - throw new IllegalArgumentException("Une substitution est un tableau \xE0 deux \xE9l\xE9ments, ni plus, ni moins."); - if(_substitutionTable[i][0].getDataClass()!=_substitutionTable[i][1].getDataClass()) - throw new IllegalArgumentException("Les deux substitutions doivent avoir des valeurs de m\xEAme type."); - if(model_.getIndiceOf(_substitutionTable[i][0])==-1) - throw new IllegalArgumentException(_substitutionTable[i][0].getID() + "n'est pas dans le model."); - if(model_.getIndiceOf(_substitutionTable[i][1])==-1) - throw new IllegalArgumentException(_substitutionTable[i][1].getID() + "n'est pas dans le model."); - // Ajout de la substitution - substitutionTable_.put(model_.getIndiceOf(_substitutionTable[i][0]), model_.getIndiceOf(_substitutionTable[i][1])); - } - } - - /** - * Cette adapter permet de substituer des attributs existant par d'autre. Par - * exemple, me model poss\xE8de deux attributs : V1 (type double) et Z (type - * double), l'adapter permet de substituer V& \xE0 Z. Ainsi toutes les requ\xEAtes - * sur Z seront redirig\xE9es sur V1. Les deux attributs doivent pr\xE9alablement - * exist\xE9s, avoir des types de valeur identique et \xEAtre de m\xEAme niveau (global - * ou atomique). - * A not\xE9 que se ne sont que les valeurs qui sont substituer. En - * cas d'appelle \xE0 la m\xE9thod getAttribut sur l'attribut substituer, sont - * GISAttributInterface sera toujours renvoy\xE9 comme avant. - * - * - * @param _model - * le model \xE0 adaoter - * @param _substitutionTable - * cette map contient les substitutions \xE0 faire. Le premier l'attribut - * a substituer et le second l'attribut par lequel le substituer. - */ - public GISDataModelAttributSubstitution(GISDataModel _model, Map<GISAttributeInterface, GISAttributeInterface> _substitutionTable){ - if(_substitutionTable==null||_model==null) - throw new IllegalArgumentException("_substitutionTable et _model ne doivent pas \xEAtre null."); - model_=_model; - substitutionTable_=new HashMap<Integer, Integer>(); - // Verification des substitutions - for(Map.Entry<GISAttributeInterface, GISAttributeInterface> entry:_substitutionTable.entrySet()){ - if(entry.getKey().getDataClass()!=entry.getValue().getDataClass()) - throw new IllegalArgumentException("Les deux substitutions doivent avoir des valeurs de m\xEAme type."); - if(model_.getIndiceOf(entry.getKey())==-1) - throw new IllegalArgumentException(entry.getKey().getID() + "n'est pas dans le model."); - if(model_.getIndiceOf(entry.getValue())==-1) - throw new IllegalArgumentException(entry.getValue().getID() + "n'est pas dans le model."); - // Ajout de la substitution - substitutionTable_.put(model_.getIndiceOf(entry.getKey()), model_.getIndiceOf(entry.getValue())); - } - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getAttribute(int) - */ - public GISAttributeInterface getAttribute(int _att) { - return model_.getAttribute(_att); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getDoubleValue(int, int) - */ - public double getDoubleValue(int _att, int _geom) { - if (substitutionTable_.containsKey(_att)) - return model_.getDoubleValue(substitutionTable_.get(_att), _geom); - else - return model_.getDoubleValue(_att, _geom); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getEnvelopeInternal() - */ - public Envelope getEnvelopeInternal() { - return model_.getEnvelopeInternal(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getGeometry(int) - */ - public Geometry getGeometry(int _geom) { - return model_.getGeometry(_geom); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getIndiceOf(org.fudaa.ctulu.gis.GISAttributeInterface) - */ - public int getIndiceOf(GISAttributeInterface _att) { - return model_.getIndiceOf(_att); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getNbAttributes() - */ - public int getNbAttributes() { - return model_.getNbAttributes(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getNumGeometries() - */ - public int getNumGeometries() { - return model_.getNumGeometries(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getValue(int, int) - */ - public Object getValue(int _att, int _geom) { - if (substitutionTable_.containsKey(_att)) - if (getAttribute(_att).isAtomicValue()!=getAttribute(substitutionTable_.get(_att)).isAtomicValue()) { - Object value; - if (getAttribute(substitutionTable_.get(_att)).isAtomicValue()) - value=((GISAttributeModel)model_.getValue(substitutionTable_.get(_att), _geom)).getAverage(); - else - value=model_.getValue(substitutionTable_.get(_att), _geom); - return model_.getAttribute(_att).createDataForGeom(value, model_.getGeometry(_geom).getNumPoints()); - } - else - return model_.getValue(substitutionTable_.get(_att), _geom); - else - return model_.getValue(_att, _geom); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#preload(org.fudaa.ctulu.gis.GISAttributeInterface[], org.fudaa.ctulu.ProgressionInterface) - */ - public void preload(GISAttributeInterface[] _att, ProgressionInterface _prog) { - model_.preload(_att, _prog); - } - -} Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeAdapter.java (from rev 4061, branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributAdapter.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeAdapter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeAdapter.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -0,0 +1,227 @@ +/* + * @creation 7 oct. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ctulu.gis; + +import java.util.ArrayList; +import java.util.List; + +import org.fudaa.ctulu.CtuluLibArray; +import org.fudaa.ctulu.ProgressionInterface; + +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Cet Adapter permet l'ajout d'attributs au DataModel. + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class GISDataModelAttributeAdapter implements GISDataModel{ + + // Le model adapt\xE9 + private GISDataModel dataModel_; + // Les nouveaux attributs + private List<GISAttributeInterface> newAttr_; + private List<Object[]> newValues_; + + public GISDataModelAttributeAdapter(GISDataModel _dataModel){ + dataModel_ = _dataModel; + newAttr_ = new ArrayList<GISAttributeInterface>(1); + newValues_ = new ArrayList<Object[]>(1); + } + + /** + * Ajout un attribut pour tout les \xE9l\xE9ments si cet attribut n'existe pas d\xE9j\xE0. + * L'atomicit\xE9 (ou la globalit\xE9) de l'attribut est respect\xE9. + * @param _attr l'attribut a ajouter + * @param _value une valeur unique qui sera dupliquer pour toutes les g\xE9om\xE9tries + * @return 0 si l'attribut existe d\xE9j\xE0 (il n'est pas remplac\xE9) + * -2 si _attr ou _value sont null + */ + public int addAttribut(GISAttributeInterface _attr, Object _value){ + if(_attr==null||_value==null) + return -2; + if (dataModel_.getIndiceOf(_attr)==-1 && !newAttr_.contains(_attr)) { + newAttr_.add(_attr); + // Attribut atomique + if (_attr.isAtomicValue()) { + Object[] tmp=new Object[dataModel_.getNumGeometries()]; + for (int i=0; i<tmp.length; i++) + tmp[i]=_attr.createDataForGeom(_value, dataModel_.getGeometry(i).getNumPoints()); + newValues_.add(tmp); + } + // Attribut global + else { + Object[] tmp=new Object[dataModel_.getNumGeometries()]; + for (int i=0; i<tmp.length; i++) + tmp[i]=_value; + newValues_.add(tmp); + } + return 1; + } + else + return 0; + } + + /** + * Ajout un attribut pour tout les \xE9l\xE9ments si cet attribut n'existe pas d\xE9j\xE0. + * si _attr est un attribut atomique, chaque valeur sera dupliqu\xE9 pour + * chaque sommet de la g\xE9om\xE9trie. + * @param _attr l'attribut a ajouter + * @param _values une valeur pour chaque g\xE9om\xE9trie. + * @return 0 si l'attribut existe d\xE9j\xE0 (il n'est pas remplac\xE9) + * -1 en cas de tableau _values de mauvaise taille + * -2 si _attr ou _values sont null + */ + public int addAttribut(GISAttributeInterface _attr, Object[] _values){ + if(_attr==null||_values==null) + return -2; + if(dataModel_.getIndiceOf(_attr) == -1 && !newAttr_.contains(_attr)){ + if(_values.length != dataModel_.getNumGeometries()) + return -1; + // Attribut atomique + if (_attr.isAtomicValue()) { + Object[] tmp=new Object[dataModel_.getNumGeometries()]; + for (int i=0; i<tmp.length; i++) + tmp[i]=_attr.createDataForGeom(_values[i], dataModel_.getGeometry(i).getNumPoints()); + newAttr_.add(_attr); + newValues_.add(tmp); + } + // Attribut global + else { + newAttr_.add(_attr); + newValues_.add(_values); + } + return 1; + } + else + return 0; + } + + /** + * Ajout un attribut pour tout les \xE9l\xE9ments si cet attribut n'existe pas d\xE9j\xE0. + * Cette m\xE9thode n'est d\xE9finie que pour les attributs atomiques. + * @param _attr l'attribut a ajouter + * @param _values une valeur pour chaque sommet de chaque g\xE9om\xE9trie. + * @return 0 si l'attribut existe d\xE9j\xE0 (il n'est pas remplac\xE9) + * -1 en cas de tableau _values de mauvaise taille + * -2 si _attr ou _values sont null + * -3 si l'attribut n'est pas atomique + */ + public int addAttribut(GISAttributeInterface _attr, Object[][] _values){ + if(_attr==null||_values==null) + return -2; + if (_attr.isAtomicValue()) + if (dataModel_.getIndiceOf(_attr)==-1 && !newAttr_.contains(_attr)) { + if (_values.length!=dataModel_.getNumGeometries()) + return -1; + // Attribut atomique + Object[] tmp=new Object[dataModel_.getNumGeometries()]; + for (int i=0; i<tmp.length; i++){ + if(_values[i].length != dataModel_.getGeometry(i).getNumPoints()) + return -1; + tmp[i]=_attr.createDataForGeom(_values[i], _values[i].length); + } + newAttr_.add(_attr); + newValues_.add(tmp); + return 1; + } + else + return 0; + else + return -3; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getAttribute(int) + */ + public GISAttributeInterface getAttribute(int att) { + if(att<0) + return null; + if (dataModel_.getNbAttributes() > att) + return dataModel_.getAttribute(att); + else if(newAttr_.size() > att - dataModel_.getNbAttributes()) + return newAttr_.get(att - dataModel_.getNbAttributes()); + else return null; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getDoubleValue(int, int) + */ + public double getDoubleValue(int att, int geom) { + if(att>=0&&geom>=0){ + if (dataModel_.getNbAttributes() > att) + return dataModel_.getDoubleValue(att, geom); + else if(newAttr_.size() > att - dataModel_.getNbAttributes()) + return (Double)newValues_.get(att)[geom]; + else return 0; + } + return 0; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getEnvelopeInternal() + */ + public Envelope getEnvelopeInternal() { + return dataModel_.getEnvelopeInternal(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getGeometry(int) + */ + public Geometry getGeometry(int geom) { + if(geom<0||geom>=getNumGeometries()) + return null; + return dataModel_.getGeometry(geom); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getIndiceOf(org.fudaa.ctulu.gis.GISAttributeInterface) + */ + public int getIndiceOf(GISAttributeInterface _att) { + if(dataModel_.getIndiceOf(_att) != -1) + return dataModel_.getIndiceOf(_att); + else if(CtuluLibArray.findObjectEgalEgal(newAttr_, _att)!=-1) + return dataModel_.getNbAttributes()+CtuluLibArray.findObjectEgalEgal(newAttr_, _att); + else return -1; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getNbAttributes() + */ + public int getNbAttributes() { + return dataModel_.getNbAttributes()+newAttr_.size(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getNumGeometries() + */ + public int getNumGeometries() { + return dataModel_.getNumGeometries(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getValue(int, int) + */ + public Object getValue(int att, int geom) { + if (att<0||geom<0) + return null; + if (dataModel_.getNbAttributes()>att&&geom<dataModel_.getNumGeometries()) + return dataModel_.getValue(att, geom); + else if (newAttr_.size()>att-dataModel_.getNbAttributes()&&geom<dataModel_.getNumGeometries()) + return newValues_.get(att-dataModel_.getNbAttributes())[geom]; + return null; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#preload(org.fudaa.ctulu.gis.GISAttributeInterface[], org.fudaa.ctulu.ProgressionInterface) + */ + public void preload(GISAttributeInterface[] _att, ProgressionInterface _prog) { + dataModel_.preload(_att, _prog); + } +} Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeSubstitutionAdapter.java (from rev 4061, branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributSubstitution.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeSubstitutionAdapter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelAttributeSubstitutionAdapter.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -0,0 +1,196 @@ +/* + * @creation 14 oct. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ctulu.gis; + +import java.util.HashMap; +import java.util.Map; + +import org.fudaa.ctulu.ProgressionInterface; + +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Cette adapter permet de substituer des attributs existant par d'autre. + * Par exemple, me model poss\xE8de deux attributs : V1 (type double) et Z + * (type double), l'adapter permet de substituer V& \xE0 Z. Ainsi toutes les + * requ\xEAtes sur Z seront redirig\xE9es sur V1. + * Les deux attributs doivent pr\xE9alablement exist\xE9s, avoir des types de valeur + * identique et \xEAtre de m\xEAme niveau (global ou atomique). + * A not\xE9 que se ne sont que les valeurs qui sont substituer. En cas d'appelle + * \xE0 la m\xE9thod getAttribut sur l'attribut substituer, sont GISAttributInterface + * sera toujours renvoy\xE9 comme avant. + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class GISDataModelAttributeSubstitutionAdapter implements GISDataModel { + + private final GISDataModel model_; + /** + * Table contenant les substitutions d'attributs \xE0 faire sur le model. + * Pour des raisons de performence, la substitution est m\xE9moris\xE9 par + * l'index des attributs. + */ + private final HashMap<Integer, Integer> substitutionTable_; + + /** + * Cette adapter permet de substituer des attributs existant par d'autre. Par + * exemple, me model poss\xE8de deux attributs : V1 (type double) et Z (type + * double), l'adapter permet de substituer V1 \xE0 Z. Ainsi toutes les requ\xEAtes + * sur Z seront redirig\xE9es sur V1. Les deux attributs doivent pr\xE9alablement + * exist\xE9s et avoir des types de valeur identique. Si les attributs sont de + * niveau (global ou atomique) diff\xE9rent, l'adapter converti les valeurs + * en utilisant la m\xE9thod createDataForGeom. + * A not\xE9 que se ne sont que les valeurs qui sont substituer. En + * cas d'appelle \xE0 la m\xE9thod getAttribut sur l'attribut substituer, sont + * GISAttributInterface sera toujours renvoy\xE9 comme avant. + * + * + * @param _model + * le model \xE0 adaoter + * @param _substitutionTable + * cette table contient les substitutions \xE0 faire. Une substitution + * est un tableau \xE0 deux \xE9l\xE9ments : le premier l'attribut a + * substituer et le second l'attribut par lequel le substituer. + * _substitutionTable est donc un tableau de tableau \xE0 deux \xE9l\xE9ments. + */ + public GISDataModelAttributeSubstitutionAdapter(GISDataModel _model, GISAttributeInterface[][] _substitutionTable){ + if(_substitutionTable==null||_model==null) + throw new IllegalArgumentException("_substitutionTable et _model ne doivent pas \xEAtre null."); + model_=_model; + substitutionTable_=new HashMap<Integer, Integer>(); + // Verification des substitutions + for(int i=0;i<_substitutionTable.length;i++){ + if(_substitutionTable[i].length!=2) + throw new IllegalArgumentException("Une substitution est un tableau \xE0 deux \xE9l\xE9ments, ni plus, ni moins."); + if(_substitutionTable[i][0].getDataClass()!=_substitutionTable[i][1].getDataClass()) + throw new IllegalArgumentException("Les deux substitutions doivent avoir des valeurs de m\xEAme type."); + if(model_.getIndiceOf(_substitutionTable[i][0])==-1) + throw new IllegalArgumentException(_substitutionTable[i][0].getID() + "n'est pas dans le model."); + if(model_.getIndiceOf(_substitutionTable[i][1])==-1) + throw new IllegalArgumentException(_substitutionTable[i][1].getID() + "n'est pas dans le model."); + // Ajout de la substitution + substitutionTable_.put(model_.getIndiceOf(_substitutionTable[i][0]), model_.getIndiceOf(_substitutionTable[i][1])); + } + } + + /** + * Cette adapter permet de substituer des attributs existant par d'autre. Par + * exemple, me model poss\xE8de deux attributs : V1 (type double) et Z (type + * double), l'adapter permet de substituer V& \xE0 Z. Ainsi toutes les requ\xEAtes + * sur Z seront redirig\xE9es sur V1. Les deux attributs doivent pr\xE9alablement + * exist\xE9s, avoir des types de valeur identique et \xEAtre de m\xEAme niveau (global + * ou atomique). + * A not\xE9 que se ne sont que les valeurs qui sont substituer. En + * cas d'appelle \xE0 la m\xE9thod getAttribut sur l'attribut substituer, sont + * GISAttributInterface sera toujours renvoy\xE9 comme avant. + * + * + * @param _model + * le model \xE0 adaoter + * @param _substitutionTable + * cette map contient les substitutions \xE0 faire. Le premier l'attribut + * a substituer et le second l'attribut par lequel le substituer. + */ + public GISDataModelAttributeSubstitutionAdapter(GISDataModel _model, Map<GISAttributeInterface, GISAttributeInterface> _substitutionTable){ + if(_substitutionTable==null||_model==null) + throw new IllegalArgumentException("_substitutionTable et _model ne doivent pas \xEAtre null."); + model_=_model; + substitutionTable_=new HashMap<Integer, Integer>(); + // Verification des substitutions + for(Map.Entry<GISAttributeInterface, GISAttributeInterface> entry:_substitutionTable.entrySet()){ + if(entry.getKey().getDataClass()!=entry.getValue().getDataClass()) + throw new IllegalArgumentException("Les deux substitutions doivent avoir des valeurs de m\xEAme type."); + if(model_.getIndiceOf(entry.getKey())==-1) + throw new IllegalArgumentException(entry.getKey().getID() + "n'est pas dans le model."); + if(model_.getIndiceOf(entry.getValue())==-1) + throw new IllegalArgumentException(entry.getValue().getID() + "n'est pas dans le model."); + // Ajout de la substitution + substitutionTable_.put(model_.getIndiceOf(entry.getKey()), model_.getIndiceOf(entry.getValue())); + } + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getAttribute(int) + */ + public GISAttributeInterface getAttribute(int _att) { + return model_.getAttribute(_att); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getDoubleValue(int, int) + */ + public double getDoubleValue(int _att, int _geom) { + if (substitutionTable_.containsKey(_att)) + return model_.getDoubleValue(substitutionTable_.get(_att), _geom); + else + return model_.getDoubleValue(_att, _geom); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getEnvelopeInternal() + */ + public Envelope getEnvelopeInternal() { + return model_.getEnvelopeInternal(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getGeometry(int) + */ + public Geometry getGeometry(int _geom) { + return model_.getGeometry(_geom); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getIndiceOf(org.fudaa.ctulu.gis.GISAttributeInterface) + */ + public int getIndiceOf(GISAttributeInterface _att) { + return model_.getIndiceOf(_att); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getNbAttributes() + */ + public int getNbAttributes() { + return model_.getNbAttributes(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getNumGeometries() + */ + public int getNumGeometries() { + return model_.getNumGeometries(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getValue(int, int) + */ + public Object getValue(int _att, int _geom) { + if (substitutionTable_.containsKey(_att)) + if (getAttribute(_att).isAtomicValue()!=getAttribute(substitutionTable_.get(_att)).isAtomicValue()) { + Object value; + if (getAttribute(substitutionTable_.get(_att)).isAtomicValue()) + value=((GISAttributeModel)model_.getValue(substitutionTable_.get(_att), _geom)).getAverage(); + else + value=model_.getValue(substitutionTable_.get(_att), _geom); + return model_.getAttribute(_att).createDataForGeom(value, model_.getGeometry(_geom).getNumPoints()); + } + else + return model_.getValue(substitutionTable_.get(_att), _geom); + else + return model_.getValue(_att, _geom); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#preload(org.fudaa.ctulu.gis.GISAttributeInterface[], org.fudaa.ctulu.ProgressionInterface) + */ + public void preload(GISAttributeInterface[] _att, ProgressionInterface _prog) { + model_.preload(_att, _prog); + } + +} Modified: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelFilterAdapter.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -179,9 +179,8 @@ public Object getValue(final int _idxAtt, final int _idxGeom) { final int idx = getRealAttributIndex(_idxAtt); - if (idx < 0 || idx >= model_.getNbAttributes()) { + if (idx < 0 || idx >= model_.getNbAttributes()) return null; - } return model_.getValue(idx, getRealGeometryIndex(_idxGeom)); } Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligne.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligne.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligne.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -1,125 +0,0 @@ -/* - * @creation 14 oct. 2008 - * @modification $Date:$ - * @license GNU General Public License 2 - * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail fud...@li... - */ -package org.fudaa.ctulu.gis; - -import java.util.ArrayList; -import java.util.HashMap; - -import org.fudaa.ctulu.ProgressionInterface; - -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.LineString; -import com.vividsolutions.jts.geom.LinearRing; -import com.vividsolutions.jts.geom.MultiPoint; - -/** - * Cette classe convertie les mulitpoints en polyligne. Les g\xE9om\xE9tries faisant - * partie du model ne pouvant \xEAtre converties (soit parce que se ne sont pas des - * multipoint soit parce qu'il n'y a pas assez de points pour faire la conversion) - * deviennent invisible. - * - * @author Emmanuel MARTIN - * @version $Id:$ - */ -public class GISDataModelMultiPointToPolyligne implements GISDataModel { - - private final GISDataModel model_; - /** Table de translation d'indices des g\xE9om\xE9tries. */ - private final ArrayList<Integer> translationTable_; - /** Table cache des polylignes cr\xE9es.*/ - private final HashMap<Integer, LineString> cachePolyligne_; - - public GISDataModelMultiPointToPolyligne(GISDataModel _model){ - if(_model==null) - throw new IllegalArgumentException("_model ne doit pas \xEAtre null."); - translationTable_=new ArrayList<Integer>(); - cachePolyligne_=new HashMap<Integer, LineString>(); - model_=_model; - // Construction de la table de translation - for(int i=0;i<model_.getNumGeometries();i++) - if(model_.getGeometry(i) instanceof MultiPoint && model_.getGeometry(i).getNumPoints() >= 2) - translationTable_.add(i); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getAttribute(int) - */ - public GISAttributeInterface getAttribute(int _att) { - return model_.getAttribute(_att); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getDoubleValue(int, int) - */ - public double getDoubleValue(int _att, int _geom) { - if(_geom>0&&_geom<translationTable_.size()) - return getDoubleValue(_att, translationTable_.get(_geom)); - return 0; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getEnvelopeInternal() - */ - public Envelope getEnvelopeInternal() { - return model_.getEnvelopeInternal(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getGeometry(int) - */ - public Geometry getGeometry(int _geom) { - if (_geom>=0&&_geom<translationTable_.size()) { - if (!cachePolyligne_.containsKey(_geom)) { - Coordinate[] coordinates=model_.getGeometry(translationTable_.get(_geom)).getCoordinates(); - // Cr\xE9ation de la polyligne - cachePolyligne_.put(_geom, GISGeometryFactory.INSTANCE.createLineString(coordinates)); - } - return cachePolyligne_.get(_geom); - } - return null; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getIndiceOf(org.fudaa.ctulu.gis.GISAttributeInterface) - */ - public int getIndiceOf(GISAttributeInterface _att) { - return model_.getIndiceOf(_att); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getNbAttributes() - */ - public int getNbAttributes() { - return model_.getNbAttributes(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getNumGeometries() - */ - public int getNumGeometries() { - return translationTable_.size(); - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#getValue(int, int) - */ - public Object getValue(int _att, int _geom) { - if(_geom>0&&_geom<translationTable_.size()) - return model_.getValue(_att, translationTable_.get(_geom)); - return null; - } - - /* (non-Javadoc) - * @see org.fudaa.ctulu.gis.GISDataModel#preload(org.fudaa.ctulu.gis.GISAttributeInterface[], org.fudaa.ctulu.ProgressionInterface) - */ - public void preload(GISAttributeInterface[] _att, ProgressionInterface _prog) { - model_.preload(_att, _prog); - } -} Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligneAdapter.java (from rev 4061, branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligne.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligneAdapter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelMultiPointToPolyligneAdapter.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -0,0 +1,121 @@ +/* + * @creation 14 oct. 2008 + * @modification $Date:$ + * @license GNU General Public License 2 + * @copyright (c)1998-2008 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail fud...@li... + */ +package org.fudaa.ctulu.gis; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.fudaa.ctulu.ProgressionInterface; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.MultiPoint; + +/** + * Cette classe convertie les mulitpoints en polylignes. Les g\xE9om\xE9tries faisant + * partie du model ne pouvant \xEAtre converties (soit parce que se ne sont pas des + * multipoints soit parce qu'il n'y a pas assez de points pour faire la conversion) + * deviennent invisibles. + * + * @author Emmanuel MARTIN + * @version $Id$ + */ +public class GISDataModelMultiPointToPolyligneAdapter implements GISDataModel { + + private final GISDataModel model_; + /** Table de translation d'indices des g\xE9om\xE9tries. */ + private final ArrayList<Integer> translationTable_; + /** Table cache des polylignes cr\xE9es.*/ + private final HashMap<Integer, GISPolyligne> cachePolyligne_; + + public GISDataModelMultiPointToPolyligneAdapter(GISDataModel _model){ + if(_model==null) + throw new IllegalArgumentException("_model ne doit pas \xEAtre null."); + translationTable_=new ArrayList<Integer>(); + cachePolyligne_=new HashMap<Integer, GISPolyligne>(); + model_=_model; + // Construction de la table de translation + for(int i=0;i<model_.getNumGeometries();i++) + if(model_.getGeometry(i) instanceof GISMultiPoint && model_.getGeometry(i).getNumPoints() >= 2) + translationTable_.add(i); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getAttribute(int) + */ + public GISAttributeInterface getAttribute(int _att) { + return model_.getAttribute(_att); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getDoubleValue(int, int) + */ + public double getDoubleValue(int _att, int _geom) { + if(_geom>0&&_geom<translationTable_.size()) + return getDoubleValue(_att, translationTable_.get(_geom)); + return 0; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getEnvelopeInternal() + */ + public Envelope getEnvelopeInternal() { + return model_.getEnvelopeInternal(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getGeometry(int) + */ + public Geometry getGeometry(int _geom) { + if (_geom>=0&&_geom<translationTable_.size()) { + if (!cachePolyligne_.containsKey(_geom)) + cachePolyligne_.put(_geom, GISLib.toPolyligne(((GISMultiPoint) model_.getGeometry(translationTable_.get(_geom))).getCoordinateSequence())); + return cachePolyligne_.get(_geom); + } + return null; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getIndiceOf(org.fudaa.ctulu.gis.GISAttributeInterface) + */ + public int getIndiceOf(GISAttributeInterface _att) { + return model_.getIndiceOf(_att); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getNbAttributes() + */ + public int getNbAttributes() { + return model_.getNbAttributes(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getNumGeometries() + */ + public int getNumGeometries() { + return translationTable_.size(); + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#getValue(int, int) + */ + public Object getValue(int _att, int _geom) { + if(_geom>=0&&_geom<translationTable_.size()) + return model_.getValue(_att, translationTable_.get(_geom)); + return null; + } + + /* (non-Javadoc) + * @see org.fudaa.ctulu.gis.GISDataModel#preload(org.fudaa.ctulu.gis.GISAttributeInterface[], org.fudaa.ctulu.ProgressionInterface) + */ + public void preload(GISAttributeInterface[] _att, ProgressionInterface _prog) { + model_.preload(_att, _prog); + } +} Deleted: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java 2008-10-16 13:40:50 UTC (rev 4072) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -1,141 +0,0 @@ -/* - * @creation 8 juin 2005 - * @modification $Date: 2007-04-16 16:33:52 $ - * @license GNU General Public License 2 - * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne - * @mail de...@fu... - */ -package org.fudaa.ctulu.gis; - -import java.util.ArrayList; -import java.util.HashMap; - -import com.vividsolutions.jts.geom.Envelope; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.Point; - -import org.fudaa.ctulu.CtuluLib; -import org.fudaa.ctulu.CtuluLibArray; -import org.fudaa.ctulu.ProgressionInterface; - -/** - * Un mod\xE8le pour adapter un modele de points vers un mod\xE8le de multipoints. - * Lors de ce passage, si l'attribut ATT_NUM_BLOC existe, alors il est utilis\xE9 pour g\xE9n\xE9rer les multipoints. - * Sinon, un seul multipoint est cr\xE9\xE9. - * A priori, tous les attributs des points sont globaux. Ils deviennent atomiques. - * - * @author Bertrand Marchand - * @version $Id: GISDataModelListPtAdapter.java,v 1.8 2007-04-16 16:33:52 deniger Exp $ - */ -public class GISDataModelPointMultiPointAdapter implements GISDataModel { - - /** Un attribut num\xE9ro de bloc, pour faire des groupes de points. */ - public static final GISAttributeInterface ATT_NUM_BLOC=new GISAttributeInteger("numbloc"); - - // Cache. - GISMultiPoint[] multi_=null; - Object[][] datas_=null; - - - int idxAttNumBloc_; - HashMap<Integer,ArrayList<Integer>> hibloc2ListPts_=new HashMap<Integer, ArrayList<Integer>>(); - GISDataModel initmd_; - - /** - * Constructeur. On ne controle pas que le modele contient bien des points. - */ - public GISDataModelPointMultiPointAdapter(final GISDataModel _mdpts) { - super(); - initmd_=_mdpts; - - idxAttNumBloc_=initmd_.getIndiceOf(ATT_NUM_BLOC); - // Pas de blocs, 1 seul multipoint. - if (idxAttNumBloc_==-1) { - ArrayList<Integer> idxpts=new ArrayList<Integer>(initmd_.getNumGeometries()); - for (int i=0; i<initmd_.getNumGeometries(); i++) idxpts.add(i); - hibloc2ListPts_.put(0,idxpts); - } - // Plusieurs blocs. - else { - for (int i=0; i<initmd_.getNumGeometries(); i++) { - Integer ibloc=(Integer)_mdpts.getValue(idxAttNumBloc_,i); - ArrayList<Integer> idxpts=hibloc2ListPts_.get(ibloc); - if (idxpts==null) { - idxpts=new ArrayList<Integer>(); - hibloc2ListPts_.put(ibloc, idxpts); - } - idxpts.add(i); - } - } - } - - /** - * Attention : L'attribut retourn\xE9 est non atomic (puisque issu du mod\xE8le initial), alors que pour les - * multipoints, il est atomique. - * @todo Modifier l'atomicit\xE9. - */ - public GISAttributeInterface getAttribute(final int _idxAtt){ - return initmd_.getAttribute(_idxAtt); - } - - public void preload(final GISAttributeInterface[] _att, final ProgressionInterface _prog) { - - } - - public Envelope getEnvelopeInternal() { - return initmd_.getEnvelopeInternal(); - } - -// public Object[] getDataModelForGeom(final int _idxGeom){ -// final Object[] r = new Object[getNbAttributes()]; -// for (int i = r.length - 1; i >= 0; i--) { -// r[i] = getValue(i, _idxGeom); -// } -// return r; -// } - - public double getDoubleValue(final int _idxAtt,final int _idxGeom){ - throw new IllegalAccessError("This method can't be accessed."); - } - - public Geometry getGeometry(final int _idxGeom){ - if (multi_==null) multi_=new GISMultiPoint[getNumGeometries()]; - if (multi_[_idxGeom]==null) { - ArrayList<Integer> idxpts=hibloc2ListPts_.get(_idxGeom); - Point[] pts=new Point[idxpts.size()]; - for (int i=0; i<idxpts.size(); i++) { - pts[i]=(Point)initmd_.getGeometry(idxpts.get(i)); - } - multi_[_idxGeom]=(GISMultiPoint)GISGeometryFactory.INSTANCE.createMultiPoint(pts); - } - return multi_[_idxGeom]; - } - - public int getIndiceOf(final GISAttributeInterface _att){ - return initmd_.getIndiceOf(_att); - } - - public int getNbAttributes(){ - return initmd_.getNbAttributes(); - } - - public int getNumGeometries(){ - return hibloc2ListPts_.size(); - } - - /** - * Retourne un tableau de valeurs atomiques (Z par exemple). - */ - public Object getValue(final int _idxAtt,final int _idxGeom){ - if (datas_==null) datas_=new Object[getNbAttributes()][]; - if (datas_[_idxAtt]==null) datas_[_idxAtt]=new Object[getNumGeometries()]; - - if (datas_[_idxAtt][_idxGeom]==null) { - ArrayList<Integer> idxpts=hibloc2ListPts_.get(_idxGeom); - Object[] vals=new Object[idxpts.size()]; - for (int i=0; i<idxpts.size(); i++) vals[i]=initmd_.getValue(_idxAtt,idxpts.get(i)); - datas_[_idxAtt][_idxGeom]=getAttribute(_idxAtt).createDataForGeom(vals, vals.length); - } - return datas_[_idxAtt][_idxGeom]; - } -} Copied: branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointToMultiPointAdapter.java (from rev 4061, branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointMultiPointAdapter.java) =================================================================== --- branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointToMultiPointAdapter.java (rev 0) +++ branches/FudaaModeleur_TC1Bis/fudaa_devel/ctulu/src/org/fudaa/ctulu/gis/GISDataModelPointToMultiPointAdapter.java 2008-10-16 14:01:02 UTC (rev 4073) @@ -0,0 +1,127 @@ +/* + * @creation 8 juin 2005 + * @modification $Date: 2007-04-16 16:33:52 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ctulu.gis; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.fudaa.ctulu.ProgressionInterface; + +import com.vividsolutions.jts.geom.Envelope; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Point; + +/** + * Un mod\xE8le pour adapter un modele de points vers un mod\xE8le de multip... [truncated message content] |