Merge branch 'Presets'

main
manueltauber 2023-10-17 14:22:02 +02:00
commit 066d72a3a8
15 changed files with 591 additions and 18 deletions

View File

@ -3,7 +3,6 @@ package com.nttdata.calender;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException; import java.time.format.DateTimeParseException;
import java.util.TimeZone; import java.util.TimeZone;

View File

@ -1,10 +1,12 @@
package com.nttdata.calender.api; package com.nttdata.calender.api;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.checkerframework.common.util.report.qual.ReportCall; import org.checkerframework.common.util.report.qual.ReportCall;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
@ -34,6 +36,14 @@ import com.nttdata.calender.packageType.PackageType;
import com.nttdata.calender.planTimes.CalendarWeek; import com.nttdata.calender.planTimes.CalendarWeek;
import com.nttdata.calender.planTimes.PlanTimes; import com.nttdata.calender.planTimes.PlanTimes;
import com.nttdata.calender.planTimes.PlanTimesRequest; import com.nttdata.calender.planTimes.PlanTimesRequest;
import com.nttdata.calender.presets.DeletePresetRequest;
import com.nttdata.calender.presets.EditUserPreferencesRequest;
import com.nttdata.calender.presets.Preset;
import com.nttdata.calender.presets.Presets;
import com.nttdata.calender.presets.PresetsGetResponse;
import com.nttdata.calender.presets.RenamePresetRequest;
import com.nttdata.calender.presets.SelectPresetRequest;
import com.nttdata.calender.presets.UpdatePresetRequest;
import com.nttdata.calender.states.State; import com.nttdata.calender.states.State;
import com.nttdata.calender.states.StateChange; import com.nttdata.calender.states.StateChange;
import com.nttdata.calender.states.StateChangeRequest; import com.nttdata.calender.states.StateChangeRequest;
@ -294,6 +304,76 @@ public class KalenderRestController {
return implementer.get(request); return implementer.get(request);
} }
@CrossOrigin("*")
@PostMapping("/api/savePreset")
@ResponseBody
public List<Preset> savePreset(@RequestBody Preset request)
throws ARException, ValidationError, NotFoundError {
Presets presets = new Presets(javaAPI);
presets.savePreset(request);
return presets.getAll();
}
@CrossOrigin("*")
@PostMapping("/api/selectPreset")
@ResponseBody
public boolean selectPreset(@RequestBody SelectPresetRequest guid) throws ARException,
NotFoundError {
Presets presets = new Presets(javaAPI);
return presets.selectPreset(guid);
}
@CrossOrigin("*")
@GetMapping("api/initPresets")
@ResponseBody
public Object initPresets() throws ARException, NotFoundError {
Presets presets = new Presets(javaAPI);
return presets.initPresets();
}
@CrossOrigin("*")
@PostMapping("api/updatePreset")
@ResponseBody
public List<Preset> updatePreset(@RequestBody UpdatePresetRequest request) throws NotFoundError, ARException {
Presets presets = new Presets(javaAPI);
presets.updatePreset(request);
return presets.getAll();
}
@CrossOrigin("*")
@PostMapping("api/deletePreset")
@ResponseBody
public Object deletePreset(@RequestBody DeletePresetRequest request) throws ARException, NotFoundError {
Presets presets = new Presets(javaAPI);
presets.deletePreset(request);
return presets.getAll();
}
@CrossOrigin
@PostMapping("api/renamePreset")
@ResponseBody
public List<Preset> renamePreset(@RequestBody RenamePresetRequest request) throws NotFoundError, ARException {
Presets presets = new Presets(javaAPI);
presets.renamePreset(request);
return presets.getAll();
}
@CrossOrigin("*")
@PostMapping("api/editUserPreferences")
@ResponseBody
public String editUserPreferences(@RequestBody EditUserPreferencesRequest request) throws ARException, NotFoundError {
Presets presets = new Presets(javaAPI);
return presets.editUserPreferences(request);
}
@CrossOrigin("*")
@GetMapping("/api/getAllPresets")
@ResponseBody
public List<Preset> getAllPresets() throws NotFoundError, ARException {
Presets presets = new Presets(javaAPI);
return presets.getAll();
}
/** /**
* Logs the received request with the endpoint and request body. * Logs the received request with the endpoint and request body.
* *

View File

@ -47,6 +47,7 @@ public class RemedyJavaAPI {
server.setPort(50000); server.setPort(50000);
this.connect(); this.connect();
// TODO: move to APIApplication.java or State.java - see where it fits // TODO: move to APIApplication.java or State.java - see where it fits
State.getInstance().queryState(this); State.getInstance().queryState(this);
SupportGroup.getInstance().querySupportGroups(this); SupportGroup.getInstance().querySupportGroups(this);
@ -136,6 +137,25 @@ public class RemedyJavaAPI {
return "Entry created successfully. ID: " + entryIdOut; return "Entry created successfully. ID: " + entryIdOut;
} }
public String deleteEntry(String formName, String entryId) throws ARException {
// Specify 0 for the deleteOption as mentioned in the documentation
int deleteOption = 0;
// Attempt to delete the entry
server.deleteEntry(formName, entryId, deleteOption);
// Check for any status or warnings after the deletion
var lastStatus = server.getLastStatus();
if (!lastStatus.isEmpty()) {
applicationLogger.warn("Warning after deleting entry: " + lastStatus);
return "Warning: " + lastStatus.toString();
}
applicationLogger.info("Entry with ID " + entryId + " deleted successfully from form " + formName);
return "Entry deleted successfully. ID: " + entryId;
}
/** /**
* Takes an entry ID and a {@link Query} object with values and updates the * Takes an entry ID and a {@link Query} object with values and updates the
* selected entry with the values provided in the query. * selected entry with the values provided in the query.
@ -331,4 +351,7 @@ public class RemedyJavaAPI {
} }
} }
public boolean isAdministrator() throws ARException {
return server.isAdministrator();
}
} }

View File

@ -90,6 +90,8 @@ public class Change {
this.queryChange.getFormName(), this.queryChange.getFormName(),
sort, request.getSliceStart(), sort, request.getSliceStart(),
request.getSliceEnd()); request.getSliceEnd());
System.out.println(qualifier); // "\'1000000182\'!=\".\""
var entriesSize = api.getFormSize(qualifier, this.queryChange.getFormName()); var entriesSize = api.getFormSize(qualifier, this.queryChange.getFormName());
var changes = new ArrayList<ChangeItem>(); var changes = new ArrayList<ChangeItem>();
@ -151,7 +153,9 @@ public class Change {
changes.add(change); changes.add(change);
} }
System.out.println(entries.size());
api.freeImpersonatedUser(); api.freeImpersonatedUser();
return new ChangeResponse(entriesSize, changes); return new ChangeResponse(entriesSize, changes);
} }

View File

@ -1,14 +1,8 @@
package com.nttdata.calender.changes; package com.nttdata.calender.changes;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.ArrayList;
import com.bmc.arsys.api.ARException;
import com.bmc.arsys.api.SortInfo; import com.bmc.arsys.api.SortInfo;
import com.nttdata.calender.api.Query; import com.nttdata.calender.api.Query;
import com.nttdata.calender.api.RemedyJavaAPI;
import com.nttdata.calender.changes.query.Filter; import com.nttdata.calender.changes.query.Filter;
import com.nttdata.calender.changes.query.FilterElement; import com.nttdata.calender.changes.query.FilterElement;
import com.nttdata.calender.changes.query.Sort; import com.nttdata.calender.changes.query.Sort;

View File

@ -0,0 +1,14 @@
package com.nttdata.calender.presets;
public class DeletePresetRequest {
private String id;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
}

View File

@ -0,0 +1,32 @@
package com.nttdata.calender.presets;
public class EditUserPreferencesRequest {
private int details;
private int view;
private String language;
public int getDetails() {
return this.details;
}
public void setDetails(int details) {
this.details = details;
}
public int getView() {
return this.view;
}
public void setView(int view) {
this.view = view;
}
public String getLanguage() {
return this.language;
}
public void setLanguage(String language) {
this.language = language;
}
}

View File

@ -0,0 +1,48 @@
package com.nttdata.calender.presets;
public class Preset {
private String id;
private String name;
private String definition;
private String presetType;
public Preset(String id, String name, String definition, String presetType) {
this.id = id;
this.name = name;
this.definition = definition;
this.presetType = presetType;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getDefinition() {
return this.definition;
}
public void setDefinition(String definition) {
this.definition = definition;
}
public String getPresetType() {
return this.presetType;
}
public void setPresetType(String presetType) {
this.presetType = presetType;
}
}

View File

@ -0,0 +1,214 @@
package com.nttdata.calender.presets;
import java.util.ArrayList;
import java.util.List;
import com.bmc.arsys.api.ARException;
import com.bmc.arsys.api.Value;
import com.bmc.thirdparty.org.springframework.beans.factory.annotation.Autowired;
import com.nttdata.calender.api.Query;
import com.nttdata.calender.api.RemedyJavaAPI;
import com.nttdata.calender.errorhandling.ErrorTypes.NotFoundError;
public class Presets {
private final static String formName = "ASF:CHG_CAL_UserPreferencesJoinFilterDefinitions";
private final static String formDefault = "ASF:CHG_CAL_FilterDefinitions";
private final static String formUserPref = "ASF:CHG_CAL_UserPreferences";
private Query query;
private Query defQuery;
private Query prefQuery;
private RemedyJavaAPI api;
private List<Preset> presets;
@Autowired
public Presets(RemedyJavaAPI api) throws ARException, NotFoundError {
this.api = api;
this.query = new Query.QueryBuilder(formName)
.addFieldId("RequestId", 6)
.addFieldId("InstanceId", 179)
.addFieldId("Status", 7)
.addFieldId("GUID", 364000001) // current active preset
.addFieldId("Details", 364000002)
.addFieldId("View", 364000003)
.addFieldId("Language", 364000004)
.addFieldId("Submitter", 2)
.addFieldId("Name", 364200001)
.addFieldId("Definition", 364200002)
.build();
this.defQuery = new Query.QueryBuilder(formDefault)
.addFieldId("Name", 364000001)
.addFieldId("Definition", 364000002)
.addFieldId("isSystemDefault", 364000004)
.addFieldId("isGlobal", 364000003)
.addFieldId("InstanceId", 179)
.build();
this.prefQuery = new Query.QueryBuilder(formUserPref)
.addFieldId("GUID", 364000001)
.addFieldId("Details", 364000002)
.addFieldId("View", 364000003)
.addFieldId("Language", 364000004)
.build();
this.presets = new ArrayList<>();
api.impersonateUser("ext_StanzPa");
}
public Object initPresets() throws ARException, NotFoundError {
PresetsGetResponse response = new PresetsGetResponse();
// SYSTEMDEFAULT
var sysdef = api.queryFieldsById("\'364000001\'==\"Systemdefault\"", defQuery.getFieldIds(),
formDefault, null, 0, 0).get(0);
String sysdefGUID = sysdef.get(defQuery.getFieldId("InstanceId")).toString();
// CHECK IF USER HAS PREFERENCES
var preference = api.queryFieldsById("\'2\'==\"" + api.getUser() + "\"", prefQuery.getFieldIds(),
formUserPref, null, 0, 0);
if (preference != null && !preference.isEmpty()) {
// CHECK IF PREFERENCE HAS GUID
var guid = preference.get(0).get(prefQuery.getFieldId("GUID"));
if (guid.toString() == null) {
// IF GUID IS NULL PUT SYSTEM DEFAULT INSIDE
System.out.println("GEHT REIN");
var queryPreferenceNewValue = new Query.QueryBuilder(formUserPref)
.addFieldValue("GUID", 364000001, new Value(sysdefGUID)).build();
var pref = api.queryFieldsById("\'2\'==\"" + api.getUser() + "\"",
queryPreferenceNewValue.getFieldIds(), formUserPref, null, 0, 0);
api.modifyEntry(pref.get(0).getEntryId(), queryPreferenceNewValue);
}
} else {
// IF USER HAS NO PREFERENCES CREATE NEW ENTRY WITH PREFERENCES AND SYSDEF GUID
createUserPreference(sysdefGUID);
}
preference = api.queryFieldsById("\'2\'==\"" + api.getUser() + "\"", prefQuery.getFieldIds(),
formUserPref, null, 0, 0);
// INIT ALL PRESETS
getAll();
response.setPresets(this.presets);
response.setSelectedPreset(preference.get(0).get(prefQuery.getFieldId("GUID")).toString());
response.setUserPreferences(
new UserPreferences(preference.get(0).get(prefQuery.getFieldId("Details")).toString(),
preference.get(0).get(prefQuery.getFieldId("View")).toString(),
preference.get(0).get(prefQuery.getFieldId("Language")).toString()));
return response;
}
public void createUserPreference(String guid) throws ARException {
var savePreference = new Query.QueryBuilder(formUserPref)
.addFieldValue("GUID", 364000001, new Value(guid))
.addFieldValue("Details", 364000002, new Value(1))
.addFieldValue("View", 364000003, new Value(1))
.addFieldValue("Language", 364000004, new Value("DE"))
.build();
api.createEntry(savePreference);
}
public void savePreset(Preset request) throws ARException, NotFoundError {
var saveQuery = new Query.QueryBuilder(formDefault)
.addFieldValue("FilterPresetName", 364000001, new Value(request.getName()))
.addFieldValue("FilterPresetDefinition", 364000002, new Value(request.getDefinition()))
.build();
api.createEntry(saveQuery);
}
public boolean selectPreset(SelectPresetRequest guid) throws ARException {
var queryP = new Query.QueryBuilder(formUserPref)
.addFieldValue("GUID", 364000001, new Value(guid.getGuid())).build();
var pref = api.queryFieldsById("\'2\'==\"" + api.getUser() + "\"", queryP.getFieldIds(), formUserPref,
null, 0,
0);
if (pref.isEmpty() || pref == null)
return false;
api.modifyEntry(pref.get(0).getEntryId(), queryP);
return true;
}
public void updatePreset(UpdatePresetRequest request) throws ARException {
var queryPresets = new Query.QueryBuilder(formDefault)
.addFieldValue("Definition", 364000002, new Value(request.getDefinition())).build();
var preset = api.queryFieldsById("\'179\'==\"" + request.getId() + "\"",
queryPresets.getFieldIds(), formDefault, null, 0, 0).get(0);
api.modifyEntry(preset.getEntryId(), queryPresets);
}
public void renamePreset(RenamePresetRequest request) throws ARException {
var queryPresets = new Query.QueryBuilder(formDefault)
.addFieldValue("Name", 364000001, new Value(request.getNewName())).build();
var preset = api.queryFieldsById("\'179\'==\"" + request.getId() + "\"",
queryPresets.getFieldIds(), formDefault, null, 0, 0).get(0);
api.modifyEntry(preset.getEntryId(), queryPresets);
}
public String editUserPreferences(EditUserPreferencesRequest request) throws ARException {
var queryUserPreferences = new Query.QueryBuilder(formUserPref)
.addFieldValue("Details", 364000002, new Value(request.getDetails()))
.addFieldValue("View", 364000003, new Value(request.getView()))
.addFieldValue("Language", 364000004, new Value(request.getLanguage()))
.build();
var preferences = api
.queryFieldsById("\'2\'==\"" + api.getUser() + "\"", queryUserPreferences.getFieldIds(),
formUserPref, null, 0, 0)
.get(0);
// bei falschen input parameter
if (preferences.isEmpty() || preferences == null)
return "Error";
api.modifyEntry(preferences.getEntryId(), queryUserPreferences);
return "Success";
}
public void allPresets() throws ARException, NotFoundError {
var entries = api.queryFieldsById("\'2\'==\"" + api.getUser() + "\"", defQuery.getFieldIds(),
formDefault,
null, 0,
0);
if (entries.isEmpty() || entries == null) {
throw new NotFoundError("No presets found in this context");
} else {
for (var v : entries) {
presets.add(new Preset(v.get(defQuery.getFieldId("InstanceId")).toString(),
v.get(defQuery.getFieldId("Name")).toString(),
v.get(defQuery.getFieldId("Definition")).toString(),
""));
}
}
}
public void deletePreset(DeletePresetRequest request) throws ARException {
var entries = api.queryFieldsById("\'179\'==\"" + request.getId() + "\"", null, formDefault, null, 0, 0)
.get(0);
api.deleteEntry(formDefault, entries.getEntryId());
// SYSTEMDEFAULT
var sysdef = api.queryFieldsById("\'364000001\'==\"Systemdefault\"", defQuery.getFieldIds(), formDefault, null, 0, 0).get(0);
String sysdefGUID = sysdef.get(defQuery.getFieldId("InstanceId")).toString();
// reset selected preset
SelectPresetRequest spr = new SelectPresetRequest();
spr.setGuid(sysdefGUID);
selectPreset(spr);
}
public List<Preset> getAll() throws NotFoundError, ARException {
allPresets();
return this.presets;
}
}

View File

@ -0,0 +1,44 @@
package com.nttdata.calender.presets;
import java.util.ArrayList;
import java.util.List;
public class PresetsGetResponse {
private List<Preset> presets;
private String selectedPreset;
private UserPreferences userPreferences;
public PresetsGetResponse(List<Preset> list, String selectedPresets, UserPreferences userPreferences) {
this.presets = new ArrayList<>();
this.selectedPreset = selectedPresets;
this.userPreferences = userPreferences;
}
public PresetsGetResponse() {
}
public List<Preset> getPresets() {
return this.presets;
}
public void setPresets(List<Preset> presets) {
this.presets = presets;
}
public String getSelectedPreset() {
return this.selectedPreset;
}
public void setSelectedPreset(String selectedPreset) {
this.selectedPreset = selectedPreset;
}
public UserPreferences getUserPreferences() {
return this.userPreferences;
}
public void setUserPreferences(UserPreferences userPreferences) {
this.userPreferences = userPreferences;
}
}

View File

@ -0,0 +1,28 @@
package com.nttdata.calender.presets;
public class RenamePresetRequest {
private String newName;
private String id;
public RenamePresetRequest(String newName, String id) {
this.newName = newName;
this.id = id;
}
public String getNewName() {
return this.newName;
}
public void setNewName(String newName) {
this.newName = newName;
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
}

View File

@ -0,0 +1,13 @@
package com.nttdata.calender.presets;
public class SelectPresetRequest {
private String guid;
public String getGuid() {
return guid;
}
public void setGuid(String guid) {
this.guid = guid;
}
}

View File

@ -0,0 +1,23 @@
package com.nttdata.calender.presets;
public class UpdatePresetRequest {
private String id;
private String definition;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getDefinition() {
return this.definition;
}
public void setDefinition(String definition) {
this.definition = definition;
}
}

View File

@ -0,0 +1,38 @@
package com.nttdata.calender.presets;
public class UserPreferences {
private String showDetails;
private String view;
private String language;
public UserPreferences(String showDetails, String view, String language) {
this.showDetails = showDetails;
this.view = view;
this.language = language;
}
public String getShowDetails() {
return this.showDetails;
}
public void setShowDetails(String showDetails) {
this.showDetails = showDetails;
}
public String getView() {
return this.view;
}
public void setView(String view) {
this.view = view;
}
public String getLanguage() {
return this.language;
}
public void setLanguage(String language) {
this.language = language;
}
}

View File

@ -15,6 +15,7 @@ import com.nttdata.calender.errorhandling.ErrorTypes.NotFoundError;
*/ */
public class SupportGroup { public class SupportGroup {
private static final String formName = "CTM:Support Group"; private static final String formName = "CTM:Support Group";
private static final String formAssoc = "CTM:Support Group Assoc LookUp";
private static final SupportGroup INSTANCE = new SupportGroup(); private static final SupportGroup INSTANCE = new SupportGroup();
private ArrayList<SupportGroupGetResponse> supportGroups; private ArrayList<SupportGroupGetResponse> supportGroups;
private SupportGroupGetResponse userSupportGroup; private SupportGroupGetResponse userSupportGroup;
@ -43,13 +44,18 @@ public class SupportGroup {
* @throws NotFoundError if no support groups are found in this context. * @throws NotFoundError if no support groups are found in this context.
*/ */
public void querySupportGroups(RemedyJavaAPI api) throws ARException, NotFoundError { public void querySupportGroups(RemedyJavaAPI api) throws ARException, NotFoundError {
var querySupportGroups = new Query.QueryBuilder(formName)
api.impersonateUser("ext_StanzPa");
var querySupportGroups = new Query.QueryBuilder(formAssoc)
.addFieldId("SupportGroup", 1000000015) .addFieldId("SupportGroup", 1000000015)
.addFieldId("SupportGroupId", 1) .addFieldId("SupportGroupId", 1000000079)
.build(); .build();
System.out.println(api.isAdministrator());
if (api.isAdministrator()) {
this.supportGroups = api this.supportGroups = api
.queryFieldsById("\'Support Group ID\' != \"\"", querySupportGroups.getFieldIds(), .queryFieldsById("\'4\' != \"_\"", querySupportGroups.getFieldIds(),
querySupportGroups.getFormName(), null, 0, 0) querySupportGroups.getFormName(), null, 0, 0)
.stream() .stream()
.map(entry -> new SupportGroupGetResponse( .map(entry -> new SupportGroupGetResponse(
@ -57,10 +63,23 @@ public class SupportGroup {
entry.get(querySupportGroups.getFieldId("SupportGroupId")).toString())) entry.get(querySupportGroups.getFieldId("SupportGroupId")).toString()))
.distinct() .distinct()
.collect(Collectors.toCollection(ArrayList::new)); .collect(Collectors.toCollection(ArrayList::new));
} else {
this.supportGroups = api
.queryFieldsById("\'4\' == \"" + api.getUser() + "\"", querySupportGroups.getFieldIds(),
querySupportGroups.getFormName(), null, 0, 0)
.stream()
.map(entry -> new SupportGroupGetResponse(
entry.get(querySupportGroups.getFieldId("SupportGroup")).toString(),
entry.get(querySupportGroups.getFieldId("SupportGroupId")).toString()))
.distinct()
.collect(Collectors.toCollection(ArrayList::new));
}
if (this.supportGroups.isEmpty()) { if (this.supportGroups.isEmpty()) {
throw new NotFoundError("No support groups found in this context"); throw new NotFoundError("No support groups found in this context");
} }
api.freeImpersonatedUser();
} }
/** /**