package com.owera.xaps.tr069.methods;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.owera.common.db.NoAvailableConnectionException;
import com.owera.xaps.base.Log;
import com.owera.xaps.base.db.DBAccess;
import com.owera.xaps.base.db.DBAccessSessionTR069;
import com.owera.xaps.dbi.UnittypeParameter;
import com.owera.xaps.dbi.UnittypeParameters;
import com.owera.xaps.dbi.util.ProvisioningMessage.ProvOutput;
import com.owera.xaps.dbi.util.ProvisioningMode;
import com.owera.xaps.tr069.HTTPReqResData;
import com.owera.xaps.tr069.SessionData;
import com.owera.xaps.tr069.exception.TR069DatabaseException;
import com.owera.xaps.tr069.xml.ParameterValueStruct;
public class GPVDecisionExtraction {
/**
* Extraction mode will read all parameters from the device and write them to the
* unit_param_session table. No data will be written to unit_param table (provisioned data).
*
* @param reqRes
* @throws TR069DatabaseException
* @throws SQLException
* @throws NoAvailableConnectionException
*/
protected static void processExtraction(HTTPReqResData reqRes) throws TR069DatabaseException {
SessionData sessionData = reqRes.getSessionData();
UnittypeParameters utps = sessionData.getUnittype().getUnittypeParameters();
List<ParameterValueStruct> toDB = new ArrayList<ParameterValueStruct>();
Log.info(GPVDecisionExtraction.class, "Provisioning in " + ProvisioningMode.READALL.toString() + " mode, " + sessionData.getFromCPE().size()
+ " params from CPE may be copied to ACS session storage");
// Log.info(GPVDecisionExtraction.class, "Provisioning in EXTRACTION mode, " + sessionData.getFromCPE().size() + " params from CPE may be copied to ACS session storage");
for (int i = 0; i < sessionData.getFromCPE().size(); i++) {
ParameterValueStruct pvsCPE = sessionData.getFromCPE().get(i);
UnittypeParameter utp = utps.getByName(pvsCPE.getName());
if (utp == null) {
Log.debug(GPVDecision.class, pvsCPE.getName() + " could not be stored in ACS, since name was unrecognized in ACS");
continue;
}
if (pvsCPE.getValue().equals("(null)")) {
Log.debug(GPVDecision.class, pvsCPE.getName() + " will not be stored in ACS, since value was '(null)' - indicating not implemented");
continue;
}
toDB.add(pvsCPE);
}
sessionData.setToDB(toDB);
try {
DBAccessSessionTR069 dbAccessSessionTR069 = new DBAccessSessionTR069(DBAccess.getDBI(), sessionData.getDbAccess());
dbAccessSessionTR069.writeUnitSessionParams(sessionData);
// reqRes.getSessionData().getUnit().toWriteQueue(SystemParameters.PROVISIONING_MODE, ProvisioningMode.PERIODIC.toString());
Log.debug(GPVDecisionExtraction.class, toDB.size() + " params written to ACS session storage");
// Log.debug(GPVDecisionExtraction.class, toDB.size() + " params written to ACS session storage - provisioning mode will be reset to " + ProvisioningMode.PERIODIC.toString());
reqRes.getResponse().setMethod(TR069Method.EMPTY);
sessionData.getProvisioningMessage().setProvOutput(ProvOutput.EMPTY);
} catch (SQLException sqle) {
throw new TR069DatabaseException(sqle);
}
}
}