public List<ResourceEditProperty> loadPropertiesForEditRelation(Mode relationTyp, Integer resourceRelationId, Integer relatedResourceId, ResourceTypeEntity masterResourceType, ResourceTypeEntity slaveResourceType, ContextEntity currentContext) { Map<Integer, ResourceEditProperty> propMap = new HashMap<>(); List<Integer> contextList = contextHierarchy.getContextWithParentIds(currentContext); List<Integer> masterResourceTypeList = getTypeWithParentIds(null, masterResourceType); List<Integer> slaveResourceTypeList = getTypeWithParentIds(null, slaveResourceType); Query query; switch (relationTyp) { case CONSUMED: query = queries.getPropertyValueForConsumedRelationQuery(resourceRelationId, relatedResourceId, masterResourceTypeList, slaveResourceTypeList, contextList); break; case PROVIDED: query = queries.getPropertyValueForProvidedRelationQuery(resourceRelationId, relatedResourceId, masterResourceTypeList, slaveResourceTypeList, contextList); break; default: query = null; } List<ResourceEditProperty> result = JpaSqlResultMapper.list(query, ResourceEditProperty.class); for (ResourceEditProperty prop : result) { // Since we have to load also the properties of the parent contexts (to display the replaced // values) we must find the property of the current context and set parents hierarchical propMap.put(prop.getDescriptorId(), findChildPropAndSetParent(prop, propMap.get(prop.getDescriptorId()), contextList)); } return new ArrayList<>(new TreeSet<>(propMap.values())); }
/** * Ensures that - when not adding any additional properties to the relation - only the control property is returned */ @Test public void shouldReturnPropertyDescriptorOnResourceOnly() { //given ResourceContextEntity globalResourceContext = slave.getOrCreateContext(contextEntity); globalResourceContext.addPropertyDescriptor(controlPropertyDescriptorEntity); entityManager.flush(); //when Query result = queries .getPropertyValueForConsumedRelationQuery(consumedResourceRelationEntity.getId(), slave.getId(), Arrays.asList(masterType.getId()), Arrays.asList(slaveType.getId()), Arrays.asList(contextEntity.getId())); List<String> propertyNames = getPropertyNames(result.getResultList()); //then Assert.assertEquals(1, propertyNames.size()); Assert.assertTrue(propertyNames.contains(controlPropertyDescriptorEntity.getPropertyName())); }
/** * Add a property to the type relation and ensure that it's part of the result */ @Test public void shouldReturnPropertyDescriptorOnResourceTypeRelationForConsumedResourceRelation() { //given ResourceTypeContextEntity globalResourceTypeContext = slaveType.getOrCreateContext(contextEntity); ResourceRelationTypeContextEntity globalResourceRelationTypeContext = resourceRelationTypeEntity.getOrCreateContext( contextEntity); globalResourceTypeContext.addPropertyDescriptor(controlPropertyDescriptorEntity); globalResourceRelationTypeContext.addPropertyDescriptor(propertyDescriptorEntity); entityManager.flush(); //when Query result = queries .getPropertyValueForConsumedRelationQuery(consumedResourceRelationEntity.getId(), slave.getId(), Arrays.asList(masterType.getId()), Arrays.asList(slaveType.getId()), Arrays.asList(contextEntity.getId())); List<String> propertyNames = getPropertyNames(result.getResultList()); //then Assert.assertEquals(2, propertyNames.size()); Assert.assertTrue(propertyNames.contains(controlPropertyDescriptorEntity.getPropertyName())); Assert.assertTrue(propertyNames.contains(propertyDescriptorEntity.getPropertyName())); }
/** * Add a property to the relation and ensure that it's part of the result */ @Test public void shouldReturnPropertyDescriptorOnConsumedResourceRelation() { //given ResourceContextEntity globalResourceContext = slave.getOrCreateContext(contextEntity); globalResourceContext.addPropertyDescriptor(controlPropertyDescriptorEntity); ResourceRelationContextEntity globalRelationContext = consumedResourceRelationEntity .getOrCreateContext( contextEntity); globalRelationContext.addPropertyDescriptor(propertyDescriptorEntity); entityManager.flush(); //when Query result = queries .getPropertyValueForConsumedRelationQuery(consumedResourceRelationEntity.getId(), slave.getId(), Arrays.asList(masterType.getId()), Arrays.asList(slaveType.getId()), Arrays.asList(contextEntity.getId())); List<String> propertyNames = getPropertyNames(result.getResultList()); //then Assert.assertEquals(2, propertyNames.size()); Assert.assertTrue(propertyNames.contains(controlPropertyDescriptorEntity.getPropertyName())); Assert.assertTrue(propertyNames.contains(propertyDescriptorEntity.getPropertyName())); }