querypageview.java

来自「Hibernate开发及整合应用大全 蔡雪焘编著 本书用典型的示例剖析Hiber」· Java 代码 · 共 259 行

JAVA
259
字号
/* * Created on 13-08-2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */package net.sf.hibernate.console.views;import java.awt.BorderLayout;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.sql.SQLException;import java.util.Iterator;import java.util.List;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JComponent;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JTabbedPane;import javax.swing.JTable;import javax.swing.JTextArea;import javax.swing.JToolBar;import javax.swing.event.ListDataEvent;import javax.swing.event.ListDataListener;import net.sf.hibernate.console.ErrorListModel;import net.sf.hibernate.console.Start;import net.sf.hibernate.console.QueryExecutor;import net.sf.hibernate.console.QueryPage;import net.sf.hibernate.console.QueryPageModel;import net.sf.hibernate.console.SessionController;import net.sf.hibernate.console.swing.BeanTableModel;import net.sf.hibernate.HibernateException;import net.sf.hibernate.Session;/** * @author MAX * */public class QueryPageView extends AbstractSessionView {	final private QueryPageModel qPages;	final private QueryExecutor qe;	final private ErrorListModel errorList;	private final SessionController controller;	private JTabbedPane pane;		public QueryPageView(final QueryExecutor _qe, ErrorListModel em, final SessionController controller) {		this.qe = _qe;		this.errorList = em;		this.controller = controller;		qPages = new QueryPageModel();		pane = new JTabbedPane();		qPages.addListDataListener(new ListDataListener() {			public void intervalAdded(ListDataEvent e) {				contentsChanged(e);			}			public void intervalRemoved(ListDataEvent e) {				contentsChanged(e);			}			boolean updating = false;			public void contentsChanged(ListDataEvent e) {				if(updating) return;				try {				updating = true;				int oldIndex = pane.getSelectedIndex();				pane.removeAll();				JTable table = null; 					for (Iterator iter = qPages.getPages(); iter.hasNext();) {					final QueryPage element = (QueryPage) iter.next();					String tabTitle = element.getID() + ":" + element.getQueryString();					JComponent comp = null;					//Icon icon;										List data = null; 										if(element.getExceptions().size() == 0) {						data = element.getList(); // calling here so if an error occurs the first time it will be shown as an exception.					} else {						// nop					}										if (element.getExceptions().size() > 0) {						JTextArea ta = new JTextArea();						StringBuffer str = new StringBuffer();						str.append(element.getExceptions().size() + " errors occurred while listing (and calling getPathNames).\n");						for (Iterator iterator = element.getExceptions().iterator(); iterator.hasNext();) {                            							Throwable error = (Throwable) iterator.next();                            str.append(error + "\n");                            while(error != null && error.getCause()!=null && error.getCause()!=error) {                                error = error.getCause();                                str.append(error + "\n");                            } 						}						ta.setText(str.toString());						comp = Start.createStrippedScrollPane(ta);					} else {						BeanTableModel btm = new BeanTableModel();						btm.setColumns(element.getPathNames());												btm.setData(data);						table = new JTable(btm);						final JTable fTable = table;												final Action sel = Start.makeInspectAction(fTable, element.getSession());						final Action prop = makeUpdatePropertyAction(QueryPageView.this.controller,table, element.getSession());						Start.configureTableAction(table, sel, prop);												JToolBar tb = new JToolBar("Query page toolbar");						final JCheckBox box = new JCheckBox("Sticky");						box.setSelected(element.isSticky());						tb.add(box);											box.addItemListener(new ItemListener() {							public void itemStateChanged(ItemEvent e) {								element.setSticky(box.isSelected());							}						});						final JButton flush = new JButton(new AbstractAction("flush() & commit()") {							public void actionPerformed(ActionEvent e) {								try {									element.getSession().flush();									element.getSession().connection().commit();								} catch (HibernateException e1) {									errorList.addError(e1);								} catch (SQLException ex) {									errorList.addError(ex);								}															}						});						tb.add(flush);																	//element						JPanel p = new JPanel(new BorderLayout());						p.add(tb, BorderLayout.NORTH);						p.add(Start.createStrippedScrollPane(table), BorderLayout.CENTER);						comp = p;											}					pane.addTab(tabTitle, comp);				}				if (oldIndex < pane.getTabCount() && oldIndex >= 0) {					pane.setSelectedIndex(oldIndex);				} else if (pane.getTabCount() > 0) {					pane.setSelectedIndex(pane.getTabCount() - 1);				}				} finally {					updating = false;				}			}								});		pane.addMouseListener(new MouseAdapter() {			/* (non-Javadoc)			* @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)			*/			/* (non-Javadoc)			* @see java.awt.event.MouseAdapter#mouseReleased(java.awt.event.MouseEvent)			*/			public void mouseReleased(MouseEvent e) {				handleMouse(e, true);			}			public void mouseClicked(MouseEvent e) {				handleMouse(e, false);			}			private void handleMouse(final MouseEvent e, boolean toggleSticky) {				final int i = pane.getUI().tabForCoordinate(pane, e.getX(), e.getY());				QueryPage qp = null;				if (i > -1) {					qp = qPages.get(i);				}				final QueryPage actionQP = qp;				if (e.isPopupTrigger()) {					JPopupMenu pop = new JPopupMenu();					Action removeTab = new AbstractAction("Remove tab") {						public void actionPerformed(ActionEvent ae) {							if (i != -1) {								qPages.remove(i);							}						}					};					Action hqlToEditor = new AbstractAction("Copy query into editor") {						public void actionPerformed(ActionEvent ae) {							if (actionQP != null) {								qe.executeQuery(actionQP.getQueryString());							}						}					};					pop.add(hqlToEditor);					pop.add(removeTab);					pop.show(pane, e.getX(), e.getY());				} else if (toggleSticky && e.getButton() != MouseEvent.NOBUTTON) {					/*if (actionQP != null) {						actionQP.setSticky(!actionQP.isSticky());						qPages.update(i);					} else {						System.out.println("No QueryPage found at " + i);					}*/				}			}		});		}	public Container getContainer() {		return pane;	}		public void queryPageCreated(QueryPage qp) {		qPages.add(qp);			}	static AbstractAction makeUpdatePropertyAction(final SessionController controller, final JTable fTable, final Session session) {    	return new AbstractAction() {    		public void actionPerformed(ActionEvent e) {				int row = fTable.getSelectedRow();				int col = fTable.getSelectedColumn();				if (row >= 0 && col >= 0) {					final Object o = fTable.getModel().getValueAt(row, col);					controller.selectObject(session, o);									}			}    	};    }    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?