package ru.nornick.home.asu_nsi.mtr.bpm.mtrclassifierprocessbs.oprs;
import com.sap.tc.logging.Location;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.sap.engine.services.configuration.appconfiguration.ApplicationPropertiesAccess;
import com.sap.mdm.commands.CommandException;
import com.sap.mdm.data.Record;
import com.sap.mdm.ids.RecordId;
import com.sap.mdm.net.ConnectionException;
import com.sap.mdm.session.SessionException;
import com.sap.mdm.session.UserSessionContext;
import com.sap.mdm.valuetypes.MdmValue;
import com.sap.mdm.valuetypes.MultiTupleValue;
import com.sap.mdm.valuetypes.StringValue;
import com.sap.mdm.valuetypes.TupleValue;
import com.sap.security.api.IGroup;
import com.sap.security.api.UMException;
import com.sap.security.api.UMFactory;
import com.sap.security.api.UMRuntimeException;
import ru.nornick.home.asu_nsi.core.services.exceptions.ExceptionHelper;
import ru.nornick.home.asu_nsi.core.services.jobs.JobsHelper;
import ru.nornick.home.asu_nsi.core.services.mail.MailHelper;
import ru.nornick.home.asu_nsi.mtr.bpm.bs.AbstractOperation;
import ru.nornick.home.asu_nsi.mtr.bpm.mtrclassifierprocessbs.CommonData;
import ru.nornick.home.asu_nsi.mtr.bpm.mtrclassifierprocessbs.GroupsOwners;
import ru.nornick.home.asu_nsi.mtr.services.requests.Mtr;
import ru.nornick.home.asu_nsi.mtr.services.requests.MtrClassifier;
import ru.nornick.home.asu_nsi.mtr.services.requests.Requests;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.AreasEntity;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.AreasFacade;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.MtrMdmTableFactory;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.RequestHistoryTupleEntity;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.RequestsEntity;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.RequestsStatusesEntity;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.StructuralDivisionsEntity;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.StructuralDivisionsFacade;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.UsersEntity;
import ru.nornick.home.asu_nsi.templates.mdm.entity.mtr.UsersFacade;
import ru.nornick.home.asu_nsi.templates.services.bl.mtr.MTRBusinessHelper;
import ru.nornick.home.asunsi.mtr.portal.entity.ejb.ClassValue;
import ru.nornick.home.asunsi.mtr.portal.entity.ejb.ClassValueFacadeLocal;
import ru.nornick.home.asunsi.mtr.portal.entity.ejb.StructDivisionClassValue;
import ru.nornick.home.asunsi.mtr.portal.entity.ejb.StructDivisionClassValueFacadeLocal;
public class MtrClassifierBetweenSteps extends AbstractOperation<CommonData> {
public static final Location log = Location.getLocation(MtrClassifierBetweenSteps.class);
private static final String MTR_CLASSIFIER_EXPERT_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_EXPERT";
private static final String MTR_CLASSIFIER_METHODOLOG_MTR_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_METHODOLOG_MTR";
private static final String MTR_CLASSIFIER_CURATOR_ZF_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_CURATOR_ZF";
private static final String MTR_CLASSIFIER_CURATOR_KGMK_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_CURATOR_KGMK";
private static final String MTR_CLASSIFIER_CURATOR_GRKB_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_CURATOR_GRKB";
private static final String MTR_CLASSIFIER_METHODOLOG_DBNU_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_METHODOLOG_DBNU";
private static final String MTR_CLASSIFIER_SUPPORT_ERP_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_SUPPORT_ERP";
private static final String MTR_CLASSIFIER_SUPPORT_SRM_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_SUPPORT_SRM";
private static final String MTR_CLASSIFIER_METHODOLOG_BPC_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_METHODOLOG_BPC";
private static final String MTR_CLASSIFIER_METHODOLOG_BW_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_METHODOLOG_BW";
private static final String MTR_CLASSIFIER_SUPPORT_NSI_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_SUPPORT_NSI";
private static final String MTR_CLASSIFIER_DEVELOPER_NSI_ROLE = "GRUP.PRIVATE_DATASOURCE.un:UME_MTR_CLASSIFIER_DEVELOPER_NSI";
/*private final String MESSAGE_TEMPLATE_SLEEP = "\tИзменение структуры Классификатора МТР по запросу № %s отсрочено до %s "
+ "в связи закрытием месяца в системе КХД.\n";
private final String MESSAGE_TEMPLATE_RESTORE = "\tИзменение структуры Классификатора МТР по запросу № %s согласовано и вновь запущено с %s \n"
+ "Обращаем Ваше внимание запрос будет переведен на следующий шаг автоматически.\n";
private final String MESSAGE_TEMPLATE_BASE = "\tСогласован запрос № %s на изменение структуры Классификатора МТР\n";
private final String MESSAGE_TEMPLATE_REVIEW ="\tУточнение запроса № %s на изменение структуры Классификатора МТР\n";
private final String MESSAGE_TEMPLATE_END_CHANGE = "\tИзменение структуры Классификатора МТР по запросу № %s согласовано";
private final String MESSAGE_TEMPLATE_UPDATE ="\tОбработан запрос № %s на изменение структуры Классификатора МТР\n";*/
private MtrMdmTableFactory f;
private static String dateMsg;
private ArrayList<Integer> structDivision;
private final HashMap<String, String> templates = new HashMap<String, String>() {{
put("320", "\tЗапрос № %s на изменение структуры Классификатора МТР отправлен на согласование Методологу МТР.\n" );
put("330", "\tЗапрос № %s на изменение структуры Классификатора МТР корректен и отправлен на согласование "+
"в группу Кураторов МТР данного класса.\n" );
put("340", "\tЗапрос № %s на изменение структуры Классификатора МТР отправлен на согласование специалистам смежных ИС.\n" );
put("350", "\tЗапрос № %s на изменение структуры Классификатора МТР отправлен методологу ВРС.\n" );
put("360", "\tЗапрос № %s на изменение структуры Классификатора МТР отправлен методологу КХД.\n" );
put("380", "\tЗапрос № %s на изменение структуры Классификатора МТР отправлен Разработчику АСУ НСИ.\n" );
put("400", "\tЗапрос № %s на изменение структуры Классификатора МТР отправлен специалистам смежных ИС.\n" );
put("410", "\tЗапрос № %s на изменение структуры Классификатора МТР отправлен специалисту Технической поддержки АСУ НСИ.\n" );
put("312", "\tЗапрос № %s на изменение структуры Классификатора МТР требует уточнения у инициатора (от методолога МТР).\n" );
put("323", "\tЗапрос № %s на изменение структуры Классификатора МТР требует уточнения у эксперта (от кураторов МТР).\n" );
put("324", "\tЗапрос № %s на изменение структуры Классификатора МТР требует уточнения у эксперта (от специалистов смежных ИС).\n" );
put("325", "\tЗапрос № %s на изменение структуры Классификатора МТР требует уточнения у эксперта (от методолога ВРС).\n" );
put("150+", "\tЗапрос № %s на изменение структуры Классификатора МТР отсрочен Методологом КХД "+
"до %s, в связи с закрытием квартальной и/или годовой отчетности в системе КХД.\n" );
put("380_150+", "\tЗапрос № %s на изменение структуры Классификатора МТР автоматически согласован и вновь запущен, "+
"изменения будут внесены в АСУ НСИ в течении трех дней.\n" );
put("380+", "\tЗапрос № %s на изменение структуры Классификатора МТР согласован, "+
"изменения будут внесены в АСУ НСИ в течении трех дней.\n" );
put("400+", "\tПо запросу № %s на изменение структуры Классификатора МТР данные внесены в АСУ НСИ.\n" );
put("130", "\tЗапрос № %s на изменение структуры Классификатора МТР завершен.\n" );
}};
private final HashMap<String, String> headers = new HashMap<String, String>() {{
put("320", "Запрос № %s на изменение структуры Классификатора МТР отправлен на согласование Методологу МТР." );
put("330", "Запрос № %s на изменение структуры Классификатора МТР корректен и отправлен на согласование "+
"в группу Кураторов МТР данного класса." );
put("340", "Запрос № %s на изменение структуры Классификатора МТР отправлен на согласование специалистам смежных ИС." );
put("350", "Запрос № %s на изменение структуры Классификатора МТР отправлен методологу ВРС." );
put("360", "Запрос № %s на изменение структуры Классификатора МТР отправлен методологу КХД." );
put("380", "Запрос № %s на изменение структуры Классификатора МТР отправлен Разработчику АСУ НСИ." );
put("400", "Запрос № %s на изменение структуры Классификатора МТР отправлен специалистам смежных ИС." );
put("410", "Запрос № %s на изменение структуры Классификатора МТР отправлен специалисту Технической поддержки АСУ НСИ." );
put("312", "Запрос № %s на изменение структуры Классификатора МТР требует уточнения у инициатора (от методолога МТР)." );
put("323", "Запрос № %s на изменение структуры Классификатора МТР требует уточнения у эксперта (от кураторов МТР)." );
put("324", "Запрос № %s на изменение структуры Классификатора МТР требует уточнения у эксперта (от специалистов смежных ИС)." );
put("325", "Запрос № %s на изменение структуры Классификатора МТР требует уточнения у эксперта (от методолога ВРС)." );
put("150+", "Запрос № %s на изменение структуры Классификатора МТР отсрочен Методологом КХД до %s" );
put("380_150+", "Запрос № %s на изменение структуры Классификатора МТР согласован и вновь запущен" );
put("380+", "Запрос № %s на изменение структуры Классификатора МТР согласован" );
put("400+", "По запросу № %s на изменение структуры Классификатора МТР данные внесены в АСУ НСИ." );
put("130", "Запрос № %s на изменение структуры Классификатора МТР завершен." );
}};
@Override
public void execute() throws Exception {
String method = "execute()";
log.entering(method);
try {
UserSessionContext userSessionContext = getFactory().getMTREntity().getCtx();
Integer RequestRecordId = Integer.parseInt(data.getMtrClassifierCtx().getRequestRecordId());
bh = new MTRBusinessHelper();
bh.setRequestNumber(data.getMtrClassifierCtx().getRequestDisplayValue());
if (data.getMtrClassifierCtx().isSleepState()) {
sendEmailToParticipant(findParticipant(1),"150+");
data.getMtrClassifierCtx().setSleepState(false);
MdmValue commentMdmValue = new StringValue("Запрос отсрочен до: " + dateMsg + "(автоматическое сообщение)");
Requests.setRequestStatus(userSessionContext, new RecordId(RequestRecordId), RequestsStatusesEntity.Statuses.DEFERRED,
null, null, commentMdmValue);
} else {
int mailKey = 2;
String opName = data.getMtrClassifierCtx().getCurrentOperationName();
String templateKey = opName;
GroupsOwners groupsOwners = new GroupsOwners();
if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_AGREEMENT_BY_METHODOLOGIST_NSI)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_MTR_ROLE);
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_REVIEW_FROM_METHODOLOGIST_NSI)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_EXPERT_ROLE);
mailKey = 4;
//templateKey = "REVIEW";
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_AGREEMENT_BY_CURATOR_NSI)) {
loadStructuralDivision();
StructuralDivisionsEntity structuralDivisionsEntity = getFactory().getStructuralDivisionsEntity();
StructuralDivisionsFacade structuralDivisionsFacade = getFactory().getStructuralDivisionsFacade();
structuralDivisionsFacade.setLoadTupleValues(true);
AreasFacade areasFacade = getFactory().getAreasFacade();
AreasEntity areasEntity = getFactory().getAreasEntity();
for (int sDCode : structDivision) {
Record structuralDivisionRecord = structuralDivisionsFacade.
retrieveByNumberFieldValue(sDCode, StructuralDivisionsEntity.CODE,
new String[]{StructuralDivisionsEntity.AREA})[0];
structuralDivisionsEntity.setCurrentRecord(structuralDivisionRecord);
Record areasRecord = areasFacade.retrieveByIDs(structuralDivisionsEntity.getArea().getId(),
new String[]{AreasEntity.AREA_CODE});
areasEntity.setCurrentRecord(areasRecord);
//structuralDivisionsEntity.setCurrentRecord(structuralDivisionRecord);
if (areasEntity.getAreaCode().equals("1")) {//ЗФ
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_CURATOR_ZF_ROLE);
}
else if (areasEntity.getAreaCode().equals("2")) {//КГМК
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_CURATOR_KGMK_ROLE);
}
else if (areasEntity.getAreaCode().equals("3")) {//ГРКБ
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_CURATOR_GRKB_ROLE);
}
}
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_REVIEW_FROM_CURATOR_NSI)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_MTR_ROLE);
mailKey = 4;
//templateKey = "REVIEW";
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_AGREEMENT_BY_DBNU_ERP_SRM)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_DBNU_ROLE);
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_SUPPORT_ERP_ROLE);
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_SUPPORT_SRM_ROLE);
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_REVIEW_FROM_DBNU_ERP_SRM)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_MTR_ROLE);
mailKey = 4;
//templateKey = "REVIEW";
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_AGREEMENT_BY_METHODOLOGIST_BPC)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_BPC_ROLE);
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_REVIEW_FROM_METHODOLOGIST_BPC)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_MTR_ROLE);
mailKey = 4;
//templateKey = "REVIEW";
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_AGREEMENT_BY_METHODOLOGIST_KXD)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_BW_ROLE);
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_CHANGE_BY_SUPPORT_NSI)) {
if (data.getMtrClassifierCtx().getSleepSecond() != null
&& data.getMtrClassifierCtx().getSleepSecond().longValue() > 0) {
data.getMtrClassifierCtx().setSleepSecond(BigInteger.valueOf(0));
sendEmailToParticipant(findParticipant(1),"380_150+");
}
else {
sendEmailToParticipant(findParticipant(1),"380+");
}
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_DEVELOPER_NSI_ROLE);
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_CHANGE_BY_NEIGHBORING_IS)) {
startEORequest();
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_DBNU_ROLE);
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_SUPPORT_ERP_ROLE);
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_SUPPORT_SRM_ROLE);
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_BPC_ROLE);
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_METHODOLOG_BW_ROLE);
sendEmailToParticipant(findParticipant(1),"400+");
} else if (opName.equals(RequestsStatusesEntity.Statuses.MTR_CL_TRANSFER_BY_SUPPORT_NSI)) {
groupsOwners.getGroupOwners().add(MTR_CLASSIFIER_SUPPORT_NSI_ROLE);
//templateKey = "UPDATE";
}
data.getMtrClassifierCtx().setGroupsOwners(groupsOwners);
sendEmailToParticipant(findParticipant(mailKey),templateKey);
// =====
Requests.setRequestStatus(userSessionContext, new RecordId(RequestRecordId),
data.getMtrClassifierCtx().getCurrentOperationName(), null, null, null);
}
} catch (Exception e) {
ExceptionHelper.printStackTrace(e, log);
throw new RuntimeException(e);
} finally {
log.exiting(method);
}
}
private boolean startEORequest(){
try {
ClassValueFacadeLocal facade;
facade = (ClassValueFacadeLocal) InitialContext
.doLookup(ClassValueFacadeLocal.JNDI_NAME);
String requestDisplayValue = data.getMtrClassifierCtx().getRequestDisplayValue();
if (requestDisplayValue == null) {
return false;
}
List<ClassValue> list = facade.findClassValueByRequestId(Integer.parseInt(requestDisplayValue));
if (list.size() != 0) {
ClassValue classValue = list.get(0);
String template = "<li><strong>Запрос на изменение классификатора МТР № "+requestDisplayValue+":</strong><ol>"+
"<li>Вид МТР: "+classValue.getMtrType()+"</li>"+
"<li>Класс оценки: "+classValue.getClassValue()+"</li>"+
"<li>Код класса: "+classValue.getMtrClassCode()+"</li>"+
"<li>Наименование класса: "+classValue.getMtrClassName()+"</li>"+
"</ol></li>";
Map<String, Object> params = new HashMap<String, Object>();
params.put("eoRepoId", getAppProperties("EO_REQUEST_FROM_MTR_CLASSIFIER"));
params.put("eoReqParam", template);
JobsHelper.startJob("StartEoFromMTRClassifierJob", params);
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
private boolean sendEmailToParticipant(String usersEmail,String key) throws UMRuntimeException, UMException {
String method = "sendEmailToParticipant";
try {
if (usersEmail != null) {
Calendar calendar = Calendar.getInstance();
// LocalDateTime currDate = LocalDateTime.now();
Date currDate = new Date();
calendar.setTime(currDate);
calendar.setTimeInMillis(
calendar.getTimeInMillis() + (1000 * data.getMtrClassifierCtx().getSleepSecond().longValue()));
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.YYYY");
dateFormat.format(calendar.getTime());
StringBuilder body = new StringBuilder();
dateMsg = dateFormat.format(calendar.getTime());
body.append(MailHelper.Texts.HEADER);
String header = null;
if (key.equals("150+")){
header = String.format(headers.get(key), data.getMtrClassifierCtx().getRequestDisplayValue(),
dateMsg);
body.append(String.format(templates.get(key), data.getMtrClassifierCtx().getRequestDisplayValue(),
dateMsg));
}
else{
header = String.format(headers.get(key), data.getMtrClassifierCtx().getRequestDisplayValue());
body.append(String.format(templates.get(key), data.getMtrClassifierCtx().getRequestDisplayValue()));
}
body.append(String.format("Вид МТР: %s\n" +
"Класс оценки: %s\n" +
"Код класса: %s\n" +
"Наименование класса: %s\n",data.getMtrClassifierCtx().getMtrType(),data.getMtrClassifierCtx().getClassValue(),
data.getMtrClassifierCtx().getMtrClassCode(),data.getMtrClassifierCtx().getMtrClassName()));
body.append(MailHelper.Texts.FOOTER);
MailHelper.sendEmail(usersEmail.split(","), header, body.toString(), MailHelper.ContentType.HTML, null,
null);
if (log.beDebug()) {
log.infoT(method,"Send Email to: "+usersEmail+" address, with message: "+body.toString() +
" and header: "+header);
}
}
return true;
} catch (Exception e) {
ExceptionHelper.printStackTrace(e, log);
throw new RuntimeException(e);
} finally {
log.exiting(method);
}
}
//@@begin javadoc:findParticipant
/**
* key = 1 -> return all current users from request;
* key = 2 -> return all potential owners from next step;
* key = 4 -> return the saved user for review step;
* key = 3 -> return for key 2 & 1
*/
//@@end
private String findParticipant(int key) {
ArrayList<String> participant = new ArrayList<String>();
try {
MultiTupleValue m = (MultiTupleValue) bh.getRequestEntity().getFieldValue(RequestsEntity.REQUEST_HISTORY);
MdmValue[] values = m.getValues();
RequestHistoryTupleEntity requestHistoryTupleEntity = bh.getMdmFactory().getRequestHistoryTupleEntity();
Record participantRec = null;
UsersEntity userEntity = getFactory().getUsersEntity();
UsersFacade userFacade = getFactory().getUsersFacade();
if ((key & 1) == 1) {
for (int i = 0; i < values.length; i++) {
TupleValue t = (TupleValue) values[i];
requestHistoryTupleEntity.setCurrentTupleValue(t);
String requestStatusCode = requestHistoryTupleEntity.getRequestStatusCode();
if (requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_DRAFT)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_BY_CURATOR_NSI)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_BY_DBNU_ERP_SRM)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_BY_METHODOLOGIST_BPC)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_BY_METHODOLOGIST_NSI)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_BY_METHODOLOGIST_KXD)
//&& (key & 2) == 1)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_CHANGE_BY_SUPPORT_NSI)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_CHANGE_BY_NEIGHBORING_IS)
|| requestStatusCode.equals(RequestsStatusesEntity.Statuses.MTR_CL_PROCESSING_TRANSFER_BY_SUPPORT_NSI)
) {
participantRec = requestHistoryTupleEntity.getHandler();
userEntity.setCurrentRecord(participantRec);
String email = userEntity.getEmail();
if (email != null && participant.indexOf(email) == -1) {
participant.add(email);
}
// participant
}
}
}
if ((key & 2) == 2) {
Boolean loadCurators = false;
StructuralDivisionsEntity structuralDivisionsEntity = getFactory().getStructuralDivisionsEntity();
StructuralDivisionsFacade structuralDivisionsFacade = getFactory().getStructuralDivisionsFacade();
if (data.getMtrClassifierCtx().getCurrentOperationName().equals(RequestsStatusesEntity.Statuses.MTR_CL_AGREEMENT_BY_CURATOR_NSI)) {
loadCurators = true;
//userFacade.setLoadTupleValues(true);
}
for (String group:data.getMtrClassifierCtx().getGroupsOwners().getGroupOwners()) {
IGroup iGroup = UMFactory.getGroupFactory().getGroup(group);
Iterator<String> userIdIterator = iGroup.getUserMembers(true);
String item;
while (userIdIterator.hasNext()) {
item = userIdIterator.next();
// uniqueIdOfUserStringsList.add(item);
Record[] recs = userFacade.retrieveByStringField(
UMFactory.getUserFactory().getUser(item).getUniqueName(), UsersEntity.LOGON_ID,
new String[] { UsersEntity.LOGON_ID, UsersEntity.EMAIL, UsersEntity.STRUCTURAL_DIVISION });
if (recs.length > 0) {
userEntity.setCurrentRecord(recs[0]);
String email = userEntity.getEmail();
if (email != null && !email.isEmpty() && participant.indexOf(email) == -1) {
if (loadCurators) {
Record structuralDivisionRecord = userEntity.getStructuralDivision();
if (structuralDivisionRecord != null) {
structuralDivisionRecord = structuralDivisionsFacade.retrieveByIDs(structuralDivisionRecord.getId(), new String[]{StructuralDivisionsEntity.CODE});
structuralDivisionsEntity.setCurrentRecord(structuralDivisionRecord);
if (structDivision.contains(structuralDivisionsEntity.getCode())) {
participant.add(email);
}
}
}
else {
participant.add(email);
}
}
}
}
}
}
if ((key & 4) == 4) {
String saveUser = null;
if (data.getMtrClassifierCtx().getGroupsOwners().getGroupOwners().get(0).equals(MTR_CLASSIFIER_EXPERT_ROLE)) {
saveUser = data.getBpmProcessData().getInitiatorPrincipalId();
}
else if (data.getMtrClassifierCtx().getGroupsOwners().getGroupOwners().get(0).equals(MTR_CLASSIFIER_METHODOLOG_MTR_ROLE)) {
saveUser = data.getMtrClassifierCtx().getMethodologNSIPrincipalId();
}
Record[] recs = userFacade.retrieveByStringField(
UMFactory.getUserFactory().getUser(saveUser).getUniqueName(), UsersEntity.LOGON_ID,
new String[] { UsersEntity.LOGON_ID, UsersEntity.EMAIL, UsersEntity.STRUCTURAL_DIVISION });
userEntity.setCurrentRecord(recs[0]);
String email = userEntity.getEmail();
if (email != null && !email.isEmpty()) {
participant.add(email);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
ExceptionHelper.printStackTrace(e, log);
}
String result = null;
for (String email : participant) {
if (result != null) {
result += "," + email;
} else
result = email;
}
return result;
}
private void loadStructuralDivision() {
try {
StructDivisionClassValueFacadeLocal StructDivClValFacade = (StructDivisionClassValueFacadeLocal) InitialContext
.doLookup(StructDivisionClassValueFacadeLocal.JNDI_NAME);
structDivision = new ArrayList<Integer>();
List<StructDivisionClassValue> listSD = StructDivClValFacade.findStructDivisionClassValueByRequestId(
Integer.parseInt(data.getMtrClassifierCtx().getRequestDisplayValue()));
for (StructDivisionClassValue entity : listSD) {
structDivision.add(entity.getStrDivId());
}
} catch (Exception e) {
ExceptionHelper.printStackTrace(e, logger);
}
}
public String getAppProperties(String propertyName) {
Properties props = getAppProperties();
String property = props.getProperty(propertyName);
if (property == null || property.isEmpty()) {
throw new RuntimeException(String.format("Property [%s] has not filled in application [home/asu_nsi/mtr/services/ear]!", propertyName));
}
return (String) property;
}
protected Properties getAppProperties() {
try {
InitialContext context = new InitialContext();
Object lookup = context.lookup("ApplicationConfiguration");
Properties appProperties = ((ApplicationPropertiesAccess) lookup).getApplicationProperties();
return appProperties;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
private MtrMdmTableFactory getFactory() {
if (f == null) {
f = new MtrMdmTableFactory();
}
return f;
}
}