package insight;
import insight.common.P6Helper;
import insight.common.UpdateUDFValue;
import insight.common.logging.JLogger;
import java.sql.ResultSet;
import java.util.Date;
import java.util.logging.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.primavera.ServerException;
import com.primavera.common.value.ObjectId;
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.BusinessObjectException;
import com.primavera.integration.client.bo.enm.ResourceType;
import com.primavera.integration.client.bo.object.Resource;
import com.primavera.integration.client.bo.object.User;
import com.primavera.integration.network.NetworkException;
public class SchedulerJob implements Job{
static Session session = null;
public static Logger logger = JLogger.getLogger(SchedulerJob.class.getName());
public void execute(JobExecutionContext arg0) throws JobExecutionException {
int i = 1;
try {
ResultSet rs = null;
logger.info("Start time : " + new Date());
P6Helper helper = new P6Helper();
logger.info("Connecting with database..");
session = helper.getSession(logger);
logger.info("Connected with the db : " + session.getDatabaseName());
rs = helper.getEmployeeData("emp_master.[dbo].[EPMResourcePool]");
while (rs.next()) {
logger.info("Iterating result set for row no ===========> "+i);
System.out.println("Iterating result set for row no ===========> "+i);
//iterateResultSet(rs);
logger.info("");
i++;
}
} catch (Exception e) {
logger.info("Exception : " + e);
e.printStackTrace();
} finally {
logger.info("Resource creation/updation process completed for ["+i+"] resources.");
session.logout();
logger.info("Session closed..!!");
}
}
private static void iterateResultSet(ResultSet rs) throws Exception {
// String empType = rs.getString(1);
String function = rs.getString(2);
String pdgCode = rs.getString(3);
String pdg = rs.getString(4);
String departmentCode = rs.getString(5);
String department = rs.getString(6);
String designationCode = rs.getString(7);
String designation = rs.getString(8);
String employeeCode = rs.getString(9);
String resourceName = rs.getString(10);
String resourceId = rs.getString(11);
String email = rs.getString(12);
String category = rs.getString(13);
// String winAuth = rs.getString(14);
boolean isActive = rs.getBoolean(15);
String skills = rs.getString(16);
String parentObject = rs.getString(17);
String resType = rs.getString(18);
// String FT_2 = rs.getString(19);
// String FT_3 = rs.getString(20);
// String availFrom = rs.getString(21);
// String availTo = rs.getString(22);
// String maxUnits = rs.getString(23);
// String stdRate = rs.getString(24);
String locCode = rs.getString(25);
String locationName = rs.getString(26);
if (resourceId != null && resourceId.length() > 0) {
ObjectId parentObjId = null;
EnterpriseLoadManager elm = session.getEnterpriseLoadManager();
logger.info("Reporting hierarchy for the resource "+resourceName+"["+employeeCode+"] is ["+parentObject+"]");
logger.info("Searcing parent object id ..");
parentObjId = getParentObjId(elm, resType, parentObject);
logger.info("Parent object id is : " + parentObjId);
logger.info("Searching resource [" + resourceId + "] in p6..");
Resource res = loadResource(elm, resourceId);
if (res != null) {
logger.info("Resource already exist, updating resource..");
updateResource(elm, res, employeeCode, resourceName, email, isActive, resType, parentObjId, resourceId);
logger.info("Resource updated...");
} else {
logger.info("Resource not found, creating new resource..");
createResource(elm, employeeCode, resourceName, email, resType, parentObjId, resourceId);
res = loadResource(elm, resourceId);
logger.info("New resource created...");
}
logger.info("Now updating the related UDF's for the resource : "+ res.getName());
updateResourceUDF(res, function, pdgCode, pdg, departmentCode,
department, designationCode, designation, category, skills,locCode, locationName);
logger.info("All udf's updated..!!");
}
}
private static Resource loadResource(EnterpriseLoadManager elm,
String resourceId) throws BusinessObjectException, ServerException,
NetworkException {
BOIterator<Resource> boI = elm.loadResources(Resource.getAllFields(), "Id = '" + resourceId + "'", null);
if (boI.hasNext())
return boI.next();
else
return null;
}
private static ObjectId getParentObjId(EnterpriseLoadManager elm,
String resType, String parentObject)
throws BusinessObjectException, ServerException, NetworkException {
Resource parentRes = null;
if (resType.equals("Machine")) {
parentObject = "Machines";
}else if(resType.equals("Material")){
parentObject = "Material";
} else if (parentObject != null && parentObject.contains(".")) {
String[] parentObjectList = parentObject.replace(".", ";").split(";");
if (parentObjectList.length > 1) {
parentObject = parentObjectList[parentObjectList.length - 2];
}
}
if (parentObject != null) {
parentRes = loadResource(elm, parentObject);
if (parentRes != null) {
return parentRes.getObjectId();
} else {
parentRes = loadResource(elm, "Torrent Pharma");
return parentRes.getObjectId();
}
} else {
parentRes = loadResource(elm, "Torrent Pharma");
return parentRes.getObjectId();
}
}
private static ObjectId updateResource(EnterpriseLoadManager elm,
Resource res, String employeeCode, String resourceName,
String email, Boolean isActive, String resType,
ObjectId parentObjId, String resourceId)
throws BusinessObjectException, ServerException, NetworkException {
res.setName(resourceName);
res.setIsActive(true);
if (parentObjId != null)
res.setParentObjectId(parentObjId);
BOIterator<User> boUserIttr = elm.loadUsers( new String[] { "ObjectId" }, "Name = '" + resourceId + "'", null);
if (boUserIttr.hasNext()) {
User user = boUserIttr.next();
res.setUserObjectId(user.getObjectId());
}
if (resType.equals("Human"))
res.setResourceType(ResourceType.LABOR);
else if (resType.equals("Machine"))
res.setResourceType(ResourceType.NONLABOR);
else
res.setResourceType(ResourceType.MATERIAL);
res.update();
return res.getObjectId();
}
private static ObjectId createResource(EnterpriseLoadManager elm,
String employeeCode, String resourceName, String email,
String resType, ObjectId parentObjectID, String resourceId)
throws BusinessObjectException, ServerException, NetworkException {
Resource res = new Resource(session);
res.setId(resourceId);
res.setName(resourceName);
res.setIsActive(true);
res.setEmailAddress(email);
res.setEmployeeId(employeeCode);
if (parentObjectID != null)
res.setParentObjectId(parentObjectID);
if (resType.equals("Human"))
res.setResourceType(ResourceType.LABOR);
else if (resType.equals("Machine"))
res.setResourceType(ResourceType.NONLABOR);
else
res.setResourceType(ResourceType.MATERIAL);
BOIterator<User> boUserIttr = elm.loadUsers(
new String[] { "ObjectId" }, "Name = '" + resourceId + "'",
null);
if (boUserIttr.hasNext()) {
User user = boUserIttr.next();
res.setUserObjectId(user.getObjectId());
}
ObjectId objIdNew = res.create();
return objIdNew;
}
private static void updateResourceUDF(Resource res, String function,
String pdgCode, String pdg, String departmentCode,
String department, String designationCode, String designation,
String category, String skills, String locCode, String locationName)
throws Exception {
UpdateUDFValue update = new UpdateUDFValue();
String[] udfArray = { "Function", "PDGCode", "PDG", "DepartmentCode",
"Department", "DesignationCode", "Designation", "Category",
"Skills", "LocationCode", "LocationName" };
String[] valArray = { function, pdgCode, pdg, departmentCode,
department, designationCode, designation, category, skills,
locCode, locationName };
for (int i = 0; i < valArray.length; i++) {
if (valArray[i] != null && valArray[i].length() > 0)
update.setUDFValue(session, res, udfArray[i], valArray[i],
logger);
}
}
}