package org.ovirt.engine.ui.uicommon.models.vms;
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.uicompat.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
@SuppressWarnings("unused")
public class RdpConsoleModel extends ConsoleModel
{
public static EventDefinition RdpDisconnectedEventDefinition = new EventDefinition("RdpDisconnected", RdpConsoleModel.class);
private IRdp privaterdp;
public IRdp getrdp()
{
return privaterdp;
}
private void setrdp(IRdp value)
{
privaterdp = value;
}
public RdpConsoleModel()
{
setTitle("RDP");
setrdp((IRdp)TypeResolver.getInstance().Resolve(IRdp.class));
}
@Override
protected void Connect()
{
if (getEntity() != null)
{
getLogger().Debug("Connecting to RDP console...");
getrdp().setAddress(getEntity().getvm_host().split("[ ]", -1)[0]);
getrdp().setGuestID(getEntity().getvm_guid().toString());
//Subscribe to disconnect event
if (getrdp().getDisconnectedEvent() != null)
{
getrdp().getDisconnectedEvent().addListener(this);
}
//Try to connect.
try
{
getrdp().Connect();
UpdateActionAvailability();
}
catch (RuntimeException ex)
{
getLogger().Error("Exception on RDP connect", ex);
}
}
}
@Override
protected void UpdateActionAvailability()
{
super.UpdateActionAvailability();
getConnectCommand().setIsExecutionAllowed(getEntity() != null && (getEntity().getstatus() == VMStatus.Up || getEntity().getstatus() == VMStatus.PoweringDown) && DataProvider.IsWindowsOsType(getEntity().getvm_os()));
}
@Override
public void eventRaised(Event ev, Object sender, EventArgs args)
{
super.eventRaised(ev, sender, args);
if (getrdp().getDisconnectedEvent() != null && ev.equals(getrdp().getDisconnectedEvent()))
{
Rdp_Disconnected(sender, (ErrorCodeEventArgs)args);
}
}
private void Rdp_Disconnected(Object sender, ErrorCodeEventArgs e)
{
getrdp().getDisconnectedEvent().removeListener(this);
if (e.getErrorCode() > 100)
{
getErrorEvent().raise(this, e);
}
}
}