|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|