public boolean execute(PlugInContext context) throws Exception { reportNothingToUndoYet(context); // limpiamos lo que haya podido quedar de ejecuciones anteriores emptyBlackboard(); WizardDialog d = new WizardDialog( GeopistaUtil.getFrame(context.getWorkbenchGuiComponent()), Constants.APLICACION.getI18nString("ExtractDialogGestionar"), context.getErrorHandler()); d.init( new WizardPanel[] { new MobileModifyPanel01("MobileModifyPanel01", null, context), }); d.setSize(520, 650); d.setLocation(10, 20); d.setVisible(true); if (!d.wasFinishPressed()) { LayerManager layerManager = context.getLayerManager(); if (layerManager != null) { Layer graticuleLayer = layerManager.getLayer(GraticuleCreatorEngine.getGraticuleName()); // si existe una cuadrícula la borramos if (graticuleLayer != null) { layerManager.remove(graticuleLayer); } } return false; } return true; }
public boolean isInputValid() { LayerManager layerManager = context.getLayerManager(); Layer graticuleLayer = layerManager.getLayer(GraticuleCreatorEngine.getGraticuleName()); if (graticuleLayer == null) { return false; } return true; }
private Collection getLayersWithModifiedFeatureCollections() { ArrayList layersWithModifiedFeatureCollections = new ArrayList(); for (Iterator i = getLayerManagers().iterator(); i.hasNext(); ) { LayerManager layerManager = (LayerManager) i.next(); layersWithModifiedFeatureCollections.addAll( layerManager.getLayersWithModifiedFeatureCollections()); } return layersWithModifiedFeatureCollections; }
/* * Se ejecuta una vez finalizado el interfaz despues de pasar por todas las pantallas. * (non-Javadoc) * @see com.vividsolutions.jump.workbench.plugin.ThreadedPlugIn#run(com.vividsolutions.jump.task.TaskMonitor, com.vividsolutions.jump.workbench.plugin.PlugInContext) */ public void run(TaskMonitor monitor, PlugInContext context) throws Exception { try { monitor.report( I18N.get( PluginMobileExtracti18n, MobilePluginI18NResource.MobileModifyPanel01_deletingProy)); ExtractionProject eProject = (ExtractionProject) blackboard.get(MobileModifyPanel01.SELECTED_EXTRACT_PROJECT); // guardamos la informacion en base de datos final String sUrlPrefix = Constants.APLICACION.getString(UserPreferenceConstants.LOCALGIS_SERVER_URL); AdministradorCartografiaClient administradorCartografiaClient = new AdministradorCartografiaClient( sUrlPrefix + WebAppConstants.GEOPISTA_WEBAPP_NAME + ServletConstants.ADMINISTRADOR_CARTOGRAFIA_SERVLET_NAME); administradorCartografiaClient.deleteExtractProject(eProject); // Borramos los datos subidos al servidor. httpDeleteProject(Constants.URL_DELETE_SERVER, eProject); String dirBase = UserPreferenceStore.getUserPreference( UserPreferenceConstants.PREFERENCES_DATA_PATH_KEY, UserPreferenceConstants.DEFAULT_DATA_PATH, true); dirBase += File.separator + "maps"; String projectName = eProject.getNombreProyecto(); String idProyecto = eProject.getIdProyecto(); String dirMapName = projectName + "." + idProyecto; File dirBaseMake = new File(dirBase, dirMapName); if (dirBaseMake.exists()) { MobileUtils.deleteDir(dirBaseMake); logger.info("Borrando fichero local:" + dirBaseMake); } } finally { // borramos la cuadrícula LayerManager layerManager = context.getLayerManager(); Layer graticuleLayer = layerManager.getLayer(GraticuleCreatorEngine.getGraticuleName()); if (graticuleLayer != null) { layerManager.remove(graticuleLayer); } } }
private JScrollPane getGraticuleCells() { // sacamos las cuadrículas de la rejilla LayerManager layerManager = context.getLayerManager(); Layer graticuleLayer = layerManager.getLayer(GraticuleCreatorEngine.getGraticuleName()); if (graticuleLayer != null) { FeatureCollectionWrapper fCollWrapper = graticuleLayer.getFeatureCollectionWrapper(); List featList = fCollWrapper.getFeatures(); jComboList = new ArrayList<JComboBox>(); Feature feature = null; Integer cellId = null; JPanel jPaneCells = new JPanel(); int cols = featList.size() / 2; if (featList.size() % 2 != 0) { cols++; } jPaneCells.setLayout(new GridLayout(cols, 2)); // //capas extraídas // ArrayList<GeopistaLayer> writeableLayers = (ArrayList<GeopistaLayer>) // blackboard.get(MobileExtractPanel01.MOBILE_WRITEABLE_LAYERS); // ArrayList<GeopistaLayer> readableLayers = (ArrayList<GeopistaLayer>) // blackboard.get(MobileExtractPanel01.MOBILE_READABLE_LAYERS); // ArrayList<String> listLayersId = new ArrayList<String>(); // GeopistaLayer geopistaLayer = null; // for(int i=0; i<writeableLayers.size(); i++){ // geopistaLayer = writeableLayers.get(i); // listLayersId.add(String.valueOf(geopistaLayer.getId_LayerDataBase())); // } // for(int i=0; i<readableLayers.size(); i++){ // geopistaLayer = readableLayers.get(i); // listLayersId.add(String.valueOf(geopistaLayer.getId_LayerDataBase())); // } // obtenemos el proyecto de extracción seleccionado de la pantalla anterior ExtractionProject eProject = (ExtractionProject) blackboard.get(MobileAssignCellsPanel01.SELECTED_EXTRACT_PROJECT); JPanel auxPanel = null; arrayNombresUsuarios = null; listaUsuariosPermisos = null; HashMap<String, String> usuariosAsignados = null; final String sUrlPrefix = Constants.APLICACION.getString("geopista.conexion.servidorurl"); try { // añadimos los usuarios a los combos AdministradorCartografiaClient administradorCartografiaClient = new AdministradorCartografiaClient( sUrlPrefix + WebAppConstants.GEOPISTA_WEBAPP_NAME + ServletConstants.ADMINISTRADOR_CARTOGRAFIA_SERVLET_NAME); ListaUsuarios usersRealList = (ListaUsuarios) administradorCartografiaClient.getUsersPermLayers( eProject.getIdExtractLayersList()); // usuarios ya asignados usuariosAsignados = administradorCartografiaClient.getAssignCellsExtractProject(eProject.getIdProyecto()); // usuarios con permisos sobre las capas Hashtable<String, Usuario> usuariosReales = (Hashtable<String, Usuario>) usersRealList.gethUsuarios(); Set<String> keySetUsers = usuariosReales.keySet(); arrayNombresUsuarios = new String[keySetUsers.size() + 1]; arrayNombresUsuarios[0] = ComboItemGraticuleListener.SIN_ASIGNAR; listaUsuariosPermisos = new ArrayList<Usuario>(); String userKey = null; Usuario usuario = null; int k = 1; for (Iterator iterator = keySetUsers.iterator(); iterator.hasNext(); ) { userKey = (String) iterator.next(); usuario = usuariosReales.get(userKey); arrayNombresUsuarios[k] = usuario.getName(); listaUsuariosPermisos.add(usuario); k++; } } catch (Exception e) { e.printStackTrace(); } JComboBox jcombo = null; ILayerViewPanel layerViewPanel = (ILayerViewPanel) context.getLayerViewPanel(); JLabel jLabelCelda = null; String cellIdStr = null; Map<Layer, HashSet<Feature>> visibleLayerToFeaturesInFenceMap = null; graticuleLayer.setVisible(false); // para quitar la cuadrícula de la intersección // añadimos el identificador de cada una al panel for (int i = 0; i < featList.size(); i++) { feature = (Feature) featList.get(i); visibleLayerToFeaturesInFenceMap = layerViewPanel.visibleLayerToFeaturesInFenceMap(feature.getGeometry()); cellId = (Integer) feature.getAttribute(GraticuleCreatorEngine.ATR_CELL_ID); auxPanel = new JPanel(); jLabelCelda = new JLabel( I18N.get( MobileAssignCellsPlugin.PluginMobileExtracti18n, MobilePluginI18NResource.MobileAssignCellsPanel02_celda) + cellId); jcombo = new JComboBox(arrayNombresUsuarios); cellIdStr = String.valueOf(cellId); jcombo.setName(cellIdStr); // celdas con features o sin ellas if (visibleLayerToFeaturesInFenceMap == null || visibleLayerToFeaturesInFenceMap.size() == 0) { jLabelCelda.setEnabled(false); jcombo.setEnabled(false); } else { jLabelCelda.setForeground(Color.RED); jcombo.addItemListener( new ComboItemGraticuleListener( layerViewPanel, graticuleLayer, feature, jLabelCelda, wizardContext)); jComboList.add(jcombo); } auxPanel.add(jLabelCelda); auxPanel.add(jcombo); jPaneCells.add(auxPanel); } graticuleLayer.setVisible(true); // seleccionamos los usuario asignados en los combos if (usuariosAsignados != null && usuariosAsignados.size() != 0) { for (int i = 0; i < jComboList.size(); i++) { jcombo = jComboList.get(i); cellIdStr = jcombo.getName(); if (usuariosAsignados.containsKey(cellIdStr)) { seleccionaUsuarioComboCelda(jcombo, usuariosAsignados.get(cellIdStr)); } } } jPaneInternal = new JScrollPane(); jPaneInternal.setViewportView(jPaneCells); jPaneInternal.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); } return jPaneInternal; }
// Sample to test the class public static void main(String[] args) { final LayerManager lm = new LayerManager(); // Schema containing a single Geometry attribute FeatureSchema fs1 = new FeatureSchema(); fs1.addAttribute("GEOMETRY", AttributeType.GEOMETRY); com.vividsolutions.jump.feature.FeatureDataset ds1 = new com.vividsolutions.jump.feature.FeatureDataset(fs1); lm.addLayer("", "LayerWithJustGeometry", ds1); // Schema containing a Geometry and a String attributes FeatureSchema fs2 = new FeatureSchema(); fs2.addAttribute("GEOMETRY", AttributeType.GEOMETRY); fs2.addAttribute("Name", AttributeType.STRING); com.vividsolutions.jump.feature.FeatureDataset ds2 = new com.vividsolutions.jump.feature.FeatureDataset(fs2); lm.addLayer("", "LayerWithStringAttribute", ds2); // Schema containing a Geometry, a String and a Integer attributes FeatureSchema fs3 = new FeatureSchema(); fs3.addAttribute("GEOMETRY", AttributeType.GEOMETRY); fs3.addAttribute("Name", AttributeType.STRING); fs3.addAttribute("Age", AttributeType.INTEGER); com.vividsolutions.jump.feature.FeatureDataset ds3 = new com.vividsolutions.jump.feature.FeatureDataset(fs3); lm.addLayer("", "LayerWithNumericAttribute", ds3); // MultiInputDialog usage demonstration final MultiInputDialog d = new MultiInputDialog(null, "Title!", true); d.setInset(2); d.addSubTitle("Subtitle 1"); d.addLabel("This is just a label"); d.addTextField("Name", "", 24, null, ""); d.addPositiveIntegerField("Age", 0, 6, ""); d.addNonNegativeDoubleField("Salary", 0, 12, ""); d.addComboBox( "Occupation", "Cadre", java.util.Arrays.asList("Manager", "Developper", "Technician", "Secretary"), ""); d.indentLabel("Occupation"); d.addSubTitle("Layer and attribute selection"); AttributeTypeFilter STRING_FILTER = new AttributeTypeFilter(AttributeTypeFilter.STRING); AttributeTypeFilter NUMERIC_FILTER = AttributeTypeFilter.NUMERIC_FILTER; AttributeTypeFilter NOGEOM_FILTER = AttributeTypeFilter.NO_GEOMETRY_FILTER; AttributeTypeFilter ALL_FILTER = AttributeTypeFilter.ALL_FILTER; final JComboBox typeChooser = d.addComboBox( "Choose Attribute Type", "ALL", Arrays.asList(STRING_FILTER, NUMERIC_FILTER, ALL_FILTER, NOGEOM_FILTER), ""); final JComboBox layerChooser = d.addLayerComboBox("LayerField", null, "ToolTip", lm); final JComboBox attributeChooser = d.addAttributeComboBox("Attribute field", "LayerField", NUMERIC_FILTER, ""); typeChooser.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { AttributeTypeFilter atf = (AttributeTypeFilter) typeChooser.getSelectedItem(); layerChooser.setModel(new DefaultComboBoxModel(atf.filter(lm).toArray(new Layer[0]))); } }); d.addSeparator(); final JCheckBox jcb = d.addCheckBox("Display icon", false, ""); JButton button = d.addButton("Switch image panel"); button.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { if (d.infoPanel.getDescription().equals("")) { d.infoPanel.setDescription( "Description of the dialog box.\nThis description must be helpful for the user. I must give meaningful information about which parameters are mandatory, optional, what they represent and which value they can take."); d.getConsole().flashMessage("Add description"); } else { d.infoPanel.setDescription(""); d.getConsole().flashMessage("Remove description"); } d.pack(); } }); jcb.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { if (jcb.isSelected()) { d.infoPanel.setIcon( new ImageIcon( com.vividsolutions.jump.workbench.ui.images.IconLoader.class.getResource( "Butt.gif"))); d.getConsole().flashMessage("Add image"); } else { d.infoPanel.setIcon(null); d.getConsole().flashMessage("Remove image"); } d.pack(); } }); JButton button2 = d.addButton("Second button", "OK", ""); GUIUtil.centreOnScreen(d); d.setVisible(true); // System.out.println(d.getLayer("LayerField")); System.exit(0); }
private JButton getGraticuleButton() { jButtonGraticule = new JButton( I18N.get( MobileExtractPlugin.PluginMobileExtracti18n, MobilePluginI18NResource.MobileExtractPanel03_crearCuadricula)); LayerManager layerManager = context.getLayerManager(); Layer graticuleLayer = layerManager.getLayer(GraticuleCreatorEngine.getGraticuleName()); // si ya existe una capa cuadrícula significa que se trata de un fichero importado previamente a // ejecutar el asistente if (graticuleLayer != null) { jButtonGraticule.setEnabled(false); if (bCuadriculaCreada == true) { // solo ejecutamos este código una vez return jButtonGraticule; } FeatureCollectionWrapper graticuleCollectionWrapper = graticuleLayer.getFeatureCollectionWrapper(); FeatureSchema featureSchema = graticuleCollectionWrapper.getFeatureSchema(); // cuadriculas visionadas IViewport viewport = (IViewport) context.getLayerViewPanel().getViewport(); Envelope viewEnvelope = viewport.getEnvelopeInModelCoordinates(); List<Feature> graticuleFeatures = graticuleCollectionWrapper.query(viewEnvelope); // ordenamos por distancia al origen las features List<SortedFeature> sortedGraticuleFeatures = new ArrayList<SortedFeature>(); Feature feature = null; SortedFeature sortFeat = null; for (Iterator iterator = graticuleFeatures.iterator(); iterator.hasNext(); ) { feature = (Feature) iterator.next(); sortFeat = new SortedFeature(feature); sortedGraticuleFeatures.add(sortFeat); } Collections.sort(sortedGraticuleFeatures); // borramos el resto de cuadrículas graticuleCollectionWrapper.clear(); graticuleCollectionWrapper.addAll(graticuleFeatures); Envelope newWrapperEnvelope = graticuleCollectionWrapper.getEnvelope(); // zoom al envelope actual try { viewport.zoom(newWrapperEnvelope); } catch (NoninvertibleTransformException e) { log.warn("No se ha podido alcanzar el zoom " + newWrapperEnvelope); } // ajustamos la ventana al envelope de la cuadrícula resizeViewToEnvelope(context, newWrapperEnvelope, viewport); // guardamos las propiedades gráficas de la extracción Envelope featEnvelope = sortedGraticuleFeatures.get(0).getFeature().getGeometry().getEnvelopeInternal(); Double featWidth = featEnvelope.getWidth(); Double featHeight = featEnvelope.getHeight(); Double minX = newWrapperEnvelope.getMinX(); Double minY = newWrapperEnvelope.getMinY(); Coordinate coordCorner = new Coordinate(minX, minY); blackboard.put(GraticuleCreatorPlugIn.SOUTHWEST_CORNER_OF_LEFT_LAYER, coordCorner); blackboard.put(GraticuleCreatorPlugIn.CELL_SIDE_LENGTH_X, featWidth); blackboard.put(GraticuleCreatorPlugIn.CELL_SIDE_LENGTH_Y, featHeight); Integer numCeldasAncho = (int) (newWrapperEnvelope.getWidth() / featWidth); Integer numCeldasAlto = (int) (newWrapperEnvelope.getHeight() / featHeight); blackboard.put(GraticuleCreatorPlugIn.LAYER_WIDTH_IN_CELLS, numCeldasAncho); blackboard.put(GraticuleCreatorPlugIn.LAYER_HEIGHT_IN_CELLS, numCeldasAlto); // creamos celdas para los espacios en blanco if (sortedGraticuleFeatures.size() < numCeldasAncho * numCeldasAlto) { Double curMinX = minX; Double curMinY = minY; Double fMinX = 0.0; GeometryFactory geoFact = new GeometryFactory(); Feature newFeature = null; for (int i = 0; i < sortedGraticuleFeatures.size(); i++) { sortFeat = sortedGraticuleFeatures.get(i); feature = sortFeat.getFeature(); fMinX = feature.getGeometry().getEnvelopeInternal().getMinX(); if (curMinX.doubleValue() != fMinX.doubleValue()) { // creamos la feature newFeature = (Feature) feature.clone(); Coordinate[] coordArray = { new Coordinate(curMinX, curMinY), new Coordinate(curMinX + featWidth, curMinY), new Coordinate(curMinX + featWidth, curMinY + featHeight), new Coordinate(curMinX, curMinY + featHeight), new Coordinate(curMinX, curMinY) }; newFeature.setGeometry( geoFact.createPolygon(geoFact.createLinearRing(coordArray), null)); sortedGraticuleFeatures.add(i, new SortedFeature(newFeature)); graticuleCollectionWrapper.add(newFeature); } // para lo último else if ((i == sortedGraticuleFeatures.size() - 1) && ((minX + (featWidth * numCeldasAncho)) != (fMinX + featWidth))) { curMinX = fMinX + featWidth; newFeature = (Feature) feature.clone(); Coordinate[] coordArray = { new Coordinate(curMinX, curMinY), new Coordinate(curMinX + featWidth, curMinY), new Coordinate(curMinX + featWidth, curMinY + featHeight), new Coordinate(curMinX, curMinY + featHeight), new Coordinate(curMinX, curMinY) }; newFeature.setGeometry( geoFact.createPolygon(geoFact.createLinearRing(coordArray), null)); sortedGraticuleFeatures.add( sortedGraticuleFeatures.size(), new SortedFeature(newFeature)); graticuleCollectionWrapper.add(newFeature); continue; } if (((i + 1) % numCeldasAncho) != 0) { curMinX = curMinX + featWidth; } else { // ultima celda de cada fila curMinX = minX; curMinY += featHeight; } } } // añadimos el atributo cellid featureSchema.addAttribute(GraticuleCreatorEngine.ATR_CELL_ID, AttributeType.INTEGER); int k = 1; Object[] featAttribs = null; Object[] newFeatAttribs = null; for (Iterator iterator = sortedGraticuleFeatures.iterator(); iterator.hasNext(); k++) { feature = ((SortedFeature) iterator.next()).getFeature(); featAttribs = feature.getAttributes(); newFeatAttribs = new Object[featAttribs.length + 1]; for (int i = 0; i < featAttribs.length; i++) { newFeatAttribs[i] = featAttribs[i]; } newFeatAttribs[newFeatAttribs.length - 1] = k; feature.setAttributes(newFeatAttribs); } // pintamos el atributo en la capa LabelStyle labelStyle = graticuleLayer.getLabelStyle(); labelStyle.setColor(Color.RED); labelStyle.setHeight(labelStyle.getHeight() * 4); labelStyle.setAttribute(GraticuleCreatorEngine.ATR_CELL_ID); labelStyle.setEnabled(true); // evitamos que se modifiquen las cuadrículas graticuleLayer.setEditable(false); graticuleLayer.fireAppearanceChanged(); bCuadriculaCreada = true; } // llamada al graticulePlugin else { jButtonGraticule.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { GraticuleCreatorPlugIn graticulePlugin = new GraticuleCreatorPlugIn(); try { graticulePlugin.execute(context); } catch (Exception e1) { e1.printStackTrace(); } wizardContext.inputChanged(); // indicamos que ya se puede habilitar el boton } }); } return jButtonGraticule; }