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

📄 applicationwindow.java

📁 一个数据挖掘软件ALPHAMINERR的整个过程的JAVA版源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
 *    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.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Point;
import java.awt.event.WindowEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowStateListener;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.DefaultDesktopManager;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JInternalFrame.JDesktopIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;

import eti.bi.alphaminer.Locale.LocalesManager;
import eti.bi.alphaminer.core.handler.AccessController;
import eti.bi.alphaminer.core.handler.CaseHandler;
import eti.bi.alphaminer.core.handler.CaseInfoListHandler;
import eti.bi.alphaminer.core.observer.HelpObserver;
import eti.bi.alphaminer.core.observer.HelpObserveSubject;
import eti.bi.alphaminer.core.observer.ObserveSubject;
import eti.bi.alphaminer.core.observer.Observer;
import eti.bi.alphaminer.core.workspace.WorkspacesManager;
import eti.bi.alphaminer.jhelpcomponent.HelpCursor;
import eti.bi.alphaminer.jhelpcomponent.JHelpDesktopPane;
import eti.bi.alphaminer.jhelpcomponent.JHelpPanel;
import eti.bi.common.Locale.Resource;
import eti.bi.common.System.SysConfig;
import eti.bi.alphaminer.tools.SystemTools.CaseHelpToolBarHandler;
import eti.bi.alphaminer.ui.dialog.MessageDialog;
import eti.bi.alphaminer.ui.menu.MainMenuBarHandler;
import eti.bi.alphaminer.vo.BICase;
import eti.bi.exception.BaseException;
import eti.bi.exception.SysException;

/**
 * ApplicationWindow is the main frame of the KBBI-client standalone application.
 */
public class ApplicationWindow extends JFrame implements 
Observer,
HelpObserver,
ObserveSubject,
WindowStateListener,
MouseListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/* Modal frames of ApplicationWindow */
	private AboutDialog m_AboutDialog;
	private SearchingCriteria m_SearchingCriteria;
	
	/* Internal frame of ApplicationWindow */
	private ManagementWindow m_ManagementWindow;

	/* Menubar handler */
	private MainMenuBarHandler m_MenuBarHandler;
	/* Content pane of ApplicationWindow frame 
	   containing panel content and status bar */
	private JPanel m_ContentPaneApplicationWindow;

	/* Panel content containing a toolbar and a desktop pane */
//	private JPanel m_PanelContent; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>
	private JHelpPanel m_PanelContent; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>
	/* Toolbar handler */
	private ToolBarHandler m_ToolBarHandler;
	/* Desktop pane for internal frames */
//	private JDesktopPane m_ContentApplicationWindow; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>
	private JHelpDesktopPane m_ContentApplicationWindow; // <<27/07/2005 Kenneth Lai: Modify for JHelp>>

	/* Status bar */
	private JHelpPanel m_StatusBarApplicationWindow;
	private JLabel m_StatusBarMessage;

	
	private ApplicationWindowDesktopManager m_ApplicationWindowDesktopManager;
	
	private int m_NewCase;

	private ArrayList<CaseWindow> CaseWindowList = new ArrayList<CaseWindow>();
	
	
	//<<11/12/2005, XJ. Chen 
	//private ResourceBundle m_Messages;

	//<<20/01/2005, Frank J. Xu
	//To Adapt to Different Data Mining Engine
	private int m_DMEngineType;
	//20/01/2005, Frank J. Xu>>
	
	//<<25/01/2005, Mark Li
	//Add a pop up picture before enter the main function
//	private final static String splashIconName = "bin/kbbiapplication/ui/images/splash.png";
	//25/01/2005, Mark Li>>
	
	//<<01/02/2005, Mark
	//Add an image as background
//	private final static String backgroundImage = "bin/kbbiapplication/ui/images/Background.png";
//	private JLabel backgroundLabel;
	//01/02/2005, Mark>>
	
//	<<23/03/2005 Mark Li: Set flag to show Search Window
	public boolean enableSerachResultPanel = true;
	//	<<23/03/2005 Mark Li: Set flag to show Search Window
	
	private boolean m_HelpState;
	//	25/07/2005: Kenneth Lai: Add for JHelp>>
	
	public static boolean POPUP_WINDOW = false;
	
	public static final String NOTIFY_SAVE_CASE="SAVE_CASE";
	public static final String NOTIFY_DELETE_CASE = "DELETE_CASE";
	private static Vector<Observer> observers = new Vector<Observer>();
	/**
	 * Constructs an ApplicationWindow.
	 * @param a_Messages the ResourceBundle to be used.
	 * @throws SysException
	 */
	//<<11/12/2005, XJ. Chen 
	//public ApplicationWindow(ResourceBundle aMessages) throws SysException {
	public ApplicationWindow() throws SysException {
		//<<11/12/2005, XJ. Chen 
		//m_Messages = aMessages;
		
		MessageDialog.setFrame(this);
	    
		/*
	    Frame splashFrame = SplashWindow.splash(splashImage);
	    splashFrame.setAlwaysOnTop(true);
	    splashFrame.
	    */
		
	    createApplicationWindow();
	    Resource.registerInterest(this);
	}

	/**
	 * Gets the toolbar handler.
	 * @return ToolBarHandler the toolbar handler.
	 */
	public ToolBarHandler getToolBarHandler() {
		return m_ToolBarHandler;
	}

	/**
	 * Gets the menu bar handler.
	 * @return MenuBarHandler the menu bar handler.
	 */
	public MainMenuBarHandler getMenuBarHandler() {
		return m_MenuBarHandler;
	}

	/**
	 * Gets the desktop pane of the ApplicationWindow frame.
	 * @return ContentApplicationWindow the desktop pane.
	 */
//	public JDesktopPane getDesktopPane() {
	public JHelpDesktopPane getDesktopPane() {// <<22/07/2005 Kenneth Lai: Modify for JHelp
		return m_ContentApplicationWindow;
	}
	
	// <<22/07/2005 Kenneth Lai: Add for JHelp
	public void setHelpState(boolean a_SetActive) {
	    if ( a_SetActive ) {
//		    setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
		    m_HelpState = a_SetActive;
//		    JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
//			if (frames != null) {
//				for (int i = frames.length - 1; i >= 0; i--) {
//					frames[i].setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
//				}
//					}
		}
//	    else {
//	        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
//	    }
	}
	
	public boolean getHelpState() {
	    return m_HelpState;
	}
	// 22/07/2005 Kenneth Lai: Add for JHelp>>
	
	//<< 21/02/2005 Mark Li. Add for dynamic update the Case List window
	public ManagementWindow getManagementWindow(){
		return m_ManagementWindow;
	}
	//21/02/2005 Mark Li. Add for dynamic update the Case List window>>
	/**
	 * Create a new Case.
	 * @param a_CaseID temporary ID of the new Case.
	 */
	public void newCase(String a_CaseID) {
		m_NewCase++;
		CaseWindow caseWin = new CaseWindow(this, true, a_CaseID, true, m_DMEngineType);
		caseWin.setSize(400, 300);// <<22/07/2005 Kenneth Lai: Add for new Case Window cascade problem>>
		caseWin.setTitle(Resource.srcStr("UntitledTitle")  + m_NewCase + " *");
		caseWin.setVisible(true);
		caseWin.moveToFront();
		m_ContentApplicationWindow.add(caseWin);
		CaseWindowList.add(caseWin);
		//cascadeWindows();
		try {
			caseWin.setMaximum(true);
			caseWin.setSelected(true);
		} catch (java.beans.PropertyVetoException pe) {
		}
	}

	/**
	 * Copies a specific Case.
	 * @param a_CaseID ID of the case to be copied.
	 */
	public void copyCase(String a_CaseID) {
		if (a_CaseID == null || a_CaseID.trim().equals(""))
			System.err.println("Cannot copy case without case id");
		newCase(a_CaseID);
	}

	/**
	 * Saves the Case of a CaseWindow in focus.
	 */
	public void saveCase() {
		Component iFrame = m_ContentApplicationWindow.getSelectedFrame();
		if (iFrame instanceof CaseWindow) {
			CaseWindow caseWindow = (CaseWindow) iFrame;
			caseWindow.save();
			sendNotifytoObserver(NOTIFY_SAVE_CASE+"|"+caseWindow.getCaseID());
		};
		
	}

	/**
	 * Saves Cases of all openning CaseWindows.
	 */
	public void saveAllCase() {
		JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
		if (frames != null) {
			for (int i = 0; i < frames.length; i++) {
				if (frames[i].isVisible()) {
					if (frames[i] instanceof CaseWindow)
						 ((CaseWindow) frames[i]).save();
				}
			}
		}
	}

	/**
	 * Closes a CaseWindow in focus.
	 */
	public void closeCase() {
		Component iFrame = m_ContentApplicationWindow.getSelectedFrame();
		if (iFrame instanceof CaseWindow) {
			((CaseWindow) iFrame).close();
		}
	}

	/**
	 * Closes all openning CaseWindows. 
	 * TWang. Apri 1, 2005.
	 * @return true of all CaseWindows are sucessfully closed; false otherwise.
	 */
	public boolean closeAllCase() {
		JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
		if (frames != null) {
			//count how many CaseWindow should be closed.
			int shouldDeleteNum = 0;
			for (int i = 0; i < frames.length; i++) {
				if (frames[i].isVisible() && (frames[i] instanceof CaseWindow)) {
					shouldDeleteNum ++;
				}
			} 
			int previousShouldDel = 0; 
			boolean isMax = false;
			while (shouldDeleteNum > 0){
				previousShouldDel = shouldDeleteNum;
				for (int i = 0; i < frames.length; i++) {			
					if (frames[i].isVisible() && (frames[i] instanceof CaseWindow) && frames[i].isSelected()) {
					//Close CaseWindow according to the selection sequence 
						if (!((CaseWindow) frames[i]).close())
							return false;
						else{
							shouldDeleteNum --;
						}
					} else if (frames[i].isVisible() && (frames[i] instanceof ManagementWindow && frames[i].isSelected())){
					//if the next focus is a ManagementWindow, record isMax or not.
						isMax = ((ManagementWindow)frames[i]).isMaximum();
					}
				} 
				if (previousShouldDel == shouldDeleteNum){
				//if no Selected CaseWindow is found, select one.
					setFocusToFirstCaseWindow(isMax);
				}
			}
		}
		
		//finally, set focus on the Management Window if it is visible		
		for (int i = 0; i < frames.length; i++) {			
			if (frames[i].isVisible() && (frames[i] instanceof ManagementWindow)) {
				try {
					frames[i].setSelected(true);  
				} catch (java.beans.PropertyVetoException pe) {
				}
				break;
			}
		}
		return true;
	}

	/**
	 * Dispose all CaseWindows. 
	 * Xiaojun Chen. July 14, 2006.
	 * @return true of all CaseWindows are sucessfully disposed; false otherwise.
	 */
	public boolean disposeAllCases() {
		JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
		if (frames != null) {
			//count how many CaseWindow should be closed.
			int shouldDeleteNum = 0;
			for (int i = 0; i < frames.length; i++) {
				if ((frames[i] instanceof CaseWindow)) {
					shouldDeleteNum ++;
				}
			} 
			int previousShouldDel = 0; 
			boolean isMax = false;
			while (shouldDeleteNum > 0){
				previousShouldDel = shouldDeleteNum;
				for (int i = 0; i < frames.length; i++) {			
					if ((frames[i] instanceof CaseWindow) && frames[i].isSelected()) {
					//Close CaseWindow according to the selection sequence 
						if (!((CaseWindow) frames[i]).close())
							return false;
						else{
							shouldDeleteNum --;
						}
					} else if ((frames[i] instanceof ManagementWindow && frames[i].isSelected())){
					//if the next focus is a ManagementWindow, record isMax or not.
						isMax = ((ManagementWindow)frames[i]).isMaximum();
					}
				} 
				if (previousShouldDel == shouldDeleteNum){
				//if no Selected CaseWindow is found, select one.
					setFocusToFirstCaseWindow(isMax);
				}
			}
		}
		
		//finally, set focus on the Management Window if it is visible		
		for (int i = 0; i < frames.length; i++) {			
			if (frames[i].isVisible() && (frames[i] instanceof ManagementWindow)) {
				try {
					frames[i].setSelected(true);  
				} catch (java.beans.PropertyVetoException pe) {
				}
				break;
			}
		}
		return true;
	}
	
	/**
	 * Deletes a specific Case.
	 * @param a_CaseID ID of the case to be deleted.
	 */
	public void deleteCase(String a_CaseID) {
		Component iFrame = m_ContentApplicationWindow.getSelectedFrame();
		if (iFrame instanceof CaseWindow) {
			 ((CaseWindow) iFrame).delete();
			 m_ManagementWindow.getCaseListPanel().getCaseListTree().removeChildNode(a_CaseID);
			 sendNotifytoObserver(NOTIFY_DELETE_CASE+"|"+a_CaseID);
			 return;
		}	
		else if (iFrame instanceof ManagementWindow) {
			JInternalFrame[] frames = m_ContentApplicationWindow.getAllFrames();
			if (frames != null) {
				for (int i = 0; i < frames.length; i++) {
					if (frames[i].isVisible()) {
						if (frames[i] instanceof CaseWindow) {
							if (((CaseWindow) frames[i]).getCaseID().equals(a_CaseID))
							{
								((CaseWindow) frames[i]).delete();
								m_ManagementWindow.getCaseListPanel().getCaseListTree().removeChildNode(a_CaseID);
								sendNotifytoObserver(NOTIFY_DELETE_CASE+"|"+a_CaseID);
								return;
							}
						}
					}
				}
			}
			
            String deletedCaseName = null;
            try{ 
            	BICase deletedCase = CaseHandler.getInstance().getCase(a_CaseID,false);            	
            	deletedCaseName
					= deletedCase.getTaskNode().getCaseName()
					+ "( ID:" + CaseListTree.getFormatedCaseID(a_CaseID) + " )";
            }catch (Exception e){
            	
            }
            
			int option =
				JOptionPane.showConfirmDialog(
					(Component) this,
					Resource.srcStr("DeleteConfirm") + deletedCaseName + "\"?",
					"AlphaMiner",
					JOptionPane.YES_NO_OPTION,
					JOptionPane.QUESTION_MESSAGE);
			if (option == JOptionPane.YES_OPTION)
				try {
					
//					<<21/03/2005 Mark Li: modify to update caseList when press delete button					
//					String a_caseName = CaseHandler.getInstance().getCase(a_CaseID,false).getCaseName()

⌨️ 快捷键说明

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