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 javax.servlet.http.HttpServletResponse;
import com.bmc.arsys.api.Value; import com.bmc.arsys.api.Value;
import static org.mockito.ArgumentMatchers.startsWith;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
@ -30,73 +28,64 @@ import java.util.List;
@Component @Component
public class RequestInterceptor implements HandlerInterceptor { public class RequestInterceptor implements HandlerInterceptor {
private RemedyJavaAPI api; 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 Logger logger = LogManager.getLogger("application");
private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private static final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
throws Exception {
api = new RemedyJavaAPI(); api = new RemedyJavaAPI();
String currentDateTime = LocalDateTime.now().format(dateTimeFormatter); String currentDateTime = LocalDateTime.now().format(dateTimeFormatter);
long transactionId = System.currentTimeMillis(); long transactionId = System.currentTimeMillis();
String out = String.format("Transaction ID = %d %s - handling request: %s", transactionId, currentDateTime, String out = String.format("Transaction ID = %d %s - handling request: %s", transactionId, currentDateTime, request.getRequestURI());
request.getRequestURI());
logger.info(out); logger.info(out);
return true; return true;
} }
@Override @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
throws Exception {
if (!"POST".equalsIgnoreCase(request.getMethod()) || !(handler instanceof HandlerMethod)) { if (!"POST".equalsIgnoreCase(request.getMethod()) || !(handler instanceof HandlerMethod)) {
return; return;
} }
long transactionId = System.currentTimeMillis(); long transactionId = System.currentTimeMillis();
Query entry = null;
Object requestBody = request.getAttribute("requestBody"); Object requestBody = request.getAttribute("requestBody");
String formName = (String) request.getAttribute("formName"); String formName = getValidatedField((String) request.getAttribute("formName"), "Default Form");
String entryId = (String) request.getAttribute("entryId");
int status = (ex == null) ? 3 : 2; int status = (ex == null) ? 3 : 2;
// Retrieve the list of field values from the request attribute List<String> listOfFieldValues = getFieldValues(request);
List<String> listOfFieldValues = (List<String>) request.getAttribute("listOfFieldValues"); String fieldValueJson = convertFieldValuesToJson(listOfFieldValues);
if (listOfFieldValues != null) { Query entry = 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();
if (requestBody != null) {
if (requestBody instanceof ChangeUpdateRequest) { 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) { } 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) { } 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) { } 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) { } 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) { } 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) { } 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) { } 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) { } 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) { } else if (requestBody instanceof EditUserPreferencesRequest) {
entry = buildQueryEntry(transactionId, "Edit User Preferences", formName, "", getAssignedTo(), status, "?", fieldValueJson); entry = buildQueryEntry(transactionId, "Edit User Preferences", formName, "", getAssignedTo(), status, "?", fieldValueJson);
} }
@ -105,25 +94,51 @@ public void afterCompletion(HttpServletRequest request, HttpServletResponse resp
api.createEntry(entry); api.createEntry(entry);
} }
} }
}
private Query buildQueryEntry(long transactionId, String actionType, String affectedForm, String changeNr, String assignedTo, int status, String requestId, String fieldValueJson) { if (ex != null) {
return new Query.QueryBuilder(form) logger.error("Exception occurred during afterCompletion: ", ex);
.addFieldValue("AssignedTo", 4, new Value(assignedTo)) }
}
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("Status", 7, new Value(status))
.addFieldValue("TransactionID", 666000000, new Value(transactionId)) .addFieldValue("TransactionID", 666000000, new Value(transactionId))
.addFieldValue("FieldValue", 666000001, new Value(fieldValueJson)) .addFieldValue("FieldValue", 666000001, new Value(getValidatedField(fieldValueJson, "")))
.addFieldValue("FormIDs", 666000002, new Value(requestId)) .addFieldValue("FormIDs", 666000002, new Value(getValidatedField(requestId, "")))
.addFieldValue("ActionType", 666000003, new Value(actionType)) .addFieldValue("ActionType", 666000003, new Value(getValidatedField(actionType, "")))
.addFieldValue("AffectedForm", 666000004, new Value(affectedForm)) .addFieldValue("AffectedForm", 666000004, new Value(getValidatedField(affectedForm, "")))
.addFieldValue("TicketID", 666000005, new Value(changeNr)) .addFieldValue("TicketID", 666000005, new Value(getValidatedField(changeNr, "")))
.build(); .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) { private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) { 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) { private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) { 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) { private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) { 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) { private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) { 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 // Print out the field IDs and values
for (var entry : query.getFieldValues()) { for (var entry : query.getFieldValues()) {
listOfFieldValues.add(entry.getFieldId() + ": " + entry.getValue()); listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue());
} }
return remedyJavaAPI.createEntry(query); return remedyJavaAPI.createEntry(query);