Package org.geoserver.web.data.store.arcsde

Source Code of org.geoserver.web.data.store.arcsde.ArcSDECoverageStoreEditPanelTest

/* Copyright (c) 2001 - 2009 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.data.store.arcsde;

import java.io.IOException;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import org.apache.wicket.Page;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.tester.FormTester;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.web.GeoServerApplication;
import org.geoserver.web.GeoServerWicketTestSupport;
import org.geoserver.web.data.store.CoverageStoreEditPage;
import org.geoserver.web.data.store.CoverageStoreNewPage;
import org.geoserver.web.data.store.StoreEditPanel;
import org.geoserver.web.data.store.StoreExtensionPoints;
import org.geoserver.web.data.store.panel.PasswordParamPanel;
import org.geoserver.web.data.store.panel.TextParamPanel;
import org.geotools.arcsde.raster.gce.ArcSDERasterFormat;
import org.geotools.arcsde.session.ArcSDEConnectionConfig;
import org.geotools.arcsde.session.ISession;
import org.geotools.arcsde.session.ISessionPool;
import org.geotools.arcsde.session.ISessionPoolFactory;
import org.geotools.arcsde.session.SessionWrapper;
import org.geotools.arcsde.session.UnavailableConnectionException;

/**
*
* @author Gabriel Roldan
*/
public class ArcSDECoverageStoreEditPanelTest extends GeoServerWicketTestSupport {

    private Page page;

    private CoverageStoreInfo storeInfo;

    private Form editForm;

    @Override
    protected void setUpInternal() throws Exception {
    }

    private ArcSDECoverageStoreEditPanel startPanelToEditStore() {
        final Catalog catalog = getCatalog();
        storeInfo = catalog.getFactory().createCoverageStore();
        storeInfo.setDescription("fake arcsde store");
        storeInfo.setEnabled(true);
        storeInfo.setName("fakeArcsde");
        storeInfo.setType(ArcSDERasterFormat.getInstance().getName());
        storeInfo.setWorkspace(catalog.getDefaultWorkspace());
        storeInfo.setURL("sde://user:pass@localhost:5151/#FAKE.TABLE");

        catalog.save(storeInfo);

        final String storeId = storeInfo.getId();

        login();
        page = new CoverageStoreEditPage(storeId);
        tester.startPage(page);

        editForm = (Form) tester.getComponentFromLastRenderedPage("rasterStoreForm");

        ArcSDECoverageStoreEditPanel panel = (ArcSDECoverageStoreEditPanel) tester
                .getComponentFromLastRenderedPage("rasterStoreForm:parametersPanel");

        return panel;
    }

    private ArcSDECoverageStoreEditPanel startPanelForNewStore() {
        login();
        page = new CoverageStoreNewPage(ArcSDERasterFormat.getInstance().getName());
        tester.startPage(page);

        editForm = (Form) tester.getComponentFromLastRenderedPage("rasterStoreForm");

        ArcSDECoverageStoreEditPanel panel = (ArcSDECoverageStoreEditPanel) tester
                .getComponentFromLastRenderedPage("rasterStoreForm:parametersPanel");

        return panel;
    }

    public void testExtensionPoint() {
        storeInfo = getCatalog().getFactory().createCoverageStore();
        storeInfo.setType(ArcSDERasterFormat.getInstance().getName());
        // need to set name so BaseWicketTester does not fail on storeInfo.toString returning
        // null... odd.
        storeInfo.setName("test storeInfo Name");

        editForm = new Form("formId");
        editForm.setModel(new Model(storeInfo));
        GeoServerApplication app = getGeoServerApplication();

        StoreEditPanel storeEditPanel = StoreExtensionPoints.getStoreEditPanel("id", editForm,
                storeInfo, app);
        assertNotNull(storeEditPanel);
        assertTrue(storeEditPanel instanceof ArcSDECoverageStoreEditPanel);
    }

    public void testStartupForNew() {
        startPanelForNewStore();

        final String base = "rasterStoreForm:parametersPanel:";
        tester.assertComponent(base + "connectionPrototype", DropDownChoice.class);
        tester.assertComponent(base + "server", TextParamPanel.class);
        tester.assertComponent(base + "port", TextParamPanel.class);
        tester.assertComponent(base + "instance", TextParamPanel.class);
        tester.assertComponent(base + "user", TextParamPanel.class);
        tester.assertComponent(base + "password", PasswordParamPanel.class);
        tester.assertComponent(base + "tableNamePanel", RasterTableSelectionPanel.class);
    }

    public void testStartupForEdit() {
        startPanelToEditStore();
        // print(page, true, true);

        final String base = "rasterStoreForm:parametersPanel:";
        tester.assertComponent(base + "connectionPrototype", DropDownChoice.class);
        tester.assertComponent(base + "server", TextParamPanel.class);
        tester.assertComponent(base + "port", TextParamPanel.class);
        tester.assertComponent(base + "instance", TextParamPanel.class);
        tester.assertComponent(base + "user", TextParamPanel.class);
        tester.assertComponent(base + "password", PasswordParamPanel.class);
        // this is a TextParamPanel instead of a RasterTableSelectionPanel when editing instead of
        // adding
        tester.assertComponent(base + "tableNamePanel", TextParamPanel.class);
        tester.assertModelValue(base + "tableNamePanel:border:paramValue", "FAKE.TABLE");
    }

    /**
     * Connection parameters are not properly set and the refresh raster tables button is hit
     */
    public void testRefreshRasterTableListBadConnectionParams() {
        startPanelForNewStore();
        final FormTester formTester = tester.newFormTester("rasterStoreForm");

        final String base = "rasterStoreForm:parametersPanel:";
        RasterTableSelectionPanel tableChooserPanel = (RasterTableSelectionPanel) tester
                .getComponentFromLastRenderedPage(base + "tableNamePanel");

        tableChooserPanel.setSessionFactory(new ISessionPoolFactory() {

            public ISessionPool createPool(final ArcSDEConnectionConfig config) throws IOException {
                throw new IOException("can't connect for some reason");
            }
        });

        // print(page, true, true);
        // simulate clicking on the refresh button
        String submitLink = base + "tableNamePanel:refresh";
        tester.executeAjaxEvent(submitLink, "onclick");
        FeedbackMessage feedbackMessage = formTester.getForm().getFeedbackMessage();
        assertNotNull(feedbackMessage);
        Serializable message = feedbackMessage.getMessage();
        assertNotNull(message);
        String expectedMessage = "Refreshing raster tables list: can't connect for some reason";
        assertEquals(expectedMessage, message.toString());
    }

    /**
     * Connection parameters are properly set and the refresh raster tables button is hit, producing
     * the DropDownChoice to be filled up with the table names
     */
    public void testRefreshRasterTableList() {
        startPanelForNewStore();
        final FormTester formTester = tester.newFormTester("rasterStoreForm");

        final String base = "rasterStoreForm:parametersPanel:";
        RasterTableSelectionPanel tableChooserPanel = (RasterTableSelectionPanel) tester
                .getComponentFromLastRenderedPage(base + "tableNamePanel");

        final List<String> rasterColumns = Arrays.asList("FAKE.TABLE1", "FAKE.TABLE2",
                "FAKE.TABLE3");

        tableChooserPanel.setSessionFactory(new ISessionPoolFactory() {

            public ISessionPool createPool(final ArcSDEConnectionConfig config) throws IOException {
                return new ISessionPool() {
                    public ISession getSession() throws IOException, UnavailableConnectionException {
                        return getSession(true);
                    }
                    public ISession getSession(final boolean transactional) throws IOException, UnavailableConnectionException {
                        return new SessionWrapper(null) {
                            @Override
                            public List<String> getRasterColumns() throws IOException {
                                return rasterColumns;
                            }

                            @Override
                            public void dispose() {
                                // do nothing
                            }
                        };
                    }

                    public boolean isClosed() {
                        return false;
                    }

                    public int getPoolSize() {
                        return 1;
                    }

                    public int getInUseCount() {
                        return 0;
                    }

                    public ArcSDEConnectionConfig getConfig() {
                        return config;
                    }

                    public int getAvailableCount() {
                        return 1;
                    }

                    public void close() {
                        // do nothing
                    }
                };
            }
        });

        //print(page, true, true);

        final String dropDownPath = base + "tableNamePanel:border:rasterTable";
        final DropDownChoice choice = (DropDownChoice) tester
                .getComponentFromLastRenderedPage(dropDownPath);
        assertTrue(choice.getChoices().isEmpty());

        // simulate clicking on the refresh button
        String submitLink = base + "tableNamePanel:refresh";
        tester.executeAjaxEvent(submitLink, "onclick");
        FeedbackMessage feedbackMessage = formTester.getForm().getFeedbackMessage();
        assertNull(feedbackMessage);

        assertEquals(rasterColumns, choice.getChoices());
    }
}
TOP

Related Classes of org.geoserver.web.data.store.arcsde.ArcSDECoverageStoreEditPanelTest

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.