package org.ovirt.engine.ui.uicommon.models.storage;
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.validation.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
@SuppressWarnings("unused")
public abstract class SanStorageModelBase extends ListModel implements IStorageModel
{
private UICommand privateUpdateCommand;
public UICommand getUpdateCommand()
{
return privateUpdateCommand;
}
private void setUpdateCommand(UICommand value)
{
privateUpdateCommand = value;
}
private UICommand privateLoginAllCommand;
public UICommand getLoginAllCommand()
{
return privateLoginAllCommand;
}
private void setLoginAllCommand(UICommand value)
{
privateLoginAllCommand = value;
}
private UICommand privateDiscoverTargetsCommand;
public UICommand getDiscoverTargetsCommand()
{
return privateDiscoverTargetsCommand;
}
private void setDiscoverTargetsCommand(UICommand value)
{
privateDiscoverTargetsCommand = value;
}
private StorageModel privateContainer;
public StorageModel getContainer()
{
return privateContainer;
}
public void setContainer(StorageModel value)
{
privateContainer = value;
}
private StorageDomainType privateRole = StorageDomainType.values()[0];
public StorageDomainType getRole()
{
return privateRole;
}
public void setRole(StorageDomainType value)
{
privateRole = value;
}
public abstract StorageType getType();
private EntityModel privateAddress;
public EntityModel getAddress()
{
return privateAddress;
}
private void setAddress(EntityModel value)
{
privateAddress = value;
}
private EntityModel privatePort;
public EntityModel getPort()
{
return privatePort;
}
private void setPort(EntityModel value)
{
privatePort = value;
}
private EntityModel privateUserName;
public EntityModel getUserName()
{
return privateUserName;
}
private void setUserName(EntityModel value)
{
privateUserName = value;
}
private EntityModel privatePassword;
public EntityModel getPassword()
{
return privatePassword;
}
private void setPassword(EntityModel value)
{
privatePassword = value;
}
private EntityModel privateUseUserAuth;
public EntityModel getUseUserAuth()
{
return privateUseUserAuth;
}
private void setUseUserAuth(EntityModel value)
{
privateUseUserAuth = value;
}
private boolean proposeDiscoverTargets;
public boolean getProposeDiscoverTargets()
{
return proposeDiscoverTargets;
}
public void setProposeDiscoverTargets(boolean value)
{
if (proposeDiscoverTargets != value)
{
proposeDiscoverTargets = value;
OnPropertyChanged(new PropertyChangedEventArgs("ProposeDiscoverTargets"));
}
}
private boolean loginAllInProgress;
protected SanStorageModelBase()
{
setUpdateCommand(new UICommand("Update", this));
UICommand tempVar = new UICommand("LoginAll", this);
tempVar.setIsExecutionAllowed(false);
setLoginAllCommand(tempVar);
setDiscoverTargetsCommand(new UICommand("DiscoverTargets", this));
setAddress(new EntityModel());
EntityModel tempVar2 = new EntityModel();
tempVar2.setEntity("3260");
setPort(tempVar2);
setUserName(new EntityModel());
setPassword(new EntityModel());
EntityModel tempVar3 = new EntityModel();
tempVar3.setEntity(false);
setUseUserAuth(tempVar3);
getUseUserAuth().getEntityChangedEvent().addListener(this);
UpdateUserAuthFields();
}
@Override
public void eventRaised(Event ev, Object sender, EventArgs args)
{
super.eventRaised(ev, sender, args);
if (ev.equals(SanTargetModel.LoggedInEventDefinition))
{
SanTargetModel_LoggedIn(sender, args);
}
else if (ev.equals(EntityChangedEventDefinition))
{
UseUserAuth_EntityChanged(sender, args);
}
}
private void SanTargetModel_LoggedIn(Object sender, EventArgs args)
{
VDS host = (VDS)getContainer().getHost().getSelectedItem();
if (host == null)
{
return;
}
SanTargetModel model = (SanTargetModel)sender;
storage_server_connections tempVar = new storage_server_connections();
tempVar.setportal("0");
tempVar.setstorage_type(StorageType.ISCSI);
tempVar.setuser_name((Boolean)getUseUserAuth().getEntity() ? (String)getUserName().getEntity() : "");
tempVar.setpassword((Boolean)getUseUserAuth().getEntity() ? (String)getPassword().getEntity() : "");
tempVar.setiqn(model.getName());
tempVar.setconnection(model.getAddress());
tempVar.setport(String.valueOf(model.getPort()));
storage_server_connections connection = tempVar;
VdcReturnValueBase returnValue = Frontend.RunAction(VdcActionType.ConnectStorageToVds, new StorageServerConnectionParametersBase(connection, host.getvds_id()));
if (returnValue != null && returnValue.getSucceeded())
{
model.setIsLoggedIn(true);
model.getLoginCommand().setIsExecutionAllowed(false);
if (!loginAllInProgress)
{
UpdateInternal();
}
}
}
private void LoginAll()
{
//Cast to list of SanTargetModel because we get call
//to this method only from target/LUNs mode.
loginAllInProgress = true;
boolean updateRequired = false;
java.util.List<SanTargetModel> items = (java.util.List<SanTargetModel>)getItems();
for (SanTargetModel item : items)
{
if (!item.getIsLoggedIn())
{
item.getLoginCommand().Execute();
updateRequired = true;
}
}
if (updateRequired)
{
UpdateInternal();
}
loginAllInProgress = false;
}
private void DiscoverTargets()
{
if (getContainer().getProgress() != null)
{
return;
}
if (!ValidateDiscoverTargetFields())
{
return;
}
VDS host = (VDS)getContainer().getHost().getSelectedItem();
storage_server_connections tempVar = new storage_server_connections();
tempVar.setconnection(((String)getAddress().getEntity()).trim());
tempVar.setport(((String)getPort().getEntity()).trim());
tempVar.setportal("0");
tempVar.setstorage_type(StorageType.ISCSI);
tempVar.setuser_name((Boolean)getUseUserAuth().getEntity() ? (String)getUserName().getEntity() : "");
tempVar.setpassword((Boolean)getUseUserAuth().getEntity() ? (String)getPassword().getEntity() : "");
DiscoverSendTargetsQueryParameters parameters = new DiscoverSendTargetsQueryParameters(host.getvds_id(), tempVar);
setMessage(null);
getContainer().StartProgress(null);
Frontend.RunQuery(VdcQueryType.DiscoverSendTargets, parameters, new AsyncQuery(this,
new INewAsyncCallback() {
@Override
public void OnSuccess(Object target, Object returnValue) {
SanStorageModelBase model = (SanStorageModelBase)target;
Object result = ((VdcQueryReturnValue)returnValue).getReturnValue();
model.PostDiscoverTargetsInternal(result != null ? (java.util.ArrayList<storage_server_connections>)result : new java.util.ArrayList<storage_server_connections>());
}
}, true));
}
private void PostDiscoverTargetsInternal(java.util.ArrayList<storage_server_connections> items)
{
java.util.ArrayList<SanTargetModel> newItems = new java.util.ArrayList<SanTargetModel>();
for (storage_server_connections a : items)
{
SanTargetModel tempVar = new SanTargetModel();
tempVar.setAddress(a.getconnection());
tempVar.setPort(a.getport());
tempVar.setName(a.getiqn());
tempVar.setLuns(new ObservableCollection<LunModel>());
SanTargetModel model = tempVar;
model.getLoggedInEvent().addListener(this);
newItems.add(model);
}
getContainer().StopProgress();
if (items.isEmpty())
{
setMessage("No new devices were found. This may be due to either: incorrect multipath configuration on the Host or wrong address of the iscsi target or a failure to authenticate on the target device. Please consult your Storage Administrator.");
}
PostDiscoverTargets(newItems);
}
protected void PostDiscoverTargets(java.util.ArrayList<SanTargetModel> newItems)
{
}
private boolean ValidateDiscoverTargetFields()
{
getContainer().getHost().ValidateSelectedItem(new NotEmptyValidation[] { new NotEmptyValidation() });
getAddress().ValidateEntity(new IValidation[] { new NotEmptyValidation() });
IntegerValidation tempVar = new IntegerValidation();
tempVar.setMinimum(0);
tempVar.setMaximum(65535);
getPort().ValidateEntity(new IValidation[] { new NotEmptyValidation(), tempVar });
if ((Boolean)getUseUserAuth().getEntity())
{
getUserName().ValidateEntity(new IValidation[] { new NotEmptyValidation() });
getPassword().ValidateEntity(new IValidation[] { new NotEmptyValidation() });
}
return getContainer().getHost().getIsValid() && getAddress().getIsValid() && getPort().getIsValid() && getUserName().getIsValid() && getPassword().getIsValid();
}
public boolean Validate()
{
return true;
}
private void UseUserAuth_EntityChanged(Object sender, EventArgs args)
{
UpdateUserAuthFields();
}
private void UpdateUserAuthFields()
{
getUserName().setIsValid(true);
getUserName().setIsChangable((Boolean)getUseUserAuth().getEntity());
getPassword().setIsValid(true);
getPassword().setIsChangable((Boolean)getUseUserAuth().getEntity());
}
@Override
public void ExecuteCommand(UICommand command)
{
super.ExecuteCommand(command);
if (command == getUpdateCommand())
{
Update();
}
else if (command == getLoginAllCommand())
{
LoginAll();
}
else if (command == getDiscoverTargetsCommand())
{
DiscoverTargets();
}
}
protected void Update()
{
UpdateInternal();
setIsValid(true);
}
protected void UpdateInternal()
{
}
protected void UpdateLoginAllAvailability()
{
java.util.List<SanTargetModel> items = (java.util.List<SanTargetModel>)getItems();
//Allow login all command when there at least one target that may be logged in.
boolean allow = false;
for (SanTargetModel item : items)
{
if (!item.getIsLoggedIn())
{
allow = true;
break;
}
}
getLoginAllCommand().setIsExecutionAllowed(allow);
}
}