/*
* Copyright (c) 2008-2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.coordinator.client.service;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.coordinator.client.service.CoordinatorClient.LicenseType;
public class LicenseInfo {
private static final Logger _log = LoggerFactory.getLogger(LicenseInfo.class);
// property constants for coordinator.
public static final String LICENSE_TYPE = "licenseType";
public static final String LICENSE_TEXT = "licenseText";
public static final String EXPIRATION_DATE = "expirationDate";
// coordinator encoding variables.
public static final String LICENSE_SEPARATOR = "\29";
public static final String ENCODING_SEPARATOR = "\0";
public static final String ENCODING_EQUAL = "=";
// used to denote that there is no defined value yet in coordinator service
public static final String VALUE_NOT_SET = "NA";
// license type
protected LicenseType _licenseType;
// license expiration date per license
protected String _expirationDate;
// coordinator target property if for both controller and object store
// license data.
public static final String TARGET_PROPERTY_ID = "global";
// coordinator values for storing list of license features starting 1.1. Starting Vipr 1.1
// all license features' are to be stored together in one data node in coordinator.
public static final String LICENSE_INFO = "viprLicenseInfo";
public static final String LICENSE_INFO_TARGET_PROPERTY = "viprLicenseInfoProperty";
/**
* Default constructor
*/
public LicenseInfo() {
}
/**
* Constructor which constructs a LicenseInfo object with an expiration date.
*
* @param expirationDate
*/
public LicenseInfo(LicenseType licenseType, String expirationDate) {
this._licenseType = licenseType;
this._expirationDate = expirationDate;
}
public LicenseType getLicenseType() {
return _licenseType;
}
public void setLicenseType(LicenseType licenseType) {
this._licenseType = licenseType;
}
public String getExpirationDate() {
return _expirationDate;
}
public void setExpirationDate(String expirationDate) {
this._expirationDate = expirationDate;
}
public String toString()
{
StringBuilder s = new StringBuilder();
s.append("licenseType=");
s.append(_licenseType.toString());
s.append(" expirationDate=");
s.append(_expirationDate);
return s.toString();
}
/**
* Method used for decoding a list of licenses from the string.
*
* @param infoStr
* @return a list of decoded license info
* @throws Exception
*/
public static List<LicenseInfo> decodeLicenses(String infoStr) throws Exception {
_log.info("Retrieving licenses from coordinator service");
List<LicenseInfo> licenseList = new ArrayList<LicenseInfo>();
if (infoStr != null && !infoStr.isEmpty()) {
for (String licenseStr : infoStr.split(LICENSE_SEPARATOR)) {
String expireDate = null;
LicenseType licenseType = null;
for (String licenseProps : licenseStr.split(ENCODING_SEPARATOR)) {
String[] licenseProp = licenseProps.split(ENCODING_EQUAL);
if (licenseProp.length < 2) {
continue;
}
if (licenseProp[0].equalsIgnoreCase(LICENSE_TYPE)) {
licenseType = LicenseType.findByValue(licenseProp[1]);
}
if (licenseProp[0].equalsIgnoreCase(EXPIRATION_DATE)) {
expireDate = licenseProp[1];
}
if (licenseType != null && expireDate != null) {
licenseList.add(new LicenseInfo(licenseType, expireDate));
break;
}
}
}
}
return licenseList;
}
}