📄 dbview.java
字号:
/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/package com.tanghan.plugin.dbviews;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.ResourceBundle;import org.apache.log4j.Logger;import org.eclipse.core.resources.IMarker;import org.eclipse.core.resources.IResource;import org.eclipse.core.resources.ResourcesPlugin;import org.eclipse.core.runtime.IStatus;import org.eclipse.core.runtime.Status;import org.eclipse.jdt.internal.ui.JavaPlugin;import org.eclipse.jdt.internal.ui.util.PixelConverter;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuListener;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.IToolBarManager;import org.eclipse.jface.action.MenuManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.dialogs.ErrorDialog;import org.eclipse.jface.dialogs.MessageDialog;import org.eclipse.jface.util.Assert;import org.eclipse.jface.viewers.DoubleClickEvent;import org.eclipse.jface.viewers.IDoubleClickListener;import org.eclipse.jface.viewers.ISelection;import org.eclipse.jface.viewers.ISelectionChangedListener;import org.eclipse.jface.viewers.IStructuredSelection;import org.eclipse.jface.viewers.ITreeContentProvider;import org.eclipse.jface.viewers.SelectionChangedEvent;import org.eclipse.jface.viewers.TreeViewer;import org.eclipse.jface.viewers.ViewerSorter;import org.eclipse.jface.wizard.WizardDialog;import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Menu;import org.eclipse.ui.IActionBars;import org.eclipse.ui.IPageLayout;import org.eclipse.ui.ISharedImages;import org.eclipse.ui.IViewPart;import org.eclipse.ui.IWorkbenchWizard;import org.eclipse.ui.PartInitException;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.part.DrillDownAdapter;import org.eclipse.ui.part.ViewPart;import org.eclipse.ui.views.properties.PropertySheet;import com.tanghan.db.Field;import com.tanghan.db.Table;import com.tanghan.db.logic.AbstractDealDatabaseInfo;import com.tanghan.db.util.DBConnection;import com.tanghan.db.util.Driver;import com.tanghan.plugin.AboutDialog;import com.tanghan.plugin.IPublicImages;import com.tanghan.plugin.ITanghanConstants;import com.tanghan.plugin.TanghanClassLoader;import com.tanghan.plugin.TanghanPlugin;import com.tanghan.plugin.dataSave.IDBDealDataSave;import com.tanghan.plugin.dbviews.dialog.ConnectDialog;import com.tanghan.plugin.dbviews.dialog.ConnectionInfoDialog;import com.tanghan.plugin.dbviews.dialog.DriverInfoDialog;import com.tanghan.plugin.dbviews.elements.TreeObject;import com.tanghan.plugin.dbviews.elements.TreeParent;import com.tanghan.plugin.dbviews.elements.ViewContentProvider;import com.tanghan.plugin.dbviews.elements.ViewLabelProvider;import com.tanghan.plugin.dbviews.wizard.NewHBMFilesWizard;import com.tanghan.util.DealString;import com.tanghan.util.Log;import com.tanghan.util.TanghanException;/** * This sample class demonstrates how to plug-in a new * workbench view. The view shows data obtained from the * model. The sample creates a dummy model on the fly, * but a real implementation would connect to the model * available either in this or another plug-in (e.g. the workspace). * The view is connected to the model using a content provider. * <p> * The view uses a label provider to define how model * objects should be presented in the view. Each * view can present the same model objects using * different labels and icons, if needed. Alternatively, * a single label provider can be shared between views * in order to ensure that objects of the same type are * presented in the same way everywhere. * <p> */public class DBView extends ViewPart { private static Logger log = Log.getInstanse().getLogger(DBView.class); // TanghanPlugin.getDefault().getLog().log(new Status(IStatus.INFO, plugin.toString(),IStatus.OK, "测试",null)); /**当前使用的图形生成类*/ private static IPublicImages pubImages = TanghanPlugin.getDefault().getPublicImages(); /**处理存储数据*/ private static IDBDealDataSave dealDataSave = TanghanPlugin.getDefault().getDealDataSave(); private static TanghanClassLoader tanghanClassLoader = TanghanPlugin.getDefault().getTanghanClassLoader(); /**当前视图*/ private TreeViewer viewer; /**下来菜单适配器*/ private DrillDownAdapter drillDownAdapter; /**添加新的数据库连接的动作*/ private Action createConnAction; /**关于的相关dialog*/ private Action aboutDialog; /**修改数据库连接信息的动作.*/ private Action editConnInfoAction; /**删除数据库连接信息的动作.*/ private Action delConnInfoAction; /**TreeViewer的双击时间*/ private Action doubleClickAction; /**连接数据库的事件*/ private Action connectDBAction; /**断开数据库的事件*/ private Action disconnectDBAction; /**添加驱动的事件*/ private Action addDriverAction; /**添加驱动的事件*/ private Action editDriverAction; /**添加驱动的事件*/ private Action deleteDriverAction; /**根据数据库文件生成HBM文件的动作*/ private Action genHBMAction; /**分割*/// SashForm fullForm ; /**显示表数据的事件*/ private Action viewDataAction; /**该视图对应的插件实例*/ //private static TanghanPlugin plugin = TanghanPlugin.getDefault(); /**资源文件*/ private static ResourceBundle res = TanghanPlugin.getDefault().getResourceBundle(); /***/ protected Composite parent = null; /**被选择的对象*/ protected TreeObject selectObject = null; /**排序*/ class NameSorter extends ViewerSorter { } /** * The constructor. */ public DBView() { } /** * This is a callback that will allow us * to create the viewer and initialize it. */ public void createPartControl(Composite parent) { this.parent = parent; viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent evt) { IViewPart part = getSite().getPage().findView(IPageLayout.ID_PROP_SHEET); //IViewPart part1 = getSite().getPage().findView(IPageLayout.ID_TASK_LIST); //log.debug(part1.getClass().getName()); /**测试 newTask(); */ if (part instanceof PropertySheet){ ((PropertySheet) part).selectionChanged(DBView.this, evt.getSelection()); } } }); drillDownAdapter = new DrillDownAdapter(viewer); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider());// viewer.setSorter(new NameSorter()); viewer.setInput(ResourcesPlugin.getWorkspace()); makeDriversActions(); makeConnectionsActions(); makeHBMActions(); hookContextMenu(); hookViewsListnerAction(); contributeToActionBars(); initData(); } private void newTask(){ try{ IResource resource = null; if (resource == null) { resource = ResourcesPlugin.getWorkspace().getRoot(); } IMarker marker = resource.createMarker(IMarker.TASK); Map initialAttrs = new HashMap(11); initialAttrs.put(IMarker.MESSAGE, "Test"); // getInitialAttributes(); if (initialAttrs != null) { marker.setAttributes(initialAttrs); } }catch(Exception ex){ log.debug(ex.getMessage(),ex); } } /**初始化数据*/ private void initData(){ //初始话数据库连接 List ls = dealDataSave.getDBConnectionInfos(); for (int i = 0;i<ls.size(); i++){ DBConnection dbConn = (DBConnection)ls.get(i); addNewDatabase(dbConn); } //初始化驱动 ls = dealDataSave.getJDBCDrivers(); for (int i = 0;i<ls.size(); i++){ Driver driver = (Driver)ls.get(i); loadJDBCDriver(driver); addNewDriver(driver); } } /** * 创建右键菜单 */ private void hookContextMenu() { MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { DBView.this.fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, viewer); } /** * 添加Action Bar */ private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); fillLocalToolBar(bars.getToolBarManager()); } /** 把Action添加到当前的下拉菜单 * @param manager */ private void fillLocalPullDown(IMenuManager manager) {// manager.add(createConnAction);// manager.add(new Separator());// manager.add(editConnInfoAction); } /** * 把Action添加到当前的右键菜单中,并初始化当前菜单 * @param manager */ private void fillContextMenu(IMenuManager manager) { if(selectObject!=null){ if(selectObject.getType()<TreeObject.DRIVERS_NOTE_ITEM){ //添加有关连接的菜单 fillConnectionsMenu(manager); }else{ //添加有关驱动的菜单 fillDriversMenu(manager); } } manager.add(new Separator()); drillDownAdapter.addNavigationActions(manager); manager.add(new Separator("Additions")); } /**显示驱动程序的Menu*/ private void fillDriversMenu(IMenuManager manager){ if(selectObject!=null){ switch(selectObject.getType()){ case TreeObject.DRIVERS_NOTE_ITEM: editDriverAction.setEnabled(false); deleteDriverAction.setEnabled(false); createConnAction.setEnabled(false); break; case TreeObject.DRIVER_NOTE_ITEM: editDriverAction.setEnabled(true); deleteDriverAction.setEnabled(true); createConnAction.setEnabled(true); break; default: editDriverAction.setEnabled(false); deleteDriverAction.setEnabled(false); createConnAction.setEnabled(false); break; } } manager.add(addDriverAction); manager.add(editDriverAction); manager.add(deleteDriverAction); manager.add(new Separator()); manager.add(createConnAction); } /**显示数据库连接程序的Menu*/ private void fillConnectionsMenu(IMenuManager manager){ if(selectObject!=null){ switch(selectObject.getType()){ case TreeObject.CONNECTION_ITEM: editConnInfoAction.setEnabled(true); viewDataAction.setEnabled(false); genHBMAction.setEnabled(false); DBConnection dbConn = (DBConnection)selectObject.getObject(); Assert.isNotNull(dbConn); if(dbConn.isConnected()){ connectDBAction.setEnabled(false); disconnectDBAction.setEnabled(true); delConnInfoAction.setEnabled(false); }else{ connectDBAction.setEnabled(true); disconnectDBAction.setEnabled(false); delConnInfoAction.setEnabled(true); } break; case TreeObject.TABLE_ITEM: viewDataAction.setEnabled(true); editConnInfoAction.setEnabled(false); connectDBAction.setEnabled(false); disconnectDBAction.setEnabled(false); delConnInfoAction.setEnabled(false); genHBMAction.setEnabled(true); break; default: viewDataAction.setEnabled(false); editConnInfoAction.setEnabled(false); connectDBAction.setEnabled(false); disconnectDBAction.setEnabled(false); delConnInfoAction.setEnabled(false); genHBMAction.setEnabled(false); break; } } manager.add(createConnAction); manager.add(editConnInfoAction); manager.add(delConnInfoAction); manager.add(new Separator()); manager.add(connectDBAction); manager.add(disconnectDBAction); manager.add(new Separator()); manager.add(viewDataAction); manager.add(new Separator()); manager.add(genHBMAction); } /** * 初始话当前视图的ToolBar * @param manager */ private void fillLocalToolBar(IToolBarManager manager) {// manager.add(createConnAction);// manager.add(editConnInfoAction); manager.add(aboutDialog); manager.add(new Separator()); drillDownAdapter.addNavigationActions(manager); } /** * 创建有关Hibernate的相关Action */ private void makeHBMActions() { //根据数据库生成Hibernate配置文件的时间 genHBMAction = new Action() { public void run() { if(selectObject!=null&&selectObject.getObject()!=null){ if(selectObject!=null&&selectObject.getObject()!=null){ if(((TreeParent)selectObject).getChildren().length<1){ addTableFields((TreeParent)selectObject); } //GenerateHBMFileDiaLog dialog = new GenerateHBMFileDiaLog(parent.getShell(),(Table)selectObject.getObject()); //dialog.open(); NewHBMFilesWizard wizard = new NewHBMFilesWizard((Table)selectObject.getObject()); if (wizard instanceof IWorkbenchWizard) { ((IWorkbenchWizard)wizard).init(getSite().getWorkbenchWindow().getWorkbench(), null); } WizardDialog dialog= new WizardDialog(parent.getShell(), wizard); PixelConverter converter= new PixelConverter(JavaPlugin.getActiveWorkbenchShell()); dialog.setMinimumPageSize(converter.convertWidthInCharsToPixels(70), converter.convertHeightInCharsToPixels(20)); dialog.create(); dialog.open(); } } } }; genHBMAction.setText(res.getString("TP.Hibernate.Menu.DDL2HBM.Label")); genHBMAction.setToolTipText(res.getString("TP.Hibernate.Menu.DDL2HBM.Label")); genHBMAction.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages(). getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); } /** * 创建有关驱动的相关Action */ private void makeDriversActions() { //TO_DO 添加有关驱动的动作 complete\ //添加驱动的动作。 addDriverAction = new Action() { public void run() { DriverInfoDialog dlg = new DriverInfoDialog(parent.getShell()); Driver driver = dlg.open(null); if(driver!=null){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -