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,100 +28,117 @@ 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)) {
return;
}
if (!"POST".equalsIgnoreCase(request.getMethod()) || !(handler instanceof HandlerMethod)) { long transactionId = System.currentTimeMillis();
return; 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(); private List<String> getFieldValues(HttpServletRequest request) {
Query entry = null; return (List<String>) request.getAttribute("listOfFieldValues");
}
Object requestBody = request.getAttribute("requestBody"); private String convertFieldValuesToJson(List<String> fieldValues) {
String formName = (String) request.getAttribute("formName"); if (fieldValues == null) {
String entryId = (String) request.getAttribute("entryId"); return "";
int status = (ex == null) ? 3 : 2; }
// Retrieve the list of field values from the request attribute StringBuilder fieldValueString = new StringBuilder();
List<String> listOfFieldValues = (List<String>) request.getAttribute("listOfFieldValues"); for (String field : fieldValues) {
fieldValueString.append("\"").append(field).append("\", \n");
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 // Remove the last comma and space
if (fieldValueString.length() > 1) { if (fieldValueString.length() >= 1) {
fieldValueString.setLength(fieldValueString.length() - 2); fieldValueString.setLength(fieldValueString.length() - 2);
} }
fieldValueString.append("\n}");
String fieldValueJson = fieldValueString.toString(); return fieldValueString.toString();
}
if (requestBody instanceof ChangeUpdateRequest) { private Query buildQueryEntry(long transactionId, String actionType, String affectedForm, String changeNr, String assignedTo, int status, String requestId, String fieldValueJson) {
entry = buildQueryEntry(transactionId, "Date change", formName, ((ChangeUpdateRequest) requestBody).getChangeNr(), getAssignedTo(), status, ((ChangeUpdateRequest) requestBody).getResourceId(), fieldValueJson); return new Query.QueryBuilder(FORM_NAME)
} else if (requestBody instanceof StateChangeRequest) { .addFieldValue("AssignedTo", 4, new Value(getValidatedField(assignedTo, "")))
entry = buildQueryEntry(transactionId, "State transition", formName, ((StateChangeRequest) requestBody).getChangeNr(), getAssignedTo(), status, "?", fieldValueJson); .addFieldValue("Status", 7, new Value(status))
} else if (requestBody instanceof ImplementerUpdateRequest) { .addFieldValue("TransactionID", 666000000, new Value(transactionId))
entry = buildQueryEntry(transactionId, "Implementer Update", formName, ((ImplementerUpdateRequest) requestBody).getPkgId(), getAssignedTo(), status, "?", fieldValueJson); .addFieldValue("FieldValue", 666000001, new Value(getValidatedField(fieldValueJson, "")))
} else if (requestBody instanceof ApprovalUpdateRequest) { .addFieldValue("FormIDs", 666000002, new Value(getValidatedField(requestId, "")))
entry = buildQueryEntry(transactionId, "Approval Update", formName, ((ApprovalUpdateRequest) requestBody).getChangeNr(), getAssignedTo(), status, "?", fieldValueJson); .addFieldValue("ActionType", 666000003, new Value(getValidatedField(actionType, "")))
} else if (requestBody instanceof Preset) { .addFieldValue("AffectedForm", 666000004, new Value(getValidatedField(affectedForm, "")))
entry = buildQueryEntry(transactionId, "Save Preset", formName, ((Preset) requestBody).getId(), getAssignedTo(), status, "?", fieldValueJson); .addFieldValue("TicketID", 666000005, new Value(getValidatedField(changeNr, "")))
} else if (requestBody instanceof SelectPresetRequest) { .build();
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);
}
if (entry != null) { private String getAssignedTo() {
api.createEntry(entry); 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) { 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);