throws IllegalArgumentException, IOException, GeoWebCacheException {
checkNotNull(oldGridSetName);
checkNotNull(newGridSet);
final GridSet oldGridSet = gridSetBroker.get(oldGridSetName);
if (null == oldGridSet) {
throw new IllegalArgumentException("GridSet " + oldGridSetName + " does not exist");
}
final boolean needsTruncate = oldGridSet.shouldTruncateIfChanged(newGridSet);
if (needsTruncate) {
log.warning("### Changes in gridset force truncation of affected Tile layers");
log.info("### Old gridset: " + oldGridSet);
log.info("### New gridset: " + newGridSet);
}
Map<TileLayer, GridSubset> affectedLayers = new HashMap<TileLayer, GridSubset>();
Lock lock = null;
try {
lock = lockProvider.getLock(GLOBAL_LOCK_KEY);
for (TileLayer layer : getTileLayers()) {
GridSubset gridSubet;
if (null != (gridSubet = layer.getGridSubset(oldGridSetName))) {
affectedLayers.put(layer, gridSubet);
layer.removeGridSubset(oldGridSetName);
if (needsTruncate) {
deleteCacheByGridSetId(layer.getName(), oldGridSetName);
}
}
}
// now no layer is referencing it
XMLConfiguration mainConfig = getXmlConfiguration();
mainConfig.removeGridset(oldGridSetName);
mainConfig.addOrReplaceGridSet(new XMLGridSet(newGridSet));
mainConfig.save();
getGridSetBroker().remove(oldGridSetName);
getGridSetBroker().put(newGridSet);
// tld.removeGridset(oldGridSetName);
// tld.addGridSet(newGridSet);
// if (isRename && !needsTruncate) {
// // /TODO: quotaStore.renameGridSet(oldGridSetName, newGidSetName);
// }
final boolean sameSRS = oldGridSet.getSrs().equals(newGridSet.getSrs());
final int maxZoomLevel = newGridSet.getNumLevels() - 1;
Set<Configuration> saveConfigurations = new HashSet<Configuration>();