Skip to content

Commit

Permalink
- [Backup&Restore Community Module] Add missing logic synching GWCTil…
Browse files Browse the repository at this point in the history
…edLayers on selective restore.
  • Loading branch information
afabiani committed Dec 20, 2018
1 parent 69078bf commit b7b8333
Showing 1 changed file with 80 additions and 69 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1101,28 +1101,30 @@ private void restoreGWCSettings(Resource sourceRestoreFolder, Resource baseDir)
throws Exception {
// Restore configuration files form source and Test that everything went well
try {

// - Prepare folder
GeoserverXMLResourceProvider gwcConfigProvider =
(GeoserverXMLResourceProvider)
GeoServerExtensions.bean("gwcXmlConfigResourceProvider");
Resource targetGWCProviderRestoreDir = gwcConfigProvider.getConfigDirectory();
Files.delete(targetGWCProviderRestoreDir.dir());
if (!filterIsValid()) {
Files.delete(targetGWCProviderRestoreDir.dir());

// Restore GWC Providers Configurations
for (GeoserverXMLResourceProvider gwcProvider :
GeoServerExtensions.extensions(GeoserverXMLResourceProvider.class)) {
Resource providerConfigFile =
sourceRestoreFolder.get(
Paths.path(
GeoserverXMLResourceProvider.DEFAULT_CONFIGURATION_DIR_NAME,
gwcProvider.getConfigFileName()));
if (Resources.exists(providerConfigFile)
&& FileUtils.sizeOf(providerConfigFile.file()) > 0) {
Resources.copy(
providerConfigFile.in(),
targetGWCProviderRestoreDir,
providerConfigFile.name());
// Restore GWC Providers Configurations
for (GeoserverXMLResourceProvider gwcProvider :
GeoServerExtensions.extensions(GeoserverXMLResourceProvider.class)) {
Resource providerConfigFile =
sourceRestoreFolder.get(
Paths.path(
GeoserverXMLResourceProvider
.DEFAULT_CONFIGURATION_DIR_NAME,
gwcProvider.getConfigFileName()));
if (Resources.exists(providerConfigFile)
&& FileUtils.sizeOf(providerConfigFile.file()) > 0) {
Resources.copy(
providerConfigFile.in(),
targetGWCProviderRestoreDir,
providerConfigFile.name());
}
}
}

Expand All @@ -1136,7 +1138,6 @@ private void restoreGWCSettings(Resource sourceRestoreFolder, Resource baseDir)
BiMap<String, String> layersByName = null;

if (gwcCatalog != null) {

if (isDryRun()) {
BiMap<String, String> baseBiMap = HashBiMap.create();
layersByName = Maps.synchronizedBiMap(baseBiMap);
Expand All @@ -1150,58 +1151,15 @@ private void restoreGWCSettings(Resource sourceRestoreFolder, Resource baseDir)
final DefaultTileLayerCatalog gwcRestoreCatalog =
new DefaultTileLayerCatalog(resourceLoader, gwcXmlPersisterFactory);

for (String layerName : gwcRestoreCatalog.getLayerNames()) {
GeoServerTileLayerInfo gwcLayerInfo =
gwcRestoreCatalog.getLayerByName(layerName);

LayerInfo layerInfo = getCatalog().getLayerByName(layerName);

if (layerInfo != null) {

WorkspaceInfo ws =
layerInfo.getResource() != null
&& layerInfo.getResource().getStore() != null
&& layerInfo.getResource().getStore().getWorkspace()
!= null
? getCatalog()
.getWorkspaceByName(
layerInfo
.getResource()
.getStore()
.getWorkspace()
.getName())
: null;

if (!filteredResource(layerInfo, ws, true, LayerInfo.class)) {
restoreGWCTileLayerInfo(
gwcCatalog,
layersByName,
layerName,
gwcLayerInfo,
layerInfo.getId());
}
} else {
LayerGroupInfo layerGroupInfo = getCatalog().getLayerGroupByName(layerName);

if (layerGroupInfo != null) {

WorkspaceInfo ws =
layerGroupInfo.getWorkspace() != null
? getCatalog()
.getWorkspaceByName(
layerGroupInfo.getWorkspace().getName())
: null;

if (!filteredResource(layerGroupInfo, ws, false, LayerInfo.class)) {
restoreGWCTileLayerInfo(
gwcCatalog,
layersByName,
layerName,
gwcLayerInfo,
layerGroupInfo.getId());
}
}
}
Resource gwcCatalogPersistenceLocation =
targetGWCProviderRestoreDir
.parent()
.get(gwcCatalog.getPersistenceLocation());
Files.delete(gwcCatalogPersistenceLocation.dir());
if (!filterIsValid()) {
restoreGWCTileLayersInfos(gwcCatalog, layersByName, gwcRestoreCatalog);
} else {
restoreGWCTileLayersInfos(gwcCatalog, layersByName, gwcCatalog);
}
}

Expand All @@ -1212,6 +1170,59 @@ private void restoreGWCSettings(Resource sourceRestoreFolder, Resource baseDir)
}
}

/**
* @param gwcCatalog
* @param layersByName
* @param gwcRestoreCatalog
*/
private void restoreGWCTileLayersInfos(
final TileLayerCatalog gwcCatalog,
BiMap<String, String> layersByName,
final TileLayerCatalog gwcRestoreCatalog) {
for (String layerName : gwcRestoreCatalog.getLayerNames()) {
GeoServerTileLayerInfo gwcLayerInfo = gwcRestoreCatalog.getLayerByName(layerName);

LayerInfo layerInfo = getCatalog().getLayerByName(layerName);

if (layerInfo != null) {
WorkspaceInfo ws =
layerInfo.getResource() != null
&& layerInfo.getResource().getStore() != null
&& layerInfo.getResource().getStore().getWorkspace() != null
? getCatalog()
.getWorkspaceByName(
layerInfo
.getResource()
.getStore()
.getWorkspace()
.getName())
: null;

restoreGWCTileLayerInfo(
gwcCatalog, layersByName, layerName, gwcLayerInfo, layerInfo.getId());
} else {
LayerGroupInfo layerGroupInfo = getCatalog().getLayerGroupByName(layerName);

if (layerGroupInfo != null) {

WorkspaceInfo ws =
layerGroupInfo.getWorkspace() != null
? getCatalog()
.getWorkspaceByName(
layerGroupInfo.getWorkspace().getName())
: null;

restoreGWCTileLayerInfo(
gwcCatalog,
layersByName,
layerName,
gwcLayerInfo,
layerGroupInfo.getId());
}
}
}
}

/**
* @param gwcCatalog
* @param layersByName
Expand Down

0 comments on commit b7b8333

Please sign in to comment.