Package org.geoserver.web.importer

Source Code of org.geoserver.web.importer.ImportSummaryPage

/* Copyright (c) 2001 - 2008 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.importer;

import static org.geoserver.web.importer.ImportSummaryProvider.*;

import java.util.logging.Level;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.ExternalLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.geoserver.catalog.CascadeDeleteVisitor;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.StoreInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.importer.ImportStatus;
import org.geoserver.importer.ImportSummary;
import org.geoserver.importer.LayerSummary;
import org.geoserver.web.CatalogIconFactory;
import org.geoserver.web.GeoServerSecuredPage;
import org.geoserver.web.data.resource.ResourceConfigurationPage;
import org.geoserver.web.demo.PreviewLayer;
import org.geoserver.web.wicket.ConfirmationAjaxLink;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.geoserver.web.wicket.ParamResourceModel;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.opengis.feature.type.GeometryDescriptor;

/**
* Reports the import results in a table and allows the user to
* edit the and to preview the layers
* @author aaime
*
*/
@SuppressWarnings("serial")
public class ImportSummaryPage extends GeoServerSecuredPage {

    public ImportSummaryPage(final ImportSummary summary) {
        // the synthetic results
        IModel summaryMessage;
        Exception error = summary.getError();
        if(error != null) {
            String errorSummary = error.getClass().getSimpleName() + ", " + error.getMessage();
            summaryMessage = new ParamResourceModel("summaryError", this, errorSummary);
        } else if(summary.getProcessedLayers() == 0) {
            summaryMessage = new ParamResourceModel("summaryCancelled", this);
        } else {
            if(summary.getFailures() > 0) {
                if(summary.isCompleted()) {
                    summaryMessage = new ParamResourceModel("summaryFailures", this, summary.getTotalLayers(), summary.getFailures());
                } else {
                    summaryMessage = new ParamResourceModel("summaryPartialFailures", this, summary.getTotalLayers(),
                            summary.getProcessedLayers(), summary.getFailures());
                }
            } else {
                if(summary.isCompleted()) {
                    summaryMessage = new ParamResourceModel("summarySuccess", this, summary.getTotalLayers());
                } else {
                    summaryMessage = new ParamResourceModel("summaryPartialSuccess", this, summary.getTotalLayers(),
                            summary.getProcessedLayers());
                }
            }
        }
        add(new Label("summary", summaryMessage));
       
        // the list of imported layers
        GeoServerTablePanel<LayerSummary> table = new GeoServerTablePanel<LayerSummary>("importSummary", new ImportSummaryProvider(
                summary.getLayers())) {

            @Override
            protected Component getComponentForProperty(String id, IModel itemModel,
                    Property<LayerSummary> property) {
                final LayerSummary layerSummary = (LayerSummary) itemModel.getObject();
                final CatalogIconFactory icons = CatalogIconFactory.get();
                LayerInfo layer = layerSummary.getLayer();
        if(property == LAYER) {
                    Fragment f = new Fragment(id, "edit", ImportSummaryPage.this);
                   
                    Link editLink = editLink(layerSummary);
                    editLink.setEnabled(layer != null);
                    f.add(editLink);
                   
                    return f;
                } else if(property == STATUS) {
                    ResourceReference icon = layerSummary.getStatus().successful() ?
                            icons.getEnabledIcon() : icons.getDisabledIcon();
                    Fragment f = new Fragment(id, "iconFragment", ImportSummaryPage.this);
                    f.add(new Image("icon", icon));
                    return f;
                } else if(property == TYPE) {
                    if(layer != null) {
                        ResourceReference icon = icons.getSpecificLayerIcon(layer);
                        Fragment f = new Fragment(id, "iconFragment", ImportSummaryPage.this);
                        Image image = new Image("icon", icon);
                        image.add(new AttributeModifier("title", true, new Model(getTypeTooltip(layer))));
            f.add(image);
                        return f;
                    } else {
                        return new Label(id, "");
                    }
                } else if(property == COMMANDS) {
                    Fragment f = new Fragment(id, "preview", ImportSummaryPage.this);

                    ExternalLink link = new ExternalLink("preview", "#");
                    if(layerSummary.getStatus().successful()) {
                        // TODO: move the preview link generation ability to some utility object
                        PreviewLayer preview = new PreviewLayer(layer);
                        String url = "window.open(\"" + preview.getWmsLink() + "&format=application/openlayers\")";
                        link.add(new AttributeAppender("onclick", new Model(url), ";"));
                    } else {
                        link.setEnabled(false);
                    }
                    f.add(link);
                   
                    return f;
                }
                return null;
            }

           
        };
        table.setOutputMarkupId(true);
        table.setFilterable(false);
        add(table);
       
        // the rollback command
        add(new ConfirmationAjaxLink("rollback", null,
                new ParamResourceModel("rollback", this),
                new ParamResourceModel("confirmRollback", this)) {
           
            @Override
            protected void onClick(AjaxRequestTarget target) {
                Catalog catalog = getCatalog();
                CascadeDeleteVisitor deleteVisitor = new CascadeDeleteVisitor(catalog);
                String project = summary.getProject();
                if(summary.isWorkspaceNew()) {
                    WorkspaceInfo ws = catalog.getWorkspaceByName(project);
                    if(ws != null)
                        ws.accept(deleteVisitor);
                } else if(summary.isStoreNew()) {
                    StoreInfo si = catalog.getStoreByName(project, project, StoreInfo.class);
                    if(si != null)
                        si.accept(deleteVisitor);
                } else {
                    // just remove the layers we created
                    for (LayerSummary layer : summary.getLayers()) {
                        catalog.remove(layer.getLayer());
                        catalog.remove(layer.getLayer().getResource());
                    }
                }
                setResponsePage(ImportPage.class, new PageParameters("afterCleanup=true"));
            }
        });
    }
   
    Link editLink(final LayerSummary layerSummary) {
        Link link = new Link("edit") {

            @Override
            public void onClick() {
                Page p = new ResourceConfigurationPage(layerSummary.getLayer(), true) {
                    @Override
                    protected void onSuccessfulSave() {
                        setResponsePage(ImportSummaryPage.this);
                        layerSummary.setStatus(ImportStatus.SUCCESS);
                    }
                   
                    @Override
                    protected void onCancel() {
                        setResponsePage(ImportSummaryPage.this);
                    }
                };
                setResponsePage(p);
            }
           
        };
       
        // keep the last modified name if possible
        String name;
        if(layerSummary.getLayer() != null)
            name = layerSummary.getLayer().getName();
        else
            name =  layerSummary.getLayerName();
        link.add(new Label("name", name));
       
        // also set a tooltip explaining what this action does
        link.add(new AttributeModifier("title", true, new ParamResourceModel("edit", this, name)));
       
        return link;
    }
   
    String getTypeTooltip(LayerInfo layer) {
      try {
        String type = null;
        FeatureTypeInfo fti = (FeatureTypeInfo) layer.getResource();
          GeometryDescriptor gd = fti.getFeatureType().getGeometryDescriptor();
          if(gd != null) {
              type = gd.getType().getBinding().getSimpleName();
          }
          if(type != null)
            return new ParamResourceModel("geomtype." + type, ImportSummaryPage.this).getString();
          else
            return "geomtype.null";
      } catch(Exception e) {
        LOGGER.log(Level.WARNING, "Could not compute the geom type tooltip", e);
        return "geomtype.error";
      }
    }

}
TOP

Related Classes of org.geoserver.web.importer.ImportSummaryPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.