package br.com.centralit.citsmart.rest.v2.util;
import java.util.Arrays;
import org.apache.commons.lang.StringUtils;
import br.com.centralit.citsmart.rest.bean.RestOperationDTO;
import br.com.centralit.citsmart.rest.bean.RestSessionDTO;
import br.com.centralit.citsmart.rest.schema.CtNotificationFeedback;
import br.com.centralit.citsmart.rest.schema.CtNotificationGetById;
import br.com.centralit.citsmart.rest.schema.CtNotificationGetByUser;
import br.com.centralit.citsmart.rest.schema.CtNotificationGetReasons;
import br.com.centralit.citsmart.rest.schema.CtNotificationNew;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationAttendRequest;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationAttendantLocation;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationCheckin;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationCheckinDenied;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationCheckout;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationGetByCoordinates;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationGetNewest;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationGetOldest;
import br.com.centralit.citsmart.rest.v2.schema.CTNotificationUpdate;
import br.com.centralit.citsmart.rest.v2.schema.CTServiceCoordinate;
import br.com.centralit.citsmart.rest.v2.schema.CTServiceDeviceDissassociate;
import br.com.centralit.citsmart.rest.v2.schema.CTServiceListUnits;
/**
* Enumerado contendo as opera��es realizadas pelos servi�os REST do Mobile
*
* @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a>
* @since 23/09/2014
*
*/
public enum RESTOperations {
ATTENDANT_LOCATION("notification_attendantLocation", "attendantLocation", RestSessionDTO.class, CTNotificationAttendantLocation.class),
ATTEND_REQUEST("notification_attendRequest", "attendRequest", RestSessionDTO.class, CTNotificationAttendRequest.class),
CHECK_IN("notification_checkin", "checkin", RestSessionDTO.class, CTNotificationCheckin.class),
CHECK_IN_DENIED("notification_checkinDenied", "checkinDenied", RestSessionDTO.class, CTNotificationCheckinDenied.class),
CHECK_OUT("notification_checkout", "checkout", RestSessionDTO.class, CTNotificationCheckout.class),
FEEDBACK("notification_feedback", "feedback", RestSessionDTO.class, CtNotificationFeedback.class),
GET_BY_COORDINATES("notification_getByCoordinates", "getByCoordinates", RestSessionDTO.class, CTNotificationGetByCoordinates.class),
GET_BY_ID("notification_getById", "getById", RestSessionDTO.class, CtNotificationGetById.class),
GET_BY_ID_V2("notification_getById_v2", "getById", RestSessionDTO.class, CtNotificationGetById.class),
GET_REASONS("notification_getReasons", "getReasons", RestSessionDTO.class, CtNotificationGetReasons.class),
GET_BY_USER("notification_getByUser", "getByUser", RestSessionDTO.class, CtNotificationGetByUser.class),
GET_NEWEST("notification_getNewest", "getNewest", RestSessionDTO.class, CTNotificationGetNewest.class),
GET_OLDEST("notification_getOldest", "getOldest", RestSessionDTO.class, CTNotificationGetOldest.class),
NEW("notification_new", "add", RestSessionDTO.class, RestOperationDTO.class, CtNotificationNew.class),
UPDATE_NOTIFCATION("notification_updateNotification", "updateNotification", RestSessionDTO.class, CTNotificationUpdate.class),
COORDINATES("service_coordinates", "coordinates", RestSessionDTO.class, CTServiceCoordinate.class),
DEVICE_DISASSOCIATE("service_deviceDisassociate", "deviceDisassociate", RestSessionDTO.class, CTServiceDeviceDissassociate.class),
LIST_CONTRACTS("service_listContracts", "listContracts", RestSessionDTO.class),
LIST_DENIED_REASONS("service_listDeniedReasons", "listDeniedReasons"),
LIST_SOLICITATION_STATUS("service_listSolicitationStatus", "listSolicitationStatus"),
LIST_UNITS("service_listUnits", "listUnits", RestSessionDTO.class, CTServiceListUnits.class);
private final String messageID;
private final String methodName;
private final Class<?>[] methodArgs;
private RESTOperations(final String messageID, final String methodName, final Class<?>... methodArgs) {
this.messageID = messageID;
this.methodName = methodName;
this.methodArgs = methodArgs;
}
public String getMessageID() {
return messageID;
}
public String getMethodName() {
return methodName;
}
public Class<?>[] getMethodArgs() {
return Arrays.copyOf(methodArgs, methodArgs.length);
}
/**
* Recupera uma {@link RESTOperations} de acordo com seu identificador
*
* @param messageId
* identificador da mensagem
* @return {@link RESTOperations} de acordo com o identificador da mensagem. {@link IllegalArgumentException}, caso contr�rio
* @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a>
* @since 23/09/2014
*/
public static RESTOperations fromMessageId(final String messageId) {
final RESTOperations[] values = RESTOperations.values();
for (final RESTOperations value : values) {
if (StringUtils.equalsIgnoreCase(messageId, value.getMessageID())) {
return value;
}
}
throw new IllegalArgumentException(String.format("RESTOperation not found for messageId '%s'", messageId));
}
}