/**
* Copyright (c) 2016 Inria
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* - Christophe Gourdin <christophe.gourdin@inria.fr>
*
*/
package org.occiware.clouddesigner.occi.infrastructure.connector.vmware.utils;
import java.rmi.RemoteException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.vmware.vim25.mo.Datacenter;
import com.vmware.vim25.mo.Datastore;
import com.vmware.vim25.mo.Folder;
import com.vmware.vim25.mo.InventoryNavigator;
import com.vmware.vim25.mo.ManagedEntity;
/**
* Datacenter helper class for datacenter management.
* @author Christophe Gourdin - Inria
*
*/
public class DatacenterHelper {
private static Logger LOGGER = LoggerFactory.getLogger(DatacenterHelper.class);
/**
* Find a datacenter for name.
*
* @param folder
* @param name
* @return
*/
public static Datacenter findDatacenterForName(final Folder folder, final String name) {
Datacenter dc = null;
// Get the datacenter attribute (via getSummary for now).
// TODO : set a specific attribute (or mixin) for that.
try {
dc = (Datacenter) new InventoryNavigator(folder).searchManagedEntity("Datacenter", name);
} catch (RemoteException ex) {
LOGGER.error("Error while searching a datacenter name : " + name + " --> " + ex.getMessage());
}
return dc;
}
/**
* Find the first datacenter found, if none found, null value is returned.
*
* @param folder
* @return a datacenter object, if none, null value is returned.
*/
public static Datacenter findFirstDatacenter(final Folder folder) {
Datacenter dc = null;
try {
// Search for the first datacenter found and assign it.
ManagedEntity[] dcs = new InventoryNavigator(folder).searchManagedEntities("Datacenter");
if (dcs != null && dcs.length > 0) {
// Get the first.
dc = (Datacenter) dcs[0];
}
} catch (RemoteException ex) {
LOGGER.error("Error while searching a datacenter (first on tree) " + ex.getMessage());
}
return dc;
}
/**
* Find a datacenter from the datastore.
* @param dsName
* @return
*/
public static Datacenter findDatacenterFromDatastore(final Folder folder, final String dsName) {
Datacenter dc = null;
Datacenter dcTmp;
try {
ManagedEntity[] dcs = new InventoryNavigator(folder).searchManagedEntities("Datacenter");
if (dcs != null && dcs.length > 0) {
for (ManagedEntity entity : dcs) {
dcTmp = (Datacenter) entity;
// Search on datastore tab.
Datastore[] datastores = dcTmp.getDatastores();
if (datastores == null) {
LOGGER.warn("No datastore found on this datacenter: " + dcTmp.getName());
continue;
}
for (Datastore ds : datastores) {
if (ds != null && ds.getName().equals(dsName)) {
LOGGER.info("Datastore found : " + dsName + " on the datacenter : " + dcTmp.getName());
dc = dcTmp;
break;
}
}
}
}
} catch (RemoteException ex) {
LOGGER.error("Error while searching a datacenter (first on tree) " + ex.getMessage());
}
if (dc == null) {
LOGGER.error("datacenter not found for this datastore: " + dsName);
}
return dc;
}
/**
* Create a new datacenter on specified folder.
*
* @param folder
* @param name
* @return a datacenter created object if an exception is thrown, null is
* returned.
*/
public static Datacenter createDatacenter(final Folder folder, final String name) {
try {
// Create a new datacenter by default :
Datacenter dc = folder.createDatacenter("datacenter1");
return dc;
} catch (RemoteException ex) {
LOGGER.error("Datacenter creation error : datacenter1 : " + folder.getName());
}
return null;
}
}