diff --git a/deegree-core/deegree-core-workspace/src/main/java/org/deegree/workspace/standard/DefaultWorkspace.java b/deegree-core/deegree-core-workspace/src/main/java/org/deegree/workspace/standard/DefaultWorkspace.java index a3739a7081..c4069bc7f9 100644 --- a/deegree-core/deegree-core-workspace/src/main/java/org/deegree/workspace/standard/DefaultWorkspace.java +++ b/deegree-core/deegree-core-workspace/src/main/java/org/deegree/workspace/standard/DefaultWorkspace.java @@ -367,10 +367,16 @@ public T init(ResourceIdentifier id, PreparedResources p List> mdList = new ArrayList>(); ResourceMetadata md = resourceMetadata.get(id); mdList.add(md); - graph.insertNode(md); - List> dependencies = new ArrayList>(); - WorkspaceUtils.collectDependencies(dependencies, graph.getNode(id)); - mdList.addAll(dependencies); + for (ResourceIdentifier dependencyId : md.getDependencies()) { + ResourceMetadata dependencyMd = resourceMetadata.get(dependencyId); + mdList.add(dependencyMd); + } + for (ResourceIdentifier dependencyId : md.getSoftDependencies()) { + ResourceMetadata dependencyMd = resourceMetadata.get(dependencyId); + if (dependencyMd != null) { + mdList.add(dependencyMd); + } + } ResourceGraph g = new ResourceGraph(mdList); mdList = g.toSortedList(); @@ -380,6 +386,7 @@ public T init(ResourceIdentifier id, PreparedResources p LOG.info("Resource {} already available.", metadata.getIdentifier()); continue; } + graph.insertNode(metadata); ResourceBuilder builder = prepared.getBuilder(metadata.getIdentifier()); LOG.info("Building resource {}.", metadata.getIdentifier()); try { @@ -518,7 +525,7 @@ public void add(ResourceLocation location) { @Override public void destroy(ResourceIdentifier id) { - List> resourcesToRemove = collectResourcesToDestroy(id); + List> resourcesToRemove = collectResourcesToDestroy(id); for (ResourceIdentifier resourceId : resourcesToRemove) { T res = (T) resources.get(resourceId); @@ -534,14 +541,14 @@ public void destroy(ResourceIdentifier id) { } } - private List> collectResourcesToDestroy(ResourceIdentifier id) { - List> resourcesToRemove = new ArrayList<>(); - ResourceNode node = graph.getNode(id); + private List> collectResourcesToDestroy(ResourceIdentifier id) { + List> resourcesToRemove = new ArrayList<>(); + ResourceNode node = graph.getNode(id); if (node == null) { return resourcesToRemove; } for (ResourceNode n : node.getDependents()) { - collectResourcesToDestroy(n.getMetadata().getIdentifier()); + resourcesToRemove.addAll(collectResourcesToDestroy(n.getMetadata().getIdentifier())); } resourcesToRemove.add(id); return resourcesToRemove; diff --git a/deegree-tests/deegree-resource-deps-tests/src/test/java/org/deegree/workspace/SimpleSqlFeatureStoreTest.java b/deegree-tests/deegree-resource-deps-tests/src/test/java/org/deegree/workspace/SimpleSqlFeatureStoreTest.java index 325e507c79..ed6d89df4f 100644 --- a/deegree-tests/deegree-resource-deps-tests/src/test/java/org/deegree/workspace/SimpleSqlFeatureStoreTest.java +++ b/deegree-tests/deegree-resource-deps-tests/src/test/java/org/deegree/workspace/SimpleSqlFeatureStoreTest.java @@ -131,7 +131,6 @@ public void testResourceGraph() { } @Test - @Ignore public void testDestroySingle() { FeatureStore fs = workspace.getResource(FeatureStoreProvider.class, "simplesql-ok"); Assert.assertNotNull("Feature store is expected to be created.", fs); @@ -144,7 +143,6 @@ public void testDestroySingle() { } @Test - @Ignore public void testDestroyInitializeSingle() { FeatureStore fs = workspace.getResource(FeatureStoreProvider.class, "simplesql-ok"); Assert.assertNotNull("Feature store is expected to be created.", fs); @@ -158,7 +156,6 @@ public void testDestroyInitializeSingle() { } @Test - @Ignore public void testReinitializeChain() { FeatureStore fs = workspace.getResource(FeatureStoreProvider.class, "simplesql-ok"); Assert.assertNotNull("Feature store is expected to be created.", fs);