package org.ovirt.engine.ui.uicommon.models.hosts;
import java.util.Collections;
import org.ovirt.engine.core.compat.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.core.common.vdscommands.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.core.common.action.*;
import org.ovirt.engine.ui.frontend.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.ui.uicommon.models.clusters.*;
import org.ovirt.engine.ui.uicommon.models.common.*;
import org.ovirt.engine.ui.uicommon.models.configure.*;
import org.ovirt.engine.ui.uicommon.models.datacenters.*;
import org.ovirt.engine.ui.uicommon.models.tags.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.common.interfaces.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
@SuppressWarnings("unused")
public class AddStorageDomainRM extends BaseRM
{
private static final int WaitInterval = 5000;
private static final int WaitTries = 6;
public AddStorageDomainRM(HostListModel model, DataBag data)
{
super(model, data);
Transaction.Current.EnlistVolatile(this, EnlistmentOptions.None);
}
@Override
public void Prepare(PreparingEnlistment preparingEnlistment) throws TransactionAbortedException
{
VDS host = (VDS)getModel().getSelectedItem();
ConfigureLocalStorageModel model = (ConfigureLocalStorageModel)getModel().getWindow();
//Activate host.
VdcReturnValueBase returnValue = Frontend.RunAction(VdcActionType.ActivateVds, new VdsActionParameters(host.getvds_id()));
if (returnValue == null || !returnValue.getSucceeded())
{
preparingEnlistment.ForceRollback();
return;
}
//Wait for a host to be Up.
for (int i = 0; i <= WaitTries; i++)
{
if (i == WaitTries)
{
preparingEnlistment.ForceRollback();
return;
}
VDS tmpHost = DataProvider.GetHostById(host.getvds_id());
if (tmpHost.getstatus() != VDSStatus.Up)
{
//Wrap Thread.Sleep with try/catch to pass conversion to Java.
try
{
Thread.sleep(WaitInterval);
}
catch (InterruptedException e)
{
}
}
else
{
break;
}
}
//Add storage domain.
storage_server_connections tempVar = new storage_server_connections();
tempVar.setconnection((String)model.getStorage().getPath().getEntity());
tempVar.setstorage_type(StorageType.LOCALFS);
storage_server_connections connection = tempVar;
storage_domain_static storageDomain = new storage_domain_static();
storageDomain.setstorage_type(StorageType.LOCALFS);
storageDomain.setstorage_domain_type(StorageDomainType.Data);
storageDomain.setstorage_name((String)model.getFormattedStorageName().getEntity());
returnValue = Frontend.RunAction(VdcActionType.AddStorageServerConnection, new StorageServerConnectionParametersBase(connection, host.getvds_id()));
if (returnValue == null || !returnValue.getSucceeded())
{
//Don't rollback, just throw exception to indicate failure at this step.
throw new TransactionAbortedException();
}
storageDomain.setstorage((String)returnValue.getActionReturnValue());
StorageDomainManagementParameter tempVar2 = new StorageDomainManagementParameter(storageDomain);
tempVar2.setVdsId(host.getvds_id());
returnValue = Frontend.RunAction(VdcActionType.AddLocalStorageDomain, tempVar2);
//Clean up connection.
if (returnValue == null || !returnValue.getSucceeded())
{
Frontend.RunAction(VdcActionType.RemoveStorageServerConnection, new StorageServerConnectionParametersBase(connection, host.getvds_id()));
throw new TransactionAbortedException();
}
preparingEnlistment.Prepared();
}
@Override
public void Commit(Enlistment enlistment)
{
enlistment.Done();
}
@Override
public void Rollback(Enlistment enlistment)
{
}
@Override
public void InDoubt(Enlistment enlistment)
{
}
}