main
Said Gedik 2024-07-08 16:30:38 +02:00
parent b6d01f27ec
commit d3ece6f4e9
6 changed files with 93 additions and 78 deletions

View File

@ -21,8 +21,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bmc.arsys.api.Value;
import static org.mockito.ArgumentMatchers.startsWith;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@ -30,73 +28,64 @@ import java.util.List;
@Component
public class RequestInterceptor implements HandlerInterceptor {
private RemedyJavaAPI api;
private final static String form = "ASF:CHG_CAL_Transactions";
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 {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
api = new RemedyJavaAPI();
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());
String out = String.format("Transaction ID = %d %s - handling request: %s", transactionId, currentDateTime, request.getRequestURI());
logger.info(out);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
if (!"POST".equalsIgnoreCase(request.getMethod()) || !(handler instanceof HandlerMethod)) {
return;
}
long transactionId = System.currentTimeMillis();
Query entry = null;
Object requestBody = request.getAttribute("requestBody");
String formName = (String) request.getAttribute("formName");
String entryId = (String) request.getAttribute("entryId");
String formName = getValidatedField((String) request.getAttribute("formName"), "Default Form");
int status = (ex == null) ? 3 : 2;
// Retrieve the list of field values from the request attribute
List<String> listOfFieldValues = (List<String>) request.getAttribute("listOfFieldValues");
List<String> listOfFieldValues = getFieldValues(request);
String fieldValueJson = convertFieldValuesToJson(listOfFieldValues);
if (listOfFieldValues != null) {
StringBuilder fieldValueString = new StringBuilder("{\n");
for (String field : listOfFieldValues) {
fieldValueString.append("\t\"").append(field).append("\", \n");
}
// Remove the last comma and space
if (fieldValueString.length() > 1) {
fieldValueString.setLength(fieldValueString.length() - 2);
}
fieldValueString.append("\n}");
String fieldValueJson = fieldValueString.toString();
Query entry = null;
if (requestBody != null) {
if (requestBody instanceof ChangeUpdateRequest) {
entry = buildQueryEntry(transactionId, "Date change", formName, ((ChangeUpdateRequest) requestBody).getChangeNr(), getAssignedTo(), status, ((ChangeUpdateRequest) requestBody).getResourceId(), fieldValueJson);
ChangeUpdateRequest body = (ChangeUpdateRequest) requestBody;
entry = buildQueryEntry(transactionId, "Date change", formName, body.getChangeNr(), getAssignedTo(), status, body.getResourceId(), fieldValueJson);
} else if (requestBody instanceof StateChangeRequest) {
entry = buildQueryEntry(transactionId, "State transition", formName, ((StateChangeRequest) requestBody).getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
StateChangeRequest body = (StateChangeRequest) requestBody;
entry = buildQueryEntry(transactionId, "State transition", formName, body.getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof ImplementerUpdateRequest) {
entry = buildQueryEntry(transactionId, "Implementer Update", formName, ((ImplementerUpdateRequest) requestBody).getPkgId(), getAssignedTo(), status, "?", fieldValueJson);
ImplementerUpdateRequest body = (ImplementerUpdateRequest) requestBody;
entry = buildQueryEntry(transactionId, "Implementer Update", formName, body.getPkgId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof ApprovalUpdateRequest) {
entry = buildQueryEntry(transactionId, "Approval Update", formName, ((ApprovalUpdateRequest) requestBody).getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
ApprovalUpdateRequest body = (ApprovalUpdateRequest) requestBody;
entry = buildQueryEntry(transactionId, "Approval Update", formName, body.getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof Preset) {
entry = buildQueryEntry(transactionId, "Save Preset", formName, ((Preset) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
Preset body = (Preset) requestBody;
entry = buildQueryEntry(transactionId, "Save Preset", formName, body.getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof SelectPresetRequest) {
entry = buildQueryEntry(transactionId, "Select Preset", formName, ((SelectPresetRequest) requestBody).getGuid(), getAssignedTo(), status,"?", fieldValueJson);
SelectPresetRequest body = (SelectPresetRequest) requestBody;
entry = buildQueryEntry(transactionId, "Select Preset", formName, body.getGuid(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof UpdatePresetRequest) {
entry = buildQueryEntry(transactionId, "Update Preset", formName, ((UpdatePresetRequest) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
UpdatePresetRequest body = (UpdatePresetRequest) requestBody;
entry = buildQueryEntry(transactionId, "Update Preset", formName, body.getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof DeletePresetRequest) {
entry = buildQueryEntry(transactionId, "Delete Preset", formName, ((DeletePresetRequest) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
DeletePresetRequest body = (DeletePresetRequest) requestBody;
entry = buildQueryEntry(transactionId, "Delete Preset", formName, body.getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof RenamePresetRequest) {
entry = buildQueryEntry(transactionId, "Rename Preset", formName, ((RenamePresetRequest) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
RenamePresetRequest body = (RenamePresetRequest) requestBody;
entry = buildQueryEntry(transactionId, "Rename Preset", formName, body.getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof EditUserPreferencesRequest) {
entry = buildQueryEntry(transactionId, "Edit User Preferences", formName, "", getAssignedTo(), status, "?", fieldValueJson);
}
@ -105,25 +94,51 @@ public void afterCompletion(HttpServletRequest request, HttpServletResponse resp
api.createEntry(entry);
}
}
}
private Query buildQueryEntry(long transactionId, String actionType, String affectedForm, String changeNr, String assignedTo, int status, String requestId, String fieldValueJson) {
return new Query.QueryBuilder(form)
.addFieldValue("AssignedTo", 4, new Value(assignedTo))
if (ex != null) {
logger.error("Exception occurred during afterCompletion: ", ex);
}
}
private List<String> getFieldValues(HttpServletRequest request) {
return (List<String>) request.getAttribute("listOfFieldValues");
}
private String convertFieldValuesToJson(List<String> fieldValues) {
if (fieldValues == null) {
return "";
}
StringBuilder fieldValueString = new StringBuilder();
for (String field : fieldValues) {
fieldValueString.append("\"").append(field).append("\", \n");
}
// Remove the last comma and space
if (fieldValueString.length() >= 1) {
fieldValueString.setLength(fieldValueString.length() - 2);
}
return fieldValueString.toString();
}
private Query buildQueryEntry(long transactionId, String actionType, String affectedForm, String changeNr, String assignedTo, int status, String requestId, String fieldValueJson) {
return new Query.QueryBuilder(FORM_NAME)
.addFieldValue("AssignedTo", 4, new Value(getValidatedField(assignedTo, "")))
.addFieldValue("Status", 7, new Value(status))
.addFieldValue("TransactionID", 666000000, new Value(transactionId))
.addFieldValue("FieldValue", 666000001, new Value(fieldValueJson))
.addFieldValue("FormIDs", 666000002, new Value(requestId))
.addFieldValue("ActionType", 666000003, new Value(actionType))
.addFieldValue("AffectedForm", 666000004, new Value(affectedForm))
.addFieldValue("TicketID", 666000005, new Value(changeNr))
.addFieldValue("FieldValue", 666000001, new Value(getValidatedField(fieldValueJson, "")))
.addFieldValue("FormIDs", 666000002, new Value(getValidatedField(requestId, "")))
.addFieldValue("ActionType", 666000003, new Value(getValidatedField(actionType, "")))
.addFieldValue("AffectedForm", 666000004, new Value(getValidatedField(affectedForm, "")))
.addFieldValue("TicketID", 666000005, new Value(getValidatedField(changeNr, "")))
.build();
}
private String getAssignedTo() {
String assignedTo = api.getUser();
return (assignedTo == null || assignedTo.isEmpty()) ? "Placeholder User" : assignedTo;
}
}
private String getAssignedTo() {
return getValidatedField(api.getUser(), "");
}
private String getValidatedField(String field, String defaultValue) {
return (field == null || field.isEmpty()) ? defaultValue : field;
}
}

View File

@ -66,7 +66,7 @@ public class Approval {
private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) {
listOfFieldValues.add(entry.getFieldId() + ": " + entry.getValue());
listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue());
}
}

View File

@ -348,7 +348,7 @@ public class Change {
private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) {
listOfFieldValues.add(entry.getFieldId() + ": " + entry.getValue());
listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue());
}
}
}

View File

@ -68,7 +68,7 @@ public class Implementer {
private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) {
listOfFieldValues.add(entry.getFieldId() + ": " + entry.getValue());
listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue());
}
}

View File

@ -237,7 +237,7 @@ public class Presets {
private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) {
listOfFieldValues.add(entry.getFieldId() + ": " + entry.getValue());
listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue());
}
}

View File

@ -60,7 +60,7 @@ public class StateChange {
// Print out the field IDs and values
for (var entry : query.getFieldValues()) {
listOfFieldValues.add(entry.getFieldId() + ": " + entry.getValue());
listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue());
}
return remedyJavaAPI.createEntry(query);