package com.owera.xaps.tr069;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.owera.xaps.tr069.xml.ParameterValueStruct;
/**
* These parameters holds a special meaning for the TR-069 Server. The
* server MUST know the value of these CPE-parameters, regardless of what
* configuration is found in the database. If the database only asks for
* parameter X and Y, but none of these parameters, the server will inject
* these parameters in the GetParameterValueRequest to the CPE.
*
* The reason for this special interest is that these parameters controls
* the following important features of the server:
* - download (config/firmware)
* - periodic inform interval (spread/static)
* - kick
*
*
* @author Morten
*
*/
public class CPEParameters {
// The keyroot of the CPE, must be set by the constuctor;
private String keyRoot;
// All config file information
public String CONFIG_FILES;
// Special solution for Ping Communication's NPA and RGW
// public String CONFIG_VERSION;
// The software/firmware version of the CPE
public String SOFTWARE_VERSION;
// The periodic inform interval on the CPE
public String PERIODIC_INFORM_INTERVAL;
// The connection url (for kick, ip-address)
public String CONNECTION_URL;
// The connection username (for kick, using authentication)
public String CONNECTION_USERNAME;
// The connection password (for kick, using authentication)
public String CONNECTION_PASSWORD;
private Map<String, ParameterValueStruct> cpeParams = new HashMap<String, ParameterValueStruct>();
public CPEParameters(String keyRoot) {
this.keyRoot = keyRoot;
CONFIG_FILES = keyRoot + "DeviceInfo.VendorConfigFile.";
SOFTWARE_VERSION = keyRoot + "DeviceInfo.SoftwareVersion";
PERIODIC_INFORM_INTERVAL = keyRoot + "ManagementServer.PeriodicInformInterval";
CONNECTION_URL = keyRoot + "ManagementServer.ConnectionRequestURL";
CONNECTION_PASSWORD = keyRoot + "ManagementServer.ConnectionRequestPassword";
CONNECTION_USERNAME = keyRoot + "ManagementServer.ConnectionRequestUsername";
cpeParams.put(CONFIG_FILES, null);
cpeParams.put(SOFTWARE_VERSION, null);
cpeParams.put(PERIODIC_INFORM_INTERVAL, null);
cpeParams.put(CONNECTION_URL, null);
cpeParams.put(CONNECTION_USERNAME, null);
cpeParams.put(CONNECTION_PASSWORD, null);
}
public String getValue(String param) {
ParameterValueStruct pvs = cpeParams.get(param);
if (pvs != null && pvs.getValue() != null)
return pvs.getValue();
else
return null;
}
public Map<String, ParameterValueStruct> getCpeParams() {
return cpeParams;
}
public ParameterValueStruct getPvs(String param) {
return cpeParams.get(param);
}
public void putPvs(String param, ParameterValueStruct pvs) {
cpeParams.put(param, pvs);
}
public String getKeyRoot() {
return keyRoot;
}
/*
* Retrieves info from vendor-config-files and populate this map:
* Key: Name of config-file
* Value: Version of config-file
* This method will crash with NP if the device returns a VendorConfigFile.{i}.Name, but
* not the corresponding VendorConfigFile.{i}.Version
*/
public Map<String, String> getConfigFileMap() {
Map<String, String> cMap = new HashMap<String, String>();
for (Entry<String, ParameterValueStruct> entry : cpeParams.entrySet()) {
if (entry.getKey().contains(CONFIG_FILES)) {
if (entry.getKey().endsWith("Name")) {
String namePN = entry.getKey();
String namePV = entry.getValue().getValue();
String versionPN = namePN.substring(0, namePN.length() - "Name".length()) + "Version";
String versionPV = cpeParams.get(versionPN).getValue();
cMap.put(namePV, versionPV);
}
}
}
return cMap;
}
}