/**
* 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.builders;
import org.cloudml.core.Deployment;
import org.cloudml.core.VM;
public class VMBuilder extends ExternalComponentBuilder<VM, VMBuilder> {
private int minRam;
private int minCores;
private int minStorage;
private String location;
private String os;
private String groupName;
private String sshKey;
private String securityGroup;
private boolean os64bit;
private String imageId;
public VMBuilder() {
minRam = VM.DEFAULT_MIN_RAM;
minCores = VM.DEFAULT_MIN_CORES;
minStorage = VM.DEFAULT_MIN_STORAGE;
location = VM.DEFAULT_LOCATION;
os = VM.DEFAULT_OS;
groupName = VM.DEFAULT_GROUP_NAME;
sshKey = VM.DEFAULT_SSH_KEY;
securityGroup = VM.DEFAULT_SECURITY_GROUP;
os64bit = VM.DEFAULT_64_OS;
imageId = VM.DEFAULT_IMAGE_ID;
}
@Override
public VM build() {
final VM result = new VM(getName(), createStubProvider());
prepare(result);
return result;
}
public VMBuilder withMinRam(int minRam) {
this.minRam = minRam;
return next();
}
public VMBuilder withMinCores(int minCores) {
this.minCores = minCores;
return next();
}
public VMBuilder withMinStorage(int storage) {
this.minStorage = storage;
return next();
}
public VMBuilder withLocation(String location) {
this.location = location;
return next();
}
public VMBuilder withGroupName(String groupName) {
this.groupName = groupName;
return next();
}
public VMBuilder withOS(String os) {
this.os = os;
return next();
}
public VMBuilder withSshKey(String sshKey) {
this.sshKey = sshKey;
return next();
}
public VMBuilder withSecurityGroup(String secruityGroup) {
this.securityGroup = secruityGroup;
return next();
}
public VMBuilder with64OS() {
this.os64bit = true;
return next();
}
public VMBuilder withImageId(String imageId) {
this.imageId = imageId;
return next();
}
@Override
protected VMBuilder next() {
return this;
}
@Override
public void integrateIn(Deployment container) {
final VM result = new VM(getName(), findProvider(container));
prepare(result);
container.getComponents().add(result);
}
protected void prepare(VM underConstruction) {
super.prepare(underConstruction);
underConstruction.setMinRam(minRam);
underConstruction.setMinCores(minCores);
underConstruction.setMinStorage(minStorage);
underConstruction.setLocation(location);
underConstruction.setOs(os);
underConstruction.setGroupName(groupName);
underConstruction.setSshKey(sshKey);
underConstruction.setSecurityGroup(securityGroup);
underConstruction.setIs64os(os64bit);
underConstruction.setImageId(imageId);
}
}