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