/** * This file is part of CloudML [ http://cloudml.org ] * * Copyright (C) 2012 - SINTEF ICT * Contact: Franck Chauvel <franck.chauvel@sintef.no> * * Module: root * * CloudML is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * CloudML is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with CloudML. If not, see * <http://www.gnu.org/licenses/>. */ package test.cloudml.codecs.kmf; import static test.cloudml.codecs.kmf.Samples.*; import net.cloudml.core.*; import net.cloudml.factory.*; /** * Provide samples of KMF/POJO objects used during testing */ class KMFSamplesBuilder { private final CoreFactory factory; public KMFSamplesBuilder() { factory = new MainFactory().getCoreFactory(); } public CloudMLModel aVmOffering(String vmName, String key, String value) { final CloudMLModel deployment = factory.createCloudMLModel(); final Provider provider = createProvider("Ec2"); deployment.addProviders(provider); final VM vm = createVM(vmName, "192.168.0.1", provider); deployment.addVms(vm); final ProvidedExecutionPlatform pep = createProvidedExecutionPlatform("pep"); pep.addOffers(createProperty(key, value)); vm.addProvidedExecutionPlatforms(pep); return deployment; } public ProvidedExecutionPlatform createProvidedExecutionPlatform(String name) { final ProvidedExecutionPlatform result = factory.createProvidedExecutionPlatform(); result.setName(name); return result; } public CloudMLModel anInternalComponentDemanding(String componentName, String key, String value) { final CloudMLModel deployment = factory.createCloudMLModel(); final InternalComponent component = createInternalComponent(componentName, createRequiredExecutionPlatform("rep")); component.getRequiredExecutionPlatform().addDemands(createProperty(key, value)); deployment.addInternalComponents(component); return deployment; } public Property createProperty(String key, String value) { final Property result = factory.createProperty(); result.setName(key); result.setValue(value); return result; } public Provider getProviderA() { return createProvider(PROVIDER_A_NAME); } public Provider getProviderB() { return createProvider(PROVIDER_B_NAME); } private Provider createProvider(String name) { Provider provider = factory.createProvider(); provider.setName(name); provider.setCredentials(CREDENTIALS); return provider; } public VM getVMA() { return createVM(VM_A_NAME, ENDPOINT_A_NAME, getProviderA()); } public VM getVMB() { return createVM(VM_B_NAME, ENDPOINT_B_NAME, getProviderB()); } public net.cloudml.core.VM createVM(String name, String endPoint, Provider p) { net.cloudml.core.VM kcomp = factory.createVM(); //TODO: to be completed kcomp.setProvider(p); kcomp.setName(name); kcomp.setEndPoint(endPoint); return kcomp; } public VMInstance getVMInstanceA() { return createVMInstance(VM_INSTANCE_A, IP_ADDRESS_A, getVMA()); } public VMInstance getVMInstanceB() { return createVMInstance(VM_INSTANCE_B, IP_ADDRESS_B, getVMB()); } public net.cloudml.core.VMInstance createVMInstance(String name, String ip, VM type) { net.cloudml.core.VMInstance kcomp = factory.createVMInstance(); //TODO: to be completed kcomp.setPublicAddress(ip); kcomp.setName(name); kcomp.setType(type); return kcomp; } public InternalComponent getInternalComponentA() { return createInternalComponent(INTERNAL_COMPONENT_A_NAME, getRequiredExecutionPlatformA()); } public InternalComponent getInternalComponentB() { return createInternalComponent(INTERNAL_COMPONENT_B_NAME, getRequiredExecutionPlatformB()); } public RequiredExecutionPlatform getRequiredExecutionPlatformA() { return createRequiredExecutionPlatform(REQUIRED_EXECUTION_PLATFORM_A_NAME); } public RequiredExecutionPlatform getRequiredExecutionPlatformB() { return createRequiredExecutionPlatform(REQUIRED_EXECUTION_PLATFORM_B_NAME); } public RequiredExecutionPlatform createRequiredExecutionPlatform(String name) { RequiredExecutionPlatform krep = factory.createRequiredExecutionPlatform(); krep.setName(name); return krep; } public net.cloudml.core.InternalComponent createInternalComponent(String name, RequiredExecutionPlatform krep) { InternalComponent internalComponent = factory.createInternalComponent(); //TODO: to be completed internalComponent.setName(name); internalComponent.setRequiredExecutionPlatform(krep); krep.setOwner(internalComponent); return internalComponent; } public RequiredExecutionPlatformInstance getRequiredExecutionPlatformInstanceA(InternalComponent icA) { return createRequiredExecutionPlatformInstance(REQUIRED_EXECUTION_PLATFORM_INSTANCE_NAME_A, icA.getRequiredExecutionPlatform()); } public RequiredExecutionPlatformInstance getRequiredExecutionPlatformInstanceB(InternalComponent icB) { return createRequiredExecutionPlatformInstance(REQUIRED_EXECUTION_PLATFORM_INSTANCE_NAME_B, icB.getRequiredExecutionPlatform()); } private RequiredExecutionPlatformInstance createRequiredExecutionPlatformInstance(String name, RequiredExecutionPlatform krep) { RequiredExecutionPlatformInstance kInstance = factory.createRequiredExecutionPlatformInstance(); kInstance.setName(name); kInstance.setType(krep); return kInstance; } public InternalComponentInstance getInternalComponentInstanceA() { InternalComponent icA = getInternalComponentA(); return createInternalComponentInstance(INTERNAL_COMPONENT_INSTANCE_A_NAME, getRequiredExecutionPlatformInstanceA(icA), icA); } public InternalComponentInstance getInternalComponentInstanceB() { InternalComponent icB = getInternalComponentB(); return createInternalComponentInstance(INTERNAL_COMPONENT_INSTANCE_B_NAME, getRequiredExecutionPlatformInstanceB(icB), icB); } public InternalComponentInstance createInternalComponentInstance(String name, RequiredExecutionPlatformInstance krepi, InternalComponent type) { InternalComponentInstance internalComponentInstance = factory.createInternalComponentInstance(); internalComponentInstance.setRequiredExecutionPlatformInstance(krepi); krepi.setOwner(internalComponentInstance); internalComponentInstance.setName(name); internalComponentInstance.setType(type); return internalComponentInstance; } public Relationship getRelationshipA() { return createRelationship(RELATIONSHIP_A_NAME); } public Relationship getRelationshipB() { return createRelationship(RELATIONSHIP_B_NAME); } private Relationship createRelationship(String name) { net.cloudml.core.Relationship krel = factory.createRelationship(); krel.setName(name); net.cloudml.core.ProvidedPort pp = factory.createProvidedPort(); pp.setName(name + PROVIDED_PORT_NAME); net.cloudml.core.Component c = getInternalComponentA(); c.addProvidedPorts(pp); pp.setComponent(c); krel.setProvidedPort(pp); net.cloudml.core.RequiredPort rp = factory.createRequiredPort(); rp.setName(name + REQUIRED_PORT_NAME); net.cloudml.core.InternalComponent c2 = getInternalComponentB(); c2.addRequiredPorts(rp); rp.setComponent(c2); krel.setRequiredPort(rp); return krel; } public RelationshipInstance getRelationshipInstanceA() { return createRelationshipInstance(RELATIONSHIP_INSTANCE_A_NAME, getRelationshipA()); } public RelationshipInstance getRelationShipInstanceB() { return createRelationshipInstance(RELATIONSHIP_INSTANCE_B_NAME, getRelationshipB()); } private RelationshipInstance createRelationshipInstance(String name, Relationship relationship) { RelationshipInstance relationshipInstance = factory.createRelationshipInstance(); relationshipInstance.setName(name); relationshipInstance.setType(relationship); ProvidedPortInstance providedPort = factory.createProvidedPortInstance(); providedPort.setName(name + PROVIDED_PORT_INSTANCE_NAME); providedPort.setType(relationship.getProvidedPort()); ComponentInstance ownerProvider = getInternalComponentInstanceA(); ownerProvider.addProvidedPortInstances(providedPort); providedPort.setComponentInstance(ownerProvider); relationshipInstance.setProvidedPortInstance(providedPort); RequiredPortInstance requiredPort = factory.createRequiredPortInstance(); requiredPort.setName(name + REQUIRED_PORT_INSTANCE_NAME); requiredPort.setType(relationship.getRequiredPort()); InternalComponentInstance ownerRequired = getInternalComponentInstanceB(); ownerRequired.addRequiredPortInstances(requiredPort); requiredPort.setComponentInstance(ownerRequired); relationshipInstance.setRequiredPortInstance(requiredPort); return relationshipInstance; } }