org.geoserver.script.wfs.WfsTxHookTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geoserver.script.wfs.WfsTxHookTest.java

Source

/* Copyright (c) 2001 - 2013 OpenPlans - 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.script.wfs;

import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

import javax.script.ScriptEngine;

import org.apache.commons.io.FileUtils;
import org.geoserver.script.ScriptIntTestSupport;
import org.geoserver.wfs.WFSException;
import org.geoserver.wfs.request.TransactionRequest;
import org.geoserver.wfs.request.TransactionResponse;

public abstract class WfsTxHookTest extends ScriptIntTestSupport {

    public abstract String getExtension();

    File copyOverFile(String basename) throws Exception {
        File wfsTx = scriptMgr.getWfsTxRoot();
        File f = new File(wfsTx, basename + "." + getExtension());

        FileUtils.copyURLToFile(getClass().getResource(f.getName()), f);
        return f;
    }

    public void testLookupHook() throws Exception {
        File script = copyOverFile("tx");
        assertNotNull(scriptMgr.lookupWfsTxHook(script));
    }

    public void testHookExecution() throws Exception {
        File script = copyOverFile("tx");
        TransactionRequest tx = new TransactionRequest.WFS11(null);
        TransactionResponse res = new TransactionResponse.WFS11(null);

        Map context = new HashMap();

        ScriptEngine eng = scriptMgr.createNewEngine(script);
        eng.eval(new FileReader(script));

        WfsTxHook hook = getScriptManager().lookupWfsTxHook(script);
        hook.handleBefore(eng, tx, context);
        hook.handlePreInsert(eng, null, tx, context);
        hook.handlePostInsert(eng, null, tx, context);
        hook.handlePreUpdate(eng, null, null, tx, context);
        hook.handlePostUpdate(eng, null, null, tx, context);
        hook.handlePreDelete(eng, null, tx, context);
        hook.handlePostDelete(eng, null, tx, context);
        hook.handlePreCommit(eng, tx, context);
        hook.handlePostCommit(eng, tx, res, context);
        hook.handleAbort(eng, tx, res, context);

        assertTrue(context.containsKey("before"));
        assertTrue(context.containsKey("preInsert"));
        assertTrue(context.containsKey("postInsert"));
        assertTrue(context.containsKey("preUpdate"));
        assertTrue(context.containsKey("postUpdate"));
        assertTrue(context.containsKey("preDelete"));
        assertTrue(context.containsKey("postDelete"));
        assertTrue(context.containsKey("preCommit"));
        assertTrue(context.containsKey("postCommit"));
        assertTrue(context.containsKey("abort"));
    }

    public void testHookError() throws Exception {
        File script = copyOverFile("tx-error");

        TransactionRequest tx = new TransactionRequest.WFS11(null);
        TransactionResponse res = new TransactionResponse.WFS11(null);

        Map context = new HashMap();

        ScriptEngine eng = scriptMgr.createNewEngine(script);
        eng.eval(new FileReader(script));

        WfsTxHook hook = getScriptManager().lookupWfsTxHook(script);
        try {
            hook.handleBefore(eng, tx, context);
            fail("exected WFS exception");
        } catch (WFSException e) {
            assertEquals("before exception", e.getMessage());
        }
    }
}