/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.systemservices.impl.upgrade;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.emc.storageos.coordinator.client.model.CoordinatorClassInfo;
import com.emc.storageos.coordinator.client.model.CoordinatorSerializable;
import com.emc.storageos.coordinator.client.model.PropertyInfoExt;
import com.emc.storageos.coordinator.client.model.SoftwareVersion;
/**
* Immutable class to hold information about a list of new ViPR software versions
*/
public class RemoteRepositoryCache implements CoordinatorSerializable {
private Map<SoftwareVersion, List<SoftwareVersion>> _cachedVersions;
private long _lastVersionCheck;
private String _repositoryInfo;
public RemoteRepositoryCache() {
_cachedVersions = Collections.emptyMap();
;
_lastVersionCheck = 0L;
_repositoryInfo = "";
}
public RemoteRepositoryCache(final Map<SoftwareVersion, List<SoftwareVersion>> versionsMap, Long lastVersionCheck, String repositoryUrl) {
_cachedVersions = Collections.unmodifiableMap(versionsMap);
_lastVersionCheck = lastVersionCheck;
_repositoryInfo = repositoryUrl;
}
public Map<SoftwareVersion, List<SoftwareVersion>> getCachedVersions() {
return _cachedVersions;
}
public long getLastVersionCheck() {
return _lastVersionCheck;
}
public String getRepositoryInfo() {
return _repositoryInfo;
}
@Override
public String encodeAsString() {
StringBuilder sb = new StringBuilder();
sb.append(_lastVersionCheck);
sb.append(PropertyInfoExt.ENCODING_NEWLINE);
sb.append(_repositoryInfo);
sb.append(PropertyInfoExt.ENCODING_NEWLINE);
for (SoftwareVersion softwareVersion : _cachedVersions.keySet()) {
sb.append(softwareVersion.toString());
sb.append(PropertyInfoExt.ENCODING_SEPARATOR);
for (SoftwareVersion s : _cachedVersions.get(softwareVersion)) {
sb.append(s.toString());
sb.append(PropertyInfoExt.ENCODING_SEPARATOR);
}
sb.append(PropertyInfoExt.ENCODING_NEWLINE);
}
return sb.toString();
}
@SuppressWarnings("unchecked")
@Override
public RemoteRepositoryCache decodeFromString(String swVersionsString) {
Map<SoftwareVersion, List<SoftwareVersion>> softwareVersionsMap = new HashMap<SoftwareVersion, List<SoftwareVersion>>();
long lastRefresh = 0L;
String repositoryUrl = "";
if (null != swVersionsString) {
String[] swVersionsArray = swVersionsString.split(PropertyInfoExt.ENCODING_NEWLINE);
if (swVersionsArray.length >= 2) {
lastRefresh = Long.parseLong(swVersionsArray[0]);
repositoryUrl = swVersionsArray[1];
for (int i = 2; i < swVersionsArray.length; i++) {
String[] pStrings = swVersionsArray[i].split(PropertyInfoExt.ENCODING_SEPARATOR);
SoftwareVersion keyVersion = new SoftwareVersion(pStrings[0]);
List<SoftwareVersion> valueList = new ArrayList<SoftwareVersion>();
int len = pStrings.length;
if (len > 1) {
for (int j = 1; j < len; j++) {
valueList.add(new SoftwareVersion(pStrings[j]));
}
}
softwareVersionsMap.put(keyVersion, valueList);
}
}
}
return new RemoteRepositoryCache(softwareVersionsMap, lastRefresh, repositoryUrl);
}
@Override
public CoordinatorClassInfo getCoordinatorClassInfo() {
return new CoordinatorClassInfo("global", "cachedversions", "cachedversions");
}
}