Skip to content

Commit aceacb9

Browse files
Adds a way to remove views from the workspace.
1 parent f3b7213 commit aceacb9

File tree

2 files changed

+180
-0
lines changed

2 files changed

+180
-0
lines changed

structurizr-core/src/main/java/com/structurizr/view/ViewSet.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,49 @@ public View getViewWithKey(String key) {
630630
return getViews().stream().filter(v -> key.equals(v.getKey())).findFirst().orElse(null);
631631
}
632632

633+
/**
634+
* Removes the view with the specified key.
635+
*
636+
* @param key the key
637+
* @throws IllegalArgumentException if a view with the specified key could not be found
638+
*/
639+
public void removeViewWithKey(String key) {
640+
if (StringUtils.isNullOrEmpty(key)) {
641+
throw new IllegalArgumentException("A view key must be specified.");
642+
}
643+
644+
View view = getViewWithKey(key);
645+
if (view == null) {
646+
throw new IllegalArgumentException("A view with key \"" + key + "\" does not exist.");
647+
}
648+
649+
for (FilteredView filteredView : filteredViews) {
650+
if (filteredView.getBaseViewKey().equals(key)) {
651+
throw new IllegalArgumentException("A filtered view based upon \"" + key + "\" exists - please remove this first.");
652+
}
653+
}
654+
655+
if (view instanceof CustomView) {
656+
customViews.remove(view);
657+
} else if (view instanceof SystemLandscapeView) {
658+
systemLandscapeViews.remove(view);
659+
} else if (view instanceof SystemContextView) {
660+
systemContextViews.remove(view);
661+
} else if (view instanceof ContainerView) {
662+
containerViews.remove(view);
663+
} else if (view instanceof ComponentView) {
664+
componentViews.remove(view);
665+
} else if (view instanceof DynamicView) {
666+
dynamicViews.remove(view);
667+
} else if (view instanceof DeploymentView) {
668+
deploymentViews.remove(view);
669+
} else if (view instanceof ImageView) {
670+
imageViews.remove(view);
671+
} else if (view instanceof FilteredView) {
672+
filteredViews.remove(view);
673+
}
674+
}
675+
633676
/**
634677
* Finds the filtered view with the specified key, or null if the view does not exist.
635678
*

structurizr-core/src/test/java/com/structurizr/view/ViewSetTests.java

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,4 +1090,141 @@ public void createDefaultViews_ForSoftwareSystemsWithNamesUsingUTF8Characters()
10901090
assertSame(ss3, workspace.getViews().getSystemContextViews().stream().filter(v -> v.getKey().equals("SystemContext-003")).findFirst().get().getSoftwareSystem());
10911091
}
10921092

1093+
@Test
1094+
void removeViewWithKey_ThrowsAndException_WhenNoKeyIsSpecified() {
1095+
try {
1096+
new Workspace("Name").getViews().removeViewWithKey(null);
1097+
fail();
1098+
} catch (Exception e) {
1099+
assertEquals("A view key must be specified.", e.getMessage());
1100+
}
1101+
1102+
try {
1103+
new Workspace("Name").getViews().removeViewWithKey("");
1104+
fail();
1105+
} catch (Exception e) {
1106+
assertEquals("A view key must be specified.", e.getMessage());
1107+
}
1108+
}
1109+
1110+
@Test
1111+
void removeViewWithKey_ThrowsAndException_WhenNoViewExists() {
1112+
try {
1113+
new Workspace("Name").getViews().removeViewWithKey("key");
1114+
fail();
1115+
} catch (Exception e) {
1116+
assertEquals("A view with key \"key\" does not exist.", e.getMessage());
1117+
}
1118+
}
1119+
1120+
@Test
1121+
void removeViewWithKey_ThrowsAndException_WhenABaseViewExistsForTheSpecifiedFilteredView() {
1122+
Workspace workspace = new Workspace("Name");
1123+
1124+
try {
1125+
SystemLandscapeView view = workspace.getViews().createSystemLandscapeView("landscape");
1126+
workspace.getViews().createFilteredView(view, "filtered", FilterMode.Include, Tags.ELEMENT);
1127+
1128+
workspace.getViews().removeViewWithKey("landscape");
1129+
fail();
1130+
} catch (Exception e) {
1131+
assertEquals("A filtered view based upon \"landscape\" exists - please remove this first.", e.getMessage());
1132+
}
1133+
}
1134+
1135+
@Test
1136+
void removeViewWithKey_CustomView() {
1137+
Workspace workspace = new Workspace("Name");
1138+
workspace.getViews().createCustomView("key", "title");
1139+
1140+
assertFalse(workspace.getViews().getCustomViews().isEmpty());
1141+
workspace.getViews().removeViewWithKey("key");
1142+
assertTrue(workspace.getViews().getCustomViews().isEmpty());
1143+
}
1144+
1145+
@Test
1146+
void removeViewWithKey_SystemLandscapeView() {
1147+
Workspace workspace = new Workspace("Name");
1148+
workspace.getViews().createSystemLandscapeView("key");
1149+
1150+
assertFalse(workspace.getViews().getSystemLandscapeViews().isEmpty());
1151+
workspace.getViews().removeViewWithKey("key");
1152+
assertTrue(workspace.getViews().getSystemLandscapeViews().isEmpty());
1153+
}
1154+
1155+
@Test
1156+
void removeViewWithKey_SystemContextView() {
1157+
Workspace workspace = new Workspace("Name");
1158+
SoftwareSystem softwareSystem = workspace.getModel().addSoftwareSystem("Name");
1159+
workspace.getViews().createSystemContextView(softwareSystem, "key");
1160+
1161+
assertFalse(workspace.getViews().getSystemContextViews().isEmpty());
1162+
workspace.getViews().removeViewWithKey("key");
1163+
assertTrue(workspace.getViews().getSystemContextViews().isEmpty());
1164+
}
1165+
1166+
@Test
1167+
void removeViewWithKey_ContainerView() {
1168+
Workspace workspace = new Workspace("Name");
1169+
SoftwareSystem softwareSystem = workspace.getModel().addSoftwareSystem("Name");
1170+
workspace.getViews().createContainerView(softwareSystem, "key");
1171+
1172+
assertFalse(workspace.getViews().getContainerViews().isEmpty());
1173+
workspace.getViews().removeViewWithKey("key");
1174+
assertTrue(workspace.getViews().getContainerViews().isEmpty());
1175+
}
1176+
1177+
@Test
1178+
void removeViewWithKey_ComponentView() {
1179+
Workspace workspace = new Workspace("Name");
1180+
SoftwareSystem softwareSystem = workspace.getModel().addSoftwareSystem("Name");
1181+
Container container = softwareSystem.addContainer("Name");
1182+
workspace.getViews().createComponentView(container, "key");
1183+
1184+
assertFalse(workspace.getViews().getComponentViews().isEmpty());
1185+
workspace.getViews().removeViewWithKey("key");
1186+
assertTrue(workspace.getViews().getComponentViews().isEmpty());
1187+
}
1188+
1189+
@Test
1190+
void removeViewWithKey_DynamicView() {
1191+
Workspace workspace = new Workspace("Name");
1192+
workspace.getViews().createDynamicView("key");
1193+
1194+
assertFalse(workspace.getViews().getDynamicViews().isEmpty());
1195+
workspace.getViews().removeViewWithKey("key");
1196+
assertTrue(workspace.getViews().getDynamicViews().isEmpty());
1197+
}
1198+
1199+
@Test
1200+
void removeViewWithKey_DeploymentView() {
1201+
Workspace workspace = new Workspace("Name");
1202+
workspace.getViews().createDeploymentView("key");
1203+
1204+
assertFalse(workspace.getViews().getDeploymentViews().isEmpty());
1205+
workspace.getViews().removeViewWithKey("key");
1206+
assertTrue(workspace.getViews().getDeploymentViews().isEmpty());
1207+
}
1208+
1209+
@Test
1210+
void removeViewWithKey_FilteredView() {
1211+
Workspace workspace = new Workspace("Name");
1212+
SystemLandscapeView view = workspace.getViews().createSystemLandscapeView("landscape");
1213+
workspace.getViews().createFilteredView(view, "key", FilterMode.Include, Tags.ELEMENT);
1214+
1215+
assertFalse(workspace.getViews().getFilteredViews().isEmpty());
1216+
workspace.getViews().removeViewWithKey("key");
1217+
assertTrue(workspace.getViews().getFilteredViews().isEmpty());
1218+
}
1219+
1220+
@Test
1221+
void removeViewWithKey_ImageView() {
1222+
Workspace workspace = new Workspace("Name");
1223+
workspace.getViews().createImageView("key");
1224+
1225+
assertFalse(workspace.getViews().getImageViews().isEmpty());
1226+
workspace.getViews().removeViewWithKey("key");
1227+
assertTrue(workspace.getViews().getImageViews().isEmpty());
1228+
}
1229+
10931230
}

0 commit comments

Comments
 (0)