251 lines
12 KiB
Java
251 lines
12 KiB
Java
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<Preset> presets;
|
|
private ArrayList<String> 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<String> 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<Preset> getAll() throws NotFoundError, ARException {
|
|
allPresets();
|
|
return this.presets;
|
|
}
|
|
|
|
}
|