NetworkAssociationRestView.java 3.56 KB
package fi.codecrew.moya.rest;

import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import fi.codecrew.moya.beans.NetworkAssociationBeanLocal;
import fi.codecrew.moya.enums.NetworkAssociationStatus;
import fi.codecrew.moya.model.NetworkAssociation;
import fi.codecrew.moya.rest.pojo.NetworkAssociationActionPojo;
import fi.codecrew.moya.rest.pojo.NetworkAssociationResponseRoot;

@RequestScoped
@Path("/networkassociation")
public class NetworkAssociationRestView {
	
	@EJB
	private NetworkAssociationBeanLocal networkAssociationBean;
	
	@POST
	@Path("/auth")
	@Produces({ MediaType.APPLICATION_JSON })
	public NetworkAssociationResponseRoot auth(
			@FormParam("username") 		String username, 
			@FormParam("password") 		String password, 
			@FormParam("ip") 			String ip, 
			@FormParam("mac") 			String mac, 
			@FormParam("code") 			String code,
			@FormParam("coderequired")	Boolean codeRequired
	) {
		NetworkAssociationResponseRoot resp = new NetworkAssociationResponseRoot();
		try {
			NetworkAssociation na = networkAssociationBean.tryAssociate(
					username, password, ip, mac, code, codeRequired);
			
			if(na.getStatus().equals(NetworkAssociationStatus.ACTIVE))
				resp.getAdditions().add(new NetworkAssociationActionPojo(na.getIP(), na.getMAC()));
			else
				resp.getPendings().add(new NetworkAssociationActionPojo(na.getIP(), na.getMAC()));
		} catch(Exception e) {
			resp.getResult().setResultCode(0);
			if(e.getMessage() != null && e.getMessage() != "") {
				resp.getResult().setMessage(e.getMessage());
			} else {
				resp.getResult().setMessage("UNKNOWN_ERROR");
			}
		}
		
		return resp;
	}
	
	@GET
	@Path("/get_all/{activate}")
	@Produces({ MediaType.APPLICATION_JSON })
	public NetworkAssociationResponseRoot getAll(
			@PathParam("activate")	Boolean activate
	) {		
		NetworkAssociationResponseRoot resp = new NetworkAssociationResponseRoot();
		try {
			if(activate == null) 
				throw new Exception("INVALID_PARAMETER_FOR_ACTIVATE");
			
			List<NetworkAssociation> activeAssociations = networkAssociationBean.getActiveAssociations(activate);
			
			for(NetworkAssociation na : activeAssociations) {
				resp.getAdditions().add(new NetworkAssociationActionPojo(na.getIP(), na.getMAC()));
			}
			
			return resp;
		} catch(Exception e) {
			resp.getResult().setResultCode(0);
			resp.getResult().setMessage(e.getMessage());
			return resp;
		}
	}
	
	@POST
	@Path("/get_status_by_ip_mac")
	@Produces({ MediaType.APPLICATION_JSON })
	public NetworkAssociationResponseRoot getChanges(
			@FormParam("ip")		String ip,
			@FormParam("mac")		String mac
	) {
		NetworkAssociationResponseRoot resp = new NetworkAssociationResponseRoot();
		try {
			for(NetworkAssociation na : networkAssociationBean.getStatusByIPAndMAC(ip, mac)) {
				if(na.getStatus().equals(NetworkAssociationStatus.ACTIVE)) {
					resp.getAdditions().add(new NetworkAssociationActionPojo(na.getIP(), na.getMAC()));
				} else if(na.getStatus().equals(NetworkAssociationStatus.PENDING)) {
					resp.getPendings().add(new NetworkAssociationActionPojo(na.getIP(), na.getMAC()));
				} else if(na.getStatus().equals(NetworkAssociationStatus.EXPIRED)) {
					resp.getRemovals().add(new NetworkAssociationActionPojo(na.getIP(), na.getMAC()));
				}
			}
			
			return resp;
		} catch(Exception e) {
			resp.getResult().setResultCode(0);
			resp.getResult().setMessage(e.getMessage());
			return resp;
		}
	}
}