Package com.exedosoft.plat.action.customize.tools

Source Code of com.exedosoft.plat.action.customize.tools.DOAlterTable

package com.exedosoft.plat.action.customize.tools;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.exedosoft.plat.action.DOAbstractAction;
import com.exedosoft.plat.bo.BOInstance;
import com.exedosoft.plat.CacheFactory;
import com.exedosoft.plat.Transaction;
import com.exedosoft.plat.bo.DOBO;
import com.exedosoft.plat.bo.DOBOProperty;
import com.exedosoft.plat.bo.DODataSource;
import com.exedosoft.plat.bo.DOService;
import com.exedosoft.plat.gene.jquery.PropertyManager;
import com.exedosoft.plat.util.DOGlobals;
import com.exedosoft.plat.util.I18n;

/**
*
*
* 做增加,不做修改和删除
*
* 可以对增加做扫描
*
* @author anolesoft
*
*/

public class DOAlterTable extends DOAbstractAction {

  /**
   *
   */
  private static final long serialVersionUID = 1L;

  private static Map<String, String> map = new HashMap();
  static {
    String sqlType = "-7,BIT;-6,TINYINT;5,SMALLINT;4,INTEGER;-5,BIGINT;6,FLOAT;7,REAL;8,DOUBLE;2,NUMERIC;3,DECIMAL;1,CHAR;12,VARCHAR;-1,LONGVARCHAR;91,DATE;92,TIME;93,TIMESTAMP;-2,BINARY;-3,VARBINARY;-4,LONGVARBINARY;1111,OTHER;2004,BLOB;2005,CLOB;16,BOOLEAN;1001,DATETIME;1002,VARCHAR2;1003,TEXT";
    String[] types = sqlType.split(";");
    for (int i = 0; i < types.length; i++) {
      String aType = types[i];
      String[] split = aType.split(",");
      map.put(split[1].toLowerCase(), split[0]);
    }
  }

  public String excute() {

    BOInstance form = DOGlobals.getInstance().getSessoinContext()
        .getFormInstance();

    String[] keys = form.getValueArray("checkinstance");
    String[] key_hiddens = form.getValueArray("checkinstance_hidden");
    String[] dbtypes = form.getValueArray("dbtype");
    String[] dbsizes = form.getValueArray("dbsize");
    String[] colNames = form.getValueArray("col_name");

    PropertyManager pm = new PropertyManager();

    List listSql = new ArrayList();

    List listKeys = new ArrayList();

    if (keys != null && keys.length > 0) {
      listKeys = Arrays.asList(keys);
    }
    List listHiddenKeys = Arrays.asList(key_hiddens);

    DOBO bo = DOBO.getDOBOByName("do_bo");
    DOBO selected = DOBO.getDOBOByID(bo.getCorrInstance().getUid());

    DODataSource dss = null;
    ///多租户情况`
   
    if ("true".equals(DOGlobals.getValue("multi.tenancy"))) {
      dss = DOGlobals.getInstance().getSessoinContext()
          .getTenancyValues().getDataDDS();
    } else {//单租户情况
      dss = selected.getDataBase();
    }
   
   
    Transaction t = dss.getTransaction();
    t.begin();

    // /先确定删除的
    List list = selected.retrieveProperties();
    List propCols = new ArrayList();

    for (Iterator it = list.iterator(); it.hasNext();) {
      DOBOProperty dop = (DOBOProperty) it.next();
      if (dop.getIsPersistence() == null
          || dop.getIsPersistence().intValue() == DOBOProperty.PERSISTENCE_YES) {
        propCols.add(dop.getObjUid());
      }
    }
    List removeCols = new ArrayList(propCols);

    System.out.println("AllCols::" + removeCols);

    removeCols.removeAll(listHiddenKeys);
    // //需要删除的字段propCols

    System.out.println("RemoveCols::" + removeCols);

    for (int i = 0; i < removeCols.size(); i++) {
      String colObjuid = (String) removeCols.get(i);
      DOBOProperty dop = DOBOProperty.getDOBOPropertyByID(colObjuid);

      StringBuffer sb = new StringBuffer("alter table ");
      sb.append(selected.getSqlStr()).append(" drop column ").append(
          dop.getColName());

      listSql.add(sb.toString());

      pm.removeProperty(selected, dop);
    }

    // 先确定新增的

    for (int len = 0; len < key_hiddens.length; len++) {

      String keyHidden = key_hiddens[len];
      if (keyHidden == null || keyHidden.equals("")) {
        if (colNames[len] != null && !colNames[len].equals("")) {
          DOBOProperty dopExists =  DOBOProperty.getDOBOPropertyByName(selected.getName(),
              colNames[len]);
          if (dopExists==null || dopExists.getColName()==null) {

            StringBuffer sb = new StringBuffer("alter table ");
            sb.append(selected.getSqlStr()).append(" add  ")
                .append(colNames[len]).append(" ").append(
                    dbtypes[len]);

            int iDBSize = 255;
            if (dbsizes[len] != null && !dbsizes[len].equals("")) {
              iDBSize = Integer
                  .parseInt(dbsizes[len]);
              sb.append(" (").append(dbsizes[len]).append(")");
            }
            listSql.add(sb.toString());

            int iType = 12;
            try {
              iType = Integer.parseInt(map.get(dbtypes[len]
                  .toLowerCase()));
            } catch (Exception e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
            System.out.println("ColName:" + colNames[len]
                + "  DBSize:" + dbsizes[len]);
            pm.addProperty(selected, colNames[len], iType, iDBSize);
           

          }else{
            System.out.println("已经存在ColName::" + DOBOProperty.getDOBOPropertyByName(selected.getName(),
                colNames[len]));
          }
        }
      }
    }

    // //确定修改的

    Connection con = null;
    try {
      con = dss.getConnection();
      Statement stmt = con.createStatement();

      for (Iterator<String> it = listSql.iterator(); it.hasNext();) {
        String aSql = it.next();
        stmt.execute(aSql);
      }
      stmt.close();
    } catch (SQLException ex) {
      ex.printStackTrace();
      this.setEchoValue(ex.getMessage());
      return NO_FORWARD;

    } finally {

      t.end();
      try {
        if (con != null && !con.isClosed()) {
          con.close();
        }
      } catch (SQLException ex1) {
        ex1.printStackTrace();
      }
    }
    // TODO Auto-generated method stub
    CacheFactory.getCacheRelation().getData().remove((new StringBuilder(String.valueOf(selected.getObjUid()))).append("_property").toString());
    this.setEchoValue(I18n.instance().get("保存成功!"));
    return DEFAULT_FORWARD;
  }

  public void tt() {

  }

  public static void main(String[] args) {

   
    CacheFactory.getCacheData().fromSerialObject();

    DOService aService = DOService.getService("DO_BO_Property_findbybouid_keyiscolName");
   
    System.out.println(aService);
    if(aService!=null){
    List l = aService.invokeSelect("2c90b186301b0aac01301b0aac390000");
   
    System.out.println(l);
    }


  }

}
TOP

Related Classes of com.exedosoft.plat.action.customize.tools.DOAlterTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.