/*
* Copyright (c) 2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.model;
import com.emc.storageos.model.valid.EnumType;
import com.google.common.base.Strings;
/**
* StorageSystem, NetworkSystem and ProtectionSystem share few common properties
* which had been placed here.
*/
public class DiscoveredSystemObject extends DiscoveredDataObject {
// type of array e.g. vnxBlock, vnxFile, isilon, vmax, netapp
private String _systemType;
// used in finding out whether or not the Array is Compatible
private String _compatibilityStatus = CompatibilityStatus.UNKNOWN.name();
// Status of a Discovery Job
private String _discoveryStatus;
// Status Message of a Last Discovery Job
private String _lastDiscoveryStatusMessage;
// Last Scan or Run Time of a Scan Job
private Long _lastDiscoveryRunTime = 0L;
// Next Scan or Run Time of a Scan Job
@Deprecated
private Long _nextDiscoveryRunTime = 0L;
private Long _successDiscoveryTime = 0L;
private String _meteringStatus = DataCollectionJobStatus.CREATED.name();
private Long _lastMeteringRunTime = 0L;
private Long _nextMeteringRunTime = 0L;
private Long _successMeteringTime = 0L;
/**
* Bourne supports Registered and UnRegistered Elements.
* Registered : StorageSystems, Pools,Ports,.. which are explicitly
* registered by Bourne
* UnRegistered : StorageSystems,Ports, which had been discovered,but
* not still used by Bourne
* _registrationStatus field denotes whether an object is registered by Bourne.
*/
private String _registrationStatus = RegistrationStatus.REGISTERED.name();
@Name("systemType")
public String getSystemType() {
return _systemType;
}
public void setSystemType(String systemType) {
_systemType = systemType;
setChanged("systemType");
}
@EnumType(CompatibilityStatus.class)
@Name("compatibilityStatus")
public String getCompatibilityStatus() {
return _compatibilityStatus;
}
public void setCompatibilityStatus(String compatibilityStatus) {
_compatibilityStatus = compatibilityStatus;
setChanged("compatibilityStatus");
}
public boolean storageSystemIsFile() {
return _systemType != null && Type.isFileStorageSystem(_systemType);
}
public boolean isStorageSystemManagedByProvider() {
return _systemType != null && Type.isProviderStorageSystem(_systemType);
}
public void setDiscoveryStatus(String status) {
_discoveryStatus = status;
setChanged("discoveryStatus");
}
@EnumType(DataCollectionJobStatus.class)
@Name("discoveryStatus")
public String getDiscoveryStatus() {
return _discoveryStatus == null ? DataCollectionJobStatus.CREATED.name() : _discoveryStatus;
}
public void setLastDiscoveryStatusMessage(String statusMessage) {
_lastDiscoveryStatusMessage = statusMessage;
setChanged("lastDiscoveryStatusMessage");
}
@Name("lastDiscoveryStatusMessage")
public String getLastDiscoveryStatusMessage() {
return _lastDiscoveryStatusMessage;
}
public void setLastDiscoveryRunTime(Long lastRunTime) {
_lastDiscoveryRunTime = lastRunTime;
setChanged("lastDiscoveryRunTime");
}
@Name("lastDiscoveryRunTime")
public Long getLastDiscoveryRunTime() {
return _lastDiscoveryRunTime;
}
@Deprecated
public void setNextDiscoveryRunTime(Long nextRunTime) {
_nextDiscoveryRunTime = nextRunTime;
setChanged("nextDiscoveryRunTime");
}
@Deprecated
@Name("nextDiscoveryRunTime")
public Long getNextDiscoveryRunTime() {
return _nextDiscoveryRunTime;
}
public void setMeteringStatus(String status) {
_meteringStatus = status;
setChanged("meteringStatus");
}
@EnumType(DataCollectionJobStatus.class)
@Name("meteringStatus")
public String getMeteringStatus() {
return _meteringStatus;
}
public void setLastMeteringRunTime(Long lastMeteringRunTime) {
_lastMeteringRunTime = lastMeteringRunTime;
setChanged("lastMeteringRunTime");
}
@Name("lastMeteringRunTime")
public Long getLastMeteringRunTime() {
return _lastMeteringRunTime;
}
public void setNextMeteringRunTime(Long nextMeteringRunTime) {
_nextMeteringRunTime = nextMeteringRunTime;
setChanged("nextMeteringRunTime");
}
@Name("nextMeteringRunTime")
public Long getNextMeteringRunTime() {
return _nextMeteringRunTime;
}
public void setRegistrationStatus(String registrationStatus) {
_registrationStatus = registrationStatus;
setChanged("registrationStatus");
}
@EnumType(RegistrationStatus.class)
@Name("registrationStatus")
public String getRegistrationStatus() {
return _registrationStatus;
}
@Name("successMeteringTime")
public Long getSuccessMeteringTime() {
return _successMeteringTime;
}
public void setSuccessMeteringTime(Long time) {
_successMeteringTime = time;
setChanged("successMeteringTime");
}
@Name("successDiscoveryTime")
public Long getSuccessDiscoveryTime() {
return _successDiscoveryTime;
}
public void setSuccessDiscoveryTime(Long time) {
_successDiscoveryTime = time;
setChanged("successDiscoveryTime");
}
public boolean deviceIsType(final Type thisType) {
final String type = getSystemType();
return !Strings.isNullOrEmpty(type) && type.equals(thisType.name());
}
}