}else{
k.setIsAdditive(new Boolean(false));
}
if(dsLabel != null){
k.setDsLabel(dsLabel);
IDataSet ds = dsDao.loadActiveDataSetByLabel(dsLabel);
if(ds!=null){
int dsId = ds.getId();
k.setKpiDsId(new Integer(dsId));
}
}
if(thresholdCode != null){
Threshold t = thrDao.loadThresholdByCode(thresholdCode);
k.setThreshold(t);
}
k.setKpiName(name);
k.setCode(code);
if(description != null){
k.setDescription(description);
}
if(weight != null && !weight.equalsIgnoreCase("")){
k.setStandardWeight(Double.valueOf(weight));
}
if(dsLabel != null){
k.setDsLabel(dsLabel);
IDataSet ds = dsDao.loadActiveDataSetByLabel(dsLabel);
if(ds!=null){
int dsId = ds.getId();
k.setKpiDsId(new Integer(dsId));
}
}
if(thresholdCode != null){
Threshold t = thrDao.loadThresholdByCode(thresholdCode);
k.setThreshold(t);
}
List docsList = null;
if(docLabelsJSON != null){
docsList = deserializeDocLabelsJSONArray(docLabelsJSON);
k.setSbiKpiDocuments(docsList);
}else if(docs!=null && !docs.equalsIgnoreCase("")){
KpiDocuments d = new KpiDocuments();
d.setBiObjLabel(docs);
docsList = new ArrayList();
docsList.add(d);
k.setSbiKpiDocuments(docsList);
}
if(interpretation != null){
k.setInterpretation(interpretation);
}
if(algdesc != null){
k.setMetric(algdesc);
}
if(inputAttr != null){
k.setInputAttribute(inputAttr);
}
if(modelReference != null){
k.setModelReference(modelReference);
}
if(targetAudience != null){
k.setTargetAudience(targetAudience);
}
if(kpiTypeCd != null){
k.setKpiTypeCd(kpiTypeCd);
k.setKpiTypeId(kpiTypeId);
}
if(metricScaleCd != null){
k.setMetricScaleCd(metricScaleCd);
k.setMetricScaleId(metricScaleId);
}
if(measureTypeCd != null){
k.setMeasureTypeCd(measureTypeCd);
k.setMeasureTypeId(measureTypeId);
}
// add to Kpi Definition UDP Value list...
//List udpValues = k.getUdpValues();
List<UdpValue> udpValues = new ArrayList<UdpValue>();
for(int i=0; i< udpValuesArrayJSon.length(); i++){
JSONObject obj = (JSONObject)udpValuesArrayJSon.get(i);
// only label and value information are retrieved by JSON object
String label = obj.getString("name");
String value = obj.getString("value");
UdpValue udpValue = new UdpValue();
// reference id is the kpi id
Integer kpiId = k.getKpiId();
//udpValue.setLabel(label);
udpValue.setValue(value);
udpValue.setReferenceId(kpiId);
// get the UDP to get ID (otherwise could be taken in js page)
Udp udp = DAOFactory.getUdpDAO().loadByLabelAndFamily(label, "KPI");
Domain familyDomain = DAOFactory.getDomainDAO().loadDomainById(udp.getFamilyId());
Integer idUdp = udp.getUdpId();
udpValue.setLabel(udp.getLabel());
udpValue.setName(udp.getName());
udpValue.setFamily(familyDomain != null ? familyDomain.getValueCd() : null);
udpValue.setUdpId(udp.getUdpId());
udpValues.add(udpValue);
}
k.setUdpValues(udpValues);
if(id != null && !id.equals("") && !id.equals("0")){
k.setKpiId(Integer.valueOf(id));
kpiDao.modifyKpi(k);
logger.debug("threshold "+id+" updated");
JSONObject attributesResponseSuccessJSON = new JSONObject();
attributesResponseSuccessJSON.put("success", true);
attributesResponseSuccessJSON.put("responseText", "Operation succeded");
attributesResponseSuccessJSON.put("id", id);
writeBackToClient( new JSONSuccess(attributesResponseSuccessJSON) );
}else{
Integer kpiID = kpiDao.insertKpi(k);
logger.debug("New threshold inserted");
JSONObject attributesResponseSuccessJSON = new JSONObject();
attributesResponseSuccessJSON.put("success", true);
attributesResponseSuccessJSON.put("responseText", "Operation succeded");
attributesResponseSuccessJSON.put("id", kpiID);
writeBackToClient( new JSONSuccess(attributesResponseSuccessJSON) );
}
} catch(EMFUserError e){
logger.error("EMFUserError");
e.printStackTrace();
} catch (JSONException e) {
logger.error("JSONException");
e.printStackTrace();
} catch (IOException e) {
logger.error("IOException");
e.printStackTrace();
}
}else{
logger.error("Resource name, code or type are missing");
throw new SpagoBIServiceException(SERVICE_NAME, "Please fill threshold name, code and type");
}
} else if (serviceType != null && serviceType.equalsIgnoreCase(KPI_DELETE)) {
Integer id = getAttributeAsInteger(ID);
try {
kpiDao.deleteKpi(id);
logger.debug("Resource deleted");
writeBackToClient( new JSONAcknowledge("Operation succeded") );
} catch (Throwable e) {
logger.error("Exception occurred while retrieving resource to delete", e);
throw new SpagoBIServiceException(SERVICE_NAME,
"Exception occurred while retrieving resource to delete", e);
}
}else if (serviceType != null && serviceType.equalsIgnoreCase(KPI_LINKS)) {
try {
Integer id =null;
try{
id = getAttributeAsInteger(ID);
}catch (Exception e) {
logger.debug("No Kpi Instance Id");
}
ArrayList <KpiRel> relations = new ArrayList<KpiRel>();
//looks up for relations
if(id != null){
relations = (ArrayList <KpiRel>)kpiDao.loadKpiRelListByParentId(id);
logger.debug("Kpi relations loaded");
//looks up for dataset parameters
IDataSet dataSet = kpiDao.getDsFromKpiId(id);
if(dataSet != null){
String parametersString = dataSet.getParameters();
ArrayList<String> parameters = new ArrayList<String>();
logger.debug("Dataset Parameters loaded");
if(parametersString != null){
SourceBean source = SourceBean.fromXMLString(parametersString);
if(source.getName().equals("PARAMETERSLIST")) {
List<SourceBean> rows = source.getAttributeAsList("ROWS.ROW");
for(int i=0; i< rows.size(); i++){
SourceBean row = rows.get(i);
String name = (String)row.getAttribute("name");
parameters.add(name);
}
}
JSONArray paramsJSON = serializeParametersList(parameters, relations);
JSONObject paramsResponseJSON = createJSONResponseResources(paramsJSON, parameters.size());
writeBackToClient(new JSONSuccess(paramsResponseJSON));
}else{
writeBackToClient(new JSONSuccess(new JSONObject()));
}
}else{
writeBackToClient(new JSONSuccess(new JSONObject()));
}
}else{
writeBackToClient(new JSONSuccess(new JSONObject()));
}
} catch (Throwable e) {
logger.error("Exception occurred while retrieving kpi links", e);
throw new SpagoBIServiceException(SERVICE_NAME,
"Exception occurred while retrieving kpi links", e);
}
} else if (serviceType != null && serviceType.equalsIgnoreCase(KPI_LINKS_BY_DS)) {
try {
String labelDS = getAttributeAsString("label");
//looks up for relations
ArrayList <KpiRel> relations = new ArrayList <KpiRel>();
//looks up for dataset parameters
IDataSet dataSet = DAOFactory.getDataSetDAO().loadActiveDataSetByLabel(labelDS);
String parametersString = dataSet.getParameters();
ArrayList<String> parameters = new ArrayList<String>();
logger.debug("Dataset Parameters loaded");
if(parametersString != null){
SourceBean source = SourceBean.fromXMLString(parametersString);