/**
* 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 org.cloudml.core.actions;
import org.cloudml.core.*;
import org.cloudml.core.collections.InternalComponentInstanceGroup;
import java.util.List;
import java.util.Map;
public class StandardLibrary {
private final NamingStrategy naming;
public StandardLibrary() {
this.naming = new NamingStrategy();
}
public StandardLibrary(NamingStrategy naming) {
this.naming = naming;
}
public ComponentInstance<? extends Component> provision(Deployment deployment, Component type) {
return new Provision(this, type).applyTo(deployment);
}
public void terminate(Deployment deployment, VMInstance instance) {
new Terminate(this, instance).applyTo(deployment);
}
public InternalComponentInstance install(Deployment deployment, InternalComponent type, ComponentInstance<? extends Component> host) {
return new Install(this, type, host).applyTo(deployment);
}
public void uninstall(Deployment deployment, InternalComponentInstance artefactInstance) {
new Uninstall(this, artefactInstance).applyTo(deployment);
}
public InternalComponentInstance migrate(Deployment deployment, InternalComponentInstance artefactInstance) {
return new Migrate(this, artefactInstance).applyTo(deployment);
}
public void bind(Deployment deployment, RequiredPortInstance clientPort) {
new Bind(this, clientPort).applyTo(deployment);
}
public Relationship findRelationshipFor(Deployment deployment, RequiredPortInstance clientPort) {
return new FindRelationship(this, clientPort).applyTo(deployment);
}
public ProvidedPortInstance findProvidedPortFor(Deployment deployment, Relationship relationshipType) {
return new FindProvidedPortInstance(this, relationshipType).applyTo(deployment);
}
public ComponentInstance<? extends Component> findDestinationFor(Deployment deployment, InternalComponent component) {
return new FindHost(this, component).applyTo(deployment);
}
public ComponentInstance<? extends Component> findAlternativeDestinationFor(Deployment deployment, InternalComponentInstance artefact) {
return new FindHost(this, artefact.getType(), artefact.getHost()).applyTo(deployment);
}
public String createUniqueComponentInstanceName(Deployment deployment, Component type) {
return naming.createUniqueComponentInstanceName(deployment, type);
}
public String createUniqueRelationshipInstanceName(Deployment deployment, Relationship type) {
return naming.createUniqueRelationshipInstanceName(deployment, type);
}
public void unbind(Deployment deployment, PortInstance<? extends Port> port) {
new Unbind(this, port).applyTo(deployment);
}
public void stop(Deployment deployment, ComponentInstance<? extends Component> instance) {
new Stop(this, instance).applyTo(deployment);
}
public Component findHostType(Deployment deployment, InternalComponent type) {
return new FindHostType(this, type).applyTo(deployment);
}
public Component findComponentProviding(Deployment deployment, Relationship bindingType) {
return new FindComponentTypeProviding(this, bindingType).applyTo(deployment);
}
public ComponentInstance replicateComponentInstance(Deployment deployment, ComponentInstance c, ComponentInstance<? extends Component> eci){
return new ReplicateComponentInstance(this, c, eci).applyTo(deployment);
}
public Map<InternalComponentInstance, InternalComponentInstance> replicateSubGraph(Deployment deployment, VMInstance vmiSource, VMInstance vmiDestination){
return new ReplicateSubGraph(this, deployment, vmiSource, vmiDestination).applyTo(deployment);
}
public VMInstance cloneVM(VMInstance vmi, Deployment deployment){
return new CloneVM(this, vmi).applyTo(deployment);
}
}