content: /*
   * 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.action;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import org.springframework.beans.factory.InitializingBean;
  import org.springframework.validation.BindException;
  import org.springframework.web.servlet.ModelAndView;
  import org.springframework.web.servlet.mvc.SimpleFormController;
  
  import com.alibaba.cobar.manager.dao.CobarAdapterDAO;
  import com.alibaba.cobar.manager.dataobject.xml.CobarDO;
  import com.alibaba.cobar.manager.service.CobarAccesser;
  import com.alibaba.cobar.manager.service.XmlAccesser;
  import com.alibaba.cobar.manager.util.ConstantDefine;
  
  /**
   * @author haiqing.zhuhq 2011-6-27
   */
  public class ModifyCobar extends SimpleFormController implements InitializingBean {
      private XmlAccesser xmlAccesser;
      private CobarAccesser cobarAccesser;
  
      public void setXmlAccesser(XmlAccesser xmlAccesser) {
          this.xmlAccesser = xmlAccesser;
      }
  
      public void setCobarAccesser(CobarAccesser cobarAccesser) {
          this.cobarAccesser = cobarAccesser;
      }
  
      @SuppressWarnings("unused")
      private static class CobarForm {
          private long cobarId;
          private Long clusterId;
          private String cobarName;
          private String host;
          private int serverPort;
          private int port;
          private String userName;
          private String password;
          private String status;
  
          public long getCobarId() {
              return cobarId;
          }
  
          public void setCobarId(long cobarId) {
              this.cobarId = cobarId;
          }
  
          public Long getClusterId() {
              return clusterId;
          }
  
          public void setClusterId(Long clusterId) {
              this.clusterId = clusterId;
          }
  
          public String getCobarName() {
              return cobarName;
          }
  
          public void setCobarName(String cobarName) {
              this.cobarName = cobarName;
          }
  
          public String getHost() {
              return host;
          }
  
          public void setHost(String host) {
              this.host = host;
          }
  
          public int getPort() {
              return port;
          }
  
          public void setPort(int port) {
              this.port = port;
          }
  
          public String getUserName() {
              return userName;
          }
  
          public void setUserName(String userName) {
              this.userName = userName;
          }
  
          public String getPassword() {
              return password;
          }
  
          public void setPassword(String password) {
              this.password = password;
          }
  
          public String getStatus() {
              return status;
          }
  
          public void setStatus(String status) {
              this.status = status;
          }
  
          public int getServerPort() {
              return serverPort;
          }
  
          public void setServerPort(int serverPort) {
              this.serverPort = serverPort;
          }
  
      }
  
      @Override
      public void afterPropertiesSet() throws Exception {
          setCommandClass(CobarForm.class);
          if (xmlAccesser == null) {
              throw new IllegalArgumentException("property 'xmlAccesser' is null!");
          }
      }
  
      @Override
      protected ModelAndView onSubmit(HttpServletRequest request,
                                      HttpServletResponse response,
                                      Object command,
                                      BindException errors) throws Exception {
          CobarForm form = (CobarForm) command;
          CobarDO cobar = new CobarDO();
          cobar.setId(form.getCobarId());
          cobar.setClusterId(form.getClusterId());
          cobar.setHost(form.getHost().trim());
          cobar.setName(form.getCobarName().trim());
          cobar.setPassword(form.getPassword().trim());
          cobar.setServerPort(form.getServerPort());
          cobar.setPort(form.getPort());
          cobar.setUser(form.getUserName().trim());
          cobar.setStatus(form.getStatus().trim());
          cobar.setTime_diff("0");
  
          CobarAdapterDAO perf = null;
          try {
              perf = cobarAccesser.getAccesser(cobar);
          } catch (Exception e) {
          }
          boolean flag = false;
          String reason = null;
  
          if (ConstantDefine.ACTIVE.equals(cobar.getStatus())) {
              if (perf != null && perf.checkConnection()) {
                  //                CobarDO cobarOld = xmlAccesser.getCobarDAO().getCobarById(cobar.getId());
                  flag = this.xmlAccesser.getCobarDAO().modifyCobar(cobar);
                  if (!flag) {
                      reason = form.getCobarName() + "???????";
                  }
              } else {
                  reason = "connect to cobar fail ";
              }
          } else {
              flag = this.xmlAccesser.getCobarDAO().modifyCobar(cobar);
              if (!flag) {
                  reason = form.getCobarName() + " exist";
              }
              /*
               * else { if (perf != null) perf.setCobarStatus(false); }
               */
          }
  
          if (flag) {
              return new ModelAndView("m_success", "info", "modify success");
          } else {
              return new ModelAndView("failure", "reason", reason);
          }
      }
  }
  