/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.config; import java.util.List; import org.geoserver.catalog.CatalogException; import org.geoserver.catalog.event.CatalogAddEvent; import org.geoserver.catalog.event.CatalogListener; import org.geoserver.catalog.event.CatalogModifyEvent; import org.geoserver.catalog.event.CatalogPostModifyEvent; import org.geoserver.catalog.event.CatalogRemoveEvent; /** * Updates the updateSequence on Catalog events. */ class UpdateSequenceListener implements CatalogListener, ConfigurationListener { GeoServer geoServer; boolean updating = false; public UpdateSequenceListener(GeoServer geoServer) { this.geoServer = geoServer; geoServer.getCatalog().addListener(this); geoServer.addListener(this); } synchronized void incrementSequence() { // prevent infinite loop on configuration update if(updating) return; try { updating = true; GeoServerInfo gsInfo = geoServer.getGlobal(); gsInfo.setUpdateSequence(gsInfo.getUpdateSequence() + 1); geoServer.save(gsInfo); } finally { updating = false; } } public void handleAddEvent(CatalogAddEvent event) throws CatalogException { incrementSequence(); } public void handleRemoveEvent(CatalogRemoveEvent event) throws CatalogException { incrementSequence(); } public void handleModifyEvent(CatalogModifyEvent event) throws CatalogException { // never mind: we need the Post event } public void handlePostModifyEvent(CatalogPostModifyEvent event) throws CatalogException { incrementSequence(); } public void reloaded() { // never mind } public void handleGlobalChange(GeoServerInfo global, List<String> propertyNames, List<Object> oldValues, List<Object> newValues) { // we use the post event } @Override public void handleSettingsAdded(SettingsInfo settings) { incrementSequence(); } @Override public void handleSettingsModified(SettingsInfo settings, List<String> propertyNames, List<Object> oldValues, List<Object> newValues) { // we use post event } @Override public void handleSettingsPostModified(SettingsInfo settings) { incrementSequence(); } @Override public void handleSettingsRemoved(SettingsInfo settings) { incrementSequence(); } public void handleLoggingChange(LoggingInfo logging, List<String> propertyNames, List<Object> oldValues, List<Object> newValues) { // we don't update the sequence for a logging change, the client cannot notice it } public void handlePostGlobalChange(GeoServerInfo global) { incrementSequence(); } public void handlePostLoggingChange(LoggingInfo logging) { // we don't update the sequence for a logging change, the client cannot notice it } public void handlePostServiceChange(ServiceInfo service) { incrementSequence(); } public void handleServiceChange(ServiceInfo service, List<String> propertyNames, List<Object> oldValues, List<Object> newValues) { // we use the post version } @Override public void handleServiceRemove(ServiceInfo service) { incrementSequence(); } }