package com.nttdata.calender.presets; import java.util.ArrayList; import java.util.List; import org.json.JSONObject; 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; private ArrayList listOfFieldValues; @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<>(); this.listOfFieldValues = new ArrayList<>(); //api.impersonateUser("WuiQualityKV"); } /** * Returns the list of field values. * * @return listOfFieldValues */ public List getListOfFieldValues() { return new ArrayList<>(listOfFieldValues); // Return a copy to ensure immutability } 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 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 String savePreset(Preset request) throws ARException, NotFoundError { listOfFieldValues.clear(); var saveQuery = new Query.QueryBuilder(formDefault) .addFieldValue("FilterPresetName", 364000001, new Value(request.getName())) .addFieldValue("FilterPresetDefinition", 364000002, new Value(request.getDefinition())) .build(); collectFieldValues(saveQuery); // Collect field values return api.createEntry(saveQuery); } public boolean selectPreset(SelectPresetRequest guid) throws ARException { listOfFieldValues.clear(); var queryP = new Query.QueryBuilder(formUserPref) .addFieldValue("GUID", 364000001, new Value(guid.getGuid())).build(); collectFieldValues(queryP); // Collect field values 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 String updatePreset(UpdatePresetRequest request) throws ARException { listOfFieldValues.clear(); var queryPresets = new Query.QueryBuilder(formDefault) .addFieldValue("Definition", 364000002, new Value(request.getDefinition())).build(); collectFieldValues(queryPresets); // Collect field values var preset = api.queryFieldsById("\'179\'==\"" + request.getId() + "\"", queryPresets.getFieldIds(), formDefault, null, 0, 0).get(0); return api.modifyEntry(preset.getEntryId(), queryPresets); } public String renamePreset(RenamePresetRequest request) throws ARException { listOfFieldValues.clear(); 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); collectFieldValues(queryPresets); return api.modifyEntry(preset.getEntryId(), queryPresets); } public String editUserPreferences(EditUserPreferencesRequest request) throws ARException { listOfFieldValues.clear(); 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(); collectFieldValues(queryUserPreferences); var preferences = api .queryFieldsById("\'2\'==\"" + api.getUser() + "\"", queryUserPreferences.getFieldIds(), formUserPref, null, 0, 0) .get(0); return api.modifyEntry(preferences.getEntryId(), queryUserPreferences); } public void allPresets() throws ARException, NotFoundError { var entries = api.queryFieldsById( "\'2\'==\"" + api.getUser() + "\" OR \'364000004\'!=NULL OR \'364000003\'!=NULL", defQuery.getFieldIds(), formDefault, null, 0, 0); if (entries.isEmpty() || entries == null) { throw new NotFoundError("No presets found in this context"); } for (var v : entries) { var isSystem = v.get(defQuery.getFieldId("isSystemDefault")); presets.add(new Preset(v.get(defQuery.getFieldId("InstanceId")).toString(), v.get(defQuery.getFieldId("Name")).toString(), v.get(defQuery.getFieldId("Definition")).toString(), isSystem.toString() != null && !isSystem.toString().isEmpty() ? "System" : "User")); } } public String deletePreset(DeletePresetRequest request) throws ARException { var entries = api.queryFieldsById("\'179\'==\"" + request.getId() + "\"", null, formDefault, null, 0, 0) .get(0); var entryid = 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); return entryid; } private void collectFieldValues(Query query) { for (var entry : query.getFieldValues()) { listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue()); } } public List getAll() throws NotFoundError, ARException { allPresets(); return this.presets; } }