⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caselisttree.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License
 *    along with this program; if not, write to the Free Software
 *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

package eti.bi.alphaminer.ui;


import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.Vector;

import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

import eti.bi.alphaminer.core.handler.AccessController;
import eti.bi.alphaminer.core.handler.CaseInfoListHandler;
import eti.bi.alphaminer.core.observer.ObserveSubject;
import eti.bi.alphaminer.core.observer.Observer;
import eti.bi.alphaminer.vo.CaseInfoList;
import eti.bi.alphaminer.vo.CaseInformation;
import eti.bi.alphaminer.vo.CaseInformationComparator;
import eti.bi.common.Locale.Resource;


/**
 * CaseListTree is a kind of JTree with its leaf nodes correspond to CaseNodes
 * and each parent node represents a grouping category.
 */
public class CaseListTree
	extends JTree
	implements TreeSelectionListener, ObserveSubject {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ManagementPopupMenu m_PopupMenu;	 
	private CaseInformation[] m_CaseInformation;

	private DefaultMutableTreeNode m_RootNode;
	private DefaultTreeModel m_Model;
	private int m_CurrentGroup;

	private Vector m_Observers;
	private ManagementWindow m_Container;
	private boolean dirty = true; //By default, must be true. Dirty = need_fresh TWang.

	/**
	 * Constructs a CaseListTree.
	 * @param a_Window ManagementWindow containing this tree.
	 */
	public CaseListTree(ManagementWindow a_Window) {
		super();
		m_Container = a_Window;
		m_PopupMenu = new ManagementPopupMenu(m_Container);
//		m_RefreshMenu = new RefreshMenu(this);//<<23/03/2005 Mark Li: Remove Refresh button in CaseListTree
		m_Observers = new Vector();
		setCurrentGroup(Resource.srcStr("m_LabelCompany"));
		m_RootNode = new DefaultMutableTreeNode("Cases");
		m_Model = new DefaultTreeModel(null);
		setTreeModel();//Need to update if dirty. TWang.
		m_Model.reload();
		
		this.setModel(m_Model);
		this.setRootVisible(false);
		this.setShowsRootHandles(true);

		TreeSelectionModel selectionModel = this.getSelectionModel();
		selectionModel.setSelectionMode(
			TreeSelectionModel.SINGLE_TREE_SELECTION);
		this.setSelectionModel(selectionModel);
		this.addTreeSelectionListener(this);
		
//		<<23/03/2005 Mark Li: Remove Refresh button in CaseListTree
		MouseAdapter treeMouseListener = new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				Point clickedLocation = e.getPoint();
				TreePath path = getPathForLocation(e.getX(), e.getY());
				if (path == null) {
					if (e.getClickCount() == 1
						&& e.getButton() == MouseEvent.BUTTON3) {
//						m_RefreshMenu.show(
//							(Component) e.getSource(),
//							(int) clickedLocation.getX(),
//							(int) clickedLocation.getY());
					}
					return;
				}
				

				DefaultMutableTreeNode node =
					(DefaultMutableTreeNode) path.getLastPathComponent();
				String caseID = null;
				if (node != null && node.isLeaf()) {
					caseID = ((CaseNode) node).getCaseID();
					if (e.getClickCount() == 2
						&& e.getButton() == MouseEvent.BUTTON1)
						m_Container.getApplicationWindow().editCase(
							caseID,
							true);
					else if (
						e.getClickCount() == 1
							&& e.getButton() == MouseEvent.BUTTON3) {
						setSelectionPath(path);
						m_PopupMenu.setCaseID(caseID);
						m_PopupMenu.setLocation(
							(int) clickedLocation.getX(),
							(int) clickedLocation.getY());
						m_PopupMenu.show(
							(Component) e.getSource(),
							(int) clickedLocation.getX(),
							(int) clickedLocation.getY());
					}
				}
			}
		};
		addMouseListener(treeMouseListener);
//		23/03/2005 Mark Li: Remove Refresh button in CaseListTree>>
	}

	/**
	 * Sets the current grouping category.
	 * @param a_Group name of the grouping category to be set.
	 */
	public void setCurrentGroup(String a_Group) {
		if (a_Group.equals(Resource.srcStr("m_LabelIndustry")))
			m_CurrentGroup = CaseInformationComparator.INDUSTRY;
		else if (a_Group.equals(Resource.srcStr("m_LabelProblem")))
			m_CurrentGroup = CaseInformationComparator.PROBLEM_TYPE;
		else if (a_Group.equals(Resource.srcStr("m_LabelObjective")))
			m_CurrentGroup = CaseInformationComparator.BUSINESS_OBJECTIVE;
		else if (a_Group.equals(Resource.srcStr("m_LabelGoal")))
			m_CurrentGroup = CaseInformationComparator.DATAMINING_GOAL;
		else if (a_Group.equals(Resource.srcStr("m_LabelCompany")))
			m_CurrentGroup = CaseInformationComparator.COMPANY_NAME;
	}

	/**
	 * Sets TreeModel of the CaseListTree. Lazy-update mode. TWang.
	 * @param a_IsRefreshed true to retrieve updated tree model content from the
	 * server; false to show the existed tree model content.
	 */
	@SuppressWarnings("unchecked")
	public void setTreeModel() {
		boolean a_IsRefreshed = dirty;
		CaseInfoList list =
			CaseInfoListHandler.getInstance().getCaseInfoList(a_IsRefreshed);
		if(a_IsRefreshed){
			dirty = false;
		}
		CaseInformationComparator comparator = null;
		m_RootNode.removeAllChildren();

		if (list != null) {
			comparator = new CaseInformationComparator();
			comparator.setAscending(true);
			comparator.setSortBy(m_CurrentGroup);
			m_CaseInformation = list.getCaseInfoArray(AccessController.getInstance().getM_DMEngineName());			
			//<<Frank J. Xu, 20/01/2005
			if(m_CaseInformation != null && m_CaseInformation.length > 0)
			{
				Arrays.sort(m_CaseInformation, comparator);
				//Arrays.sort(m_CaseInformation);
				buildTree();
			}
			//>>Frank J. Xu, 20/01/2005
		}

		m_Model.setRoot(m_RootNode);
	}

	/**
	 * Change the menu, tool bar, and CaseInformationPanel state according to the change 
	 * of the JTree. 
	 * TWang. Apri 1, 2005.
	 * @see javax.swing.event.TreeSelectionListener#valueChanged(TreeSelectionEvent)
	 */
	public void valueChanged(TreeSelectionEvent e) {
		adjustAccordToTreeFoucsChange();
	}
	
	/**
	 * Change the menu, tool bar, and CaseInformationPanel state according to the change 
	 * of the JTree. 
	 * TWang. Apri 1, 2005.
	 * @see javax.swing.event.TreeSelectionListener#valueChanged(TreeSelectionEvent)
	 */
	public void adjustAccordToTreeFoucsChange(){

		DefaultMutableTreeNode node =
			(DefaultMutableTreeNode) this.getLastSelectedPathComponent();	
		
		//if (this.isShowing() && m_Container.isSelected() && m_Container.isVisible()){
			if (node != null && node.isLeaf()) { 
				//System.out.println("display " + ((CaseNode) node).getCaseID());
				for (int i = 0; i < m_Observers.size(); i++) {
					Observer observer = (Observer) m_Observers.elementAt(i);
					if (observer instanceof CaseInformationPanel)
					{
						((CaseInformationPanel) observer).displayCaseDetail(
							((CaseNode) node).getCaseID(), false);
					}
					else
					{				
						observer.sendNotify("select|" + ((CaseNode) node).getCaseID());
					}
				}
			} else { 
			// change menu, tool bar, and CaseInformationPanel if clicking on non-leaf node
			// or node == null.
				for (int i = 0; i < m_Observers.size(); i++) {
					Observer observer = (Observer) m_Observers.elementAt(i);
					if (observer instanceof CaseInformationPanel)
					{
						if (this.isShowing() && m_Container.isSelected() && m_Container.isVisible()){
							((CaseInformationPanel) observer).setButtonActionCommand(null);
						}
						((CaseInformationPanel) observer).setShownDetail(false);
					}
					else
					{	
						if (this.isShowing() && m_Container.isSelected() && m_Container.isVisible()){
							observer.sendNotify("login");
						}
					}
				}
			}

		//}
	
	}
	/**
	 * @see eti.bi.alphaminer.core.observer.ObserveSubject#registerInterest(Observer)
	 */
	@SuppressWarnings("unchecked")

⌨️ 快捷键说明

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