/*******************************************************************************
* Copyright (c) 2013 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* nilriri - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.rdb.core.editors.dbinfos.composites;
import java.sql.PreparedStatement;
import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TableViewer;
import com.hangum.tadpole.engine.define.DBDefine;
import com.hangum.tadpole.engine.define.DBGroupDefine;
import com.hangum.tadpole.engine.manager.TadpoleSQLManager;
import com.hangum.tadpole.engine.query.dao.rdb.RDBInfomationforColumnDAO;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.rdb.core.viewers.object.sub.rdb.table.CommentCellEditor;
/**
* column comment editor
*
* @author nilriri
*
*/
public class DBInfoCommentEditorSupport extends EditingSupport {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(DBInfoCommentEditorSupport.class);
private final TableViewer viewer;
private UserDBDAO userDB;
private int column;
/**
*
* @param viewer
* @param explorer
*/
public DBInfoCommentEditorSupport(TableViewer viewer, UserDBDAO userDB, int column) {
super(viewer);
this.viewer = viewer;
this.userDB = userDB;
this.column = column;
}
@Override
protected CellEditor getCellEditor(Object element) {
if (column == 1 || column == 3)
return new CommentCellEditor(column, viewer);
else
return null;
}
@Override
protected boolean canEdit(Object element) {
if (column == 1 || column == 3) {
if (logger.isDebugEnabled()) logger.debug("DBMS Type is " + userDB.getDBDefine());
if(DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup()
|| DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()
|| DBGroupDefine.MSSQL_GROUP == userDB.getDBGroup()
) {
return true;
} else {
return false;
}
} else {
return false;
}
}
@Override
protected Object getValue(Object element) {
try {
RDBInfomationforColumnDAO dao = (RDBInfomationforColumnDAO) element;
String comment = "";
switch (column) {
case 1:
comment = dao.getTable_comment();
break;
case 3:
comment = dao.getColumn_comment();
break;
}
return comment == null ? "" : comment;
} catch (Exception e) {
logger.error("getValue error ", e);
return "";
}
}
@Override
protected void setValue(Object element, Object value) {
String comment = "";
try {
if (logger.isDebugEnabled())
logger.debug("element.getClass().toString() is " + element.getClass().toString());
RDBInfomationforColumnDAO dao = (RDBInfomationforColumnDAO) element;
comment = (String) (value == null ? "" : value);
if (logger.isDebugEnabled())
logger.debug("comment update target is " + dao.getTable_name() + "." + dao.getColumn_name());
switch (column) {
case 1:
// 기존 코멘트와 다를때만 db에 반영한다.
if (!(comment.equals(dao.getTable_comment()))) {
dao.setTable_comment(comment);
ApplyTableComment(dao);
}
break;
case 3: // 기존 코멘트와 다를때만 db에 반영한다.
if (!(comment.equals(dao.getColumn_comment()))) {
dao.setColumn_comment(comment);
ApplyColumnComment(dao);
}
break;
}
viewer.update(dao, null);
} catch (Exception e) {
logger.error("setValue error ", e);
}
viewer.update(element, null);
}
private void ApplyColumnComment(RDBInfomationforColumnDAO dao) {
// TODO : DBMS별 처리를 위해 별도의 Class로 분리해야 하지 않을까?
java.sql.Connection javaConn = null;
PreparedStatement stmt = null;
try {
if (logger.isDebugEnabled())
logger.debug("userDB is " + userDB.toString());
javaConn = TadpoleSQLManager.getConnection(userDB);
// IStructuredSelection is = (IStructuredSelection)
// viewer.getSelection();
// TableCreateDAO tableDAO = (TableCreateDAO) is.getFirstElement();
StringBuffer query = new StringBuffer();
if (DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup() || DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()) {
query.append(" COMMENT ON COLUMN ").append(dao.getTable_name() + ".").append(dao.getColumn_name()).append(" IS '").append(dao.getColumn_comment()).append("'");
if (logger.isDebugEnabled())
logger.debug("query is " + query.toString());
stmt = javaConn.prepareStatement(query.toString());
stmt.execute();
} else if (DBDefine.MSSQL_8_LE_DEFAULT == userDB.getDBDefine()) {
query.append(" exec sp_dropextendedproperty 'Caption' ").append(", 'user' ,").append(userDB.getUsers());
query.append(",'table' , '").append(dao.getTable_name()).append("'");
query.append(",'column' , '").append(dao.getColumn_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
try {
stmt.execute();
} catch (Exception e) {
if (logger.isDebugEnabled())
logger.debug("query is " + query.toString());
logger.error("Comment drop error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
try {
query = new StringBuffer();
query.append(" exec sp_addextendedproperty 'Caption', '").append(dao.getColumn_comment()).append("' ,'user' ,").append(userDB.getUsers());
query.append(",'table' , '").append(dao.getTable_name()).append("'");
query.append(",'column', '").append(dao.getColumn_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
stmt.execute();
} catch (Exception e) {
if(logger.isDebugEnabled()) logger.debug("query is " + query.toString());
logger.error("Comment add error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
} else if (DBDefine.MSSQL_DEFAULT == userDB.getDBDefine()) {
query.append(" exec sp_dropextendedproperty 'Caption' ").append(", 'user' , dbo ");
query.append(",'table' , '").append(dao.getTable_name()).append("'");
query.append(",'column' , '").append(dao.getColumn_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
try {
stmt.execute();
} catch (Exception e) {
if(logger.isDebugEnabled()) logger.debug("query is " + query.toString());
logger.error("Comment drop error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
try {
query = new StringBuffer();
query.append(" exec sp_addextendedproperty 'Caption', '").append(dao.getColumn_comment()).append("' ,'user' , dbo ");
query.append(",'table' , '").append(dao.getTable_name()).append("'");
query.append(",'column', '").append(dao.getColumn_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
stmt.execute();
} catch (Exception e) {
if(logger.isDebugEnabled()) logger.debug("query is " + query.toString());
logger.error("Comment add error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
}
} catch (Exception e) {
logger.error("Comment change error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
try { if(javaConn != null) javaConn.close(); } catch (Exception e) { }
}
}
private void ApplyTableComment(RDBInfomationforColumnDAO dao) {
// TODO : DBMS별 처리를 위해 별도의 Class로 분리해야 하지 않을까?
java.sql.Connection javaConn = null;
PreparedStatement stmt = null;
try {
if(logger.isDebugEnabled()) logger.debug("userDB is " + userDB.toString());
javaConn = TadpoleSQLManager.getConnection(userDB);
StringBuffer query = new StringBuffer();
if (DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup() || DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()) {
query.append(" COMMENT ON TABLE ").append(dao.getTable_name()).append(" IS '").append(dao.getTable_comment()).append("'");
stmt = javaConn.prepareStatement(query.toString());
stmt.execute();
} else if (DBDefine.MSSQL_8_LE_DEFAULT == userDB.getDBDefine()) {
query.append(" exec sp_dropextendedproperty 'Caption' ").append(", 'user' ,").append(userDB.getUsers()).append(",'table' ").append(" , '").append(dao.getTable_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
try {
stmt.execute();
} catch (Exception e) {
if(logger.isDebugEnabled()) logger.debug("query is " + query.toString());
logger.error("Comment drop error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
try {
query = new StringBuffer();
query.append(" exec sp_addextendedproperty 'Caption', '").append(dao.getTable_comment()).append("' ,'user' ,").append(userDB.getUsers()).append(",'table' ").append(" , '").append(dao.getTable_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
stmt.execute();
} catch (Exception e) {
if(logger.isDebugEnabled()) logger.debug("query is " + query.toString());
logger.error("Comment add error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
} else if (DBDefine.MSSQL_DEFAULT == userDB.getDBDefine()) {
query.append(" exec sp_dropextendedproperty 'Caption' ").append(", 'user' , dbo,'table' ").append(" , '").append(dao.getTable_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
try {
stmt.execute();
} catch (Exception e) {
if(logger.isDebugEnabled()) logger.debug("query is " + query.toString());
logger.error("Comment drop error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
try {
query = new StringBuffer();
query.append(" exec sp_addextendedproperty 'Caption', '").append(dao.getTable_comment()).append("' ,'user' , dbo ,'table' ").append(" , '").append(dao.getTable_name()).append("'");
stmt = javaConn.prepareStatement(query.toString());
stmt.execute();
} catch (Exception e) {
if(logger.isDebugEnabled()) logger.debug("query is " + query.toString());
logger.error("Comment add error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) { }
}
}
} catch (Exception e) {
logger.error("Comment change error ", e);
} finally {
try { if(stmt != null) stmt.close(); } catch (Exception e) {}
try { if(javaConn != null) javaConn.close(); } catch (Exception e) { }
}
}
}