/**
* 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 org.cloudml.core.*;
import java.util.ArrayList;
import java.util.List;
import org.cloudml.core.credentials.FileCredentials;
/**
* Create sample CloudML objects used during testing
*/
class CloudMLSamplesBuilder {
public Provider getProviderA() {
return createProvider(PROVIDER_A_NAME);
}
public Provider getSampleProviderB() {
return createProvider(PROVIDER_B_NAME);
}
private Provider createProvider(String name) {
Provider provider = new Provider(name, new FileCredentials("./credentials"));
return provider;
}
public VM getVMA() {
return createVM(VM_A_NAME, ENDPOINT_A_NAME, getProviderA());
}
public VM getSampleVMB() {
return createVM(VM_B_NAME, ENDPOINT_B_NAME, getSampleProviderB());
}
private VM createVM(String name, String endPoint, Provider p) {
VM vm = new VM(name, p);
vm.setEndPoint(endPoint);
return vm;
}
public VMInstance getVMInstanceA() {
return createVMInstance(VM_INSTANCE_A, IP_ADDRESS_A, getVMA());
}
public VMInstance getSampleVMInstanceB() {
return createVMInstance(VM_INSTANCE_B, IP_ADDRESS_B, getSampleVMB());
}
private VMInstance createVMInstance(String name, String ip, VM type) {
VMInstance vmi = new VMInstance(name, type);
vmi.setPublicAddress(ip);
return vmi;
}
public InternalComponent getInternalComponentA() {
InternalComponent ic = createInternalComponent(INTERNAL_COMPONENT_A_NAME, getRequiredExecutionPlatformA());
ProvidedExecutionPlatform pep = getProvidedExecutionPlatformA();
pep.getOwner().set(ic);
List<ProvidedExecutionPlatform> peps = new ArrayList<ProvidedExecutionPlatform>();
peps.add(pep);
ic.setProvidedExecutionPlatforms(peps);
return ic;
}
public InternalComponent getInternalComponentB() {
InternalComponent ic = createInternalComponent(INTERNAL_COMPONENT_B_NAME, getRequiredExecutionPlatformB());
ProvidedExecutionPlatform pep = getProvidedExecutionPlatformB();
ic.getProvidedExecutionPlatforms().add(pep);
pep.getOwner().set(ic);
return ic;
}
private InternalComponent createInternalComponent(String name, RequiredExecutionPlatform platform) {
InternalComponent ic = new InternalComponent(name, platform);
RequiredPort requiredPort = new RequiredPort(name + REQUIRED_PORT_NAME);
ic.getRequiredPorts().add(requiredPort);
ProvidedPort providedPort = new ProvidedPort(name + PROVIDED_PORT_NAME);
ic.getProvidedPorts().add(providedPort);
return ic;
}
public RequiredExecutionPlatform getRequiredExecutionPlatformA() {
return createRequiredExecutionPlatform(REQUIRED_EXECUTION_PLATFORM_A_NAME);
}
public RequiredExecutionPlatform getRequiredExecutionPlatformB() {
return createRequiredExecutionPlatform(REQUIRED_EXECUTION_PLATFORM_B_NAME);
}
private RequiredExecutionPlatform createRequiredExecutionPlatform(String name) {
RequiredExecutionPlatform rep = new RequiredExecutionPlatform(name);
return rep;
}
public ProvidedExecutionPlatform getProvidedExecutionPlatformA() {
return createProvidedExecutionPlatform(PROVIDED_EXECUTION_PLATFORM_A_NAME);
}
public ProvidedExecutionPlatform getProvidedExecutionPlatformB() {
return createProvidedExecutionPlatform(PROVIDED_EXECUTION_PLATFORM_B_NAME);
}
private ProvidedExecutionPlatform createProvidedExecutionPlatform(String name) {
ProvidedExecutionPlatform pep = new ProvidedExecutionPlatform(name);
return pep;
}
public InternalComponentInstance getInternalComponentInstanceA() {
InternalComponent icA = getInternalComponentA();
return createInternalComponentInstance(INTERNAL_COMPONENT_INSTANCE_A_NAME, getRequiredExecutionPlatformInstanceA(icA), getProvidedExecutionPlatformInstanceA(icA), icA);
}
public InternalComponentInstance getInternalComponentInstanceB() {
InternalComponent icB = getInternalComponentB();
return createInternalComponentInstance(INTERNAL_COMPONENT_INSTANCE_B_NAME, getRequiredExecutionPlatformInstanceB(icB), getProvidedExecutionPlatformInstanceB(icB), icB);
}
public InternalComponentInstance getInternalComponentInstanceAWithType(InternalComponent icA) {
return createInternalComponentInstance(INTERNAL_COMPONENT_INSTANCE_A_NAME, getRequiredExecutionPlatformInstanceA(icA), getProvidedExecutionPlatformInstanceA(icA), icA);
}
public InternalComponentInstance getInternalComponentInstanceBWithType(InternalComponent icB) {
return createInternalComponentInstance(INTERNAL_COMPONENT_INSTANCE_B_NAME, getRequiredExecutionPlatformInstanceB(icB), getProvidedExecutionPlatformInstanceB(icB), icB);
}
private InternalComponentInstance createInternalComponentInstance(String name, RequiredExecutionPlatformInstance requiredExecutionPlatformInstance,
ProvidedExecutionPlatformInstance providedExecutionPlatformInstance, InternalComponent type) {
InternalComponentInstance ici = new InternalComponentInstance(name, type);
return ici;
}
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());
}
public RequiredExecutionPlatformInstance createRequiredExecutionPlatformInstance(String name, RequiredExecutionPlatform type) {
RequiredExecutionPlatformInstance repi = new RequiredExecutionPlatformInstance(name, type);
return repi;
}
public ProvidedExecutionPlatformInstance getProvidedExecutionPlatformInstanceA(InternalComponent icA) {
return createProvidedExecutionPlatformInstance(PROVIDED_EXECUTION_PLATFORM_INSTANCE_NAME_A, icA.getProvidedExecutionPlatforms().toList().get(0));
}
public ProvidedExecutionPlatformInstance getProvidedExecutionPlatformInstanceB(InternalComponent icB) {
return createProvidedExecutionPlatformInstance(PROVIDED_EXECUTION_PLATFORM_INSTANCE_NAME_A, icB.getProvidedExecutionPlatforms().toList().get(0));
}
private ProvidedExecutionPlatformInstance createProvidedExecutionPlatformInstance(String name, ProvidedExecutionPlatform type) {
ProvidedExecutionPlatformInstance pepi = new ProvidedExecutionPlatformInstance(name, type);
return pepi;
}
public Relationship getRelationshipA() {
return createRelationship(RELATIONSHIP_A_NAME);
}
public Relationship getRelationshipB() {
return createRelationship(RELATIONSHIP_B_NAME);
}
private Relationship createRelationship(String name) {
ProvidedPort providedPort = new ProvidedPort(name + PROVIDED_PORT_NAME);
Component ownerProvided = getInternalComponentA();
ownerProvided.getProvidedPorts().add(providedPort);
providedPort.getOwner().set(ownerProvided);
RequiredPort requiredPort = new RequiredPort(name + REQUIRED_PORT_NAME);
InternalComponent ownerRequired = getInternalComponentB();
ownerRequired.getRequiredPorts().add(requiredPort);
requiredPort.getOwner().set(ownerRequired);
Relationship relationship = new Relationship(name, requiredPort, providedPort);
return relationship;
}
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) {
InternalComponentInstance server = relationship.getServerComponent().asInternal().instantiate(INTERNAL_COMPONENT_INSTANCE_A_NAME);
ProvidedPortInstance serverPort = server.getProvidedPorts().withTypeNamed(server.getType().getName() + PROVIDED_PORT_NAME);
InternalComponentInstance client = relationship.getClientComponent().instantiate(INTERNAL_COMPONENT_B_NAME);
RequiredPortInstance clientPort = client.getRequiredPorts().withTypeNamed(client.getType().getName() + REQUIRED_PORT_NAME);
RelationshipInstance relationshipInstance = new RelationshipInstance(name, clientPort, serverPort, relationship);
return relationshipInstance;
}
public ExecuteInstance getExecuteInstanceA() {
return createExecuteInstance(EXECUTE_INSTANCE_NAME_A);
}
public ExecuteInstance getExecuteInstanceB() {
return createExecuteInstance(EXECUTE_INSTANCE_NAME_B);
}
private ExecuteInstance createExecuteInstance(String name) {
InternalComponentInstance requiredOwner = getInternalComponentInstanceA();
InternalComponentInstance providedOwner = getInternalComponentInstanceB();
getInternalComponentInstanceB();
ExecuteInstance ei = new ExecuteInstance(name, requiredOwner.getRequiredExecutionPlatform(), providedOwner.getProvidedExecutionPlatforms().toList().get(0));
return ei;
}
}