@Override public Set<String> execute(final DomainLookupContext context) { final Set<String> labels = context.getDefinitionsRegistry().getLabels(sourceNodeDefId); return context.getCache() .getConnectionRules() .stream() .filter(rule -> rule.getRole().equals(edgeDefId)) .flatMap(rule -> rule.getPermittedConnections().stream()) .filter(pc -> labels.contains(pc.getStartRole())) .map(CanConnect.PermittedConnection::getEndRole) .collect(Collectors.toSet()); } }
@Override public Set<String> execute(final DomainLookupContext context) { final DomainLookupsCache cache = context.getCache(); final Set<String> labels = sourceNode.getLabels(); final Set<String> allowedTargetConnectors = context.getCache() .getConnectionRules() .stream() .filter(rule -> isSourceConnectionAllowed(rule, labels)) .map(CanConnect::getRole) .collect(Collectors.toSet()); final Set<String> result = new LinkedHashSet<>(); for (final String allowedConnector : allowedTargetConnectors) { final int outEdgeCount = countOutgoingEdges(context, sourceNode, allowedConnector); final RuleViolations outEdgeCardinalityResult = context.getRuleManager() .evaluate(cache.getRuleSet(), edgeCardinality(sourceNode.getLabels(), allowedConnector, outEdgeCount, EdgeCardinalityContext.Direction.OUTGOING, Optional.of(CardinalityContext.Operation.ADD))); if (isValid(outEdgeCardinalityResult)) { result.add(allowedConnector); } } return result; } }
@Before @SuppressWarnings("unchecked") public void setup() throws Exception { when(context.getRuleManager()).thenReturn(ruleManager); when(context.getCache()).thenReturn(cache); when(cache.getRuleSet()).thenReturn(RULE_SET); when(cache.getConnectionRules()).thenReturn(Collections.singletonList(permittedConnections)); when(context.getDefinitionsRegistry()).thenReturn(definitionsCache); TestingGraphMockHandler graphTestHandler = new TestingGraphMockHandler(); when(context.getDefinitionManager()).thenReturn(graphTestHandler.definitionManager); graph1Instance = TestingGraphInstanceBuilder.newGraph1(graphTestHandler); when(definitionsCache.getLabels(eq(DEF_ID1))).thenReturn(Collections.singleton(ROLE1)); when(definitionsCache.getLabels(eq(DEF_ID2))).thenReturn(Collections.singleton(ROLE2)); when(definitionsCache.getLabels(eq(DEF_ID3))).thenReturn(Collections.singleton(ROLE3)); }
@Test public void testCacheTheConnectionRules() { List<CanConnect> rules = tested.getConnectionRules(); assertEquals(1, rules.size()); assertEquals(canConnect1To2, rules.get(0)); }
@Test @SuppressWarnings("unchecked") public void testLookupTargetConnectors() { CanConnect frmom3To1 = new CanConnect("cc1", TestingGraphInstanceBuilder.EDGE1_ID, Collections.singletonList(new CanConnect.PermittedConnection(TestingGraphInstanceBuilder.DEF3_LABELS.iterator().next(), TestingGraphInstanceBuilder.DEF1_LABELS.iterator().next()))); when(cache.getConnectionRules()).thenReturn(Collections.singletonList(frmom3To1)); LookupTargetConnectors function = new LookupTargetConnectors(graph1Instance.endNode); Set<String> result = function.execute(context); assertTrue(result.contains(TestingGraphInstanceBuilder.EDGE1_ID)); }
@Before public void setup() throws Exception { final TestingGraphMockHandler graphTestHandler = new TestingGraphMockHandler(); graph = TestingGraphInstanceBuilder.newGraph1(graphTestHandler); TestingGraphInstanceBuilder.createDefaultRulesForGraph1(graphTestHandler.ruleSet); when(cacheBuilder.apply(anyString())).thenReturn(cache); when(cache.getRuleSet()).thenReturn(graphTestHandler.ruleSet); CanConnect connectionRule = (CanConnect) ((List<Rule>) graphTestHandler.ruleSet.getRules()).get(0); when(cache.getConnectionRules()).thenReturn(Collections.singletonList(connectionRule)); when(cache.getDefinitions(contains("label1"))).thenReturn(Stream.of(TestingGraphInstanceBuilder.DEF1_ID).collect(Collectors.toSet())); when(cache.getDefinitions(contains("label2"))).thenReturn(Stream.of(TestingGraphInstanceBuilder.DEF2_ID).collect(Collectors.toSet())); when(definitionsRegistry.getLabels(eq(TestingGraphInstanceBuilder.DEF1_ID))).thenReturn(TestingGraphInstanceBuilder.DEF1_LABELS); when(definitionsRegistry.getLabels(eq(TestingGraphInstanceBuilder.DEF2_ID))).thenReturn(TestingGraphInstanceBuilder.DEF2_LABELS); tested = new CommonDomainLookups(graphTestHandler.definitionUtils, definitionsRegistry, graphTestHandler.ruleManager, cacheBuilder) .setDomain("ds1"); }
@Test public void testCleanUp() { DefinitionsCacheRegistry definitionsRegistry = mock(DefinitionsCacheRegistry.class); when(definitionsRegistry.getLabels(eq(DEF_ID1))).thenReturn(Collections.singleton(ROLE1)); when(definitionsRegistry.getLabels(eq(DEF_ID2))).thenReturn(Collections.singleton(ROLE2)); DomainLookupsCache tested = new DomainLookupsCache(definitionManager, definitionsRegistry, DEF_SET_ID); assertEquals(1, tested.getDefinitions(ROLE1).size()); assertEquals(1, tested.getDefinitions(ROLE2).size()); tested.clear(); assertEquals(Collections.emptySet(), tested.getDefinitions(ROLE1)); assertEquals(Collections.emptySet(), tested.getDefinitions(ROLE2)); assertEquals(0, tested.getConnectionRules().size()); } }