package insight.common;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.primavera.common.value.BeginDate;
import com.primavera.common.value.Cost;
import com.primavera.common.value.EndDate;
import com.primavera.integration.client.EnterpriseLoadManager;
import com.primavera.integration.client.Session;
import com.primavera.integration.client.bo.BOIterator;
import com.primavera.integration.client.bo.BusinessObject;
import com.primavera.integration.client.bo.enm.UDFDataType;
import com.primavera.integration.client.bo.enm.UDFIndicator;
import com.primavera.integration.client.bo.enm.UDFSubjectArea;
import com.primavera.integration.client.bo.object.Activity;
import com.primavera.integration.client.bo.object.ActivityExpense;
import com.primavera.integration.client.bo.object.ActivityStep;
import com.primavera.integration.client.bo.object.ActivityStepTemplate;
import com.primavera.integration.client.bo.object.Project;
import com.primavera.integration.client.bo.object.ProjectDocument;
import com.primavera.integration.client.bo.object.ProjectIssue;
import com.primavera.integration.client.bo.object.Resource;
import com.primavera.integration.client.bo.object.ResourceAssignment;
import com.primavera.integration.client.bo.object.Risk;
import com.primavera.integration.client.bo.object.UDFType;
import com.primavera.integration.client.bo.object.UDFValue;
import com.primavera.integration.client.bo.object.WBS;
/**
* Created by nsb on 07/06/17.
*/
public class UpdateUDFValue {
//static Logger logger = JLogger.getLogger(UpdateUDFFromExcel.class.getName());
public UDFValue getUDFValue(Session session, BusinessObject bo, UDFType udfType) throws Exception {
EnterpriseLoadManager elm = session.getEnterpriseLoadManager();
BOIterator<UDFValue> boUDFVal = elm.loadUDFValues(UDFValue.getAllFields(), "UDFTypeObjectId=" + udfType.getObjectId()
+ " and ForeignObjectId=" + bo.getObjectId(), null);
if (boUDFVal.hasNext()) {
return boUDFVal.next();
}
return null;
}
public UDFType getUDFType(Session session, BusinessObject bo, String title) throws Exception {
UDFSubjectArea subjectArea = null;
if (bo instanceof Project) {
subjectArea = UDFSubjectArea.PROJECT;
} else if (bo instanceof ProjectIssue) {
subjectArea = UDFSubjectArea.PROJECT_ISSUE;
} else if (bo instanceof Risk) {
subjectArea = UDFSubjectArea.PROJECT_RISK;
} else if (bo instanceof Activity) {
subjectArea = UDFSubjectArea.ACTIVITY;
} else if (bo instanceof ActivityExpense) {
subjectArea = UDFSubjectArea.ACTIVITY_EXPENSE;
} else if (bo instanceof ActivityStep) {
subjectArea = UDFSubjectArea.ACTIVITY_STEP;
} else if (bo instanceof ActivityStepTemplate) {
subjectArea = UDFSubjectArea.ACTIVITY_STEP_TEMPLATE_ITEM;
} else if (bo instanceof Resource) {
subjectArea = UDFSubjectArea.RESOURCE;
} else if (bo instanceof ResourceAssignment) {
subjectArea = UDFSubjectArea.RESOURCE_ASSIGNMENT;
} else if (bo instanceof WBS) {
subjectArea = UDFSubjectArea.WBS;
} else if (bo instanceof ProjectDocument) {
subjectArea = UDFSubjectArea.WORK_PRODUCTS_AND_DOCUMENTS;
}
EnterpriseLoadManager elm = session.getEnterpriseLoadManager();
BOIterator<UDFType> boUDFType = elm.loadUDFTypes(UDFType.getAllFields(), "SubjectArea='"
+ subjectArea.getValue() + "' and Title='" + title + "'", null);
if (boUDFType.hasNext()) {
return boUDFType.next();
}
return null;
}
public void setUDFValue(Session session, BusinessObject bo, String title, Object value, Logger logger) throws Exception {
UDFType udfType = getUDFType(session, bo, title);
UDFValue udfValue = null;
if (udfType != null) {
logger.info("UDF found with title : "+udfType.getTitle());
udfValue = getUDFValue(session, bo, udfType);
if (udfValue == null) {
udfValue = new UDFValue(session, udfType.getObjectId(), bo.getObjectId());
udfValue.create();
//System.out.println("New UDF Value created..");
logger.info("New UDF value field created, now loading again..");
udfValue = getUDFValue(session, bo, udfType);
logger.info("UDF value field loaded..!!");
}
UDFDataType type = udfValue.getUDFTypeDataType();
logger.info("UDF Data Type : "+type);
logger.info("UDF Value : "+value);
if (type == UDFDataType.TEXT) {
udfValue.setText((String) value);
} else if (type == UDFDataType.COST) {
udfValue.setCost((Cost) value);
} else if (type == UDFDataType.DOUBLE) {
udfValue.setDouble(Double.parseDouble(value.toString()));
} else if (type == UDFDataType.FINISH_DATE) {
udfValue.setFinishDate((EndDate) value);
} else if (type == UDFDataType.START_DATE) {
udfValue.setStartDate((BeginDate) value);
} else if (type == UDFDataType.INTEGER) {
udfValue.setInteger(Integer.parseInt(value.toString()));
} else if (type == UDFDataType.INDICATOR) {
udfValue.setIndicator((UDFIndicator) value);
}
logger.info("Updating udf value..");
udfValue.update();
logger.info("UDF value updated successfully................!!");
} else {
//System.out.println("UDF with title " + title + " not found.");
logger.log(Level.SEVERE,"UDF with title " + title + " not found.");
}
}
public void printUDFValue(Session session, BusinessObject bo, String title) throws Exception {
UDFType udfType = getUDFType(session, bo, title);
UDFValue udfValue = getUDFValue(session, bo, udfType);
if (udfValue != null) {
UDFDataType type = udfValue.getUDFTypeDataType();
if (type == UDFDataType.TEXT) {
System.out.println(udfValue.getText());
} else if (type == UDFDataType.CODE) {
System.out.println(udfValue.getCodeValue());
} else if (type == UDFDataType.COST) {
System.out.println(udfValue.getCost());
} else if (type == UDFDataType.DOUBLE) {
System.out.println(udfValue.getDouble());
} else if (type == UDFDataType.FINISH_DATE) {
System.out.println(udfValue.getFinishDate());
} else if (type == UDFDataType.START_DATE) {
System.out.println(udfValue.getStartDate());
} else if (type == UDFDataType.INTEGER) {
System.out.println(udfValue.getInteger());
} else if (type == UDFDataType.INDICATOR) {
System.out.println(udfValue.getIndicator());
}
}
}
}