private void handleProvidedRelations(GenerationPackage mainWorkSet, GenerationOptions options, ResourceEntity resource, AppServerRelationProperties properties, GenerationSubPackage resourceWorkSet) { Set<ProvidedResourceRelationEntity> providedMasterRelations = dependencyResolver.getProvidedMasterRelationsForRelease(resource, options.getContext().getTargetRelease()); List<ProvidedResourceRelationEntity> providedMasterRelationsSorted = new ArrayList<>( providedMasterRelations); Collections.sort(providedMasterRelationsSorted, AbstractResourceRelationEntity.COMPARE_BY_SLAVE_NAME); for (ProvidedResourceRelationEntity relation : providedMasterRelationsSorted) { ResourceEntity slave = relation.getSlaveResource(); log.info(" (provides): " + slave.getName()); String identifier = relation.getIdentifier(); AppServerRelationProperties slaveProperties = properties.addProvidedRelation(identifier, slave, relation); Set<TemplateDescriptorEntity> resourceTemplates = templatesForResource(options, slave); Set<TemplateDescriptorEntity> relationTemplates = templatesForRelation(options, relation); merge(options, mainWorkSet, slaveProperties); slaveProperties.setFunctions(functionService.getAllFunctionsForResource(slave)); GenerationUnit generationUnit = new GenerationUnit(slave, resource, slaveProperties, resourceTemplates, relationTemplates); generationUnit.setGlobalFunctionTemplates(options.getContext().getGlobalFunctions()); addUnit(resourceWorkSet, generationUnit); } }
@Test public void testOnlyProvidedResource() throws TemplateModelException { AMWTemplateExceptionHandler templateExceptionHandler = new AMWTemplateExceptionHandler(); ResourceEntity ad = builder.resourceFor(AD); ResourceEntity mail = builder.resourceFor(MAIL); ProvidedResourceRelationEntity relation = builder.buildProvidedRelation(ad, mail, ForeignableOwner.AMW); AppServerRelationProperties properties = new AppServerRelationProperties(context, ad, templateExceptionHandler); properties.addProvidedRelation("mailrelay", mail, relation); TemplateHashModel model = TestUtils.asHashModel(properties.transformModel(), "providedResTypes", "Mail", "mailrelay"); assertEquals("mailrelay", model.get("name").toString()); assertTrue(templateExceptionHandler.isSuccess()); }
@Test public void testTwoRelatedProvidedResourcesOfSameType() throws TemplateModelException { AMWTemplateExceptionHandler templateExceptionHandler = new AMWTemplateExceptionHandler(); ResourceEntity ws2 = builder.buildResource(builder.typeFor(WS.type), "ws2"); builder.buildProvidedRelation(builder.app, builder.ws, ForeignableOwner.AMW); builder.buildProvidedRelation(builder.app, ws2, ForeignableOwner.AMW); AppServerRelationProperties properties = new AppServerRelationProperties(builder.context, builder.app, templateExceptionHandler); for (ProvidedResourceRelationEntity relation : builder.app.getProvidedMasterRelations()) { ResourceEntity slaveResource = relation.getSlaveResource(); properties.addProvidedRelation(slaveResource.getName(), slaveResource, relation); } assertEquals(2, properties.getProvided().size()); AmwResourceTemplateModel hash = properties.transformModel(); assertEquals("app", hash.get("label").toString()); assertNull(hash.get("propertyTypes")); assertEquals(TestUtils.asHashModel(hash, "providedResTypes", "Webservice", "ws").get("label").toString(), "ws"); assertNull(TestUtils.asHashModel(hash, "providedResTypes", "Webservice", "ws").get("propertyTypes")); assertEquals(TestUtils.asHashModel(hash, "providedResTypes", "Webservice", "ws2").get("label").toString(), "ws2"); assertNull(TestUtils.asHashModel(hash, "providedResTypes", "Webservice", "ws2").get("propertyTypes")); hash = properties.transformModel(); assertTrue(templateExceptionHandler.isSuccess()); }