Java tutorial
/* uDig-Spatial Operations plugins * http://b5m.gipuzkoa.net * (C) 2006, Diputacin Foral de Gipuzkoa, Ordenacin Territorial. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package es.axios.udig.spatialoperations.internal.ui.dialogs; import net.refractions.udig.ui.FeatureTypeEditor; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.feature.type.GeometryDescriptor; import es.axios.udig.spatialoperations.internal.i18n.Messages; import es.axios.udig.ui.commons.util.GeoToolsUtils; /** * This dialog is used to create new layers. * <p> * * </p> * @author Mauricio Pazos (www.axios.es) * @author Gabriel Roldan (www.axios.es) * @since 1.1.0 */ public class CreateNewLayerDialog extends TitleAreaDialog { private SimpleFeatureTypeBuilder defaultBuilder = null; private Button okButton = null; private Button cancelButton = null; private FeatureTypeBuilderValidator validateFeatureType = null; private SimpleFeatureType newFeatureType = null; public CreateNewLayerDialog(Shell parentShell) { super(parentShell); } @Override protected Control createContents(Composite parent) { Control ctrl = super.createContents(parent); setTitle(Messages.CreateNewLayerDialog_title); setMessage(Messages.CreateNewLayerDialog_specific_attributes, IMessageProvider.INFORMATION); return ctrl; } @Override protected Control createDialogArea(Composite parent) { final Composite compositeDialog = (Composite) super.createDialogArea(parent); FeatureTypeEditor editor = new FeatureTypeEditor(); this.defaultBuilder = GeoToolsUtils.createDefaultFeatureType(); FeatureTypeBuilderValidator validator = new FeatureTypeBuilderValidator() { public boolean validate(SimpleFeatureTypeBuilder builder) { final String name = builder.getName(); if (name == null || "".equals(name)) { //$NON-NLS-1$ setMessage(Messages.CreateNewLayerDialog_must_set_the_feature_name); return false; } SimpleFeatureType type = null; try { type = builder.buildFeatureType(); } catch (IllegalArgumentException e) { final String msg = Messages.CreateNewLayerDialog_failed_creatin_the_feature_type; setMessage(msg); throw (RuntimeException) new RuntimeException(msg).initCause(e); } assert type != null; GeometryDescriptor geoAttr = type.getDefaultGeometry(); // builder.getDefaultGeometry(); if (geoAttr == null || "".equals(geoAttr.getName())) { //$NON-NLS-1$ setMessage(Messages.CreateNewLayerDialog_must_set_the_geometry); return false; } //TODO validar consistencia enter sources layer y el nuevo (podrian filtrarse para que solo pueda seleccionar un tipo de geometria vlida con LayerFilter ) return true; } }; this.validateFeatureType = validator; new CreateLayerComposite(compositeDialog, SWT.NONE, editor, this.defaultBuilder); return compositeDialog; } @Override protected void createButtonsForButtonBar(Composite parent) { this.okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); this.cancelButton = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } @Override protected void buttonPressed(int buttonId) { assert this.defaultBuilder != null; this.newFeatureType = null; if (IDialogConstants.OK_ID == buttonId) { //validates input if (!this.validateFeatureType.validate(this.defaultBuilder)) { return; } // the feature type is ok then sets this value in dialog state try { this.newFeatureType = this.defaultBuilder.buildFeatureType(); } catch (IllegalArgumentException e) { final String msg = Messages.CreateNewLayerDialog_failed_getting_new_feature_type; throw (RuntimeException) new RuntimeException(msg).initCause(e); } } setReturnCode(buttonId); close(); } @Override public int open() { int code = super.open(); // this.okButton.setEnabled(false); // this.cancelButton.setEnabled(true); return code; } /** * @return a new SimpleFeature Type */ public SimpleFeatureType getNewLayer() { assert this.getReturnCode() == IDialogConstants.OK_ID; assert this.newFeatureType != null; return this.newFeatureType; } }