Entrada de FJP
Septiembre 3rd, 2010Prueba para ponerlo privado
Prueba para ponerlo privado
Apunto aquí (a falta de un sitio mejor) algunas notas que creo pueden ser útiles para alguien que intente migrar su extensión de gvSIG a la 2.0.
Sin orden ni concierto, luego les daré forma.
- Desaparece addMapTool. Hay que usar addBehavior
- El equivalente a un FieldDescription viene a ser un FeatureAttributeDescriptor
- FLyrVect.getRecordset => getDataStore().getDataSet()
- FlyrVect.getSource => getFeatureStore()
- No usar View, usar IView
- ViewPort.getAdjustedExtent => getAdjusteEnvelope. Y usar setEnvelope
- Para convertir a JTS, se hace llamando a geom.invokeOperation(ToJTS.CODE, null); (O bien usando Converter o MigrationUtils)
- Para iterar por features, usar accept(Visitor) o un FeatureSet, sin olvidarte el dispose().
- ProjectTable => TableDocument
ProjectExtension pe = (ProjectExtension) PluginServices
.getExtension(ProjectExtension.class);
Project project = pe.getProject();
TableDocument[] pts = (TableDocument[]) project.getDocuments(
TableManager.TYPENAME).toArray( new TableDocument[0]);
- Crear un símbolo de tipo IMAGE:
FSymbol simFlag = new Symbol(FConstant.SYMBOL_TYPE_ICON);
simFlag.setStyle(FSymbol.SYMBOL_STYLE_MARKER_IMAGEN);
simFlag.setSizeInPixels(true);
simFlag.setSize(16);
ImageIcon icon = new ImageIcon(this.getClass().getClassLoader()
.getResource(”images/turncost_16.png”));
simFlag.setIcon(icon.getImage());
- Crear un símbolo:
ANTES => theSymbol = (IFillSymbol) symbolManager.createDefaultSymbolByShapeType(FShape.POLYGON);
AHORA => SymbolManager symbolManager = MapContextLocator.getSymbolManager();
ISymbol myDefaultSymbol = symbolManager.createSymbol(Geometry.TYPES.SURFACE);
- PointListener ahora te obliga a implementar el método getImageCursor():
private Image imageCursor = new ImageIcon(MapControl.class.getResource(
“images/Hand.gif”)).getImage();;
public Image getImageCursor() {
return imageCursor;
}
- LayerFactory.createLayer => LayerFactory.getInstance().createLayer(String name, DataStoreParameters params). Lo malo es que los params te los tienes que crear con DynValue, así que mejor añadir algo a MigrationUtils.
- Revisar DataSelectionPanel. La forma de trabajar con la selección no es buena. ¿Usar Query sería mejor, por si es una capa de base de datos)
FeatureSelection selection = (FeatureSelection)featureStore.createFeatureSelection();
featureSet = featureStore.getFeatureSet();
features = featureSet.iterator();
while (features.hasNext()) {
Feature feature = (Feature) features.next();
if (itemToZoom.equals(feature.get(fieldToZoomIndex))){
selection.select(feature);
}
}
// featureStore.setSelection(selection);
SelectedZoomVisitor visitor = new SelectedZoomVisitor();
selection.accept(visitor);
mapContext.getViewPort().setEnvelope(visitor.getSelectBound());
- ¿Como imitamos esto en la 2.0? :
// Lo insertamos al principio de la lista para que los
// pushpins se dibujen después.
graphicLayer.inserGraphics(0, graphicsRoute);
FGraphicLabel theGLabel = new FGraphicLabel(geom, idSymbol, aux);
theGLabel.setObjectTag(tag);
theGLabel.getLabel().setJustification(FLabel.CENTER_TOP);
graphicLayer.addGraphic(theGLabel);
- Revisar la creación de los índices. No es sencillo crear un índice y no se controla si está duplicado.
- Crear una leyenda:
VectorialUniqueValueLegend defaultLegend = new VectorialUniqueValueLegend(Geometry.TYPES.SURFACE);
defaultLegend.setClassifyingFieldNames(new String[] {”COST”} );
SymbolManager symbolManager = MapContextLocator.getSymbolManager();
ISymbol myDefaultSymbol = symbolManager.createSymbol(Geometry.TYPES.SURFACE);
defaultLegend.setDefaultSymbol(myDefaultSymbol);
- ¿Cómo se carga una leyenda? (gvl)
- Cargar una capa (FilesystemExplorerAddLayerWizardPanel.execute()):
LayerFactory layerFactor = LayerFactory.getInstance();
//FIXME: el nombre deberia sugerirlo los parametros?
layerName = ((FilesystemStoreParameters) params).getFile().getName();
try {
layer = layerFactor.createLayer(layerName, params);
} catch (LoadLayerException e) {
NotificationManager.addError(e);
return;
}
¿Qué se hace en prepareOpenLayer, prepareOpenDataSource, prepareOpenDataStoreParameters?
- ApplicationManager tiene muchos puntos de entrada interesantes. Se obtiene:
ApplicationManager appGvSigMan = ApplicationLocator.getManager();
y con eso consigues referencias al ProjectManager, currentProject, geometryManager, dataManager, mapContextManager…. incluso una función para obtener la proyección pasándole un string (formato??)
- ¿Cómo se crea una capa a partir de un driver (FeatureStore) => Porqué setDataStore() debería ser protected?
- ¿Cómo se carga una tabla por código?
- Creo que esta propiedad
protected static final String FIELD_DBFFILENAME = “dbffilename”;
debería ser pública en DBFStoreParameters
- ¿Hay algún ejemplo de aplicación simple para hacer pruebas (sin arrancar gvSIG).?
- ¿Porqué SHPStoreParameters tiene setFile(File), setSHXFile(File), etc públicos => qué parámetros son los que se deben usar con DYNCLASS => Sobra FIELD_SHXFILENAME?)
- ¿Dónde están las fuentes de org.gvsig.tools?
- Cuando no puede cargar una capa, podría ser más explícito en el error (Incluir en LoadLayerException la causa del error en el mensaje).
- ¿Porqué al depurar no puedo ver las fuentes de lo que tengo en el workspace?
- Añadir en la documentación los parámetros que faltan para cargar un shp (SRS).
- Esto cómo se hace en la 2.0? (lo de imprimir en algunos Linux):
if (useDefaultJavaPrinting) {
try {
m_cachePrintService = ServiceUI.printDialog(null, 200, 200,
m_cachePrintServices, defaultService, flavor, att);
}
catch (RuntimeException ex) {
useDefaultJavaPrinting=false;
Logger logger = PluginServices.getLogger();
logger.error(”Error showing print dialog”, ex);
// workaround a problem with Java 1.5 with modern CUPS versions
// this try-catch block may be safely removed when we move to Java 1.6
logger.debug(”Opening gvSIG’s internal Java 1.7 CUPS printing dialog”);
m_cachePrintService = backport1_7.javax.print.ServiceUI.printDialog(null, 200, 200,
m_cachePrintServices, defaultService, flavor, att);
}
}
else {
PluginServices.getLogger().debug(”Opening gvSIG’s internal Java 1.7 CUPS printing dialog”);
m_cachePrintService = backport1_7.javax.print.ServiceUI.printDialog(null, 200, 200,
m_cachePrintServices, defaultService, flavor, att);
}
- Ejecutar mvn y obligar a que haga install aunque tengas errores de compilación (para ir probando las opciones que sí que deberían funcionar:
mvn -Dnative-classifier=win-nt-vs8-i386-dynamic -fn -DskipTests=true install
continuará…

Hace mucho que no escribo, y ya va siendo hora.
Me apunto aquí algunas notas rápidas sobre fallos típicos a la hora de instalar Tomcat + Axis2 en un servidor linux (en mi caso, Debian y Ubuntu).
(Fallo típico => 2 de 2 meteduras de pata
)
1.- A veces la máquina virtual java instalada no es la que se necesita. Hay que instalar la de Sun, y asegurarte que javac -version y java -version devuelven lo correcto (LOS DOS). Si no es así, usar update-alternatives –config java.
2.- Tomcat tiene un fichero donde se configura el tema de permisos. Si has instalado axis.war y no funciona, lo primero que hay que probar es a cambiar TOMCAT5_SECURITY=no en el fichero /etc/default/tomcat5. Si después de reiniciar el servicio funciona, el problema eran los permisos. Vuelve a activar la seguridad, y sigue estos pasos:
grant codeBase “file:${catalina.home}/webapps/axis2/-” {
permission java.security.AllPermission;
};
Por defecto, Tomcat creo que no lleva nada preparado para servicios web. Está preparado para servlets, jsp y ese tipo de cosas.
Si quieres usar servicios web, la mejor manera es bajarte el war de Axis2 (yo me he bajado la release 1.4) y parar Tomcat. Luego copias ese .war al directorio webapps de Tomcat, y arrancas Tomcat.
El .war se despliega y deja una aplicación llamada axis2 en el directorio
webapps. Ya solo falta acceder a http://localhost:8080/axis2 y probar
el enlace Validate para comprobar que todo está correcto.
Los servicios web se pueden instalar así:
Now you can drop a service archive in axis2/WEB-INF/services.
En ese directorio pones los .aar que hayas creado y ya tienes tus
servicios web. Por ejemplo, para el servicio CCSConnect.aar,
obtendríamos una dirección como ésta:
http://localhost:8080/axis2/services/CCSConnect?wsdl
Para servicios que queramos tener fuera de axis2, se exportan a un .war desde eclipse y se despliegan. Por ejemplo, para DDR se escriben en webapps\Ddr\WEB-INF\services y se acceden desde:
http://localhost:8080/Ddr/services/Version?wsdl
El servicio Version está ahí porque por defecto Eclipse lo mete así.
Estoy probando la primera Release de FireFox 3, y es genial.
El interfaz es bonito y las nuevas funcionalidades son utilísimas. Y por si fuera poco, es compatible con los plugins que tenía instalados (Google bloc de notas y ScribeFire).
Ah, y por no mencionar que es de 2 a 3 veces más rápido en algunas páginas que la anterior versión.
MUY recomendable. ![]()
Hoy he terminado la mini-aplicación que uso para saber en qué invierto el tiempo (o cómo lo pierdo…
).
La idea es ir metiendo las horas que dedicas a determinados proyectos / clientes y usar Google Calendar para eso (mucho más cómodo que cualquier otra cosa que haya probado. Aunque claro, hasta ahora solo había probado el Fenix….) y luego puedes extraer esa información y crear facturas o meterla en tu propia base de datos.
No es nada serio, pero se podría ampliar, claro.
La he colgado en google code (http://code.google.com/p/gtimetrack/), por eso de ir probando cosas, a pesar del jaleo que se montó el otro día en la lista de usuarios de gvSIG. Por favor, quien lo pruebe, que se limite a criticar la aplicación, no su alojamiento ;-).
El truco está en utilizar SAMBA, y conectar desde Linux a http://localhost:631
Ahí se puede configurar la impresora, teniendo en cuenta que para enviar a la cola de impresión hay que poner algo como
smb://usuario:password@HOST/impresora_compartida
En host yo he puesto la IP, y en impresora_compartida, el nombre tal y como lo compartes en Windows. Ojo, no usar caracteres raros ni espacios.
Hoy he vuelto de Venezuela, y ahora mismo todavía tengo algo de “Jet Lag”, aunque no sé si lo distingo del sueño habitual.
Ha sido duro, pero creo que entre los 4 que hemos ido, hemos dejado el pabellón bastante alto. Es probable que surja algo, ya veremos.
En lo personal, ha sido toda una experiencia, ya que ves de primera mano cómo funcionan y qué es lo que mueve a los venezolanos. La verdad es que asombra la determinación de la gente con la que hemos hablado.
Hoy he encontrado una utilidad que me parece genial, y que creo que me ayudará mucho para hacer las presentaciones sobre Linux (y dar un paso más hacia la despedida del Vista
).
La utilidad se llama xrandr (http://wiki.debian.org/XStrikeForce/HowToRandR12) y se usa así:
xrandr –auto
y también:
xrandr –output LVDS –mode 1280×800 –rate 60
xrandr –output VGA –mode 1680×1050 –rate 60xrandr –output LVDS –off
Y funciona!!
![]()
Los pequeños retoques a la web ya están hechos. Aún queda lo más dificil, ir colgando algunas correcciones a gvSIG en el wiki.
Y todavía no tengo preparada del todo la presentación de Venezuela (y la de empresa ni te cuento, esa no está empezada
).
A dormir, que ya es hora.