Introduce the concept of an abstract device.

The idea is that all kinds of devices inherit from one abstract
base class and that they are all managed by one device manager,
who does not know about their specifics.
For now, the only concrete subclass is the LinuxDeviceConguration.

Change-Id: I31ff5586a0fdd6bcf8dcc0554bb2b91fe65b2f3f
Reviewed-by: Kai Koehne <kai.koehne@nokia.com>
This commit is contained in:
Christian Kandeler
2012-03-06 12:31:42 +01:00
parent 933592e6a7
commit 9a34b156c1
52 changed files with 1432 additions and 1189 deletions

View File

@@ -31,15 +31,14 @@
**************************************************************************/
#include "linuxdeviceconfiguration.h"
#include "linuxdeviceconfigurations.h"
#include "remotelinux_constants.h"
#include <utils/portlist.h>
#include <utils/ssh/sshconnection.h>
#include <utils/qtcassert.h>
#include <QSettings>
#include <QDesktopServices>
#include <QStringList>
using namespace Utils;
typedef SshConnectionParameters::AuthenticationType AuthType;
@@ -47,9 +46,6 @@ typedef SshConnectionParameters::AuthenticationType AuthType;
namespace RemoteLinux {
namespace Internal {
namespace {
const QLatin1String NameKey("Name");
const QLatin1String OldOsVersionKey("OsVersion"); // Outdated, only use for upgrading.
const QLatin1String TypeKey("OsType");
const QLatin1String MachineTypeKey("Type");
const QLatin1String HostKey("Host");
const QLatin1String SshPortKey("SshPort");
@@ -59,8 +55,6 @@ const QLatin1String AuthKey("Authentication");
const QLatin1String KeyFileKey("KeyFile");
const QLatin1String PasswordKey("Password");
const QLatin1String TimeoutKey("Timeout");
const QLatin1String InternalIdKey("InternalId");
const QLatin1String AttributesKey("Attributes");
const AuthType DefaultAuthType(SshConnectionParameters::AuthenticationByKey);
const int DefaultTimeout(10);
@@ -71,13 +65,8 @@ class LinuxDeviceConfigurationPrivate
{
public:
SshConnectionParameters sshParameters;
QString displayName;
QString type;
LinuxDeviceConfiguration::MachineType machineType;
PortList freePorts;
LinuxDeviceConfiguration::Origin origin;
LinuxDeviceConfiguration::Id internalId;
QVariantHash attributes;
};
} // namespace Internal
@@ -89,14 +78,8 @@ LinuxDeviceConfiguration::~LinuxDeviceConfiguration()
delete d;
}
// TODO: For pre-2.6 versions. Remove in 2.8.
LinuxDeviceConfiguration::Ptr LinuxDeviceConfiguration::create(const QSettings &settings)
{
return Ptr(new LinuxDeviceConfiguration(settings));
}
LinuxDeviceConfiguration::Ptr LinuxDeviceConfiguration::create(const QString &name,
const QString &type, MachineType machineType, Origin origin)
const QString &type, MachineType machineType, Origin origin)
{
return Ptr(new LinuxDeviceConfiguration(name, type, machineType, origin));
}
@@ -107,58 +90,17 @@ LinuxDeviceConfiguration::LinuxDeviceConfiguration() : d(new LinuxDeviceConfigur
LinuxDeviceConfiguration::LinuxDeviceConfiguration(const QString &name, const QString &type,
MachineType machineType, Origin origin)
: d(new LinuxDeviceConfigurationPrivate)
: IDevice(type, origin), d(new LinuxDeviceConfigurationPrivate)
{
d->displayName = name;
d->type = type;
setDisplayName(name);
d->machineType = machineType;
d->origin = origin;
}
// TODO: For pre-2.6 versions. Remove in 2.8.
LinuxDeviceConfiguration::LinuxDeviceConfiguration(const QSettings &settings)
: d(new LinuxDeviceConfigurationPrivate)
{
d->origin = ManuallyAdded;
d->displayName = settings.value(NameKey).toString();
d->type = settings.value(TypeKey).toString();
d->machineType = static_cast<MachineType>(settings.value(MachineTypeKey, DefaultMachineType).toInt());
d->internalId = settings.value(InternalIdKey, InvalidId).toULongLong();
d->attributes = settings.value(AttributesKey).toHash();
// Convert from version < 2.3.
if (d->type.isEmpty()) {
const int oldOsType = settings.value(OldOsVersionKey, -1).toInt();
switch (oldOsType) {
case 0: d->type = QLatin1String("Maemo5OsType"); break;
case 1: d->type = QLatin1String("HarmattanOsType"); break;
case 2: d->type = QLatin1String("MeeGoOsType"); break;
default: d->type = QLatin1String(Constants::GenericLinuxOsType);
}
}
d->freePorts = PortList::fromString(settings.value(PortsSpecKey, QLatin1String("10000-10100")).toString());
d->sshParameters.host = settings.value(HostKey).toString();
d->sshParameters.port = settings.value(SshPortKey, 22).toInt();
d->sshParameters.userName = settings.value(UserNameKey).toString();
d->sshParameters.authenticationType
= static_cast<AuthType>(settings.value(AuthKey, DefaultAuthType).toInt());
d->sshParameters.password = settings.value(PasswordKey).toString();
d->sshParameters.privateKeyFile
= settings.value(KeyFileKey, defaultPrivateKeyFilePath()).toString();
d->sshParameters.timeout = settings.value(TimeoutKey, DefaultTimeout).toInt();
}
LinuxDeviceConfiguration::LinuxDeviceConfiguration(const LinuxDeviceConfiguration &other)
: d(new LinuxDeviceConfigurationPrivate)
: IDevice(other), d(new LinuxDeviceConfigurationPrivate)
{
d->displayName = other.d->displayName;
d->type = other.d->type;
d->machineType = other.machineType();
d->freePorts = other.freePorts();
d->origin = other.d->origin;
d->internalId = other.d->internalId;
d->attributes = other.d->attributes;
d->sshParameters = other.d->sshParameters;
}
@@ -180,15 +122,8 @@ LinuxDeviceConfiguration::Ptr LinuxDeviceConfiguration::create()
void LinuxDeviceConfiguration::fromMap(const QVariantMap &map)
{
d->origin = ManuallyAdded;
d->displayName = map.value(NameKey).toString();
d->type = map.value(TypeKey).toString();
IDevice::fromMap(map);
d->machineType = static_cast<MachineType>(map.value(MachineTypeKey, DefaultMachineType).toInt());
d->internalId = map.value(InternalIdKey, InvalidId).toULongLong();
const QVariantMap attrMap = map.value(AttributesKey).toMap();
for (QVariantMap::ConstIterator it = attrMap.constBegin(); it != attrMap.constEnd(); ++it)
d->attributes.insert(it.key(), it.value());
d->freePorts = PortList::fromString(map.value(PortsSpecKey,
QLatin1String("10000-10100")).toString());
d->sshParameters.host = map.value(HostKey).toString();
@@ -203,9 +138,7 @@ void LinuxDeviceConfiguration::fromMap(const QVariantMap &map)
QVariantMap LinuxDeviceConfiguration::toMap() const
{
QVariantMap map;
map.insert(NameKey, d->displayName);
map.insert(TypeKey, d->type);
QVariantMap map = IDevice::toMap();
map.insert(MachineTypeKey, d->machineType);
map.insert(HostKey, d->sshParameters.host);
map.insert(SshPortKey, d->sshParameters.port);
@@ -215,17 +148,10 @@ QVariantMap LinuxDeviceConfiguration::toMap() const
map.insert(PasswordKey, d->sshParameters.password);
map.insert(KeyFileKey, d->sshParameters.privateKeyFile);
map.insert(TimeoutKey, d->sshParameters.timeout);
map.insert(InternalIdKey, d->internalId);
QVariantMap attrMap;
for (QVariantHash::ConstIterator it = d->attributes.constBegin();
it != d->attributes.constEnd(); ++it) {
attrMap.insert(it.key(), it.value());
}
map.insert(AttributesKey, attrMap);
return map;
}
LinuxDeviceConfiguration::Ptr LinuxDeviceConfiguration::clone() const
ProjectExplorer::IDevice::Ptr LinuxDeviceConfiguration::clone() const
{
return Ptr(new LinuxDeviceConfiguration(*this));
}
@@ -241,11 +167,6 @@ LinuxDeviceConfiguration::MachineType LinuxDeviceConfiguration::machineType() co
return d->machineType;
}
LinuxDeviceConfiguration::Id LinuxDeviceConfiguration::internalId() const
{
return d->internalId;
}
void LinuxDeviceConfiguration::setSshParameters(const SshConnectionParameters &sshParameters)
{
d->sshParameters = sshParameters;
@@ -256,48 +177,6 @@ void LinuxDeviceConfiguration::setFreePorts(const PortList &freePorts)
d->freePorts = freePorts;
}
void LinuxDeviceConfiguration::setAttribute(const QString &name, const QVariant &value)
{
d->attributes[name] = value;
}
bool LinuxDeviceConfiguration::isAutoDetected() const
{
return d->origin == AutoDetected;
}
QVariantHash LinuxDeviceConfiguration::attributes() const
{
return d->attributes;
}
QVariant LinuxDeviceConfiguration::attribute(const QString &name) const
{
return d->attributes.value(name);
}
PortList LinuxDeviceConfiguration::freePorts() const { return d->freePorts; }
QString LinuxDeviceConfiguration::displayName() const { return d->displayName; }
QString LinuxDeviceConfiguration::type() const { return d->type; }
void LinuxDeviceConfiguration::setDisplayName(const QString &name) { d->displayName = name; }
void LinuxDeviceConfiguration::setInternalId(Id id) { d->internalId = id; }
const LinuxDeviceConfiguration::Id LinuxDeviceConfiguration::InvalidId = 0;
ILinuxDeviceConfigurationWidget::ILinuxDeviceConfigurationWidget(
const LinuxDeviceConfiguration::Ptr &deviceConfig,
QWidget *parent)
: QWidget(parent),
m_deviceConfiguration(deviceConfig)
{
QTC_CHECK(m_deviceConfiguration);
}
LinuxDeviceConfiguration::Ptr ILinuxDeviceConfigurationWidget::deviceConfiguration() const
{
return m_deviceConfiguration;
}
} // namespace RemoteLinux