⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coverageseditoraction.java

📁 电子地图服务器,搭建自己的地图服务
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org.  All rights reserved.
 * This code is licensed under the GPL 2.0 license, availible at the root
 * application directory.
 */
package org.vfny.geoserver.action.data;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.MessageResources;
import org.geotools.coverage.grid.io.AbstractGridCoverage2DReader;
import org.geotools.coverage.grid.io.AbstractGridFormat;
import org.geotools.factory.FactoryRegistryException;
import org.geotools.geometry.GeneralEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.NamedIdentifier;
import org.geotools.resources.CRSUtilities;
import org.opengis.coverage.grid.Format;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.cs.AxisDirection;
import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import org.vfny.geoserver.action.ConfigAction;
import org.vfny.geoserver.action.HTMLEncoder;
import org.vfny.geoserver.config.CoverageConfig;
import org.vfny.geoserver.config.DataConfig;
import org.vfny.geoserver.form.data.CoveragesEditorForm;
import org.vfny.geoserver.global.CoverageStoreInfo;
import org.vfny.geoserver.global.Data;
import org.vfny.geoserver.global.GeoserverDataDirectory;
import org.vfny.geoserver.global.MetaDataLink;
import org.vfny.geoserver.global.UserContainer;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * These Action handles all the buttons for the Coverage Editor.
 *
 * <p>
 * Buttons that make this action go:
 *
 * <ul>
 * <li> Submit: update the CoverageConfig held by the user, punt it back into
 * DataConfig and return to the CoverageSelect screen. </li>
 * </ul>
 *
 * As usual we will have to uninternationlize the action name provided to us.
 * </p>
 *
 * @author Richard Gould
 * @author Jody Garnett
 * @author $Author: Alessio Fabiani (alessio.fabiani@gmail.com) $ (last
 *         modification)
 * @author $Author: Simone Giannecchini (simboss1@gmail.com) $ (last
 *         modification)
 */
public final class CoveragesEditorAction extends ConfigAction {
    public ActionForward execute(ActionMapping mapping, ActionForm form, UserContainer user,
        HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException {
        if (LOGGER.isLoggable(Level.FINER)) {
            LOGGER.finer(new StringBuffer("form bean:").append(form.getClass().getName()).toString());
        }

        final CoveragesEditorForm coverageForm = (CoveragesEditorForm) form;

        String action = coverageForm.getAction();

        if (LOGGER.isLoggable(Level.FINER)) {
            LOGGER.finer(new StringBuffer("CoveragesEditorAction is ").append(action).toString());
        }

        String newCoverage = coverageForm.getNewCoverage();

        if (LOGGER.isLoggable(Level.FINER)) {
            LOGGER.finer(new StringBuffer("CoveragesEditorNew is ").append(newCoverage).toString());
        }

        Locale locale = (Locale) request.getLocale();
        MessageResources messages = getResources(request);
        final String SUBMIT = HTMLEncoder.decode(messages.getMessage(locale, "label.submit"));
        final String ENVELOPE = HTMLEncoder.decode(messages.getMessage(locale,
                    "config.data.calculateBoundingBox.label"));
        final String LOOKUP_SRS = HTMLEncoder.decode(messages.getMessage(locale,
                    "config.data.lookupSRS.label"));

        if (LOGGER.isLoggable(Level.FINER)) {
            LOGGER.finer(new StringBuffer("ENVELOPE: ").append(ENVELOPE).toString());
        }

        if (SUBMIT.equals(action)) {
            return executeSubmit(mapping, coverageForm, user, request);
        }

        if ((newCoverage != null) && "true".equals(newCoverage)) {
            if (LOGGER.isLoggable(Level.FINER)) {
                LOGGER.finer(new StringBuffer("NEW COVERAGE: ").append(newCoverage).toString());
            }

            request.setAttribute(DataCoveragesNewAction.NEW_COVERAGE_KEY, "true");
        }

        if (ENVELOPE.equals(action)) {
            return executeEnvelope(mapping, coverageForm, user, request);
        }

        if (LOOKUP_SRS.equals(action)) {
            return executeLookupSRS(mapping, coverageForm, user, request);
        }

        // Update, Up, Down, Add, Remove need to resync
        try {
            sync(coverageForm, user.getCoverageConfig(), request);
        } catch (FactoryException e) {
            throw new ServletException(e);
        }

        form.reset(mapping, request);

        return mapping.findForward("config.data.coverage.editor");
    }

    /**
     * Populate the bounding box fields from the source and pass control back to
     * the UI
     *
     * @param mapping
     *            DOCUMENT ME!
     * @param coverageForm
     *            DOCUMENT ME!
     * @param user
     *            DOCUMENT ME!
     * @param request
     *            DOCUMENT ME!
     *
     * @return DOCUMENT ME!
     *
     * @throws IOException
     *             DOCUMENT ME!
     * @throws ServletException
     *             DOCUMENT ME!
     */
    private ActionForward executeEnvelope(ActionMapping mapping, CoveragesEditorForm coverageForm,
        UserContainer user, HttpServletRequest request)
        throws IOException, ServletException {
        final String formatID = coverageForm.getFormatId();
        final Data catalog = getData();
        CoverageStoreInfo cvStoreInfo = catalog.getFormatInfo(formatID);

        if (cvStoreInfo == null) {
            cvStoreInfo = new CoverageStoreInfo(getDataConfig().getDataFormat(formatID).toDTO(),
                    catalog);
        }

        final Format format = cvStoreInfo.getFormat();
        AbstractGridCoverage2DReader reader = (AbstractGridCoverage2DReader) cvStoreInfo.getReader();

        if (reader == null) {
            reader = (AbstractGridCoverage2DReader) ((AbstractGridFormat) format).getReader(GeoserverDataDirectory
                    .findDataFile(cvStoreInfo.getUrl()));
        }

        try {
            final CoordinateReferenceSystem sourceCRS = reader.getCrs();
            final GeneralEnvelope gEnvelope = reader.getOriginalEnvelope();
            final GeneralEnvelope targetEnvelope = gEnvelope;
            GeneralEnvelope envelope = targetEnvelope;

            if (sourceCRS.getIdentifiers().isEmpty()) {
                String nativeCRS = coverageForm.getSrsName();

                if (nativeCRS != null) {
                    MathTransform transform;

                    if (!nativeCRS.toUpperCase().startsWith("EPSG:")) {
                        try {
                            nativeCRS = "EPSG:" + Integer.decode(nativeCRS);
                            transform = CRS.findMathTransform(sourceCRS, CRS.decode(nativeCRS), true);
                            envelope = CRSUtilities.transform(transform, envelope);
                            coverageForm.setSrsName(nativeCRS);
                        } catch (NumberFormatException e) {
                            coverageForm.setSrsName("UNKNOWN");
                        }
                    } else {
                        transform = CRS.findMathTransform(sourceCRS, CRS.decode(nativeCRS), true);
                        envelope = CRSUtilities.transform(transform, envelope);
                    }
                } else {
                    coverageForm.setSrsName("UNKNOWN");
                }
            } else {
                String identifier = sourceCRS.getIdentifiers().toArray()[0].toString();

                /*
                 * CRS.lookupIdentifier(sourceCRS, Collections
                 * .singleton("EPSG"), false);
                 */
                if ((identifier != null) && !identifier.startsWith("EPSG:")) {
                    identifier = "EPSG:" + identifier;
                }

                coverageForm.setSrsName(identifier);
            }

            coverageForm.setWKTString(sourceCRS.toWKT());
            coverageForm.setMinX(Double.toString(envelope.getLowerCorner().getOrdinate(0)));
            coverageForm.setMaxX(Double.toString(envelope.getUpperCorner().getOrdinate(0)));
            coverageForm.setMinY(Double.toString(envelope.getLowerCorner().getOrdinate(1)));
            coverageForm.setMaxY(Double.toString(envelope.getUpperCorner().getOrdinate(1)));
        } catch (FactoryRegistryException e) {
            throw new ServletException(e);
        } catch (MismatchedDimensionException e) {
            throw new ServletException(e);
        } catch (IndexOutOfBoundsException e) {
            throw new ServletException(e);
        } catch (NoSuchAuthorityCodeException e) {
            throw new ServletException(e);
        } catch (FactoryException e) {
            throw new ServletException(e);
        } catch (TransformException e) {
            throw new ServletException(e);
        }

        return mapping.findForward("config.data.coverage.editor");
    }

    /**
     * Sync generated attributes with schemaBase.
     *
     * @param form
     * @param config
     * @throws FactoryException
     */
    private void sync(CoveragesEditorForm form, CoverageConfig config, HttpServletRequest request)
        throws FactoryException {
        config.setDefaultInterpolationMethod(form.getDefaultInterpolationMethod());
        config.setDescription(form.getDescription());
        config.setInterpolationMethods(interpolationMethods(form));
        config.setKeywords(keyWords(form));
        config.setLabel(form.getLabel());
        config.setMetadataLink(metadataLink(form));
        config.setNativeFormat(form.getNativeFormat());
        config.setRequestCRSs(requestCRSs(form));
        config.setResponseCRSs(responseCRSs(form));
        config.setCrs(CRS.parseWKT(form.getWKTString()));
        if(!form.getSrsName().toUpperCase().startsWith("EPSG"))
            config.setSrsName("EPSG:" + form.getSrsName());
        else
            config.setSrsName(form.getSrsName());
        config.setSrsWKT(form.getWKTString());

        if (!"UNKNOWN".equals(config.getSrsName()) && (config.getSrsName() != null)
                && config.getSrsName().toUpperCase().startsWith("EPSG:")) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -