ChangeCalendar/backend/src/main/java/com/nttdata/calender/implementer/Implementer.java

116 lines
5.3 KiB
Java

package com.nttdata.calender.implementer;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.bmc.arsys.api.ARException;
import com.bmc.arsys.api.Value;
import com.nttdata.calender.api.Query;
import com.nttdata.calender.api.RemedyJavaAPI;
/**
* The Implementer class is a Spring component responsible for handling
* implementer related
* operations, such as updating implementers and retrieving implementer
* information.
*/
@Service
public class Implementer {
private RemedyJavaAPI remedyJavaAPI;
private static final String formName = "ASF:WI_TAS_Paket";
private ArrayList<String> listOfFieldValues;
/**
* Initialization of the Implementer class with autowiring of RemedyJavaAPI.
*
* @param remedyJavaAPI RemedyJavaAPI instance
*/
@Autowired
public Implementer(RemedyJavaAPI remedyJavaAPI) {
this.remedyJavaAPI = remedyJavaAPI;
this.listOfFieldValues = new ArrayList<>();
}
/**
* Returns the list of field values.
*
* @return listOfFieldValues
*/
public List<String> getListOfFieldValues() {
return new ArrayList<>(listOfFieldValues); // Return a copy to ensure immutability
}
/**
* Updates the implementer based on the ImplementerUpdateRequest.
*
* @param request ImplementerUpdateRequest object
* @return Entry creation result
* @throws ARException if an ARException occurs
*/
public String update(ImplementerUpdateRequest request) throws ARException {
// Clear the list before processing a new request
listOfFieldValues.clear();
var action = "SETCHGIMPLEMENTER";
var queryUpdate = new Query.QueryBuilder("ASF:CHG_CAL_Interactions")
.addFieldValue("ChangeNr", 666000002, request.getPkgIdValue())
.addFieldValue("Action", 666000001, new Value(action))
.addFieldValue("LoginId", 666000005, request.getLoginIdValue())
.build();
collectFieldValues(queryUpdate); // Collect field values
return this.remedyJavaAPI.createEntry(queryUpdate);
}
private void collectFieldValues(Query query) {
for (var entry : query.getFieldValues()) {
listOfFieldValues.add(entry.getFieldId() + "\": \"" + entry.getValue());
}
}
/**
* Retrieves all the implementers that are part of the support group of a
* specific change.
*
* @param request Specifies the change through the entryId
* @return ImplementerGetResponse containing the response
* @throws ARException when the entry is not found or there is no permission by
* the user
*/
// TODO: support group is not needed here - it's sufficient to have the entryId
// support group is retrieved through that
public ImplementerGetResponse get(ImplementerGetRequest request) throws ARException {
var query = new Query.QueryBuilder(formName)
.addFieldId("Company", 1000003228)
.addFieldId("SupportOrganization", 1000003227)
.addFieldId("SupportGroupName", 1000003229)
.build();
var assignmentInfos = remedyJavaAPI.getEntry(request.getEntryId(), query);
var qualAssoc = "(\'Company\' = \"" + assignmentInfos.get(query.getFieldId("Company")).toString()
+ "\" ) AND (\'Support Organization\' =\""
+ assignmentInfos.get(query.getFieldId("SupportOrganization")).toString()
+ "\" ) AND (\'Support Group Name\' = \""
+ assignmentInfos.get(query.getFieldId("SupportGroupName")).toString()
+ "\" ) AND (\'Status-SGP\' =\"Enabled\") AND (\'Status-SGA\' = \"Enabled\") AND (\'Assignment Availability\' = \"Yes\")";
var queryPerson = new Query.QueryBuilder("CTM:Support Group Assoc LookUp")
.addFieldId("PersonId", 1000000080)
.addFieldId("FullName", 1000000017)
.addFieldId("LoginId", 4)
.build();
var peopleInfos = remedyJavaAPI.queryFieldsById(qualAssoc, queryPerson.getFieldIds(),
queryPerson.getFormName(), null, 0, 0);
var response = new ImplementerGetResponse();
peopleInfos.stream().forEach(entry -> {
response.addMember(entry.get(queryPerson.getFieldId("FullName")).toString(),
entry.get(queryPerson.getFieldId("PersonId")).toString(),
entry.get(queryPerson.getFieldId("LoginId")).toString());
});
return response;
}
}