/*
* Copyright 1999-2012 Alibaba Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.cobar.manager.web.ajax;
import static com.alibaba.cobar.manager.util.ConstantDefine.ADD_STOP_TIME;
import static com.alibaba.cobar.manager.util.ConstantDefine.ADD_VIP;
import static com.alibaba.cobar.manager.util.ConstantDefine.CHANGE_ROLE;
import static com.alibaba.cobar.manager.util.ConstantDefine.CHECK_OLD_PWD;
import static com.alibaba.cobar.manager.util.ConstantDefine.CHECK_USER_NAME_REPEAT;
import static com.alibaba.cobar.manager.util.ConstantDefine.CLUSTER_NAME_REPEAT;
import static com.alibaba.cobar.manager.util.ConstantDefine.CLUSTER_NAME_REPEAT_EXCEPT_SELF;
import static com.alibaba.cobar.manager.util.ConstantDefine.COBAR_NAME_REPEAT;
import static com.alibaba.cobar.manager.util.ConstantDefine.COBAR_NAME_REPEAT_EXCEPT_SELF;
import static com.alibaba.cobar.manager.util.ConstantDefine.DELETE_STOP_TIME;
import static com.alibaba.cobar.manager.util.ConstantDefine.DELETE_VIP;
import static com.alibaba.cobar.manager.util.ConstantDefine.PASSWORD_VALIDATE;
import static com.alibaba.cobar.manager.util.ConstantDefine.STOP_TIME_REPEAT;
import static com.alibaba.cobar.manager.util.ConstantDefine.USER_NAME_REPEAT;
import static com.alibaba.cobar.manager.util.ConstantDefine.USER_NAME_REPEAT_EXCEPT_SELF;
import static com.alibaba.cobar.manager.util.ConstantDefine.VIP_NAME_REPEAT;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.web.HttpRequestHandler;
import com.alibaba.cobar.manager.dataobject.xml.UserDO;
import com.alibaba.cobar.manager.service.XmlAccesser;
import com.alibaba.cobar.manager.util.EncryptUtil;
import com.alibaba.cobar.manager.util.Pair;
/**
* @author haiqing.zhuhq 2011-6-27
*/
public class XmlManagerAjax implements HttpRequestHandler, InitializingBean {
private XmlAccesser xmlAccesser;
public void setXmlAccesser(XmlAccesser xmlAccesser) {
this.xmlAccesser = xmlAccesser;
}
@Override
public void afterPropertiesSet() throws Exception {
if (xmlAccesser == null) {
throw new IllegalArgumentException("property 'xmlAccesser' is null!");
}
}
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
AjaxParams param = new AjaxParams(request);
String jsonRst = null;
String st = param.getValueType();
if (null == st || st.equals("")) {
throw new IllegalArgumentException("parameter 'cobarControlValueType' is unknown: " + st);
}
int type = map.get(st);
switch (type) {
case CLUSTER_NAME_REPEAT_EXCEPT_SELF:
String name = param.getKeyword().trim();
long id = param.getClusterId();
Pair<String, Boolean> pair1 =
new Pair<String, Boolean>("result", xmlAccesser.getClusterDAO().checkName(name, id));
jsonRst = JSONObject.fromObject(pair1).toString(2);
break;
case CLUSTER_NAME_REPEAT:
String cname = param.getKeyword().trim();
Pair<String, Boolean> pair2 =
new Pair<String, Boolean>("result", xmlAccesser.getClusterDAO().checkName(cname));
jsonRst = JSONObject.fromObject(pair2).toString(2);
break;
case COBAR_NAME_REPEAT:
String cobarname = param.getKeyword().trim();
long clusterId = param.getClusterId();
Pair<String, Boolean> pair3 =
new Pair<String, Boolean>("result", xmlAccesser.getCobarDAO().checkName(cobarname, clusterId));
jsonRst = JSONObject.fromObject(pair3).toString(2);
break;
case COBAR_NAME_REPEAT_EXCEPT_SELF:
String coname = param.getKeyword().trim();
long cluId = param.getClusterId();
long coId = param.getCobarNodeId();
Pair<String, Boolean> pair4 =
new Pair<String, Boolean>("result", xmlAccesser.getCobarDAO().checkName(coname, cluId, coId));
jsonRst = JSONObject.fromObject(pair4).toString(2);
break;
case USER_NAME_REPEAT:
String username = param.getKeyword().trim();
Pair<String, Boolean> pair5 =
new Pair<String, Boolean>("result", xmlAccesser.getUserDAO().checkName(username));
jsonRst = JSONObject.fromObject(pair5).toString(2);
break;
case USER_NAME_REPEAT_EXCEPT_SELF:
String uname = param.getKeyword().trim();
long userId = param.getUserId();
Pair<String, Boolean> pair6 =
new Pair<String, Boolean>("result", xmlAccesser.getUserDAO().checkName(uname, userId));
jsonRst = JSONObject.fromObject(pair6).toString(2);
break;
case STOP_TIME_REPEAT:
int time = Integer.parseInt(param.getKeyword().trim());
Pair<String, Boolean> pair7 =
new Pair<String, Boolean>("result", !xmlAccesser.getPropertyDAO()
.getProperty()
.getStopTimes()
.contains(time));
jsonRst = JSONObject.fromObject(pair7).toString(2);
break;
case DELETE_STOP_TIME:
int dtime = Integer.parseInt(param.getKeyword().trim());
Pair<String, Boolean> pair8 =
new Pair<String, Boolean>("result", xmlAccesser.getPropertyDAO().deleteTime(dtime));
jsonRst = JSONObject.fromObject(pair8).toString(2);
break;
case ADD_STOP_TIME:
int atime = Integer.parseInt(param.getKeyword().trim());
Pair<String, Boolean> pair9 =
new Pair<String, Boolean>("result", xmlAccesser.getPropertyDAO().addTime(atime));
jsonRst = JSONObject.fromObject(pair9).toString(2);
break;
case PASSWORD_VALIDATE:
String password = param.getKeyword().trim();
UserDO user = (UserDO) request.getSession().getAttribute("user");
Pair<String, Boolean> pairPassword =
new Pair<String, Boolean>("result", user.getPassword().equals(EncryptUtil.encrypt(password)));
jsonRst = JSONObject.fromObject(pairPassword).toString(2);
break;
default:
throw new IllegalArgumentException("type " + param.getValueType() + " is not valible");
}
response.setHeader("Content-Type", "text/json; charset=utf-8");
OutputStream out = response.getOutputStream();
out.write(jsonRst.getBytes("utf-8"));
out.flush();
}
private static final Map<String, Integer> map = new HashMap<String, Integer>();
static {
map.put("clusterNameRepeat", CLUSTER_NAME_REPEAT);
map.put("changeRole", CHANGE_ROLE);
map.put("clusterNameRepeatExceptSelf", CLUSTER_NAME_REPEAT_EXCEPT_SELF);
map.put("checkOldPwd", CHECK_OLD_PWD);
map.put("userNameRepeat", CHECK_USER_NAME_REPEAT);
map.put("cobarNameRepeat", COBAR_NAME_REPEAT);
map.put("cobarNameRepeatExceptSelf", COBAR_NAME_REPEAT_EXCEPT_SELF);
map.put("userNameRepeatExceptSelf", USER_NAME_REPEAT_EXCEPT_SELF);
map.put("userNameRepeat", USER_NAME_REPEAT);
map.put("stopTimesRepeat", STOP_TIME_REPEAT);
map.put("delStopTimes", DELETE_STOP_TIME);
map.put("addStopTimes", ADD_STOP_TIME);
map.put("addVip", ADD_VIP);
map.put("deleteVIP", DELETE_VIP);
map.put("vipRepeat", VIP_NAME_REPEAT);
map.put("passwordValidate", PASSWORD_VALIDATE);
}
}