Package | Description |
---|---|
org.wattdepot.client |
Various WattDepot clients.
|
org.wattdepot.client.http.api |
Restlet implementations of WattDepot clients for the HTTP API.
|
org.wattdepot.client.http.api.collector |
Collectors are the processes that query Sensors, produce Measurements and send the
Measurements to the WattDepot Server.
|
org.wattdepot.client.http.api.csv |
WattDepotClient classes for manipulating Organization's domain model definitions.
|
org.wattdepot.client.http.api.performance |
Classes used to run performance evaluation for WattDepot.
|
org.wattdepot.server |
The WattDepot Server classes.
|
org.wattdepot.server.depository.impl.hibernate |
Provides the Hibernate
http://www.hibernate.org
implementation of WattDepot persistence.
|
org.wattdepot.server.http.api |
Provides HTTP API for WattDepot using the Restlet framework
http://www.restlet.org
|
org.wattdepot.server.measurement.pruning |
package-info.java This file is part of WattDepot.
|
Modifier and Type | Method and Description |
---|---|
void |
WattDepotInterface.deleteCollectorProcessDefinition(CollectorProcessDefinition process)
Deletes the given CollectorProcessDefinitionData.
|
void |
WattDepotInterface.deleteDepository(Depository depository)
Deletes the given Depository.
|
void |
WattDepotInterface.deleteMeasurement(Depository depository,
Measurement measurement)
Deletes the given measurement from the given depository.
|
void |
WattDepotInterface.deleteMeasurementPruningDefinition(MeasurementPruningDefinition gcd)
Deletes the given MeasurementPruningDefinition from the WattDepotServer.
|
void |
WattDepotInterface.deleteMeasurementType(MeasurementType type)
Deletes the given MeasurementType.
|
void |
WattDepotAdminInterface.deleteOrganization(String id)
Deletes the given Organization.
|
void |
WattDepotInterface.deleteSensor(Sensor sensor)
Deletes the given Sensor.
|
void |
WattDepotInterface.deleteSensorGroup(SensorGroup group)
Deletes the given SensorGroup.
|
void |
WattDepotInterface.deleteSensorModel(SensorModel model)
Deletes the given SensorModel.
|
void |
WattDepotAdminInterface.deleteUser(String id,
String orgId)
Deletes the given User.
|
CollectorProcessDefinition |
WattDepotInterface.getCollectorProcessDefinition(String id)
Retrieves the CollectorProcessDefinitionData with the given id from the
WattDepot Server.
|
Depository |
WattDepotInterface.getDepository(String id)
Retrieves the Depository with the given id from the WattDepot Server.
|
SensorList |
WattDepotInterface.getDepositorySensors(String id) |
MeasurementPruningDefinition |
WattDepotInterface.getMeasurementPruningDefinition(String id) |
MeasurementType |
WattDepotInterface.getMeasurementType(String id) |
Organization |
WattDepotAdminInterface.getOrganization(String id) |
Sensor |
WattDepotInterface.getSensor(String id)
Retrieves the Sensor with the given id from the WattDepot Server.
|
SensorGroup |
WattDepotInterface.getSensorGroup(String id)
Retrieves the SensorGroup with the given id from the WattDepot Server.
|
SensorModel |
WattDepotInterface.getSensorModel(String id)
Retrieves the SensorModel with the given id from the WattDepot Server.
|
UserInfo |
WattDepotAdminInterface.getUser(String id,
String orgId) |
UserPassword |
WattDepotAdminInterface.getUserPassword(String id,
String orgId) |
void |
WattDepotAdminInterface.updateUserPassword(UserPassword password)
Updates the Userpassword in the WattDepot Server.
|
Constructor and Description |
---|
EGaugeCollector(String serverUri,
String username,
String orgId,
String password,
Sensor sensor,
Long pollingInterval,
Depository depository,
boolean debug) |
EGaugeCollector(String serverUri,
String username,
String orgId,
String password,
String collectorId,
boolean debug)
Initializes the EGaugeCollector.
|
MeasurementSummaryClient(String serverUri,
String username,
String orgId,
String password,
String collectorId,
boolean debug) |
MultiThreadedCollector(String serverUri,
String username,
String orgId,
String password,
String collectorId,
boolean debug)
Initializes the MultiThreadedCollector.
|
MultiThreadedCollector(String serverUri,
String username,
String orgId,
String password,
String sensorId,
Long pollingInterval,
Depository depository,
boolean debug) |
NOAAWeatherCollector(String serverUri,
String username,
String orgId,
String password,
Sensor sensor,
Long pollingInterval,
Depository depository,
boolean debug) |
NOAAWeatherCollector(String serverUri,
String username,
String orgId,
String password,
String collectorId,
boolean debug)
Initializes the NOAAWeatherCollector.
|
SharkCollector(String serverUri,
String username,
String orgId,
String password,
String collectorId,
boolean debug)
Initializes the SharkCollector.
|
StressCollector(String serverUri,
String username,
String orgId,
String password,
String collectorId,
boolean debug)
Initializes the StressCollector.
|
StressCollector(String serverUri,
String username,
String orgId,
String password,
String sensorId,
Long pollingInterval,
Depository depository,
boolean debug) |
StressTestCollector(String serverUri,
String username,
String orgId,
String password,
String collectorId,
boolean debug)
Initializes the StressTestCollector.
|
Modifier and Type | Method and Description |
---|---|
static void |
OrganizationDomainMain.main(String[] args) |
Constructor and Description |
---|
OrganizationDomain(String serverUri,
String username,
String orgId,
String password,
String fileName)
Initializes the OrganizationDomain.
|
Modifier and Type | Method and Description |
---|---|
static void |
PutThroughput.main(String[] args) |
static void |
PutRate.main(String[] args) |
static void |
PutCollectorRate.main(String[] args) |
static void |
GetLatestValueThroughput.main(String[] args) |
static void |
GetLatestValueRate.main(String[] args) |
static void |
GetIntervalValueThroughput.main(String[] args) |
static void |
GetIntervalValueRate.main(String[] args) |
static void |
GetEarliestValueThroughput.main(String[] args) |
static void |
GetEarliestValueRate.main(String[] args) |
static void |
GetDateValueThroughput.main(String[] args) |
static void |
GetDateValueRate.main(String[] args) |
Constructor and Description |
---|
GetDateValueTask(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the GetDateValueTask.
|
GetDateValueThroughput(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the GetDateValueThroughput instance.
|
GetEarliestValueTask(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the GetEarliestValueTask.
|
GetEarliestValueThroughput(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the FindGetEarliestValueThroughput instance.
|
GetIntervalValueTask(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the GetIntervalValueTask.
|
GetIntervalValueThroughput(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the GetIntervalValueThroughput instance.
|
GetLatestValueTask(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the GetLatestValueTask.
|
GetLatestValueThroughput(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the FindGetLatestValueThroughput instance.
|
PerformanceTimedTask(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the GetLatestValueTask.
|
PerformanceTimedTask(String serverUri,
String username,
String orgId,
String password,
boolean debug,
String collectorId)
Initializes the GetLatestValueTask.
|
PutTask(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the PutTask.
|
PutTask(String serverUri,
String username,
String orgId,
String password,
boolean debug,
String cpd)
Initializes the PutTask.
|
PutThroughput(String serverUri,
String username,
String orgId,
String password,
boolean debug)
Initializes the PutThroughput instance.
|
Modifier and Type | Method and Description |
---|---|
abstract CollectorProcessDefinition |
WattDepotPersistence.defineCollectorProcessDefinition(String id,
String name,
String sensorId,
Long pollingInterval,
String depositoryId,
Set<Property> properties,
String orgId)
Defines a new CollectorProcessDefinition.
|
abstract Depository |
WattDepotPersistence.defineDepository(String id,
String name,
MeasurementType measurementType,
String orgId)
Defines a new WattDepository in WattDepot.
|
abstract MeasurementPruningDefinition |
WattDepotPersistence.defineMeasurementPruningDefinition(String id,
String name,
String depositoryId,
String sensorId,
String orgId,
Integer ignore,
Integer collect,
Integer gap)
Defines a new MeasurementPruningDefinition.
|
abstract Organization |
WattDepotPersistence.defineOrganization(String id,
String name,
Set<String> users) |
abstract Sensor |
WattDepotPersistence.defineSensor(String id,
String name,
String uri,
String modelId,
Set<Property> properties,
String orgId) |
abstract SensorGroup |
WattDepotPersistence.defineSensorGroup(String id,
String name,
Set<String> sensors,
String orgId) |
abstract UserInfo |
WattDepotPersistence.defineUserInfo(String userId,
String firstName,
String lastName,
String email,
String orgId,
Set<Property> properties,
String password)
Defines a new UserInfo with the given information.
|
abstract void |
WattDepotPersistence.deleteCollectorProcessDefinition(String id,
String orgId)
Deletes the given CollectorProcessDefinition.
|
abstract void |
WattDepotPersistence.deleteDepository(String id,
String orgId)
Deletes the given WattDepository.
|
abstract void |
WattDepotPersistence.deleteMeasurement(String depotId,
String orgId,
String measId) |
abstract void |
WattDepotPersistence.deleteMeasurementPruningDefinition(String id,
String orgId)
Deletes the given MeasurementPruningDefinition.
|
abstract void |
WattDepotPersistence.deleteMeasurementType(String id)
Deletes the given measurement type.
|
abstract void |
WattDepotPersistence.deleteOrganization(String id) |
abstract void |
WattDepotPersistence.deleteSensor(String id,
String orgId)
Deletes the given Sensor.
|
abstract void |
WattDepotPersistence.deleteSensorGroup(String id,
String orgId)
Deletes the given SensorGroup.
|
abstract void |
WattDepotPersistence.deleteSensorModel(String id)
Deletes the given SensorModel.
|
abstract void |
WattDepotPersistence.deleteUser(String id,
String orgId) |
abstract void |
WattDepotPersistence.deleteUserPassword(String userId,
String orgId) |
abstract CollectorProcessDefinition |
WattDepotPersistence.getCollectorProcessDefinition(String id,
String orgId,
boolean check) |
abstract List<String> |
WattDepotPersistence.getCollectorProcessDefinitionIds(String orgId,
boolean check) |
abstract List<CollectorProcessDefinition> |
WattDepotPersistence.getCollectorProcessDefinitions(String orgId,
boolean check) |
abstract List<Depository> |
WattDepotPersistence.getDepositories(String orgId,
boolean check) |
abstract Depository |
WattDepotPersistence.getDepository(String id,
String orgId,
boolean check) |
abstract List<String> |
WattDepotPersistence.getDepositoryIds(String orgId,
boolean check) |
abstract InterpolatedValue |
WattDepotPersistence.getEarliestMeasuredValue(String depotId,
String orgId,
String sensorId,
boolean check) |
abstract InterpolatedValue |
WattDepotPersistence.getLatestMeasuredValue(String depotId,
String orgId,
String sensorId,
boolean check) |
abstract InterpolatedValue |
WattDepotPersistence.getLatestMeasuredValue(String depotId,
String orgId,
String sensorId,
Long window,
boolean check) |
abstract Measurement |
WattDepotPersistence.getMeasurement(String depotId,
String orgId,
String measId,
boolean check) |
abstract MeasurementPruningDefinition |
WattDepotPersistence.getMeasurementPruningDefinition(String id,
String orgId,
boolean check) |
abstract List<String> |
WattDepotPersistence.getMeasurementPruningDefinitionIds(String orgId,
boolean check) |
abstract List<MeasurementPruningDefinition> |
WattDepotPersistence.getMeasurementPruningDefinitions(String orgId,
boolean check) |
abstract List<Measurement> |
WattDepotPersistence.getMeasurements(String depotId,
String orgId,
String sensorId,
boolean check) |
abstract List<Measurement> |
WattDepotPersistence.getMeasurements(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
abstract Long |
WattDepotPersistence.getMeasurementsCount(String orgId,
boolean check) |
abstract Long |
WattDepotPersistence.getMeasurementsCount(String depotId,
String orgId,
String sensorId,
boolean check) |
abstract Long |
WattDepotPersistence.getMeasurementsCount(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
abstract MeasurementType |
WattDepotPersistence.getMeasurementType(String id,
boolean check) |
abstract Organization |
WattDepotPersistence.getOrganization(String id,
boolean check) |
abstract MeasurementRateSummary |
WattDepotPersistence.getRateSummary(String depotId,
String orgId,
String sensorId,
boolean check) |
abstract Sensor |
WattDepotPersistence.getSensor(String id,
String orgId,
boolean check) |
abstract SensorGroup |
WattDepotPersistence.getSensorGroup(String id,
String orgId,
boolean check) |
abstract List<String> |
WattDepotPersistence.getSensorGroupIds(String orgId,
boolean check) |
abstract List<SensorGroup> |
WattDepotPersistence.getSensorGroups(String orgId,
boolean check) |
abstract List<String> |
WattDepotPersistence.getSensorIds(String orgId,
boolean check) |
abstract SensorModel |
WattDepotPersistence.getSensorModel(String id,
boolean check) |
abstract List<Sensor> |
WattDepotPersistence.getSensors(String orgId,
boolean check) |
abstract SensorMeasurementSummary |
WattDepotPersistence.getSummary(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
abstract UserInfo |
WattDepotPersistence.getUser(String id,
String orgId,
boolean check) |
abstract List<String> |
WattDepotPersistence.getUserIds(String orgId,
boolean check) |
abstract UserPassword |
WattDepotPersistence.getUserPassword(String id,
String orgId,
boolean check) |
abstract List<UserInfo> |
WattDepotPersistence.getUsers(String orgId,
boolean check) |
abstract Double |
WattDepotPersistence.getValue(String depotId,
String orgId,
String sensorId,
Date timestamp,
boolean check) |
abstract Double |
WattDepotPersistence.getValue(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
abstract Double |
WattDepotPersistence.getValue(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
Long gapSeconds,
boolean check) |
abstract Double |
WattDepotPersistence.getValue(String depotId,
String orgId,
String sensorId,
Date timestamp,
Long gapSeconds,
boolean check) |
abstract List<String> |
WattDepotPersistence.listSensors(String depotId,
String orgId,
boolean check) |
abstract void |
WattDepotPersistence.putMeasurement(String depotId,
String orgId,
Measurement meas) |
abstract void |
WattDepotPersistence.putMeasurementList(String depotId,
String orgId,
MeasurementList measurementList) |
abstract CollectorProcessDefinition |
WattDepotPersistence.updateCollectorProcessDefinition(CollectorProcessDefinition process)
Updates the given CollectorProcessDefinition in the persistent store.
|
abstract MeasurementPruningDefinition |
WattDepotPersistence.updateMeasurementPruningDefinition(MeasurementPruningDefinition gcd)
Updates the given MeasurementPruningDefinition in the persistent store.
|
abstract Organization |
WattDepotPersistence.updateOrganization(Organization org) |
abstract Sensor |
WattDepotPersistence.updateSensor(Sensor sensor)
Updates the given sensor in the persistent store.
|
abstract SensorGroup |
WattDepotPersistence.updateSensorGroup(SensorGroup group)
Updates the given sensor group in the persistent store.
|
abstract SensorModel |
WattDepotPersistence.updateSensorModel(SensorModel model)
Updates the given sensor model in the persistent store.
|
abstract UserInfo |
WattDepotPersistence.updateUserInfo(UserInfo user) |
abstract UserPassword |
WattDepotPersistence.updateUserPassword(UserPassword password) |
Modifier and Type | Method and Description |
---|---|
CollectorProcessDefinition |
WattDepotPersistenceImpl.defineCollectorProcessDefinition(String id,
String name,
String sensorId,
Long pollingInterval,
String depositoryId,
Set<Property> properties,
String orgId) |
Depository |
WattDepotPersistenceImpl.defineDepository(String id,
String name,
MeasurementType measurementType,
String orgId) |
MeasurementPruningDefinition |
WattDepotPersistenceImpl.defineMeasurementPruningDefinition(String id,
String name,
String depositoryId,
String sensorId,
String orgId,
Integer ignore,
Integer collect,
Integer gap) |
Organization |
WattDepotPersistenceImpl.defineOrganization(String id,
String name,
Set<String> users) |
Sensor |
WattDepotPersistenceImpl.defineSensor(String id,
String name,
String uri,
String modelId,
Set<Property> properties,
String orgId) |
SensorGroup |
WattDepotPersistenceImpl.defineSensorGroup(String id,
String name,
Set<String> sensorIds,
String orgId) |
UserInfo |
WattDepotPersistenceImpl.defineUserInfo(String id,
String firstName,
String lastName,
String email,
String orgId,
Set<Property> properties,
String password) |
void |
WattDepotPersistenceImpl.deleteCollectorProcessDefinition(String id,
String orgId) |
void |
WattDepotPersistenceImpl.deleteDepository(String id,
String orgId) |
void |
WattDepotPersistenceImpl.deleteMeasurement(String depotId,
String orgId,
String measId) |
void |
WattDepotPersistenceImpl.deleteMeasurementPruningDefinition(String id,
String orgId) |
void |
WattDepotPersistenceImpl.deleteMeasurementType(String id) |
void |
WattDepotPersistenceImpl.deleteOrganization(String id) |
void |
WattDepotPersistenceImpl.deleteSensor(String id,
String orgId) |
void |
WattDepotPersistenceImpl.deleteSensorGroup(String id,
String orgId) |
void |
WattDepotPersistenceImpl.deleteSensorModel(String id) |
void |
WattDepotPersistenceImpl.deleteUser(String id,
String orgId) |
void |
WattDepotPersistenceImpl.deleteUserPassword(String userId,
String orgId) |
CollectorProcessDefinition |
WattDepotPersistenceImpl.getCollectorProcessDefinition(String id,
String orgId,
boolean check) |
List<String> |
WattDepotPersistenceImpl.getCollectorProcessDefinitionIds(String orgId,
boolean check) |
List<CollectorProcessDefinition> |
WattDepotPersistenceImpl.getCollectorProcessDefinitions(String orgId,
boolean check) |
List<Depository> |
WattDepotPersistenceImpl.getDepositories(String orgId,
boolean check) |
Depository |
WattDepotPersistenceImpl.getDepository(String id,
String orgId,
boolean check) |
List<String> |
WattDepotPersistenceImpl.getDepositoryIds(String orgId,
boolean check) |
InterpolatedValue |
WattDepotPersistenceImpl.getEarliestMeasuredValue(String depotId,
String orgId,
String sensorId,
boolean check) |
InterpolatedValue |
WattDepotPersistenceImpl.getLatestMeasuredValue(String depotId,
String orgId,
String sensorId,
boolean check) |
InterpolatedValue |
WattDepotPersistenceImpl.getLatestMeasuredValue(String depotId,
String orgId,
String sensorId,
Long window,
boolean check) |
Measurement |
WattDepotPersistenceImpl.getMeasurement(String depotId,
String orgId,
String measId,
boolean check) |
MeasurementPruningDefinition |
WattDepotPersistenceImpl.getMeasurementPruningDefinition(String id,
String orgId,
boolean check) |
List<String> |
WattDepotPersistenceImpl.getMeasurementPruningDefinitionIds(String orgId,
boolean check) |
List<MeasurementPruningDefinition> |
WattDepotPersistenceImpl.getMeasurementPruningDefinitions(String orgId,
boolean check) |
List<Measurement> |
WattDepotPersistenceImpl.getMeasurements(String depotId,
String orgId,
String sensorId,
boolean check) |
List<Measurement> |
WattDepotPersistenceImpl.getMeasurements(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
Long |
WattDepotPersistenceImpl.getMeasurementsCount(String orgId,
boolean check) |
Long |
WattDepotPersistenceImpl.getMeasurementsCount(String depotId,
String orgId,
String sensorId,
boolean check) |
Long |
WattDepotPersistenceImpl.getMeasurementsCount(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
MeasurementType |
WattDepotPersistenceImpl.getMeasurementType(String id,
boolean check) |
Organization |
WattDepotPersistenceImpl.getOrganization(String id,
boolean check) |
MeasurementRateSummary |
WattDepotPersistenceImpl.getRateSummary(String depotId,
String orgId,
String sensorId,
boolean check) |
Sensor |
WattDepotPersistenceImpl.getSensor(String id,
String orgId,
boolean check) |
SensorGroup |
WattDepotPersistenceImpl.getSensorGroup(String id,
String orgId,
boolean check) |
List<String> |
WattDepotPersistenceImpl.getSensorGroupIds(String orgId,
boolean check) |
List<SensorGroup> |
WattDepotPersistenceImpl.getSensorGroups(String orgId,
boolean check) |
List<String> |
WattDepotPersistenceImpl.getSensorIds(String orgId,
boolean check) |
SensorModel |
WattDepotPersistenceImpl.getSensorModel(String id,
boolean check) |
List<Sensor> |
WattDepotPersistenceImpl.getSensors(String orgId,
boolean check) |
SensorMeasurementSummary |
WattDepotPersistenceImpl.getSummary(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
UserInfo |
WattDepotPersistenceImpl.getUser(String id,
String orgId,
boolean check) |
List<String> |
WattDepotPersistenceImpl.getUserIds(String orgId,
boolean check) |
UserPassword |
WattDepotPersistenceImpl.getUserPassword(String id,
String orgId,
boolean check) |
List<UserInfo> |
WattDepotPersistenceImpl.getUsers(String orgId,
boolean check) |
Double |
WattDepotPersistenceImpl.getValue(String depotId,
String orgId,
String sensorId,
Date timestamp,
boolean check) |
Double |
WattDepotPersistenceImpl.getValue(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
boolean check) |
Double |
WattDepotPersistenceImpl.getValue(String depotId,
String orgId,
String sensorId,
Date start,
Date end,
Long gapSeconds,
boolean check) |
Double |
WattDepotPersistenceImpl.getValue(String depotId,
String orgId,
String sensorId,
Date timestamp,
Long gapSeconds,
boolean check) |
List<String> |
WattDepotPersistenceImpl.listSensors(String depotId,
String orgId,
boolean check) |
void |
WattDepotPersistenceImpl.putMeasurement(String depotId,
String orgId,
Measurement meas) |
void |
WattDepotPersistenceImpl.putMeasurementList(String depotId,
String orgId,
MeasurementList measurementList) |
CollectorProcessDefinition |
WattDepotPersistenceImpl.updateCollectorProcessDefinition(CollectorProcessDefinition process) |
MeasurementPruningDefinition |
WattDepotPersistenceImpl.updateMeasurementPruningDefinition(MeasurementPruningDefinition gcd) |
Organization |
WattDepotPersistenceImpl.updateOrganization(Organization org) |
Sensor |
WattDepotPersistenceImpl.updateSensor(Sensor sensor) |
SensorGroup |
WattDepotPersistenceImpl.updateSensorGroup(SensorGroup group) |
SensorModel |
WattDepotPersistenceImpl.updateSensorModel(SensorModel model) |
UserInfo |
WattDepotPersistenceImpl.updateUserInfo(UserInfo user) |
UserPassword |
WattDepotPersistenceImpl.updateUserPassword(UserPassword password) |
Modifier and Type | Method and Description |
---|---|
protected MeasurementList |
DepositoryMeasurementsIntervalServer.getMeasurements(String depositoryId,
String orgId,
String sensorId,
Date startDate,
Date endDate,
InterpolatedValue interpolatedValue) |
Modifier and Type | Method and Description |
---|---|
List<Measurement> |
MeasurementPruner.getMeasurementsToDelete() |
void |
MeasurementPruner.pruneMeasurements()
Prunes the measurements.
|
Copyright © 2015 Collaborative Software Development Laboratory. All rights reserved.