diff --git a/backend/pom.xml b/backend/pom.xml index 7fd7d06..179e5dd 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -17,7 +17,23 @@ spring-boot-starter-parent 2.7.8 - + + + local + + true + + + local + + + + container + + container + + + 11 @@ -173,5 +189,6 @@ + diff --git a/backend/src/main/java/com/nttdata/calender/ApiApplication.java b/backend/src/main/java/com/nttdata/calender/ApiApplication.java index 8526a15..ce7cc80 100644 --- a/backend/src/main/java/com/nttdata/calender/ApiApplication.java +++ b/backend/src/main/java/com/nttdata/calender/ApiApplication.java @@ -8,10 +8,14 @@ import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import org.springframework.session.MapSessionRepository; +import javax.annotation.PostConstruct; @SpringBootApplication public class ApiApplication extends SpringBootServletInitializer { + // @org.springframework.beans.factory.annotation.Value("${greeting.message}") + // private String greetingMessage; + public static void main(String[] args) { SpringApplication.run(ApiApplication.class, args); } diff --git a/backend/src/main/java/com/nttdata/calender/ApplicationConfig.java b/backend/src/main/java/com/nttdata/calender/ApplicationConfig.java new file mode 100644 index 0000000..6b7be7b --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/ApplicationConfig.java @@ -0,0 +1,56 @@ +package com.nttdata.calender; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.stereotype.Service; + +import org.springframework.beans.factory.annotation.Value; + +/** + * Java API for Remedy + */ +@Service +public class ApplicationConfig { + + @Value("${rssoActive}") + private Boolean rssoActive; + + public Boolean getRssoActive() { + if(this.rssoActive==null) + return true; + + return rssoActive; + } + + @Value("${arserver}") + private String arserver; + + public String getArserver() { + return arserver; + } + + @Value("${arport}") + private Integer arport; + + public Integer getArport() { + return arport; + } + + @Value("${aruser}") + private String aruser; + + public String getAruser() { + return aruser; + } + + @Value("${arpassword}") + private String arpassword; + + public String getArpassword() { + return arpassword; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java b/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java index cebe13d..2189d13 100644 --- a/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java +++ b/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java @@ -24,6 +24,9 @@ import com.nttdata.calender.errorhandling.ErrorTypes.NotFoundError; import com.nttdata.calender.states.State; import com.nttdata.calender.supportgroup.SupportGroup; +import org.springframework.beans.factory.annotation.Autowired; +import com.nttdata.calender.ApplicationConfig; + /** * Java API for Remedy */ @@ -35,17 +38,24 @@ public class RemedyJavaAPI { private static Logger applicationLogger = LogManager.getLogger("application"); // TODO: work with form CTM:Support Group private static final String QUALSTR = "\'Request ID\' != \"\""; + private ApplicationConfig appConfig; + + // @org.springframework.beans.factory.annotation.Value("${greeting.message}") + // private String greetingMessage; /** * Sets up the Remedy API with the server and admin user/password. */ - public RemedyJavaAPI() throws ARException, NotFoundError { + + public RemedyJavaAPI(ApplicationConfig appConfig) throws ARException, NotFoundError { + this.appConfig=appConfig; + System.out.println(appConfig.getRssoActive()); server = new ARServerUser(); // server.setServer("itsm-app-dev.asfinag.at"); - server.setServer("itsm-app-dev-neu.asfinag.at"); - server.setUser("changecalender_integration"); - server.setPassword("VXrvLm4q#8P#MXthfZNc"); - server.setPort(46262); + server.setServer(this.appConfig.getArserver()); + server.setUser(this.appConfig.getAruser()); + server.setPassword(this.appConfig.getArpassword()); + server.setPort(this.appConfig.getArport()); // server.setPort(50000); this.connect(); diff --git a/backend/src/main/java/com/nttdata/calender/api/RequestInterceptor.java b/backend/src/main/java/com/nttdata/calender/api/RequestInterceptor.java index 6dd62e2..0d224f4 100644 --- a/backend/src/main/java/com/nttdata/calender/api/RequestInterceptor.java +++ b/backend/src/main/java/com/nttdata/calender/api/RequestInterceptor.java @@ -3,6 +3,7 @@ package com.nttdata.calender.api; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Component; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.HandlerInterceptor; @@ -27,14 +28,21 @@ import java.util.List; @Component public class RequestInterceptor implements HandlerInterceptor { + + + // @org.springframework.beans.factory.annotation.Value("${greeting.message}") + // private String greetingMessage; + + @Autowired private RemedyJavaAPI api; + private static final String FORM_NAME = "ASF:CHG_CAL_Transactions"; private static final Logger logger = LogManager.getLogger("application"); private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - api = new RemedyJavaAPI(); + //api = new RemedyJavaAPI(greetingMessage); String currentDateTime = LocalDateTime.now().format(dateTimeFormatter); long transactionId = System.currentTimeMillis(); String out = String.format("Transaction ID = %d %s - handling request: %s", transactionId, currentDateTime, request.getRequestURI()); diff --git a/backend/src/main/java/com/nttdata/calender/api/rsso/RssoInterceptor.java b/backend/src/main/java/com/nttdata/calender/api/rsso/RssoInterceptor.java index 8d7f562..73a9f4e 100644 --- a/backend/src/main/java/com/nttdata/calender/api/rsso/RssoInterceptor.java +++ b/backend/src/main/java/com/nttdata/calender/api/rsso/RssoInterceptor.java @@ -9,6 +9,8 @@ import org.springframework.web.servlet.HandlerInterceptor; import com.bmc.thirdparty.org.springframework.beans.factory.annotation.Autowired; +import com.nttdata.calender.ApplicationConfig; +import com.nttdata.calender.api.RemedyJavaAPI; /** * Interceptor for handling Rsso related operations. */ @@ -17,10 +19,15 @@ public class RssoInterceptor implements HandlerInterceptor { private final static boolean DEBUG = true; private final Rsso rsso; private static final Logger applicationLogger = LogManager.getLogger("application"); + private ApplicationConfig appConfig; + //EW env Fix + private final RemedyJavaAPI javaAPI; @Autowired - public RssoInterceptor(Rsso rsso) { + public RssoInterceptor(Rsso rsso, ApplicationConfig appConfig, RemedyJavaAPI javaAPI) { this.rsso = rsso; + this.appConfig=appConfig; + this.javaAPI=javaAPI; } /** @@ -39,7 +46,8 @@ public class RssoInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // Check if a session exists, create one if not - if (DEBUG) { + if (!this.appConfig.getRssoActive()) { + this.javaAPI.impersonateUser("WuiQualityKV"); return true; } diff --git a/backend/src/main/java/com/nttdata/calender/approval/Approval.java b/backend/src/main/java/com/nttdata/calender/approval/Approval.java index f843d82..5ab33bf 100644 --- a/backend/src/main/java/com/nttdata/calender/approval/Approval.java +++ b/backend/src/main/java/com/nttdata/calender/approval/Approval.java @@ -49,8 +49,8 @@ public class Approval { public String update(ApprovalUpdateRequest request) throws ARException { // Clear the list before processing a new request listOfFieldValues.clear(); - - remedyJavaAPI.impersonateUser("WuiQualityKV"); + + //remedyJavaAPI.impersonateUser("WuiQualityKV"); String action = "APPROVAL"; var queryUpdate = new Query.QueryBuilder("ASF:CHG_CAL_Interactions") diff --git a/backend/src/main/java/com/nttdata/calender/presets/Presets.java b/backend/src/main/java/com/nttdata/calender/presets/Presets.java index 8dac690..f2f646e 100644 --- a/backend/src/main/java/com/nttdata/calender/presets/Presets.java +++ b/backend/src/main/java/com/nttdata/calender/presets/Presets.java @@ -58,7 +58,7 @@ public class Presets { this.presets = new ArrayList<>(); this.listOfFieldValues = new ArrayList<>(); - api.impersonateUser("WuiQualityKV"); + //api.impersonateUser("WuiQualityKV"); } /** diff --git a/backend/src/main/java/com/nttdata/calender/supportgroup/SupportGroup.java b/backend/src/main/java/com/nttdata/calender/supportgroup/SupportGroup.java index e8972c4..b141862 100644 --- a/backend/src/main/java/com/nttdata/calender/supportgroup/SupportGroup.java +++ b/backend/src/main/java/com/nttdata/calender/supportgroup/SupportGroup.java @@ -51,7 +51,7 @@ public class SupportGroup { */ public void querySupportGroups(RemedyJavaAPI api) throws ARException, NotFoundError { - api.impersonateUser("WuiQualityKV"); + //api.impersonateUser("WuiQualityKV"); applicationLogger.info("\n\n\nRequest: querySupportGroups (Initial)\nUser: " + api.getUser() + "\nAdmin? " + (api.isAdministrator() ? "Yes" : "No")); @@ -112,7 +112,7 @@ public class SupportGroup { * @throws ARException if an error occurs during the query */ public void queryUserSupportGroup(RemedyJavaAPI api) throws ARException { - api.impersonateUser("WuiQualityKV"); + //api.impersonateUser("WuiQualityKV"); var querySupportGroups = new Query.QueryBuilder("CTM:Support Group Association") .addFieldId("SupportGroupId", 1000000079).build(); diff --git a/backend/src/main/resources/application-container.properties b/backend/src/main/resources/application-container.properties new file mode 100644 index 0000000..e9b09c7 --- /dev/null +++ b/backend/src/main/resources/application-container.properties @@ -0,0 +1 @@ +rssoActive=true \ No newline at end of file diff --git a/backend/src/main/resources/application-local.properties b/backend/src/main/resources/application-local.properties new file mode 100644 index 0000000..505dc81 --- /dev/null +++ b/backend/src/main/resources/application-local.properties @@ -0,0 +1,6 @@ +rssoActive=false +arserver=itsm-app-dev-neu.asfinag.at +# arserver=${test} +arport=46262 +aruser=changecalender_integration +arpassword=VXrvLm4q#8P#MXthfZNc \ No newline at end of file diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index c239ca1..3b79e14 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -1,3 +1,4 @@ #server.servlet.context-path=/test server.servlet.session.timeout=24h # server.port=${PROBE_PORT:8080} +spring.profiles.active=@spring.profiles.active@ diff --git a/frontend/src/app/ntt-gantt/ntt-gantt.component.ts b/frontend/src/app/ntt-gantt/ntt-gantt.component.ts index 7083546..99a6459 100644 --- a/frontend/src/app/ntt-gantt/ntt-gantt.component.ts +++ b/frontend/src/app/ntt-gantt/ntt-gantt.component.ts @@ -25,6 +25,8 @@ import { GanttModule, ResizeService } from '@syncfusion/ej2-angular-gantt'; import { DateAdapter } from '@angular/material/core'; import { MAT_DATE_LOCALE } from '@angular/material/core'; import * as WebFont from 'webfontloader'; // Verwende import * as +import { AppConfig } from 'src/environments/models/environment.model'; +import { APP_CONFIG } from '../app.config'; export const MY_DATE_FORMATS = { @@ -188,6 +190,7 @@ export class NttGanttComponent implements OnInit { public cancelButton: boolean = false; public reApproveButton: boolean = false; public implementerButton: boolean = false; + private config: AppConfig; @@ -200,7 +203,8 @@ export class NttGanttComponent implements OnInit { * @param dataService injects the dataService for data management and backend communication * @param matDialog injects the matDialog */ - constructor(public languageService: LanguageService, public dataService: DataService, public matDialog: MatDialog, private _snackBar: MatSnackBar, public errorService: ErrorService, private location: Location, private dateAdapter: DateAdapter) { + constructor(@Inject(APP_CONFIG) config: AppConfig, public languageService: LanguageService, public dataService: DataService, public matDialog: MatDialog, private _snackBar: MatSnackBar, public errorService: ErrorService, private location: Location, private dateAdapter: DateAdapter) { + this.config=config; this.initLanguge(true); } @@ -1026,7 +1030,7 @@ export class NttGanttComponent implements OnInit { args.milestoneColor = "#bababa"; } } else { - console.log(args); + // console.log(args); args.taskbarElement.innerHTML = null; args.taskbarElement.classlist = null; @@ -1043,6 +1047,8 @@ export class NttGanttComponent implements OnInit { * @param args event arguments from the syncfusion gantt chart. */ public taskbarEdited(args: any) { + console.log(args); + let data = args.data; if (args.data.taskData.isFixed !== false) { args.cancel = true; } else { @@ -1061,7 +1067,8 @@ export class NttGanttComponent implements OnInit { ); elem.scrollLeft = this.planTimeScrollLeft; } - + console.log(found); + this.ganttDefault.refresh(); }); } } @@ -1224,9 +1231,9 @@ export class NttGanttComponent implements OnInit { if (args.dialogModel) { args.cancel = true; if (args.rowData.taskData.resources[0].state == 0) { - window.open("https://itsm-"+environment+"-neu-smartit.asfinag.at/smartit/app/#/paketPV/" + args.rowData.taskData.resources[0].packageInstanceId, "_blank"); + window.open(this.config.consoleUrl + "/smartit/app/#/paketPV/" + args.rowData.taskData.resources[0].packageInstanceId, "_blank"); } else { - window.open("https://itsm-"+environment+"-neu-smartit.asfinag.at/smartit/app/#/changePV/" + args.rowData.taskData.resources[0].packageInstanceId, "_blank"); + window.open(this.config.consoleUrl + "/smartit/app/#/changePV/" + args.rowData.taskData.resources[0].packageInstanceId, "_blank"); } this.ganttDefault.hideSpinner(); } else { diff --git a/frontend/src/assets/environment.json b/frontend/src/assets/environment.json index a062946..d38abd3 100644 --- a/frontend/src/assets/environment.json +++ b/frontend/src/assets/environment.json @@ -1 +1 @@ -{"production":false,"rssoUrl":"http://orf.at","backendUrl":"http://localhost:8080/api"} \ No newline at end of file +{"production":false,"rssoUrl":"http://orf.at","backendUrl":"http://localhost:8080/api", "consoleUrl": "https://itsm-dev-neu-smartit.asfinag.at"} diff --git a/frontend/src/environments/environment.container.ts b/frontend/src/environments/environment.container.ts index 0d28b0b..46b5531 100644 --- a/frontend/src/environments/environment.container.ts +++ b/frontend/src/environments/environment.container.ts @@ -3,5 +3,6 @@ import { AppConfig } from './models/environment.model'; export const environment: AppConfig = { production: true, rssoUrl: "RSSO_URL", - backendUrl: "BACKEND_API_URL" + backendUrl: "BACKEND_API_URL", + consoleUrl: "CONSOLE_URL" }; diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts index 5413891..197be86 100644 --- a/frontend/src/environments/environment.ts +++ b/frontend/src/environments/environment.ts @@ -5,5 +5,6 @@ import { AppConfig } from './models/environment.model'; export const environment: AppConfig = { production: false, rssoUrl: "#", - backendUrl: "http://localhost:8080/api" -}; \ No newline at end of file + backendUrl: "http://localhost:8080/api", + consoleUrl: "https://itsm-dev-neu-smartit.asfinag.at" +}; diff --git a/frontend/src/environments/models/environment.model.ts b/frontend/src/environments/models/environment.model.ts index 32164a6..367df44 100644 --- a/frontend/src/environments/models/environment.model.ts +++ b/frontend/src/environments/models/environment.model.ts @@ -2,4 +2,5 @@ export interface AppConfig { production: boolean; rssoUrl: string; backendUrl: string; -} \ No newline at end of file + consoleUrl: string; +}