/**
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.geowebcache.storage;
import org.geowebcache.grid.GridSet;
import org.geowebcache.layer.TileLayer;
import org.geowebcache.mime.MimeType;
/**
* Listener interface for {@link BlobStore} events.
* <p>
* Implementations can be added to the blob store(s) through the
* {@link StorageBroker#addBlobStoreListener(BlobStoreListener) StorageBroker}
*
*/
public interface BlobStoreListener {
/**
* Notifies that the blob store stored a new tile for the given parameters.
*
* @param layerName {@link TileLayer#getName() name} of the layer for the stored tile
* @param gridSetId {@link GridSet#getName() name} of the gridset for the stored tile
* @param blobFormat {@link MimeType#getFormat() format name} of the mime type for the stored
* tile
* @param parametersId {@link TileObject#getParametersId() parameters id} for the stored tile
* @param x X ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param y Y ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param z Z ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param blobSize the actual storage size the blob uses in the blob store's backend storage;
* which may or may not equal to the encoded tile size, depending on the storage
* mechanism
*/
void tileStored(String layerName, String gridSetId, String blobFormat, String parametersId,
long x, long y, int z, long blobSize);
/**
* Notifies that the blob store has deleted a tile given by the method arguments.
*
* @param layerName {@link TileLayer#getName() name} of the layer for the stored tile
* @param gridSetId {@link GridSet#getName() name} of the gridset for the stored tile
* @param blobFormat {@link MimeType#getFormat() format name} of the mime type for the stored
* tile
* @param parametersId {@link TileObject#getParametersId() parameters id} for the stored tile
* @param x X ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param y Y ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param z Z ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param blobSize the actual blob size freed from the blob store's backend storage; which
* may or may not equal to the encoded tile size, depending on the storage mechanism
*/
void tileDeleted(String layerName, String gridSetId, String blobFormat, String parametersId,
long x, long y, int z, long blobSize);
/**
* Notifies that the blob store replaced an existing tile blob by a new one.
*
* @param layerName {@link TileLayer#getName() name} of the layer for the stored tile
* @param gridSetId {@link GridSet#getName() name} of the gridset for the stored tile
* @param blobFormat {@link MimeType#getFormat() format name} of the mime type for the stored
* tile
* @param parametersId {@link TileObject#getParametersId() parameters id} for the stored tile
* @param x X ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param y Y ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param z Z ordinate of the {@link TileObject#getXYZ() grid location} for the stored tile
* @param blobSize the actual storage size the blob uses in the blob store's backend storage;
* which may or may not equal to the encoded tile size, depending on the storage
* mechanism
* @param oldSize the size of the replaced blob
*/
void tileUpdated(String layerName, String gridSetId, String blobFormat, String parametersId,
long x, long y, int z, long blobSize, long oldSize);
/**
* Notifies that the layer named {@code layerName} has been whipped out from the blob store's
* backend storage.
*/
void layerDeleted(String layerName);
/**
* Notifies that the layer named {@code oldLayerName} has been renamed as {@code newLayerName}
* in the blob store's backend storage.
*/
void layerRenamed(String oldLayerName, String newLayerName);
/**
* Notifies that all tiles for the gridset {@code gridsetId} of layer {@code layerName} have
* been deleted in the blob store's backend storage.
*/
void gridSubsetDeleted(String layerName, String gridSetId);
/**
* Notifies that all tiles for the parameter ID {@code parametersId} of layer {@code layerName}
* have been deleted in the blob store's backend storage.
*/
void parametersDeleted(String layerName, String parametersId);
}