package com.chickling.util;
import com.chickling.sqlite.ConnectionManager;
import com.chickling.models.Auth;
import com.chickling.models.MessageFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by jw6v on 2017/1/19.
*/
public class ChartCRUDUtils {
private final static String InsertChart="INSERT INTO `main`.`Chart` (`JobID`,`Type`,`Chart_Name`,`Chart_Setting`) VALUES (?,?,?,?);";
private final static String DeleteChart="DELETE FROM `main`.`Chart` WHERE `Number`=?;";
private final static String DeleteChartbyJob="DELETE FROM `main`.`Chart` WHERE `JobID`=?;";
private final static String GetChart="SELECT * FROM `main`.`Chart` WHERE `JobID`=?;";
private final static String GetChartbyNumber="SELECT * FROM `main`.`Chart` WHERE `Number`=?;";
private final static String UpdateChart="UPDATE `main`.`Chart` SET `Type`=?,`Chart_Name`=?,`Chart_Setting`=? WHERE `Number`=?;";
private static Logger log = LogManager.getLogger(ChartCRUDUtils.class);
public synchronized static String addChart(Map<String,String> input,String token){
PreparedStatement stat = null;
String QuerySQL="";
try {
Auth au = new Auth();
ArrayList<Object> userInfo = au.verify(token);
if (!(Boolean) userInfo.get(4)) {// Check login
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), "Permission denied", "");
} else if (((Integer) userInfo.get(0)) > 0) {//Not a general user
QuerySQL=InsertChart;
stat = ConnectionManager.getInstance().getConnection().prepareStatement(QuerySQL);
stat.setString(1, (String) input.get("JobID"));//userID
stat.setString(2, (String) input.get("Type"));
stat.setString(3, (String) input.get("Chart_Name"));
stat.setString(4, (String) input.get("Chart_Setting"));
stat.executeUpdate();
QuerySQL = stat.toString();
String key = Integer.toString(stat.getGeneratedKeys().getInt(1));
stat.close();
log.info("Status:success; TimeStamp:" + TimeUtil.getCurrentTime() + "; ChartID:" + key);
return MessageFactory.rtnChartMessage("success", TimeUtil.getCurrentTime(), "", key);
}else {
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), "Permission denied", "");
}
}catch(SQLException sqle){
log.error(sqle.toString() + ";SQL:" + QuerySQL);
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), sqle.getMessage(), "");
}
}
public synchronized static String deleteChart(int ChartID,int jobID,String token){
PreparedStatement stat = null;
String QuerySQL = "";
try {
Auth au = new Auth();
if (!(Boolean) au.verify(token).get(4)) {//check login
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), "Permission denied", "");
} else if ((au.jobMatch(token, Integer.toString(jobID))) || ((Integer) au.verify(token).get(0) == 2)) {
QuerySQL = DeleteChart;
stat = ConnectionManager.getInstance().getConnection().prepareStatement(QuerySQL);
} else {
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), "Permission Denied", Integer.toString(ChartID));
}
QuerySQL=stat.toString();
stat.setInt(1, ChartID);
stat.execute();
stat.close();
log.info( "Status:success; TimeStamp:"+TimeUtil.getCurrentTime()+"; ChartID:"+ChartID);
return MessageFactory.rtnChartMessage("success", TimeUtil.getCurrentTime(), "", Integer.toString(ChartID));
}catch(SQLException sqle){
log.error(sqle.toString()+";SQL:"+QuerySQL);
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), sqle.getMessage(), "");
}
}
public synchronized static String deleteChartbyJob(int jobID,String token){
PreparedStatement stat = null;
String QuerySQL = "";
try {
Auth au = new Auth();
if (!(Boolean) au.verify(token).get(4)) {
return MessageFactory.rtnJobMessage("error", TimeUtil.getCurrentTime(), "Permission denied", "");
} else if ((au.jobMatch(token, Integer.toString(jobID))) || ((Integer) au.verify(token).get(0) == 2)) {
QuerySQL = DeleteChartbyJob;
stat = ConnectionManager.getInstance().getConnection().prepareStatement(QuerySQL);
} else {
return MessageFactory.rtnJobMessage("error", TimeUtil.getCurrentTime(), "Permission Denied", Integer.toString(jobID));
}
QuerySQL=stat.toString();
stat.setInt(1, jobID);
stat.execute();
stat.close();
log.info( "Status:success; TimeStamp:"+TimeUtil.getCurrentTime()+"; JobID:"+jobID);
return MessageFactory.rtnJobMessage("success", TimeUtil.getCurrentTime(), "", Integer.toString(jobID));
}catch(SQLException sqle){
log.error(sqle.toString()+";SQL:"+QuerySQL);
return MessageFactory.rtnJobMessage("error", TimeUtil.getCurrentTime(), sqle.getMessage(), Integer.toString(jobID));
}
}
public synchronized static String updateChart( Map input,int jobID,String token){
PreparedStatement stat = null;
String QuerySQL ="";
try {
//INSERT SQL
Auth au = new Auth();
if (!(Boolean) au.verify(token).get(4)) {
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), "Permission denied", "");
} else if ((au.jobMatch(token, Integer.toString(jobID))) || ((Integer) au.verify(token).get(0) == 2)) {
QuerySQL = UpdateChart;
stat = ConnectionManager.getInstance().getConnection().prepareStatement(QuerySQL);
} else {
return MessageFactory.rtnJobMessage("error", TimeUtil.getCurrentTime(), "Permission denied", Integer.toString(jobID));
}
stat.setString(1, input.get("Type").toString());
stat.setString(2, input.get("Chart_Name").toString());
stat.setString(3,input.get("Chart_Setting").toString());
stat.setInt(4, ((Double) input.get("ChartID")).intValue());
stat.executeUpdate();
stat.close();
log.info( "Status:success; TimeStamp:"+TimeUtil.getCurrentTime());
return MessageFactory.rtnChartMessage("success", TimeUtil.getCurrentTime(), "", "");
}
catch(SQLException sqle){
log.error(sqle.toString()+";SQL:"+QuerySQL);
return MessageFactory.rtnChartMessage("error", TimeUtil.getCurrentTime(), sqle.getMessage(), "");
}
}
public synchronized static String readChartbyJobID(int JobID,String token){
//todo
String QuerySQL =GetChart;
PreparedStatement stat = null;
ResultSet rs = null;
try {
Auth au = new Auth();
ArrayList<Object> info = au.verify(token);
if (!(Boolean) au.verify(token).get(4)) {// check login
return MessageFactory.rtnChartListMessage("error", "","permission denied", "",new ArrayList());
} else if(((Integer) au.verify(token).get(0) == 2)||(au.groupMatch(token, JobID))){
stat = ConnectionManager.getInstance().getConnection().prepareStatement(QuerySQL);
stat.setInt(1, JobID);
QuerySQL=stat.toString();
rs = stat.executeQuery();
List<Map> rtn = MessageFactory.rtnChartMessage(rs);
stat.close();
return MessageFactory.rtnChartListMessage("success", "","", "",rtn);
}else{
return MessageFactory.rtnChartListMessage("error", "","permission denied", "",new ArrayList());
}
}
catch(SQLException sqle){
log.error(sqle.toString()+";SQL:"+QuerySQL);
return MessageFactory.rtnChartListMessage("error", "",sqle.toString(), "",new ArrayList());
}
}
public synchronized static String readChart(int ChartID,String token){
String QuerySQL =GetChartbyNumber;
PreparedStatement stat = null;
ResultSet rs = null;
try {
Auth au = new Auth();
ArrayList<Object> info = au.verify(token);
if (!(Boolean) au.verify(token).get(4)) {
return MessageFactory.rtnChartInfoMessage("error", "","permission denied", "",new HashMap());
} else{
stat = ConnectionManager.getInstance().getConnection().prepareStatement(QuerySQL);
stat.setInt(1, ChartID);
QuerySQL=stat.toString();
rs = stat.executeQuery();
int jobID=0;
HashMap<String,String> rtn = new HashMap<>();
if(rs.next()){
jobID=rs.getInt("Number");
rtn.put("ChartID",Integer.toString(rs.getInt("Number")));
rtn.put("JobID",Integer.toString(rs.getInt("JobID")));
rtn.put("Type",rs.getString("Type"));
rtn.put("Chart_Name",rs.getString("Chart_Name"));
rtn.put("Chart_Setting",rs.getString("Chart_Setting"));
stat.close();
}
if(((Integer) au.verify(token).get(0) == 2)||(au.groupMatch(token, jobID))){
return MessageFactory.rtnChartInfoMessage("success","","","",rtn);
}else{
return MessageFactory.rtnChartInfoMessage("error", "","permission denied", "",new HashMap());
}
}
}
catch(SQLException sqle){
log.error(sqle.toString()+";SQL:"+QuerySQL);
return MessageFactory.rtnChartInfoMessage("error", "",sqle.toString(), "",new HashMap());
}
}
}