/* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * The Original Code is available at http://www.abiquo.com/..... * * The Initial Developer of the Original Code is Soluciones Grid, S.L. (www.abiquo.com), * Consell de Cent 296 principal 2�, 08007 Barcelona, Spain. * No portions of the Code have been created by third parties. * All Rights Reserved. * * Contributor(s): ______________________________________. * * Graphical User Interface of this software may be used under the terms * of the Common Public Attribution License Version 1.0 (the "CPAL License", * available at http://cpal.abiquo.com), in which case the provisions of CPAL * License are applicable instead of those above. In relation of this portions * of the Code, a Legal Notice according to Exhibits A and B of CPAL Licence * should be provided in any distribution of the corresponding Code to Graphical * User Interface. */ package com.abiquo.abicloud.model; import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.abiquo.abicloud.exception.VirtualMachineException; import com.abiquo.abicloud.model.config.VirtualMachineConfiguration; /** * The Class AbsVirtualMachine. */ public abstract class AbsVirtualMachine { protected final static Logger logger = LoggerFactory.getLogger(AbsVirtualMachine.class); protected MachineState state; protected VirtualMachineConfiguration config; /** * Standard constructor * * @param configuration the configuration file to properly instantiate a virtual machine */ public AbsVirtualMachine(VirtualMachineConfiguration configuration) { config = configuration; state = MachineState.POWER_OFF; } /** * Gets the virtual machine configuration object * * @return the virtual machine configuration */ public VirtualMachineConfiguration getConfiguration() { return config; } /** * Gets the state. * * @return the state */ public MachineState getState() { return state; } /** * Sets the state * * @param state the new state */ public void setState(MachineState state) { this.state = state; } /** * Performs the action related to the state indicated by the argument. * * @param state the new state * @throws Exception */ public void applyState(MachineState newstate) throws Exception { // try // { logger.info("The present state is :" + state.value()); if (state.equals(MachineState.POWER_OFF)) { if (newstate.equals(MachineState.POWER_UP)) { powerOnMachine(); this.state = MachineState.POWER_UP; } } else if (state.equals(MachineState.POWER_UP)) { if (newstate.equals(MachineState.POWER_OFF)) { powerOffMachine(); this.state = MachineState.POWER_OFF; } else if (newstate.equals(MachineState.PAUSE)) { pauseMachine(); this.state = MachineState.PAUSE; } } else if (state.equals(MachineState.PAUSE)) { if (newstate.equals(MachineState.POWER_OFF)) { powerOffMachine(); this.state = MachineState.POWER_OFF; } else if (newstate.equals(MachineState.RESUME)) { resumeMachine(); this.state = MachineState.POWER_UP; } } else { throw new IllegalArgumentException("MachineState value " + newstate.toString()); } // } /* * catch (Exception e) { throw newVirtualMachineException( * "An error was occurred when changing the state of the virtual machine" , e); } */ logger.info("The new state is :" + state.value()); // oSession.close(); } /** * Deploys a virtual machine. * * @throws Exception */ protected abstract void deployMachine() throws Exception; /** * Starts the virtual machine execution * * @throws Exception */ public abstract void powerOnMachine() throws Exception; /** * Stops the virtual machine execution */ public abstract void powerOffMachine() throws Exception; /** * Pauses the virtual machine execution. */ public abstract void pauseMachine() throws Exception; /** * Resumes the virtual machine execution. */ public abstract void resumeMachine() throws Exception; /** * Resets the virtual machine */ public abstract void resetMachine() throws Exception; // TODO AbsVirtualMachineSnapshotable :P /** * Returns a snapshot of the machine with the given name */ public abstract void takeSnapshot(String name); /** * Returns a snapshot of the machine with the given name. * * @param name */ public abstract void findSnapshot(String name); /** * Sets the current snapshot of this machine. */ public abstract void setCurrentSnapshot(UUID id); // Events handling public abstract void populateEvent(); /** * Deletes the machine and the attached virtual disks */ public abstract void deleteMachine() throws Exception; /** * Reconfigures the virtual machine parameters * * @param newConfiguration the new configuration parameters * @throws Exception */ public abstract void reconfigVM(VirtualMachineConfiguration newConfiguration) throws VirtualMachineException; }