diff --git a/backend/src/main/java/com/nttdata/calender/DateConverter.java b/backend/src/main/java/com/nttdata/calender/DateConverter.java index 8256822..19c953b 100644 --- a/backend/src/main/java/com/nttdata/calender/DateConverter.java +++ b/backend/src/main/java/com/nttdata/calender/DateConverter.java @@ -3,7 +3,6 @@ package com.nttdata.calender; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; -import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.TimeZone; diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index a1455d6..6b7c5a7 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -1,10 +1,12 @@ package com.nttdata.calender.api; import java.util.ArrayList; +import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.checkerframework.common.util.report.qual.ReportCall; +import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; 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.PlanTimes; 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.StateChange; import com.nttdata.calender.states.StateChangeRequest; @@ -294,6 +304,76 @@ public class KalenderRestController { return implementer.get(request); } + @CrossOrigin("*") + @PostMapping("/api/savePreset") + @ResponseBody + public List 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 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 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 getAllPresets() throws NotFoundError, ARException { + Presets presets = new Presets(javaAPI); + return presets.getAll(); + } + /** * Logs the received request with the endpoint and request body. * 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 d54850e..b956166 100644 --- a/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java +++ b/backend/src/main/java/com/nttdata/calender/api/RemedyJavaAPI.java @@ -47,6 +47,7 @@ public class RemedyJavaAPI { server.setPort(50000); this.connect(); + // TODO: move to APIApplication.java or State.java - see where it fits State.getInstance().queryState(this); SupportGroup.getInstance().querySupportGroups(this); @@ -136,6 +137,25 @@ public class RemedyJavaAPI { 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 * selected entry with the values provided in the query. @@ -331,4 +351,7 @@ public class RemedyJavaAPI { } } + public boolean isAdministrator() throws ARException { + return server.isAdministrator(); + } } \ No newline at end of file diff --git a/backend/src/main/java/com/nttdata/calender/changes/Change.java b/backend/src/main/java/com/nttdata/calender/changes/Change.java index 12ed06c..8bbbb66 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/Change.java +++ b/backend/src/main/java/com/nttdata/calender/changes/Change.java @@ -90,6 +90,8 @@ public class Change { this.queryChange.getFormName(), sort, request.getSliceStart(), request.getSliceEnd()); + + System.out.println(qualifier); // "\'1000000182\'!=\".\"" var entriesSize = api.getFormSize(qualifier, this.queryChange.getFormName()); var changes = new ArrayList(); @@ -151,7 +153,9 @@ public class Change { changes.add(change); } + System.out.println(entries.size()); api.freeImpersonatedUser(); + return new ChangeResponse(entriesSize, changes); } diff --git a/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java b/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java index 1dd82d8..a534a17 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java +++ b/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java @@ -1,14 +1,8 @@ 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.nttdata.calender.api.Query; -import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.changes.query.Filter; import com.nttdata.calender.changes.query.FilterElement; import com.nttdata.calender.changes.query.Sort; diff --git a/backend/src/main/java/com/nttdata/calender/presets/DeletePresetRequest.java b/backend/src/main/java/com/nttdata/calender/presets/DeletePresetRequest.java new file mode 100644 index 0000000..9abdd27 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/DeletePresetRequest.java @@ -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; + } + +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/EditUserPreferencesRequest.java b/backend/src/main/java/com/nttdata/calender/presets/EditUserPreferencesRequest.java new file mode 100644 index 0000000..a5c7c8f --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/EditUserPreferencesRequest.java @@ -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; + } + +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/Preset.java b/backend/src/main/java/com/nttdata/calender/presets/Preset.java new file mode 100644 index 0000000..f848892 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/Preset.java @@ -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; + } + +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/Presets.java b/backend/src/main/java/com/nttdata/calender/presets/Presets.java new file mode 100644 index 0000000..b5faba0 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/Presets.java @@ -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 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 getAll() throws NotFoundError, ARException { + allPresets(); + return this.presets; + } + +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/PresetsGetResponse.java b/backend/src/main/java/com/nttdata/calender/presets/PresetsGetResponse.java new file mode 100644 index 0000000..5ff174a --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/PresetsGetResponse.java @@ -0,0 +1,44 @@ +package com.nttdata.calender.presets; + +import java.util.ArrayList; +import java.util.List; + +public class PresetsGetResponse { + private List presets; + private String selectedPreset; + private UserPreferences userPreferences; + + public PresetsGetResponse(List list, String selectedPresets, UserPreferences userPreferences) { + this.presets = new ArrayList<>(); + this.selectedPreset = selectedPresets; + this.userPreferences = userPreferences; + } + + public PresetsGetResponse() { + } + + public List getPresets() { + return this.presets; + } + + public void setPresets(List 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; + } + +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/RenamePresetRequest.java b/backend/src/main/java/com/nttdata/calender/presets/RenamePresetRequest.java new file mode 100644 index 0000000..61639a5 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/RenamePresetRequest.java @@ -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; + } + +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/SelectPresetRequest.java b/backend/src/main/java/com/nttdata/calender/presets/SelectPresetRequest.java new file mode 100644 index 0000000..f234a13 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/SelectPresetRequest.java @@ -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; + } +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/UpdatePresetRequest.java b/backend/src/main/java/com/nttdata/calender/presets/UpdatePresetRequest.java new file mode 100644 index 0000000..9d992c6 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/UpdatePresetRequest.java @@ -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; + } + +} diff --git a/backend/src/main/java/com/nttdata/calender/presets/UserPreferences.java b/backend/src/main/java/com/nttdata/calender/presets/UserPreferences.java new file mode 100644 index 0000000..8041ab0 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/presets/UserPreferences.java @@ -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; + } + +} 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 3ead15a..d9da69e 100644 --- a/backend/src/main/java/com/nttdata/calender/supportgroup/SupportGroup.java +++ b/backend/src/main/java/com/nttdata/calender/supportgroup/SupportGroup.java @@ -15,6 +15,7 @@ import com.nttdata.calender.errorhandling.ErrorTypes.NotFoundError; */ public class SupportGroup { 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 ArrayList supportGroups; private SupportGroupGetResponse userSupportGroup; @@ -43,24 +44,42 @@ public class SupportGroup { * @throws NotFoundError if no support groups are found in this context. */ 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("SupportGroupId", 1) + .addFieldId("SupportGroupId", 1000000079) .build(); - this.supportGroups = api - .queryFieldsById("\'Support Group ID\' != \"\"", 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)); + System.out.println(api.isAdministrator()); + + if (api.isAdministrator()) { + this.supportGroups = api + .queryFieldsById("\'4\' != \"_\"", 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)); + } 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()) { throw new NotFoundError("No support groups found in this context"); } + api.freeImpersonatedUser(); } /**