Package org.geoserver.gwc

Source Code of org.geoserver.gwc.GWCTransactionListener

/**
* 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.
*
* @author Arne Kepp / OpenGeo
*/
package org.geoserver.gwc;

import java.util.Iterator;
import java.util.logging.Logger;

import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.wfs.TransactionEvent;
import org.geoserver.wfs.TransactionListener;
import org.geoserver.wfs.WFSException;
import org.geotools.util.logging.Logging;

public class GWCTransactionListener implements TransactionListener {
    private static Logger log = Logging.getLogger("org.geoserver.gwc.GWCTransactionListener");
   
    final private Catalog cat;
   
    final private GWCCleanser cleanser;
   
    public GWCTransactionListener(Catalog cat, GWCCleanser cleanser) {
        this.cat = cat;
        this.cleanser = cleanser;
    }
   
// TODO limit to subset
    public void dataStoreChange(TransactionEvent event) throws WFSException {
        String prefix = null;
        String layerName = null;
       
        try {
            prefix = cat.getNamespaceByURI(event.getLayerName().getNamespaceURI()).getPrefix();
            layerName = prefix +":"+ event.getLayerName().getLocalPart();
        } catch(NullPointerException npe) {
            log.fine("Null pointer while trying to determine feature prefix. Cache not truncated.");
            return;
        }
       
        // The layer itself
        cleanser.deleteLayer(layerName);
       
        // Now we check for layer groups that are affected
        Iterator<LayerGroupInfo> lgiter = cat.getLayerGroups().iterator();
        while(lgiter.hasNext()) {
            boolean truncate = false;
            LayerGroupInfo lgi = lgiter.next();
            //System.out.println(lgi.getName());
           
            // First we check for referenced to affected layers
            Iterator<LayerInfo> liter = lgi.getLayers().iterator();
            while(! truncate && liter.hasNext()) {
                LayerInfo li = liter.next();
                //System.out.println("   " + li.getResource().getPrefixedName());
                if(li.getResource().getPrefixedName().equals(layerName)) {
                    truncate = true;
                }
            }
           
            if(truncate) {
                cleanser.deleteLayer(lgi.getName());
            }
            // Next layer group
        }       
    }
}
TOP

Related Classes of org.geoserver.gwc.GWCTransactionListener

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.