diff --git a/src/oca/java/src/org/opennebula/client/host/Host.java b/src/oca/java/src/org/opennebula/client/host/Host.java new file mode 100644 index 0000000000..beaf9eb567 --- /dev/null +++ b/src/oca/java/src/org/opennebula/client/host/Host.java @@ -0,0 +1,200 @@ +/******************************************************************************* + * Copyright 2002-2010, OpenNebula Project Leads (OpenNebula.org) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ +package org.opennebula.client.host; + + +import org.opennebula.client.Client; +import org.opennebula.client.OneResponse; +import org.opennebula.client.PoolElement; +import org.w3c.dom.Node; + +/** + * This class represents an OpenNebula host. + * It also offers static XML-RPC call wrappers. + */ +public class Host extends PoolElement{ + + private static final String METHOD_PREFIX = "host."; + private static final String ALLOCATE = METHOD_PREFIX + "allocate"; + private static final String INFO = METHOD_PREFIX + "info"; + private static final String DELETE = METHOD_PREFIX + "delete"; + private static final String ENABLE = METHOD_PREFIX + "enable"; + + private static final String[] HOST_STATES = + {"INIT", "MONITORING", "MONITORED", "ERROR", "DISABLED"}; + + + /** + * Creates a new Host representation. + * + * @param id The host id (hid) of the machine. + * @param client XML-RPC Client. + */ + public Host(int id, Client client) + { + super(id, client); + } + + /** + * @see PoolElement + */ + protected Host(Node xmlElement, Client client) + { + super(xmlElement, client); + } + + + // ================================= + // Static XML-RPC methods + // ================================= + + /** + * Allocates a new host in OpenNebula + * + * @param client XML-RPC Client. + * @param hostname Hostname of the machine we want to add + * @param im The name of the information manager (im_mad_name), + * this values are taken from the oned.conf with the tag name IM_MAD (name) + * @param vmm The name of the virtual machine manager mad name + * (vmm_mad_name), this values are taken from the oned.conf with the + * tag name VM_MAD (name) + * @param tm The transfer manager mad name to be used with this host + * @return If successful the message contains the associated + * id generated for this host + */ + public static OneResponse allocate(Client client, + String hostname, + String im, + String vmm, + String tm) + { + return client.call(ALLOCATE, hostname, im, vmm, tm); + } + + /** + * Retrieves the information of the given host. + * + * @param client XML-RPC Client. + * @param id The host id (hid) of the target machine. + * @return If successful the message contains the string + * with the information returned by OpenNebula. + */ + public static OneResponse info(Client client, int id) + { + return client.call(INFO, id); + } + + /** + * Deletes a host from OpenNebula. + * + * @param client XML-RPC Client. + * @param id The host id (hid) of the target machine. + * @return A encapsulated response. + */ + public static OneResponse delete(Client client, int id) + { + return client.call(DELETE, id); + } + + /** + * Enables or disables a given host. + * + * @param client XML-RPC Client. + * @param id The host id (hid) of the target machine. + * @param enable If set true OpenNebula will enable the + * target host, if set false it will disable it. + * @return A encapsulated response. + */ + public static OneResponse enable(Client client, int id, boolean enable) + { + return client.call(ENABLE, id, enable); + } + + + // ================================= + // Instanced object XML-RPC methods + // ================================= + + /** + * Loads the xml representation of the host. + * The info is also stored internally. + * + * @see Host#info(Client, int) + */ + public OneResponse info() + { + OneResponse response = info(client, id); + super.processInfo(response); + return response; + } + + /** + * Deletes the host from OpenNebula. + * + * @see Host#delete(Client, int) + */ + public OneResponse delete() + { + return delete(client, id); + } + + /** + * Enables or disables the host. + * + * @see Host#enable(Client, int, boolean) + */ + public OneResponse enable(boolean enable) + { + return enable(client, id, enable); + } + + // ================================= + // Helpers + // ================================= + + /** + * Returns the state of the Host. + *
+ * The method {@link Host#info()} must be called before. + * + * @return The state of the Host. + */ + public String stateStr() + { + int state = state(); + return state != -1 ? HOST_STATES[state()] : null; + } + + /** + * Returns the short length string state of the Host. + *
+ * The method {@link Host#info()} must be called before. + * + * @return The short length string state of the Host. + */ + public String shortStateStr() + { + String st = stateStr(); + if(st == null) + return null; + else if(st.equals("ERROR")) + return "err"; + else if (st.equals("DISABLED")) + return "off"; + else + return "on"; + } +} diff --git a/src/oca/java/src/org/opennebula/client/host/HostPool.java b/src/oca/java/src/org/opennebula/client/host/HostPool.java new file mode 100644 index 0000000000..398e9623df --- /dev/null +++ b/src/oca/java/src/org/opennebula/client/host/HostPool.java @@ -0,0 +1,93 @@ +/******************************************************************************* + * Copyright 2002-2010, OpenNebula Project Leads (OpenNebula.org) + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ +package org.opennebula.client.host; + +import java.util.AbstractList; +import java.util.Iterator; + + +import org.opennebula.client.Client; +import org.opennebula.client.OneResponse; +import org.opennebula.client.Pool; +import org.opennebula.client.PoolElement; +import org.w3c.dom.Node; + +/** + * This class represents an OpenNebula host pool. + * It also offers static XML-RPC call wrappers. + */ +public class HostPool extends Pool implements Iterable{ + + private static final String ELEMENT_NAME = "HOST"; + private static final String INFO_METHOD = "hostpool.info"; + + /** + * Creates a new host pool + * @param client XML-RPC Client. + */ + public HostPool(Client client) + { + super(ELEMENT_NAME, client); + } + + @Override + public PoolElement factory(Node node) + { + return new Host(node, client); + } + + /** + * Retrieves all the hosts in the pool. + * + * @param client XML-RPC Client. + * @return If successful the message contains the string + * with the information returned by OpenNebula. + */ + public static OneResponse info(Client client) + { + return client.call(INFO_METHOD); + } + + /** + * Loads the xml representation of the host pool. + * + * @see HostPool#info(Client) + */ + public OneResponse info() + { + OneResponse response = info(client); + super.processInfo(response); + return response; + } + + public Iterator iterator() + { + AbstractList ab = new AbstractList() + { + public int size() + { + return getLength(); + } + + public Host get(int index) + { + return (Host) item(index); + } + }; + + return ab.iterator(); + } +}