package com.chickling.controllers;
import com.facebook.presto.hive.$internal.org.apache.commons.lang3.exception.ExceptionUtils;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
import com.chickling.boot.Init;
import com.chickling.models.Auth;
import com.chickling.util.JobCRUDUtils;
import com.chickling.models.MessageFactory;
import com.chickling.util.TemplateCRUDUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Created by jw6v on 2015/11/30.
*/
@Path("/job")
public class Job {
/*Log4J*/
Logger log = LogManager.getLogger(Job.class);
/**
* Add job
* @param json [job info]
* @param token
* @return [message success?]
*/
@POST
@Path("/manage/add/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addJob(String json,@HeaderParam("AUTHORIZATION") String token){
Type type = new TypeToken<Map>() {}.getType();
Gson gson = new Gson();
try {
Map datas = gson.fromJson(json, type);
ArrayList<Map<String,String>> info=(ArrayList)datas.get("SQLTemplate");
if(info.size()>0){
String rtn=JobCRUDUtils.addJobInfotoDB(datas, token);
Map rmap=(Map)gson.fromJson(rtn,type);
if(rmap.get("status").equals("success")){
String jobID=(String)rmap.get("jobid");
TemplateCRUDUtils.addSqlTemplate(Integer.parseInt(jobID),info);
return Response.ok(rtn).build();
}else {
return Response.ok(rtn).build();
}
}else{
return Response.ok(JobCRUDUtils.addJobInfotoDB(datas, token)).build();
}
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}catch (NumberFormatException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "","Lost data:"+ e.getMessage(), "")).build();
}
}
/**
* Update job
* @param json [job info]
* @param jobId
* @param token
* @return [message success?]
*/
@POST
@Path("/manage/update/{jobid}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response updateJob(String json, @PathParam("jobid")int jobId,
@HeaderParam("AUTHORIZATION") String token){
//TODO parse to get template
//TODO update template
Type type = new TypeToken<Map>() {}.getType();
Gson gson = new Gson();
try {
Map datas = gson.fromJson(json, type);
ArrayList<Map<String,String>> info=(ArrayList)datas.get("SQLTemplate");
String rtn=JobCRUDUtils.updateJobtoDB(datas, jobId, token);
Map rmap=(Map)gson.fromJson(rtn,type);
if(rmap.get("status").equals("success")){
String jobID=(String)rmap.get("jobid");
TemplateCRUDUtils.updateSqlTemplate(Integer.parseInt(jobID),info);
return Response.ok(rtn).build();
}else{
return Response.ok(rtn).build();
}
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}
catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
/**
* Get job info
* @param jobId
* @param token
* @return [job info]
*/
@GET
@Path("/manage/get/{jobid}")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobInfo(@PathParam("jobid")int jobId,
@HeaderParam("AUTHORIZATION") String token){
//TODO parse to get template
//TODO read template
//TODO rebuild the return json which contains template
try {
return Response.ok(JobCRUDUtils.getJobInfo(jobId, token)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
/**
* Delete job
* @param jobId
* @param token
* @return [message success?]
*/
@GET
@Path("/manage/delete/{jobid}")
@Produces(MediaType.APPLICATION_JSON)
public Response deleteJob( @PathParam("jobid")int jobId,
@HeaderParam("AUTHORIZATION") String token){
//TODO parse to get template
//TODO delete template
Gson gson=new Gson();
Type type = new TypeToken<Map>() {}.getType();
try {
String rtn=JobCRUDUtils.deleteJob(jobId, token);
Map rmap=(Map)gson.fromJson(rtn,type);
if(rmap.get("status").equals("success")){
TemplateCRUDUtils.deleteSqlTemplate(jobId);
return Response.ok(rtn).build();
}else{
return Response.ok(rtn).build();
}
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
/**
* Get job list
* @param token
* @return [job list]
*/
@GET
@Path("/manage/list/")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobList(@HeaderParam("AUTHORIZATION") String token){
try {
return Response.ok(JobCRUDUtils.getJobList(token)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
/**
* Get job running&history list
* @param limit
* @param token
* @return [job running&history list]
*/
@GET
@Path("/manage/run/list/{limit}")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobStatusList(@PathParam("limit") String limit,@HeaderParam("AUTHORIZATION") String token){
try {
return Response.ok(JobCRUDUtils.getJobStatusList(limit, token)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
/**
* Get job history by start~stop jobid
* @param start
* @param stop
* @param jobId
* @param token
* @return [job history list]
*/
@GET
@Path("/manage/run/history/range/{start}/{stop}/{jobid}")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobHistoryList(@PathParam("start")String start,
@PathParam("stop") String stop,@PathParam("jobid") String jobId,@HeaderParam("AUTHORIZATION") String token){
try {
return Response.ok(JobCRUDUtils.getJobHistoryList(start, stop, jobId, token)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
/**
* Get job history by start~stop
* @param start
* @param stop
* @param token
* @return [job history list]
*/
@GET
@Path("/manage/run/history/range/{start}/{stop}/")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobHistoryList(@PathParam("start")String start,
@PathParam("stop") String stop,@HeaderParam("AUTHORIZATION") String token){
try {
return Response.ok(JobCRUDUtils.getJobHistoryList(start, stop,"", token)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
/**
* Get job history by jobid
* @param jobid
* @param token
* @return [job history list]
*/
@GET
@Path("/manage/run/history/range/{jobid}")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobHistoryList(@PathParam("jobid")String jobid,
@HeaderParam("AUTHORIZATION") String token){
try {
return Response.ok(JobCRUDUtils.getJobHistoryList("", "",jobid, token)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
System.out.println(e.getMessage());
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}
catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
}
@GET
@Path("/manage/run/history/has/result/{jobid}")
@Produces(MediaType.APPLICATION_JSON)
public Response getHasResultJobHistory(@PathParam("jobid")String jobid,
@HeaderParam("AUTHORIZATION") String token){
try {
return Response.ok(JobCRUDUtils.getHasResultJobHistory(jobid, token)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
System.out.println(e.getMessage());
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}
catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
}
catch (Exception e){
log.error(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", ExceptionUtils.getStackTrace(e), "")).build();
}
}
/**
* Get job history info
* @param jobRunId
* @param token
* @return [job history info]
* @throws SQLException
*/
@GET
@Path("/manage/run/history/get/info/{jobrunid}")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobHistoryInfo(@PathParam("jobrunid") int jobRunId,@HeaderParam("AUTHORIZATION") String token) throws SQLException {
try {
return Response.ok(JobCRUDUtils.getJobHistoryInfo(token, jobRunId)).build();
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception:" + e.getMessage(), "")).build();
}
}
/**
* Get job list
* @param token
* @return [job list]
*/
@GET
@Path("/manage/location/list/")
@Produces(MediaType.APPLICATION_JSON)
public Response getJobLocationList(@HeaderParam("AUTHORIZATION") String token){
Auth auth = new Auth();
try {
if ((Boolean) auth.verify(token).get(4) == true) {
List dbLocation= Init.getLocationList();
List<Map> list=new ArrayList<>();
for (int i=0;i<dbLocation.size();i++){
Map location=new LinkedHashMap<>();
location.put("id", i);
location.put("name",dbLocation.get(i));
list.add(location);
}
return Response.ok(MessageFactory.messageList("success", "list", list)).build();
}else {
return Response.ok(MessageFactory.message("error", "Permission Denied")).build();
}
}catch (JsonSyntaxException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", e.getMessage(), "")).build();
}catch (NullPointerException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "value can not be null", "")).build();
}catch (ClassCastException e){
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "Json Class Cast Exception", "")).build();
} catch (SQLException e) {
log.warn(ExceptionUtils.getStackTrace(e));
return Response.ok(MessageFactory.rtnJobMessage("error", "", "sql error", "")).build();
}
}
}