/**
* 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
}
}
}