/******************************************************************************* * 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: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.rdb.core.editors.dbinfos.composites; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import com.hangum.tadpole.commons.google.analytics.AnalyticCaller; import com.hangum.tadpole.commons.libs.core.dao.KeyValueDAO; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; 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.system.UserDBDAO; import com.hangum.tadpole.rdb.core.Messages; import com.hangum.tadpole.rdb.core.editors.dbinfos.RDBDBInfosEditor; /** * RDB 디비 summary 정보를 출력하는 composite. * * @author hangum * */ public class RDBInformationComposite extends DBInfosComposite { private static final Logger logger = Logger.getLogger(RDBInformationComposite.class); private UserDBDAO userDB; private TableViewer tvInformation; /** information dao */ private List<KeyValueDAO> listInfo = new ArrayList<KeyValueDAO>(); /** * Create the composite. * @param parent * @param style */ public RDBInformationComposite(Composite parent, int style, final UserDBDAO userDb) { super(parent, style); setLayout(new GridLayout(1, false)); this.userDB = userDb; tvInformation = new TableViewer(this, /* SWT.VIRTUAL | */ SWT.BORDER | SWT.FULL_SELECTION); Table table = tvInformation.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); TableViewerColumn tableViewerColumn = new TableViewerColumn(tvInformation, SWT.NONE); TableColumn tblclmnName = tableViewerColumn.getColumn(); tblclmnName.setWidth(130); tblclmnName.setText(CommonMessages.get().Name); TableViewerColumn tableViewerColumn_1 = new TableViewerColumn(tvInformation, SWT.NONE); TableColumn tblclmnValue = tableViewerColumn_1.getColumn(); tblclmnValue.setWidth(300); tblclmnValue.setText(Messages.get().Value); tvInformation.setContentProvider(new ArrayContentProvider()); tvInformation.setLabelProvider(new RDBInformationLabelProvider()); initUI(true); } /** * 초기데이터를 쌓습니다. */ public void initUI(boolean isRefresh) { if(isRefresh) { listInfo.clear(); } else { if(listInfo.size() != 0) return; } // db information if(DBGroupDefine.MONGODB_GROUP != userDB.getDBGroup()) { rdbInfo(); } listInfo.add(new KeyValueDAO(Messages.get().OperationType, userDB.getOperation_type())); listInfo.add(new KeyValueDAO(Messages.get().GroupName, userDB.getGroup_name())); listInfo.add(new KeyValueDAO(Messages.get().DisplayName, userDB.getDisplay_name())); listInfo.add(new KeyValueDAO(Messages.get().JDBCURL, userDB.getUrl(userDB.getRole_id()))); if(DBGroupDefine.SQLITE_GROUP != userDB.getDBGroup()) { listInfo.add(new KeyValueDAO("Host/IP", userDB.getHost(userDB.getRole_id()) + "/" + userDB.getPort(userDB.getRole_id()))); //$NON-NLS-1$ //$NON-NLS-2$ } listInfo.add(new KeyValueDAO(Messages.get().Database, userDB.getDb(userDB.getRole_id()))); if(userDB.getDBDefine() != DBDefine.SQLite_DEFAULT) { listInfo.add(new KeyValueDAO("User", userDB.getUsers(userDB.getRole_id()))); //$NON-NLS-1$ } listInfo.add(new KeyValueDAO(Messages.get().ReadOnly, userDB.getIs_readOnlyConnect())); // 몽고디비는 없으므로.. if(DBGroupDefine.MONGODB_GROUP != userDB.getDBGroup()) { listInfo.add(new KeyValueDAO(Messages.get().AutoCommit, userDB.getIs_autocommit())); listInfo.add(new KeyValueDAO(Messages.get().Profile, userDB.getIs_profile())); listInfo.add(new KeyValueDAO(Messages.get().RDBInformationComposite_17, userDB.getQuestion_dml())); } tvInformation.setInput(listInfo); // google analytic AnalyticCaller.track(RDBDBInfosEditor.ID, "RDBInformationComposite"); //$NON-NLS-1$ } /** * add rdb info */ private void rdbInfo() { Connection conn = null; try { conn = TadpoleSQLManager.getConnection(userDB); DatabaseMetaData dmd = conn.getMetaData(); listInfo.add(new KeyValueDAO(Messages.get().DatabaseInformation, dmd.getDatabaseProductName() + " " + dmd.getDatabaseProductVersion())); listInfo.add(new KeyValueDAO(Messages.get().DriverInformation, dmd.getDriverName() + " " + dmd.getDriverVersion())); } catch(Exception e) { logger.error("RDB info", e); } finally { try { if(conn != null) conn.close(); } catch(Exception e) {} } } } /** * rdb information label provider * * @author hangum * */ class RDBInformationLabelProvider extends LabelProvider implements ITableLabelProvider { @Override public Image getColumnImage(Object element, int columnIndex) { return null; } @Override public String getColumnText(Object element, int columnIndex) { KeyValueDAO dao = (KeyValueDAO)element; switch(columnIndex) { case 0: return dao.getName(); case 1: return dao.getValue(); } return "*** not set column ***"; //$NON-NLS-1$ } }