blob: 5eedc3eb4e095171f4b4dd3ef49a460ea0c2ed13 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (c) 2018 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************
*/
package org.eclipse.openk.core.controller;
import org.apache.log4j.Logger;
import org.eclipse.jetty.http.HttpStatus;
import org.eclipse.openk.api.*;
import org.eclipse.openk.api.mail.EmailTemplatePaths;
import org.eclipse.openk.common.mapper.generic.GenericApiToDbMapper;
import org.eclipse.openk.common.util.ResourceLoaderBase;
import org.eclipse.openk.core.exceptions.HttpStatusException;
import org.eclipse.openk.db.dao.*;
import org.eclipse.openk.db.model.*;
import javax.persistence.EntityManager;
import java.time.Instant;
import java.util.*;
import static org.eclipse.openk.common.JsonGeneratorBase.getGson;
public class MasterDataBackendController {
protected static final Logger logger = Logger.getLogger(MasterDataBackendController.class);
public List<String> getEmailAddressesFromTemplates() {
List<String> recipientAddressesAllList = new ArrayList<>();
Set<String> recipientAddressesUniqueList = new HashSet<>();
//fetch names of relevant emailTemplates
BackendSettings bSettings = BackendConfig.getInstance().getBackendSettings();
String emailTemplateAddressesForNotification = bSettings.getEmailTemplateAddressesForNotification();
String[] templateNameList = emailTemplateAddressesForNotification.split(",");
EmailTemplatePaths paths = BackendConfig.getInstance().getEmailTemplatePaths();
//TODO: refactoren, z.B. Möglichkeit schaffen, einen Template-Path direkt mit Hilfe des Template-Namens zu holen
//fetch emailTemplates by the aid of their names
List<String> relevantEmailTemplates = new ArrayList<>();
for(String templateName: templateNameList) {
if (templateName.contains("active"))
relevantEmailTemplates.add(paths.getActiveEmailTemplate());
if (templateName.contains("applied"))
relevantEmailTemplates.add(paths.getAppliedEmailTemplate());
if (templateName.contains("approved"))
relevantEmailTemplates.add(paths.getApprovedEmailTemplate());
if (templateName.contains("cancelled"))
relevantEmailTemplates.add(paths.getCancelledEmailTemplate());
if (templateName.contains("closed"))
relevantEmailTemplates.add(paths.getClosedEmailTemplate());
if (templateName.contains("finished"))
relevantEmailTemplates.add(paths.getFinishedEmailTemplate());
if (templateName.contains("forapproval"))
relevantEmailTemplates.add(paths.getForapprovalEmailTemplate());
if (templateName.contains("inwork"))
relevantEmailTemplates.add(paths.getInworkEmailTemplate());
if (templateName.contains("rejected"))
relevantEmailTemplates.add(paths.getRejectedEmailTemplate());
if (templateName.contains("released"))
relevantEmailTemplates.add(paths.getReleasedEmailTemplate());
if (templateName.contains("requested"))
relevantEmailTemplates.add(paths.getRequestedEmailTemplate());
if (templateName.contains("workfinished"))
relevantEmailTemplates.add(paths.getWorkfinishedEmailTemplate());
}
//fetch emailAddresses from relevant emailTemplates
String[] recipientsSplit;
String recipientsTo;
String[] recipientAddresses;
for(String templatePath: relevantEmailTemplates) {
ResourceLoaderBase loaderBase = new ResourceLoaderBase();
String templateString = loaderBase.loadFromPath(templatePath);
recipientsSplit = templateString.split("CC");
recipientsTo = recipientsSplit[0].trim().replace("To:", "");
if(!recipientsTo.isEmpty()) {
recipientAddresses = recipientsTo.split(",");
recipientAddressesAllList.addAll(Arrays.asList(recipientAddresses));
}
}
recipientAddressesAllList.replaceAll(String::trim);
recipientAddressesUniqueList.addAll(recipientAddressesAllList);
List<String> retList= new ArrayList<>(recipientAddressesUniqueList);
Collections.sort(retList);
return retList;
}
public List<Branch> getBranches() {
List<Branch> vmList = new java.util.ArrayList<>();
try (AutoCloseEntityManager em = createEm()) {
RefBranchDao bDao = createRefBranchDao(em);
List<RefBranch>mList = bDao.getBranchesInTx();
GenericApiToDbMapper mapper = new GenericApiToDbMapper();
mList.forEach(m -> vmList.add(mapper.mapToViewModel(Branch.class, m) ) );
}
return vmList;
}
public List<BranchLevel> getBranchLevelsByBranch(int id) {
List<BranchLevel> vmList = new java.util.ArrayList<>();
try (AutoCloseEntityManager em = createEm()) {
RefBranchLevelDao blDao = createRefBranchLevelDao(em);
List<RefBranchLevel>mList = blDao.getBranchLevelsByBranchId(id);
GenericApiToDbMapper mapper = new GenericApiToDbMapper();
mList.forEach(m -> vmList.add(mapper.mapToViewModel(BranchLevel.class, m) ) );
}
return vmList;
}
public List<GmStatus> getGmStatus() {
List<GmStatus> vmList = new java.util.ArrayList<>();
try (AutoCloseEntityManager em = createEm()) {
RefGmStatusDao sDao = createRefGmStatusDao(em);
List<RefGmStatus>mList = sDao.getGmStatusInTx();
GenericApiToDbMapper mapper = new GenericApiToDbMapper();
mList.forEach(m -> vmList.add(mapper.mapToViewModel(GmStatus.class, m)));
}
return vmList;
}
public List<CostCenter> getCostCenters() {
List<CostCenter> vmList = new java.util.ArrayList<>();
try (AutoCloseEntityManager em = createEm()) {
RefCostCenterDao costCenterDao = createRefCostCenterDao(em);
List<RefCostCenter>mList = costCenterDao.getCostCentersInTx();
GenericApiToDbMapper mapper = new GenericApiToDbMapper();
mList.forEach(m -> vmList.add(mapper.mapToViewModel(CostCenter.class, m)));
}
return vmList;
}
public List<Territory> getTerritories() {
List<Territory> vmList = new java.util.ArrayList<>();
try (AutoCloseEntityManager em = createEm()){
RefTerritoryDao territoryDao = createRefTerritoryDao(em);
List<RefTerritory>mList = territoryDao.getTerritoriesInTx();
GenericApiToDbMapper mapper = new GenericApiToDbMapper();
mList.forEach(m -> vmList.add(mapper.mapToViewModel(Territory.class, m)));
}
return vmList;
}
public UserSettings getUserSettings(String username, String settingType) throws HttpStatusException{
UserSettings userSettings = new UserSettings();
try (AutoCloseEntityManager em = createEm()) {
TblUserSettingsDao userSettingsDao = createRefUserSettingsDao(em);
TblUserSettings tblUserSettings = userSettingsDao.getUserSettingsBySettingType(username, settingType);
GenericApiToDbMapper mapper = new GenericApiToDbMapper();
userSettings = mapper.mapToViewModel(UserSettings.class,tblUserSettings);
}
catch(HttpStatusException e) {
logger.error("getUserSettings", e);
throw new HttpStatusException(org.apache.http.HttpStatus.SC_NOT_FOUND, e.getMessage());
}
return userSettings;
}
public UserSettings storeUserSettings(String changeUser, UserSettings userSettings) throws HttpStatusException{
TblUserSettings tblUsDb = new TblUserSettings();
GenericApiToDbMapper mapper = new GenericApiToDbMapper();
TblUserSettings tblUserSettings = mapper.mapFromViewModel(TblUserSettings.class, userSettings);
tblUserSettings.setModUser(changeUser);
tblUserSettings.setModDate(Date.from(Instant.now()));
try (AutoCloseEntityManager em = createEm()) {
TblUserSettingsDao userSettingsDao = createRefUserSettingsDao(em);
TblUserSettings tblDb = userSettingsDao.getUserSettingsBySettingType(changeUser, userSettings.getSettingType());
if(tblDb.getId() != null){
// entity should exist before it is updated
userSettingsDao.getEM().getTransaction().begin();
tblUsDb = userSettingsDao.updateUserSettingsInDB(tblUserSettings, tblDb);
userSettingsDao.getEM().getTransaction().commit();
}
else{
userSettingsDao.getEM().getTransaction().begin();
tblUsDb = userSettingsDao.createUserSettingsInDb(changeUser, tblUserSettings);
userSettingsDao.getEM().getTransaction().commit();
}
}
catch (HttpStatusException e) {
logger.error("Error in storeUserSettings", e);
throw new HttpStatusException(HttpStatus.INTERNAL_SERVER_ERROR_500);
}
return mapper.mapToViewModel(UserSettings.class, tblUsDb);
}
public BackendSettings getBackendSettings() {
ResourceLoaderBase loaderBase = new ResourceLoaderBase();
String backendSettingsString = loaderBase.loadFromPath("./backendSettings.json");
return getGson().fromJson(backendSettingsString, BackendSettings.class);
}
protected RefBranchDao createRefBranchDao(EntityManager em) {
return new RefBranchDao(em);
}
protected RefBranchLevelDao createRefBranchLevelDao(EntityManager em) { return new RefBranchLevelDao(em); }
protected RefGmStatusDao createRefGmStatusDao(EntityManager em) {
return new RefGmStatusDao(em);
}
protected RefCostCenterDao createRefCostCenterDao(EntityManager em) {
return new RefCostCenterDao(em);
}
protected RefTerritoryDao createRefTerritoryDao(EntityManager em) { return new RefTerritoryDao(em); }
protected TblUserSettingsDao createRefUserSettingsDao(EntityManager em) { return new TblUserSettingsDao(em); }
protected AutoCloseEntityManager createEm() {
return new AutoCloseEntityManager(EntityHelper.getEMF().createEntityManager());
}
}