com.hangum.tadpole.rdb.erd.core.actions.ERDRefreshAction.java Source code

Java tutorial

Introduction

Here is the source code for com.hangum.tadpole.rdb.erd.core.actions.ERDRefreshAction.java

Source

/*******************************************************************************
 * Copyright (c) 2015 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.erd.core.actions;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IWorkbenchPart;

import com.hangum.tadpole.engine.define.DBDefine;
import com.hangum.tadpole.engine.query.dao.mysql.TableColumnDAO;
import com.hangum.tadpole.engine.query.dao.mysql.TableDAO;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.rdb.erd.core.Messages;
import com.hangum.tadpole.rdb.erd.core.editor.TadpoleRDBEditor;
import com.hangum.tadpole.rdb.erd.core.relation.RelationUtil;
import com.hangum.tadpole.rdb.erd.core.utils.TDBDataHandler;
import com.hangum.tadpole.rdb.erd.core.utils.TadpoleModelUtils;
import com.hangum.tadpole.rdb.erd.stanalone.Activator;
import com.hangum.tadpole.rdb.model.Column;
import com.hangum.tadpole.rdb.model.DB;
import com.hangum.tadpole.rdb.model.RdbFactory;
import com.hangum.tadpole.rdb.model.Table;
import com.swtdesigner.ResourceManager;

/**
 * ERD view refresh action
 * 
 * @author hangum
 *
 */
public class ERDRefreshAction extends SelectionAction {
    public final static String ID = "com.hangum.tadpole.rdb.erd.actions.global.ERDViewRefreshAction"; //$NON-NLS-1$
    private static final Logger logger = Logger.getLogger(ERDRefreshAction.class);
    private GraphicalViewer viewer;
    private TadpoleRDBEditor rdbEditor;

    public ERDRefreshAction(IWorkbenchPart part, GraphicalViewer graphicalViewer) {
        super(part);
        setLazyEnablementCalculation(false);

        rdbEditor = (TadpoleRDBEditor) part;
        this.viewer = graphicalViewer;

        setId(ID);
        setText(Messages.get().ERDRefreshAction_0);
        setToolTipText(Messages.get().ERDRefreshAction_0);
        setImageDescriptor(
                ResourceManager.getPluginImageDescriptor(Activator.PLUGIN_ID, "resources/icons/refresh.png")); //$NON-NLS-1$
    }

    public GraphicalViewer getViewer() {
        return viewer;
    }

    @Override
    public void run() {
        if (!MessageDialog.openConfirm(getWorkbenchPart().getSite().getShell(), Messages.get().Confirm,
                Messages.get().ERDRefreshAction_4))
            return;

        DB dbModel = rdbEditor.getDb();

        //   table ?  .
        Map<String, Rectangle> mapOldTables = new HashMap<String, Rectangle>();
        for (Table table : dbModel.getTables()) {
            mapOldTables.put(table.getName(), table.getConstraints());
        }

        // remove tables
        int intTableCnt = dbModel.getTables().size();
        for (int i = 0; i < intTableCnt; i++) {
            Table table = dbModel.getTables().get(0);
            table.setDb(null);
        }

        List<String> strTableNames = new ArrayList<String>(mapOldTables.keySet());

        // refresh ui
        try {
            final RdbFactory factory = RdbFactory.eINSTANCE;
            final UserDBDAO userDB = rdbEditor.getUserDB();
            //   ? ?.
            Map<String, Table> mapDBTables = new HashMap<String, Table>();

            List<TableDAO> listTAbles = TadpoleModelUtils.INSTANCE.getTable(userDB, strTableNames);

            for (TableDAO table : listTAbles) {
                Table tableModel = factory.createTable();
                tableModel.setDb(dbModel);
                tableModel.setName(table.getName());

                if (userDB.getDBDefine() == DBDefine.SQLite_DEFAULT) {
                    tableModel.setComment(""); //$NON-NLS-1$
                } else {
                    String tableComment = table.getComment();
                    tableComment = StringUtils.substring("" + tableComment, 0, 10); //$NON-NLS-1$
                    tableModel.setComment(tableComment);
                }

                mapDBTables.put(tableModel.getName(), tableModel);
                tableModel.setConstraints(mapOldTables.get(table.getName()));
                // column add
                List<TableColumnDAO> columnList = TDBDataHandler.getColumns(userDB, table);
                for (TableColumnDAO columnDAO : columnList) {

                    Column column = factory.createColumn();
                    column.setDefault(columnDAO.getDefault());
                    column.setExtra(columnDAO.getExtra());
                    column.setField(columnDAO.getField());
                    column.setNull(columnDAO.getNull());
                    column.setKey(columnDAO.getKey());
                    column.setType(columnDAO.getType());

                    String strComment = columnDAO.getComment();
                    if (strComment == null)
                        strComment = ""; //$NON-NLS-1$
                    strComment = StringUtils.substring("" + strComment, 0, 10); //$NON-NLS-1$
                    column.setComment(strComment);

                    column.setTable(tableModel);
                    tableModel.getColumns().add(column);
                }

            } // end table list

            //  .
            RelationUtil.calRelation(userDB, mapDBTables, dbModel);

        } catch (Exception e) {
            logger.error("Get all table list", e); //$NON-NLS-1$
        }
    }

    @Override
    protected boolean calculateEnabled() {
        return true;
    }

}