@Test public void test_findComponents_UsesTheConfiguredDuplicateComponentFinderStrategy() throws Exception { try { SpringComponentFinderStrategy springComponentFinderStrategy = new SpringComponentFinderStrategy(); springComponentFinderStrategy.setDuplicateComponentStrategy(new DuplicateComponentStrategy() { @Override public Component duplicateComponentFound(Component component, String name, String type, String description, String technology) { return null; } }); ComponentFinder componentFinder = new ComponentFinder( webApplication, "com.structurizr.analysis.myapp", springComponentFinderStrategy ); componentFinder.findComponents(); componentFinder.findComponents(); } catch (DuplicateComponentException dce) { fail(); } }
@Override public void beforeFindComponents() { super.beforeFindComponents(); componentFinderStrategies.add(new SpringRestControllerComponentFinderStrategy()); componentFinderStrategies.add(new SpringMvcControllerComponentFinderStrategy()); componentFinderStrategies.add(new SpringServiceComponentFinderStrategy()); componentFinderStrategies.add(new SpringComponentComponentFinderStrategy()); componentFinderStrategies.add(new SpringRepositoryComponentFinderStrategy()); for (AbstractSpringComponentFinderStrategy componentFinderStrategy : componentFinderStrategies) { componentFinderStrategy.setIncludePublicTypesOnly(includePublicTypesOnly); componentFinderStrategy.setComponentFinder(getComponentFinder()); supportingTypesStrategies.forEach(componentFinderStrategy::addSupportingTypesStrategy); componentFinderStrategy.setDuplicateComponentStrategy(getDuplicateComponentStrategy()); componentFinderStrategy.beforeFindComponents(); } }
webApplication.uses(relationalDatabase, "Reads from and writes to", "JDBC, port 9001"); SpringComponentFinderStrategy springComponentFinderStrategy = new SpringComponentFinderStrategy(new ReferencedTypesSupportingTypesStrategy(false)); springComponentFinderStrategy.setIncludePublicTypesOnly(false);
webApplication, "org.springframework.samples.petclinic", new SpringComponentFinderStrategy( new ReferencedTypesSupportingTypesStrategy(false) ),
@Test public void test_findComponents_DoesNotIgnoreNonPublicTypes_WhenConfiguredToIncludeNonPublicTypes() throws Exception { Workspace workspace = new Workspace("Name", "Description"); Model model = workspace.getModel(); SoftwareSystem softwareSystem = model.addSoftwareSystem("Name", "Description"); Container container = softwareSystem.addContainer("Name", "Description", "Technology"); SpringComponentFinderStrategy springComponentFinderStrategy = new SpringComponentFinderStrategy(); springComponentFinderStrategy.setIncludePublicTypesOnly(false); ComponentFinder componentFinder = new ComponentFinder( container, "test.AbstractSpringComponentFinderStrategy", springComponentFinderStrategy ); componentFinder.findComponents(); assertEquals(3, container.getComponents().size()); Component component = container.getComponentWithName("SomeController"); assertEquals("test.AbstractSpringComponentFinderStrategy.SomeController", component.getType().getType()); component = container.getComponentWithName("SomePublicRepository"); assertEquals("test.AbstractSpringComponentFinderStrategy.SomePublicRepository", component.getType().getType()); component = container.getComponentWithName("SomeNonPublicRepository"); assertEquals("test.AbstractSpringComponentFinderStrategy.SomeNonPublicRepository", component.getType().getType()); }
@Test public void test_findComponents_IgnoresNonPublicTypesByDefault() throws Exception { Workspace workspace = new Workspace("Name", "Description"); Model model = workspace.getModel(); SoftwareSystem softwareSystem = model.addSoftwareSystem("Name", "Description"); Container container = softwareSystem.addContainer("Name", "Description", "Technology"); ComponentFinder componentFinder = new ComponentFinder( container, "test.AbstractSpringComponentFinderStrategy", new SpringComponentFinderStrategy() ); componentFinder.findComponents(); assertEquals(2, container.getComponents().size()); Component component = container.getComponentWithName("SomeController"); assertEquals("test.AbstractSpringComponentFinderStrategy.SomeController", component.getType().getType()); component = container.getComponentWithName("SomePublicRepository"); assertEquals("test.AbstractSpringComponentFinderStrategy.SomePublicRepository", component.getType().getType()); }
webApplication, "com.structurizr.analysis.myapp", new SpringComponentFinderStrategy() ); componentFinder.findComponents();