package cn.jcenterhome.web.action.admin;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.upload.FormFile;
import cn.jcenterhome.util.Common;
import cn.jcenterhome.util.ImageUtil;
import cn.jcenterhome.util.JavaCenterHome;
import cn.jcenterhome.web.action.BaseAction;
public class EventClassAction extends BaseAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
if (!Common.checkPerm(request, response, "manageeventclass")) {
return cpMessage(request, mapping, "cp_no_authority_management_operation");
}
Map<String, Object> thevalue = new HashMap<String, Object>();
int classId = Common.intval(request.getParameter("classid"));
if (classId > 0) {
List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("eventclass") + " WHERE classid='" + classId + "'");
if (query.size() > 0) {
thevalue = query.get(0);
int poster = (Integer) thevalue.get("poster");
if (poster != 0) {
thevalue.put("poster", "data/event/" + thevalue.get("classid") + ".jpg");
} else {
thevalue.put("poster", "image/event/default.jpg");
}
}
}
String op = request.getParameter("op");
if (!Common.empty(op) && !op.equals("add") && Common.empty(thevalue)) {
return cpMessage(request, mapping, "cp_there_is_no_designated_users_columns");
}
try {
if (submitCheck(request, "eventclasssubmit")) {
int classid = Common.intval(request.getParameter("classid"));
String classname=Common.trim(request.getParameter("classname"));
if(Common.empty(classname)){
return cpMessage(request, mapping, "cp_event_classname_can_not_be_empty");
}
classname = Common.getStr(classname, 80, true, true, true, 0,
0, request, response);
String template = Common.getStr(request.getParameter("template"), 0, true, true, true, 0, 0,
request, response);
Map<String, Object> setData = new HashMap<String, Object>();
setData.put("classname", classname);
setData.put("template", template);
setData.put("displayorder", Common.range(request.getParameter("displayorder"), 16777215, 0));
List<Map<String, Object>> query = dataBaseService.executeQuery("SELECT * FROM "
+ JavaCenterHome.getTableName("eventclass") + " WHERE classname = '" + classname
+ "'");
Map<String, Object> value = query.size() > 0 ? query.get(0) : new HashMap<String, Object>();
if (value.size() > 0 && classid != (Integer) value.get("classid")) {
return cpMessage(request, mapping, "cp_classname_duplicated");
}
if (classid > 0) {
int delposter = Common.intval(request.getParameter("delposter"));
if (delposter != 0) {
setData.put("poster", 0);
value.put("poster", 0);
}
Map<String, Object> whereData = new HashMap<String, Object>();
whereData.put("classid", classid);
dataBaseService.updateTable("eventclass", setData, whereData);
} else {
setData.put("poster", 0);
classid = dataBaseService.insertTable("eventclass", setData, true, false);
}
DynaActionForm actionForm = (DynaActionForm) form;
FormFile formFile = (FormFile) actionForm.get("poster");
if (formFile != null && formFile.getFileSize() > 0) {
String tmp_name = JavaCenterHome.jchRoot + "data/temp/eventposter.tmp";
if (uploadFile(formFile, tmp_name)) {
String thumbpath = ImageUtil.makeThumb(request, response, tmp_name, 200, 200, 300,
300);
File tmpFile = new File(tmp_name);
if (Common.empty(thumbpath)) {
if (!"jpg".equals(Common.getImageType(tmpFile))) {
return cpMessage(request, mapping, "cp_poster_only_jpg_allowed");
}
thumbpath = tmp_name;
} else {
tmpFile.delete();
}
File eventDir = new File(JavaCenterHome.jchRoot + "data/event");
if (!eventDir.isDirectory()) {
eventDir.mkdirs();
}
File eventFile = new File(JavaCenterHome.jchRoot + "data/event/" + classid + ".jpg");
if (eventFile.isFile()) {
eventFile.delete();
}
new File(thumbpath).renameTo(eventFile);
Integer temI = (Integer) value.get("poster");
if ((temI == null || temI == 0) && eventFile.isFile()) {
Map<String, Object> updateData = new HashMap<String, Object>();
updateData.put("poster", 1);
Map<String, Object> whereData = new HashMap<String, Object>();
whereData.put("classid", classid);
dataBaseService.updateTable("eventclass", updateData, whereData);
}
}
}
cacheService.eventclass_cache();
request.setAttribute("thevalue", thevalue);
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=eventclass", 2);
} else if (submitCheck(request, "ordersubmit")) {
Object obj = getParameters(request, "displayorder");
if (Common.isArray(obj)) {
Map<String, String> displayorder = (Map<String, String>) obj;
Map<Integer, Map<String, Object>> globalEventClass = Common.getCacheDate(request,
response, "/data/cache/cache_eventclass.jsp", "globalEventClass");
int classid;
int neworder;
Map<String, Object> updateData = new HashMap<String, Object>();
Map<String, Object> whereData = new HashMap<String, Object>();
for (Entry<String, String> entry : displayorder.entrySet()) {
classid = Common.intval(entry.getKey());
neworder = Common.range(entry.getValue(), 16777215, 0);
if (((Integer) globalEventClass.get(classid).get("displayorder")).intValue() != neworder) {
updateData.put("displayorder", neworder);
whereData.put("classid", classid);
dataBaseService.updateTable("eventclass", updateData, whereData);
}
}
cacheService.eventclass_cache();
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=eventclass", 2);
}
} else if (submitCheck(request, "deletesubmit")) {
int oldClassId = Common.intval(request.getParameter("classid"));
if (oldClassId == 0) {
return cpMessage(request, mapping, "at_least_one_option_to_delete_eventclass",
"admincp.jsp?ac=eventclass", 2);
}
int newClassId = Common.intval(request.getParameter("newclassid"));
if (newClassId == 0) {
return cpMessage(request, mapping, "columns_option_to_merge_the_eventclass",
"admincp.jsp?ac=eventclass&classid=" + oldClassId, 2);
}
List<Map<String, Object>> query = dataBaseService
.executeQuery("SELECT classid FROM " + JavaCenterHome.getTableName("eventclass")
+ " WHERE classid = '" + oldClassId + "'");
if (query.size() == 0) {
return cpMessage(request, mapping, "columns_option_to_merge_the_eventclass",
"admincp.jsp?ac=eventclass&classid=" + oldClassId, 2);
}
Map<String, Object> updateData = new HashMap<String, Object>();
updateData.put("classid", newClassId);
Map<String, Object> whereData = new HashMap<String, Object>();
whereData.put("classid", oldClassId);
dataBaseService.updateTable("event", updateData, whereData);
dataBaseService.execute("DELETE FROM " + JavaCenterHome.getTableName("eventclass")
+ " WHERE classid = '" + oldClassId + "'");
cacheService.eventclass_cache();
return cpMessage(request, mapping, "do_success", "admincp.jsp?ac=eventclass", 2);
}
} catch (Exception e) {
return showMessage(request, response, e.getMessage());
}
if ("delete".equals(op)) {
if (Common.empty(thevalue)) {
return cpMessage(request, mapping, "cp_there_is_no_designated_users_columns",
"admincp.jsp?ac=eventclass", 2);
}
Map<Integer, Map<String, Object>> globalEventClass = Common.getCacheDate(request, response,
"/data/cache/cache_eventclass.jsp", "globalEventClass");
if (globalEventClass.size() < 2) {
return cpMessage(request, mapping, "cp_have_no_eventclass", "admincp.jsp?ac=eventclass", 2);
}
globalEventClass.remove(thevalue.get("classid"));
request.setAttribute("list", globalEventClass);
} else if ("add".equals(op)) {
thevalue.put("poster", "image/event/default.jpg");
} else {
Map<Integer, Map<String, Object>> globalEventClass = Common.getCacheDate(request, response,
"/data/cache/cache_eventclass.jsp", "globalEventClass");
request.setAttribute("actives_view", " class=\"active\"");
request.setAttribute("list", globalEventClass);
}
request.setAttribute("thevalue", thevalue);
return mapping.findForward("eventclass");
}
private Object getParameters(HttpServletRequest request, String prefix) {
return getParameters(request, prefix, false);
}
private Object getParameters(HttpServletRequest request, String prefix, boolean isCheckBox) {
Map<String, String[]> primalParameters = request.getParameterMap();
if (primalParameters == null) {
return null;
}
Map<String, Object> result = new HashMap<String, Object>();
String key;
String[] value;
String prefix_ = null;
if (prefix != null) {
prefix_ = prefix + "[";
}
for (Entry<String, String[]> primalPE : primalParameters.entrySet()) {
key = primalPE.getKey();
if (prefix == null || key.startsWith(prefix_)) {
value = primalPE.getValue();
if (!getParametersSetResultMap(result, key, value, isCheckBox)) {
return null;
}
}
}
if (prefix != null) {
return result.get(prefix);
}
return result;
}
private String disposeParameter(String parameterName) {
if (parameterName.endsWith("[]")) {
return parameterName.substring(0, parameterName.length() - 2);
} else {
return parameterName;
}
}
private boolean getParametersSetResultMap(Map<String, Object> result, String key, String[] value,
boolean isCheckBox) {
key = disposeParameter(key);
return getParametersParseKey(new StringBuilder(key), result, value, isCheckBox);
}
private boolean getParametersParseKey(StringBuilder operatingKey, Map<String, Object> supMap,
String[] value, boolean isCheckBox) {
int tempI = operatingKey.indexOf("[");
int tempII = operatingKey.indexOf("]");
if (tempI < 0) {
putValue(supMap, operatingKey.toString(), value, isCheckBox);
return true;
} else if (tempII < tempI) {
return false;
}
String subKey = operatingKey.substring(0, tempI);
Map<String, Object> subMap = (Map<String, Object>) supMap.get(subKey);
if (subMap == null) {
subMap = new HashMap<String, Object>();
supMap.put(subKey, subMap);
}
operatingKey.deleteCharAt(tempII);
operatingKey.delete(0, tempI + 1);
return getParametersParseKey(operatingKey, subMap, value, isCheckBox);
}
private void putValue(Map<String, Object> targetMap, String key, String[] value, boolean isCheckBox) {
if (isCheckBox || value == null || value.length == 0) {
targetMap.put(key, value);
} else {
targetMap.put(key, value[0]);
}
}
private boolean uploadFile(FormFile formFile, String tempPath) throws FileNotFoundException, IOException {
boolean success = false;
if (formFile != null) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
inputStream = formFile.getInputStream();
outputStream = new FileOutputStream(tempPath);
int bufferSize = 2048;
byte[] bufferByte = new byte[bufferSize];
int read = 0;
while ((read = inputStream.read(bufferByte, 0, bufferSize)) >= 0) {
outputStream.write(bufferByte, 0, read);
}
success = true;
} finally {
if (inputStream != null) {
inputStream.close();
inputStream = null;
}
if (outputStream != null) {
outputStream.close();
outputStream = null;
}
}
}
return success;
}
}