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,100 +28,117 @@ 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;
}
if (!"POST".equalsIgnoreCase(request.getMethod()) || !(handler instanceof HandlerMethod)) {
return;
long transactionId = System.currentTimeMillis();
Object requestBody = request.getAttribute("requestBody");
String formName = getValidatedField((String) request.getAttribute("formName"), "Default Form");
int status = (ex == null) ? 3 : 2;
List<String> listOfFieldValues = getFieldValues(request);
String fieldValueJson = convertFieldValuesToJson(listOfFieldValues);
Query entry = null;
if (requestBody != null) {
if (requestBody instanceof ChangeUpdateRequest) {
ChangeUpdateRequest body = (ChangeUpdateRequest) requestBody;
entry = buildQueryEntry(transactionId, "Date change", formName, body.getChangeNr(), getAssignedTo(), status, body.getResourceId(), fieldValueJson);
} else if (requestBody instanceof StateChangeRequest) {
StateChangeRequest body = (StateChangeRequest) requestBody;
entry = buildQueryEntry(transactionId, "State transition", formName, body.getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof ImplementerUpdateRequest) {
ImplementerUpdateRequest body = (ImplementerUpdateRequest) requestBody;
entry = buildQueryEntry(transactionId, "Implementer Update", formName, body.getPkgId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof ApprovalUpdateRequest) {
ApprovalUpdateRequest body = (ApprovalUpdateRequest) requestBody;
entry = buildQueryEntry(transactionId, "Approval Update", formName, body.getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof Preset) {
Preset body = (Preset) requestBody;
entry = buildQueryEntry(transactionId, "Save Preset", formName, body.getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof SelectPresetRequest) {
SelectPresetRequest body = (SelectPresetRequest) requestBody;
entry = buildQueryEntry(transactionId, "Select Preset", formName, body.getGuid(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof UpdatePresetRequest) {
UpdatePresetRequest body = (UpdatePresetRequest) requestBody;
entry = buildQueryEntry(transactionId, "Update Preset", formName, body.getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof DeletePresetRequest) {
DeletePresetRequest body = (DeletePresetRequest) requestBody;
entry = buildQueryEntry(transactionId, "Delete Preset", formName, body.getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof RenamePresetRequest) {
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);
}
if (entry != null) {
api.createEntry(entry);
}
}
if (ex != null) {
logger.error("Exception occurred during afterCompletion: ", ex);
}
}
long transactionId = System.currentTimeMillis();
Query entry = null;
private List<String> getFieldValues(HttpServletRequest request) {
return (List<String>) request.getAttribute("listOfFieldValues");
}
Object requestBody = request.getAttribute("requestBody");
String formName = (String) request.getAttribute("formName");
String entryId = (String) request.getAttribute("entryId");
int status = (ex == null) ? 3 : 2;
private String convertFieldValuesToJson(List<String> fieldValues) {
if (fieldValues == null) {
return "";
}
// Retrieve the list of field values from the request attribute
List<String> listOfFieldValues = (List<String>) request.getAttribute("listOfFieldValues");
if (listOfFieldValues != null) {
StringBuilder fieldValueString = new StringBuilder("{\n");
for (String field : listOfFieldValues) {
fieldValueString.append("\t\"").append(field).append("\", \n");
StringBuilder fieldValueString = new StringBuilder();
for (String field : fieldValues) {
fieldValueString.append("\"").append(field).append("\", \n");
}
// Remove the last comma and space
if (fieldValueString.length() > 1) {
if (fieldValueString.length() >= 1) {
fieldValueString.setLength(fieldValueString.length() - 2);
}
fieldValueString.append("\n}");
String fieldValueJson = fieldValueString.toString();
return fieldValueString.toString();
}
if (requestBody instanceof ChangeUpdateRequest) {
entry = buildQueryEntry(transactionId, "Date change", formName, ((ChangeUpdateRequest) requestBody).getChangeNr(), getAssignedTo(), status, ((ChangeUpdateRequest) requestBody).getResourceId(), fieldValueJson);
} else if (requestBody instanceof StateChangeRequest) {
entry = buildQueryEntry(transactionId, "State transition", formName, ((StateChangeRequest) requestBody).getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof ImplementerUpdateRequest) {
entry = buildQueryEntry(transactionId, "Implementer Update", formName, ((ImplementerUpdateRequest) requestBody).getPkgId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof ApprovalUpdateRequest) {
entry = buildQueryEntry(transactionId, "Approval Update", formName, ((ApprovalUpdateRequest) requestBody).getChangeNr(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof Preset) {
entry = buildQueryEntry(transactionId, "Save Preset", formName, ((Preset) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof SelectPresetRequest) {
entry = buildQueryEntry(transactionId, "Select Preset", formName, ((SelectPresetRequest) requestBody).getGuid(), getAssignedTo(), status,"?", fieldValueJson);
} else if (requestBody instanceof UpdatePresetRequest) {
entry = buildQueryEntry(transactionId, "Update Preset", formName, ((UpdatePresetRequest) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof DeletePresetRequest) {
entry = buildQueryEntry(transactionId, "Delete Preset", formName, ((DeletePresetRequest) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof RenamePresetRequest) {
entry = buildQueryEntry(transactionId, "Rename Preset", formName, ((RenamePresetRequest) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson);
} else if (requestBody instanceof EditUserPreferencesRequest) {
entry = buildQueryEntry(transactionId, "Edit User Preferences", formName, "", getAssignedTo(), status, "?", fieldValueJson);
}
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(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();
}
if (entry != null) {
api.createEntry(entry);
}
private String getAssignedTo() {
return getValidatedField(api.getUser(), "");
}
private String getValidatedField(String field, String defaultValue) {
return (field == null || field.isEmpty()) ? defaultValue : field;
}
}
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))
.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))
.build();
}
private String getAssignedTo() {
String assignedTo = api.getUser();
return (assignedTo == null || assignedTo.isEmpty()) ? "Placeholder User" : assignedTo;
}
}

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);