Java tutorial
/******************************************************************************* * 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.viewers.connections; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import com.hangum.tadpold.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.commons.exception.dialog.ExceptionDetailsErrorDialog; import com.hangum.tadpole.commons.google.analytics.AnalyticCaller; import com.hangum.tadpole.commons.util.download.DownloadServiceHandler; import com.hangum.tadpole.commons.util.download.DownloadUtils; import com.hangum.tadpole.engine.define.DBDefine; import com.hangum.tadpole.rdb.core.Activator; import com.hangum.tadpole.rdb.core.Messages; import com.hangum.tadpole.rdb.core.actions.connections.QueryEditorAction; import com.hangum.tadpole.rdb.core.actions.erd.mongodb.MongoDBERDViewAction; import com.hangum.tadpole.rdb.core.actions.erd.rdb.RDBERDViewAction; import com.hangum.tadpole.rdb.core.actions.global.ConnectDatabaseAction; import com.hangum.tadpole.rdb.core.editors.main.MainEditor; import com.hangum.tadpole.rdb.core.editors.main.MainEditorInput; import com.hangum.tadpole.rdb.core.util.EditorUtils; import com.hangum.tadpole.session.manager.SessionManager; import com.hangum.tadpole.sql.dao.ManagerListDTO; import com.hangum.tadpole.sql.dao.system.UserDBDAO; import com.hangum.tadpole.sql.dao.system.UserDBResourceDAO; import com.hangum.tadpole.sql.query.TadpoleSystem_UserDBQuery; import com.hangum.tadpole.sql.query.TadpoleSystem_UserDBResource; /** * connection manager * * @author hangum * */ public class ManagerViewer extends ViewPart { private static final Logger logger = Logger.getLogger(ManagerViewer.class); public static String ID = "com.hangum.tadpole.rdb.core.view.connection.manager"; //$NON-NLS-1$ private Composite compositeMainComposite; private List<ManagerListDTO> treeList = new ArrayList<ManagerListDTO>(); private TreeViewer managerTV; /** download servcie handler. */ private DownloadServiceHandler downloadServiceHandler; public ManagerViewer() { super(); } @Override public void createPartControl(Composite parent) { setPartName(Messages.ManagerViewer_0); compositeMainComposite = new Composite(parent, SWT.NONE); GridLayout gl_composite = new GridLayout(1, false); gl_composite.verticalSpacing = 0; gl_composite.horizontalSpacing = 0; gl_composite.marginHeight = 0; gl_composite.marginWidth = 0; compositeMainComposite.setLayout(gl_composite); managerTV = new TreeViewer(compositeMainComposite, SWT.NONE); managerTV.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection is = (IStructuredSelection) event.getSelection(); if (is.getFirstElement() instanceof UserDBDAO) { UserDBDAO userDB = (UserDBDAO) is.getFirstElement(); addUserResouceData(userDB); AnalyticCaller.track(ManagerViewer.ID, userDB.getDbms_types()); } // // (managerTV.getControl().setFocus();) , ? ?? event listener ? . // ? . // managerTV.getControl().setFocus(); } }); managerTV.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { IStructuredSelection is = (IStructuredSelection) event.getSelection(); Object selElement = is.getFirstElement(); // db object ? ? ??. if (selElement instanceof UserDBDAO) { QueryEditorAction qea = new QueryEditorAction(); qea.run((UserDBDAO) selElement); // erd ? erd ??? . } else if (selElement instanceof UserDBResourceDAO) { UserDBResourceDAO dao = (UserDBResourceDAO) selElement; if (PublicTadpoleDefine.RESOURCE_TYPE.ERD.toString().equals(dao.getResource_types())) { UserDBDAO userDB = dao.getParent(); if (userDB != null && DBDefine.MONGODB_DEFAULT == DBDefine.getDBDefine(userDB)) { MongoDBERDViewAction ea = new MongoDBERDViewAction(); ea.run(dao); } else { RDBERDViewAction ea = new RDBERDViewAction(); ea.run(dao); } } else { QueryEditorAction qea = new QueryEditorAction(); qea.run(dao); } // manager } else if (selElement instanceof ManagerListDTO) { ConnectDatabaseAction cda = new ConnectDatabaseAction(getSite().getWorkbenchWindow()); cda.runConnectionDialog(is); } } }); Tree tree = managerTV.getTree(); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); tree.setData(RWT.MARKUP_ENABLED, Boolean.TRUE); managerTV.setContentProvider(new ManagerContentProvider()); managerTV.setLabelProvider(new ManagerLabelProvider()); managerTV.setInput(treeList); getSite().setSelectionProvider(managerTV); createPopupMenu(); registerServiceHandler(); init(); // db? erd ?? PlatformUI.getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == PublicTadpoleDefine.SAVE_FILE) { addResource(Integer.parseInt(event.getNewValue().toString().split(":")[0])); //$NON-NLS-1$ } else if (event.getProperty() == PublicTadpoleDefine.ADD_DB) { init(); } } }); } /** * ?? */ public void init() { treeList.clear(); try { List<UserDBDAO> userDBS = TadpoleSystem_UserDBQuery.getUserDB(); // ?? ?. List<String> groupNames = new ArrayList<String>(); for (UserDBDAO userDBDAO : userDBS) { if (!groupNames.contains(userDBDAO.getGroup_name())) { groupNames.add(userDBDAO.getGroup_name()); } } // ? ? ? . for (UserDBDAO userDBDAO : userDBS) { addUserDB(userDBDAO, false); } } catch (Exception e) { logger.error("initialize Managerview", e); //$NON-NLS-1$ Status errStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); //$NON-NLS-1$ ExceptionDetailsErrorDialog.openError(getSite().getShell(), "Error", Messages.ManagerViewer_4, //$NON-NLS-1$ errStatus); } managerTV.refresh(); managerTV.expandToLevel(2); AnalyticCaller.track(ManagerViewer.ID); } /** * popup ? . */ private void createPopupMenu() { MenuManager menuMgr = new MenuManager(); menuMgr.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); Menu popupMenu = menuMgr.createContextMenu(managerTV.getTree()); managerTV.getTree().setMenu(popupMenu); getSite().registerContextMenu(menuMgr, managerTV); } @Override public void setFocus() { } /** * ?? * * @return */ public List<ManagerListDTO> getAllTreeList() { return treeList; } /** * ? ? ? ? * * @param dbType * @param userDB */ public boolean isAdd(DBDefine dbType, UserDBDAO userDB) { for (ManagerListDTO dto : treeList) { if (dto.getName().equals(dbType.getDBToString())) { if (dto.getName().equals(userDB.getDisplay_name())) return false; for (UserDBDAO alreaduserDB : dto.getManagerList()) { if (alreaduserDB.getUrl().equals(userDB.getUrl())) return false; } } } return true; } /** * tree? * * @param userDB * @param defaultOpen default editor open */ public void addUserDB(UserDBDAO userDB, boolean defaultOpen) { for (ManagerListDTO dto : treeList) { if (dto.getName().equals(userDB.getGroup_name())) { dto.addLogin(userDB); if (defaultOpen) { selectAndOpenView(userDB); managerTV.expandToLevel(userDB, 2); } return; } // end if(dto.getname().... } // end for // ?... ManagerListDTO managerDto = new ManagerListDTO(userDB.getGroup_name()); managerDto.addLogin(userDB); treeList.add(managerDto); if (defaultOpen) { selectAndOpenView(userDB); managerTV.expandToLevel(userDB, 2); } } /** * tree? user resource ? . * * @param userDB */ public void addUserResouceData(UserDBDAO userDB) { if (userDB.getListUserDBErd() == null) { // user_resource_data ?? ?. try { List<UserDBResourceDAO> listUserDBResources = TadpoleSystem_UserDBResource.userDbErdTree(userDB); if (!listUserDBResources.isEmpty()) { List<UserDBResourceDAO> listRealResource = new ArrayList<UserDBResourceDAO>(); for (UserDBResourceDAO userDBResourceDAO : listUserDBResources) { if (PublicTadpoleDefine.SHARED_TYPE.PUBLIC.toString() .equals(userDBResourceDAO.getShared_type())) { userDBResourceDAO.setParent(userDB); listRealResource.add(userDBResourceDAO); } else { // ? ? ?? . if (SessionManager.getSeq() == userDBResourceDAO.getUser_seq()) { userDBResourceDAO.setParent(userDB); listRealResource.add(userDBResourceDAO); } } } userDB.setListUserDBErd(listRealResource); managerTV.expandToLevel(userDB, 3); } } catch (Exception e) { logger.error("user_db_erd list", e); //$NON-NLS-1$ Status errStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); //$NON-NLS-1$ ExceptionDetailsErrorDialog.openError(getSite().getShell(), "Error", Messages.ManagerViewer_6, //$NON-NLS-1$ errStatus); } } } /** * erd ?? * * @param userDBErd */ public void addResource(int dbSeq) { for (ManagerListDTO dto : treeList) { for (UserDBDAO userDB : dto.getManagerList()) { if (userDB.getSeq() == dbSeq) { if (userDB.getListUserDBErd() != null) userDB.getListUserDBErd().clear(); try { List<UserDBResourceDAO> listUserDBErd = TadpoleSystem_UserDBResource.userDbErdTree(userDB); if (null != listUserDBErd) { for (UserDBResourceDAO userDBResouceDAO : listUserDBErd) { userDBResouceDAO.setParent(userDB); } userDB.setListUserDBErd(listUserDBErd); } } catch (Exception e) { logger.error("erd list", e); //$NON-NLS-1$ Status errStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); //$NON-NLS-1$ ExceptionDetailsErrorDialog.openError(getSite().getShell(), "Error", //$NON-NLS-1$ Messages.ManagerViewer_8, errStatus); } managerTV.refresh(userDB); managerTV.expandToLevel(userDB, 3); break; } // if(userDB.getSeq() == dbSeq) { } // for(UserDBDAO } } public void deleteErd(UserDBResourceDAO userDBResource) { UserDBDAO userDB = userDBResource.getParent(); IEditorReference iEditorReference = null; // if (userDBResource.getResource_types().equals(PublicTadpoleDefine.RESOURCE_TYPE.SQL.toString())) { iEditorReference = EditorUtils.findSQLEditor(userDBResource); } else if (userDBResource.getResource_types().equals(PublicTadpoleDefine.RESOURCE_TYPE.ERD.toString())) { iEditorReference = EditorUtils.findERDEditor(userDBResource); } // if (iEditorReference != null) { PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .closeEditor(iEditorReference.getEditor(false), true); } // userDBResource.getParent().getListUserDBErd().remove(userDBResource); managerTV.refresh(userDB); } // /** // * // * tree list // * // * @param dbType // * @param userDB // */ // public void removeTreeList(String dbType, UserDBDAO userDB) { // for(ManagerListDTO dto: treeList) { // if(dto.getName().equals(dbType)) { // dto.removeDB(userDB); // // treeViewer.refresh(); // // // 0 ? ???? // treeViewer.getTree().select(treeViewer.getTree().getItem(0)); // // return; // } // } // } /** * ? . * * @param dto */ public void selectAndOpenView(UserDBDAO dto) { managerTV.refresh(); managerTV.setSelection(new StructuredSelection(dto), true); // mongodb ? . if (DBDefine.getDBDefine(dto) != DBDefine.MONGODB_DEFAULT) { MainEditorInput mei = new MainEditorInput(dto); IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { page.openEditor(mei, MainEditor.ID); } catch (PartInitException e) { logger.error("main editor open", e); //$NON-NLS-1$ Status errStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); //$NON-NLS-1$ ExceptionDetailsErrorDialog.openError(getSite().getShell(), "Error", Messages.ManagerViewer_10, //$NON-NLS-1$ errStatus); } } } /** registery service handler */ private void registerServiceHandler() { downloadServiceHandler = new DownloadServiceHandler(); RWT.getServiceManager().registerServiceHandler(downloadServiceHandler.getId(), downloadServiceHandler); } /** * SQLite file download */ public void download(final UserDBDAO userDB) { try { String strFileLoc = StringUtils .difference(StringUtils.remove(userDB.getDBDefine().getDB_URL_INFO(), "%s"), userDB.getUrl()); File dbFile = new File(strFileLoc); byte[] arrayData = FileUtils.readFileToByteArray(dbFile); downloadServiceHandler.setContentType(""); downloadServiceHandler.setName(dbFile.getName()); //$NON-NLS-1$ downloadServiceHandler.setByteContent(arrayData); DownloadUtils.provideDownload(compositeMainComposite, downloadServiceHandler.getId()); } catch (Exception e) { logger.error("GridFS Download exception", e); //$NON-NLS-1$ Status errStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); //$NON-NLS-1$ ExceptionDetailsErrorDialog.openError(null, "Error", "DB Download Exception", errStatus); //$NON-NLS-1$ //$NON-NLS-2$ } } }