NC6 弹框打开节点类

354 篇文章 102 订阅
package nc.funcnode.ui;

import java.awt.Component;
import java.awt.Dimension;

import nc.funcnode.ui.FuncletWindowEngine.OpenParam;
import nc.ui.pub.beans.ExtTabbedPane;
import nc.vo.sm.funcreg.FuncRegisterVO;

public class FuncletWindowLauncher {
	
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO){
		openFuncNodeFrame(invoker, frVO, false);
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, boolean synOpen){
		openFuncNodeFrame(invoker, frVO,null,null, synOpen);
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen){
		OpenParam param = new OpenParam(FuncWindowType.FRAME, initData, invoker, invoker, synOpen, false, linkListener);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, String windowTitle){
		OpenParam param = new OpenParam(FuncWindowType.FRAME, initData, invoker, invoker, synOpen, false, linkListener);
		param.windowTitle = windowTitle;
		new FuncletWindowEngine(frVO).openNode(param);
		
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, Dimension size){
		openFuncNodeFrame(invoker, frVO, false,size);
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, boolean synOpen,Dimension size){
		openFuncNodeFrame(invoker, frVO,null,null, synOpen,size);
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, Dimension size){
		OpenParam param = new OpenParam(FuncWindowType.FRAME, initData, invoker, invoker, synOpen, false, linkListener,size);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, Dimension size, String[] busiActiveCodes){
		OpenParam param = new OpenParam(FuncWindowType.FRAME, initData, invoker, invoker, synOpen, false, linkListener,size,busiActiveCodes);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeFrame(Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener,FuncletListener funcletListener, boolean synOpen, Dimension size, String[] busiActiveCodes){
		OpenParam param = new OpenParam(FuncWindowType.FRAME, initData, invoker, invoker, synOpen, false, linkListener, funcletListener,size,busiActiveCodes);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	/
	
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO){
		openFuncNodeDialog(parent, frVO, false, false);
	}
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, boolean modal, boolean synOpen){
		openFuncNodeDialog(parent, frVO, null, null, modal, synOpen);
	}
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean modal, boolean synOpen){
		OpenParam param = new OpenParam(FuncWindowType.DIALOG,initData, parent, parent,synOpen, modal, linkListener);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean modal, boolean synOpen,String windowTitle){
		OpenParam param = new OpenParam(FuncWindowType.DIALOG,initData, parent, parent,synOpen, modal, linkListener);
		param.windowTitle = windowTitle;
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO,Dimension size){
		openFuncNodeDialog(parent, frVO, false, false,size);
	}
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, boolean modal, boolean synOpen, Dimension size){
		openFuncNodeDialog(parent, frVO, null, null, modal, synOpen,size);
	}
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean modal, boolean synOpen, Dimension size){
		OpenParam param = new OpenParam(FuncWindowType.DIALOG,initData, parent, parent,synOpen, modal, linkListener,size);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean modal, boolean synOpen, Dimension size,boolean reset){
		OpenParam param = new OpenParam(FuncWindowType.DIALOG,initData, parent, parent,synOpen, modal, linkListener,size,reset);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean modal, boolean synOpen, Dimension size,String[] busiActiveCodes){
		OpenParam param = new OpenParam(FuncWindowType.DIALOG,initData, parent, parent,synOpen, modal, linkListener,size,busiActiveCodes);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener,FuncletListener funcletListener, boolean modal, boolean synOpen, Dimension size,String[] busiActiveCodes){
		OpenParam param = new OpenParam(FuncWindowType.DIALOG,initData, parent, parent,synOpen, modal, linkListener, funcletListener ,size,busiActiveCodes);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	
	
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO){
		openFuncNodeForceModalDialog(parent, frVO, false);
	}
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, boolean synOpen){
		openFuncNodeForceModalDialog(parent, frVO, null, null, synOpen);
	}
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen){
		OpenParam param = new OpenParam(FuncWindowType.FORCEMODALDLG,initData, parent, parent,synOpen, true, linkListener);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO,Dimension size){
		openFuncNodeForceModalDialog(parent, frVO, false,size);
	}
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, boolean synOpen, Dimension size){
		openFuncNodeForceModalDialog(parent, frVO, null, null, synOpen,size);
	}
	
	/**
	 * add by maokun 2015-2-3  添加对最大化打开窗口的支持
	 * @param parent
	 * @param frVO
	 * @param initData
	 * @param linkListener 
	 * @param synOpen
	 * @param size
	 * @param reset
	 */
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, Dimension size,boolean reset){
		OpenParam param = new OpenParam(FuncWindowType.FORCEMODALDLG,initData, parent, parent,synOpen, true, linkListener,size, reset);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, Dimension size){
		OpenParam param = new OpenParam(FuncWindowType.FORCEMODALDLG,initData, parent, parent,synOpen, true, linkListener,size);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, Dimension size,String[] busiActiveCodes){
		OpenParam param = new OpenParam(FuncWindowType.FORCEMODALDLG,initData, parent, parent,synOpen, true, linkListener,size,busiActiveCodes);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, FuncletListener funcletListener, boolean synOpen, Dimension size,String[] busiActiveCodes){
		OpenParam param = new OpenParam(FuncWindowType.FORCEMODALDLG,initData, parent, parent,synOpen, true, linkListener,funcletListener,size,busiActiveCodes);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeForceModalDialog(Component parent, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, FuncletListener funcletListener, boolean synOpen, Dimension size,String[] busiActiveCodes,boolean reset){
		OpenParam param = new OpenParam(FuncWindowType.FORCEMODALDLG,initData, parent, parent,synOpen, true, linkListener,funcletListener,size,busiActiveCodes);
		param.setResetable(reset);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	
	public static void openFuncNodeInTabbedPane(Component invoker, FuncRegisterVO frVO){
		openFuncNodeInTabbedPane(invoker, frVO, null, null, false);
	}
	public static void openFuncNodeInTabbedPane(Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen) {
		openFuncNodeInTabbedPane(null, invoker, frVO, initData, linkListener, synOpen);
	}
	public static void openFuncNodeInTabbedPane(Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, String windowTitle) {
		openFuncNodeInTabbedPane(null, invoker, frVO, initData, linkListener, synOpen,windowTitle);
	}
	public static void openFuncNodeInTabbedPane(ExtTabbedPane parent, Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen) {
		OpenParam param = new OpenParam(FuncWindowType.TAB_PANEL, initData, parent, invoker, synOpen, false, linkListener);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeInTabbedPane(ExtTabbedPane parent, Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, String windowTitle) {
		OpenParam param = new OpenParam(FuncWindowType.TAB_PANEL, initData, parent, invoker, synOpen, false, linkListener);
		param.windowTitle = windowTitle;
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeInTabbedPane(ExtTabbedPane parent, Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, boolean synOpen, String[] busiaStrings) {
		OpenParam param = new OpenParam(FuncWindowType.TAB_PANEL, initData, parent, invoker, synOpen, false, linkListener,null, busiaStrings);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static void openFuncNodeInTabbedPane(ExtTabbedPane parent, Component invoker, FuncRegisterVO frVO, FuncletInitData initData, FuncletLinkListener linkListener, FuncletListener funcletListener, boolean synOpen, String[] busiaStrings) {
		OpenParam param = new OpenParam(FuncWindowType.TAB_PANEL, initData, parent, invoker, synOpen, false, linkListener,funcletListener,null, busiaStrings);
		new FuncletWindowEngine(frVO).openNode(param);
	}
	public static boolean hasOpenning(){
		return FuncletWindowEngine.hasOpenning();
	}
}

package nc.funcnode.ui;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

import nc.bcmanage.vo.BusiCenterVO;
import nc.bs.framework.common.NCLocator;
import nc.bs.framework.common.UserExit;
import nc.bs.framework.exception.FrameworkSecurityException;
import nc.bs.logging.Logger;
import nc.desktop.ui.FuncPowerTreeSupport;
import nc.desktop.ui.WorkbenchEnvironment;
import nc.funcnode.bs.FuncletModel;
import nc.funcnode.bs.IOpenNodeRCService;
import nc.login.vo.AttachedProps;
import nc.login.vo.LicCheckResult;
import nc.login.vo.NCSession;
import nc.sfbase.client.CheckDevice;
import nc.sfbase.client.ClientToolKit;
import nc.sfbase.toolkit.ComponentUILock;
import nc.sfbase.vo.NCEnv;
import nc.ui.ml.NCLangRes;
import nc.ui.pub.beans.ExtTabbedPane;
import nc.ui.pub.beans.MessageDialog;
import nc.ui.sm.task.TaskGroup;
import nc.vo.org.GroupVO;
import nc.vo.pub.lang.UFDate;
import nc.vo.pub.lang.UFTime;
import nc.vo.pub.operatelog.OperateLogVO;
import nc.vo.sm.funcreg.FuncRegisterVO;
import nc.vo.uap.rbac.profile.FuncNodePermInfoWrapper;
import nc.vo.uap.rbac.profile.FunctionPermProfileManager;
import nc.vo.uap.rbac.profile.IFunctionPermProfile;
import uap.pub.fs.client.FileStorageClient;

class FuncletWindowEngine {
	static class OpenParam {
		public OpenParam(FuncWindowType funcWindowType, FuncletInitData initData, Component parent, Component invoker,
				boolean synOpen, boolean modal, FuncletLinkListener linkListener) {
			super();
			this.funcWindowType = funcWindowType;
			this.initData = initData;
			this.parent = parent;
			this.invoker = invoker;
			this.synOpen = synOpen;
			this.modal = modal;
			this.linkListener = linkListener;

		}

		public OpenParam(FuncWindowType funcWindowType, FuncletInitData initData, Component parent, Component invoker,
				boolean synOpen, boolean modal, FuncletLinkListener linkListener, Dimension size) {
			this(funcWindowType, initData, parent, invoker, synOpen, modal, linkListener);
			this.size = size;

		}
		
		public OpenParam(FuncWindowType funcWindowType, FuncletInitData initData, Component parent, Component invoker,
				boolean synOpen, boolean modal, FuncletLinkListener linkListener, Dimension size, boolean isResetable) {
			this(funcWindowType, initData, parent, invoker, synOpen, modal, linkListener);
			this.size = size;
			this.setResetable(isResetable);
		}

		public OpenParam(FuncWindowType funcWindowType, FuncletInitData initData, Component parent, Component invoker,
				boolean synOpen, boolean modal, FuncletLinkListener linkListener, Dimension size,
				String[] busiActiveCodes) {
			this(funcWindowType, initData, parent, invoker, synOpen, modal, linkListener, size);
			this.busiActiveCodes = busiActiveCodes;

		}
		public OpenParam(FuncWindowType funcWindowType, FuncletInitData initData, Component parent, Component invoker,
				boolean synOpen, boolean modal, FuncletLinkListener linkListener, FuncletListener funcletListener, Dimension size,
				String[] busiActiveCodes) {
			this(funcWindowType, initData, parent, invoker, synOpen, modal, linkListener, size, busiActiveCodes);
			this.funcletListener = funcletListener;

		}


		public OpenParam setResetable(boolean isResetable) {
			this.isResetable = isResetable;
			return this;
		}

		public FuncWindowType funcWindowType = FuncWindowType.TAB_PANEL;
		public FuncletInitData initData = null;
		public Component parent = null;
		public Component invoker = null;
		public boolean synOpen = false;
		public boolean modal = false;
		public FuncletLinkListener linkListener = null;
		public FuncletListener funcletListener = null;
		public Dimension size = null;
		public String[] busiActiveCodes = null;
		public String windowTitle = null;
		private boolean isResetable = false;
		public boolean isResetable() {
			return isResetable;
		}
		
		
	}

	private FuncRegisterVO frVO = null;
	private AttachedProps response = null;
	private AttachedProps request = null;
	private static int openningCount = 0;
	public FuncletWindowEngine(FuncRegisterVO frVO) {
		super();
		if(frVO == null){
			throw new RuntimeException("funcRegisterVO can't be null");
		}
		this.frVO = frVO;
	}

	public void openNode(final OpenParam openParam) {
		final Runnable run = new Runnable() {
			@Override
			public void run() {
//				Cursor oldCursor = null;
				if (openParam.invoker != null){
//					oldCursor = openParam.invoker.getCursor();
//					openParam.invoker.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
					ComponentUILock.lockComponent(openParam.invoker);
				}
				try {
					synchronized (frVO.getFuncode()) {
						openNodeImple(openParam);
					}
				} catch (Exception e) {
					Logger.error(e.getMessage(), e);
				} finally{
					if (openParam.invoker != null){
//						openParam.invoker.setCursor(oldCursor);
						ComponentUILock.unlockComponent(openParam.invoker);
					}
					
				}

			}
		};
		boolean synOpen = openParam.synOpen;
		if (synOpen) {
			run.run();
		} else {
			 new Thread(run, "open node " + frVO.getFuncode()).start();
//			SwingWorker<Object, Object> worker = new SwingWorker<Object, Object>() {
//				@Override
//				protected Object doInBackground() throws Exception {
//					run.run();
//					return null;
//				}
//			};
//			worker.execute();
		}
	}
	private String dealOpenNodeForLogMonitor(){
		String text = "#busiaction:Open Node-"+frVO.getFun_name();
//		UserExit.getInstance().setBusiaction("打开节点-"+frVO.getFun_name());
		Logger.debug(text);
		return text;
		
	}
	private void openNodeImple(OpenParam openParam) throws Exception {
//		Component invoker = openParam.invoker;
		try {
			String logMsg = "opening node:"+frVO.getFuncode()+" / "+frVO.getFun_name() +" / "+frVO.getOwn_module();
			Logger.debug(logMsg);
			Component parent = openParam.parent;
			IFuncletWindow window = findOpenedWindow(openParam);
			if (window != null) {
				showWindowInEDT(window);
				if (openParam.initData != null) {
					try {
						window.getCurrFunclet().initData(openParam.initData);
					} catch (Throwable th) {
						Logger.error(th.getMessage(), th);
					}
				}
				return;
			}
			UserExit.getInstance().setBusiaction(NCLangRes.getInstance().getStrByID("sfbase", "FWEngine-0000", null, new String[]{frVO.getFun_name()})/*打开节点-{0}*/);
			if (!canOpen(openParam)) {
				return;
			}
			openningCount++;
			if (isTopLevelComp()) {

			} else {
				String logText = dealOpenNodeForLogMonitor();
				long t1 = System.currentTimeMillis();
				FuncletWidgetContainer fwContainer = createFuncletWidgetContainer(openParam);
				long t2 = System.currentTimeMillis() - t1;
				String text = logText + " cost time "+t2;
				Logger.debug(text);
				if (fwContainer != null) {
					String windowTitle = openParam.windowTitle;
					if(windowTitle == null || windowTitle.trim().length() == 0){
						windowTitle = FuncPowerTreeSupport.getFuncNodeDisplayName(frVO);// .getFunTransStr(frVO.getFun_code(),
					}
					// frVO.getFun_name());
					FuncWindowType type = openParam.funcWindowType;
					if (type.equals(FuncWindowType.FRAME)) {
						window = new FuncNodeFrame(windowTitle, fwContainer);
						FuncNodeFrame frame = (FuncNodeFrame) window;
						if (openParam.size != null) {
							frame.setSize(openParam.size);
						}
						// frame.setLocationRelativeTo(openParam.parent);
						setWindowToScreenCenter(frame);
					} else if (type.equals(FuncWindowType.DIALOG)) {
						boolean modal = openParam.modal;
						Window owner = null;
						Component comp = openParam.parent;
						if (comp != null)
							owner = ClientToolKit.getWindowFromComponent(comp);// JOptionPane.getFrameForComponent(comp);
//						window = new FuncNodeDialog(owner, windowTitle, modal, fwContainer);
//						
						window = new FuncNodeDialog(owner, windowTitle, modal, fwContainer, openParam.isResetable());
						
						FuncNodeDialog dlg = ((FuncNodeDialog) window);
						if (openParam.size != null) {
							dlg.setSize(openParam.size);
						}
						// dlg.setLocationRelativeTo(dlg.getParent());
						setWindowToScreenCenter(dlg);
					} else if (type.equals(FuncWindowType.FORCEMODALDLG)) {
						Window owner = null;
						Component comp = openParam.parent;
						if (comp != null)
							owner = ClientToolKit.getWindowFromComponent(comp);// JOptionPane.getFrameForComponent(comp);
						window = new FuncNodeForceModalDlg(owner, windowTitle, fwContainer, openParam.isResetable());
						FuncNodeForceModalDlg dlg = (FuncNodeForceModalDlg) window;
						if (openParam.size != null) {
							dlg.setSize(openParam.size);
						}
						// dlg.setLocationRelativeTo(dlg.getParent());
						setWindowToScreenCenter(dlg);
					} else {
						ExtTabbedPane tabbedPane = WorkbenchEnvironment.getInstance().getWorkbench()
								.getWorkSpaceTabbedPane();
						if (parent != null && parent instanceof ExtTabbedPane) {
							tabbedPane = (ExtTabbedPane) parent;
						}
						window = new FuncNodePanel(tabbedPane, fwContainer,windowTitle);
					}
					showWindowInEDT(window);
					showAlterFilesInThread(window);
				}
			}
		} catch (Throwable thr) {
			Logger.error(thr.getMessage(), thr);
		} finally {
			openningCount--;
		}
	}
	private void showWindowInEDT(final IFuncletWindow window ){
		Runnable run = new Runnable() {
			@Override
			public void run() {
				window.showWindow();
			}
		};
		if(SwingUtilities.isEventDispatchThread()){
			run.run();
		}else{
			SwingUtilities.invokeLater(run);
		}
	}
	private void setWindowToScreenCenter(Window w) {
		Dimension size = w.getSize();
		Dimension scsize = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (scsize.width - size.width) / 2;
		int y = (scsize.height - size.height) / 2;
		if (x < 0)
			x = 0;
		if (y < 0)
			y = 0;
		w.setLocation(x, y);
	}

	private void showAlterFilesInThread(final IFuncletWindow window) {
		if (WorkbenchEnvironment.getInstance().isUser()) {
			new Thread() {
				public void run() {
					String[][] files = getAlterFiles();
					try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						Logger.error(e.getMessage(), e);
					}
					showAlterFiles(files, window);
				}
			}.start();
		}
	}
	
	private String[][] getAlterFiles() {
		String files[][] = null;
		try {
			files = (String[][]) response.getAttachedProp("_AlertFile");
		} catch (Exception e) {
			Logger.error("Error", e);
		}
		return files;
	}

	private void showAlterFiles(String[][] files, IFuncletWindow window) {
		// 预警文件
		if (files != null && files.length > 0) {
			Logger.debug("==== Funcnode Alter Files ====");
			HashMap<String, URL> hm = new HashMap<String, URL>();
			for (int i = 0; i < files.length; i++) {
				String[] alterFile = files[i];
				try {
					Logger.debug(alterFile[0] + ":" + alterFile[1]);
					URL url = convertAlterFileStringToURL(alterFile[1]);
					hm.put(alterFile[0], url);
				} catch (Exception e) {
					Logger.error(e.getMessage(), e);;
				}
			}
			if (hm.size() == 1) {
				ClientToolKit.showDocument(hm.values().iterator().next(), "_blank");
			} else {
				TaskGroup tg = window.getTaskGroupFactory().getTaskGroup(NCLangRes.getInstance().getStrByID("sfbase", "FWEngine-0001", null, new String[]{frVO.getFun_name()})/*预警文件:{0}*/);
				tg.removeAllAction();

				Iterator<String> iter = hm.keySet().iterator();
				while (iter.hasNext()) {
					String key = iter.next();
					final URL url = hm.get(key);
					Action a = new AbstractAction(key) {
						private static final long serialVersionUID = 1L;

						public void actionPerformed(ActionEvent e) {
							ClientToolKit.showDocument(url, "_blank");
						}
					};
					tg.addAction(a);
				}
			}
			Logger.debug("======== End =========");
		} else {
			Logger.debug("========No alert files!============");
		}
		//

	}

	private URL convertAlterFileStringToURL(String file) throws Exception {
//		StringBuilder sbUrl = new StringBuilder(ClientToolKit.getServerURL()).append("service/ShowAlertFileServlet?");
//		sbUrl.append("dsName=").append(WorkbenchEnvironment.getInstance().getDSName());
//		sbUrl.append("&fileName=").append(file);
//		URL url = new URL(sbUrl.toString());
		String sbUrl = FileStorageClient.getInstance()
				.getDownloadURL(null, file);
		URL url = new URL(sbUrl.toString());
		return url;
	}

	private boolean isTopLevelComp() throws Exception {
		String clsName = frVO.getClass_name();
		Class<?> cls = Class.forName(clsName);
		if (Window.class.isAssignableFrom(cls)) {
			return true;
		}
		return false;
	}
	
	private FuncletWidgetContainer createFuncletWidgetContainer(OpenParam openParam) {
		FuncletWidgetContainer fwContainer = null;
		try {
			FuncletModel funcletModel = null;
			if (response != null) {
				funcletModel = response.getAttachedProp(FuncletModel.class);
				if(funcletModel!=null){
				FuncNodePermInfoWrapper wrapper = funcletModel.getFuncNodePermInfoWrapper();
				
				String userCode = WorkbenchEnvironment.getInstance().getLoginUser().getUser_code();
				IFunctionPermProfile profile = FunctionPermProfileManager.getInstance().getProfile(userCode);
				if (profile != null)
					profile.updateFuncNodeDetailPermInfo(wrapper,openParam.busiActiveCodes);
				}
				// FunctionPermProfileManager.getInstance().updateProfile(userCode,profile);
			}
			fwContainer = FuncletWidgetContainerFactory.createFuncletWidgetContainer(frVO, funcletModel,
					openParam.initData, openParam.linkListener, openParam.funcletListener);
		} catch (PreOpenCheckException e) {
			String msg = e.getMessage();
			FuncletWidgetContainerFactory.unregisterServerInfo(frVO.getFuncode(), frVO.getOwn_module());
			fwContainer = null;
			if (msg != null && msg.trim().length() > 0) {
				Frame frame = JOptionPane.getFrameForComponent(openParam.parent);
				MessageDialog.showHintDlg(frame, NCLangRes.getInstance().getStrByID("sfbase", "sfbase-0002")/*提示*/, msg);
			}
		} catch (Throwable e) {
			Logger.error(e.getMessage(), e);
			FuncletWidgetContainerFactory.unregisterServerInfo(frVO.getFuncode(), frVO.getOwn_module());
		}
		return fwContainer;

	}

	private IFuncletWindow findOpenedWindow(OpenParam openParam) {
		if (FuncWindowType.FORCEMODALDLG.equals(openParam.funcWindowType)) {
			return null;
		}
		String funcCode = frVO.getFuncode();
		IFuncletWindow window = WorkbenchEnvironment.getInstance().findOpenedFuncletWindow(funcCode);
		return window;
	}
	public String getDetailMsg(LicCheckResult result){
		StringBuilder sb = new StringBuilder();
		sb.append(NCLangRes.getInstance().getStrByID("sfbase", "FuncletWindowEngine-0000")/*所属模块:*/).append(result.getOwnModule()).append("\r\n");
		sb.append(NCLangRes.getInstance().getStrByID("sfbase", "FuncletWindowEngine-0001")/*授权模块:*/).append(result.getLicModule()).append("\r\n");
		sb.append(NCLangRes.getInstance().getStrByID("sfbase", "FuncletWindowEngine-0002")/*授权数:*/).append(result.getModuleLic()).append("\r\n");
		sb.append(NCLangRes.getInstance().getStrByID("sfbase", "FuncletWindowEngine-0003")/*授权占用数:*/).append(result.getModuleLicUsed()).append("\r\n");
		sb.append(NCLangRes.getInstance().getStrByID("sfbase", "FuncletWindowEngine-0004")/*平台授权数:*/).append(result.getPlatformLic()).append("\r\n");
		sb.append(NCLangRes.getInstance().getStrByID("sfbase", "FuncletWindowEngine-0005")/*平台占用数:*/).append(result.getPlatformLicUsed()).append("\r\n");
		return sb.toString();
	}
	/**
	 * 检查该节点是否允许被打开,返回true表示可以打开,返回false表示不允许打开
	 * 
	 * @param retrVO
	 * @return
	 */
	private boolean canOpen(OpenParam openParam) {
		boolean canOpen = true;
		try {
			fetchOpenNodeRCResponse(openParam);
		} catch (Exception e) {
			Logger.error(e.getMessage(), e);;
			return false;
		}
		// 检查产品授权数:
		if (NCEnv.isControlLicense() && !FuncWindowType.FORCEMODALDLG.equals(openParam.funcWindowType)) {
			/**
			 * 写回0,表示可以打开 写回1,表示产品使用达到最大授权数
			 */
			int retr = (Integer) response.getAttachedProp("checkLicenseResult");
			if (retr == 1) {
				String msg = NCLangRes.getInstance().getStrByID("smcomm","UPP1005-000085");/*该产品的用户数已达到产品授权数! */
				LicCheckResult result = (LicCheckResult)response.getAttachedProp(LicCheckResult.class.getName());
				if(result != null){
					String detailMsg = getDetailMsg(result);
					msg += "\r\n"+detailMsg;
					
				}
				MessageDialog.showErrorDlg(WorkbenchEnvironment.getInstance().getWorkbench(), NCLangRes.getInstance()
						.getStrByID("smcomm", "UPP1005-000019")/* 错误 */, msg);
				canOpen = false;
			}
		}
		return canOpen;
	}

	private void fetchOpenNodeRCResponse(OpenParam openParam) throws Exception {
		if (response == null) {
			request = getOpenNodeRCRequest(openParam);
			try {
				IOpenNodeRCService service = NCLocator.getInstance().lookup(IOpenNodeRCService.class);
				response = service.unitedOpenNodeRC(request);
			} catch (Exception e) {
				
				String errorInfo =  NCLangRes.getInstance().getStrByID("smcomm",
						"UPP1005-000082")/*
										 * 在打开节点调用UnitRCBO_Client.
										 * openMainFrame方法时发生错误 !
										 */;
				if(e instanceof FrameworkSecurityException)
					errorInfo = NCLangRes.getInstance().getStrByID("loginui","FuncletWindowEngine-1000001")/*用户会话过期,请重新登录!*/;
				
				Logger.error(e.getMessage(), e);
				MessageDialog.showErrorDlg(WorkbenchEnvironment.getInstance().getWorkbench(), 
						                   NCLangRes.getInstance().getStrByID("smcomm", "UPP1005-000019")/* 错误 */,
						                   errorInfo);
				throw e;
			}
		}

	}

	private OperateLogVO getFuncNodeOperateLogVO() {
		WorkbenchEnvironment env = WorkbenchEnvironment.getInstance();
		long time = System.currentTimeMillis();
		OperateLogVO logVO = new OperateLogVO();
		//设备,入口
		logVO.setDevice(CheckDevice.check()+"");
		logVO.setLogintype(CheckDevice.checkLoginType()+"");
		
		logVO.setType(OperateLogVO.ENTERNODE);
		logVO.setFunccode(frVO.getFuncode());
		logVO.setFuncname(frVO.getFun_name());
		logVO.setPk_funcnode(frVO.getPrimaryKey());
		logVO.setIp(env.getSession().getClientHostIP());
		logVO.setLogdate(new UFDate(time));
		logVO.setLogtime(new UFTime(time));
		if (env.getGroupVO() != null) {
			logVO.setPk_group(env.getGroupVO().getPrimaryKey());
		}
		logVO.setPk_user(env.getLoginUser().getPrimaryKey());
		logVO.setUser_name(env.getLoginUser().getUser_name());
		logVO.setUsertype(env.getLoginUser().getUser_type());
		return logVO;
	}

	private AttachedProps getOpenNodeRCRequest(OpenParam openParam) {
		if (request == null) {
			WorkbenchEnvironment env = WorkbenchEnvironment.getInstance();
			String userId = env.getLoginUser().getPrimaryKey();
			String userCode = env.getLoginUser().getUser_code();
			String userName = env.getLoginUser().getUser_name();
			NCSession session = env.getSession();
			GroupVO groupVO = env.getGroupVO();
			String dsName = "";
			BusiCenterVO bcVO = env.getLoginBusiCenter();
			if (bcVO != null) {
				dsName = bcVO.getDataSourceName();
			}
			request = new AttachedProps();
			request.putAttachProp("funcWindowType", openParam.funcWindowType.getValue());
			request.putAttachProp(frVO);
			request.putAttachProp("dsName", dsName);
			request.putAttachProp("userID", userId);
			request.putAttachProp("userCode", userCode);
			request.putAttachProp("userName", userName);
			request.putAttachProp("sessionID", session.getSessionID());
			request.putAttachProp("pkGroup", groupVO == null ? "" : groupVO.getPk_group());
			request.putAttachProp(env.getUserType());
			request.putAttachProp("busiActiveCodeArray", openParam.busiActiveCodes);
			request.putAttachProp(getFuncNodeOperateLogVO());
			request.putAttachProp("busiDate", env.getBusiDate());
			// //
			IFunctionPermProfile profile = FunctionPermProfileManager.getInstance().getProfile(
					env.getLoginUser().getUser_code());
			boolean isFuncSubInfoavailable = profile == null ? false : profile
					.isFuncSubInfoavailable(frVO.getFuncode(), openParam.busiActiveCodes);
			request.putAttachProp("isFuncSubInfoavailable", isFuncSubInfoavailable);
		}
		return request;
	}
	public static boolean hasOpenning(){
		return openningCount > 0;
	}
}

调用:如供应商-集团的银行账户中调用

@Override
public void doAction(ActionEvent e) throws Exception {
    ToftPanelAdaptor adaptor = (ToftPanelAdaptor) getModel().getContext().getEntranceUI();
    FuncletInitData data = new FuncletInitData();
    data.setInitData(model);
    IFuncRegisterQueryService qry = (IFuncRegisterQueryService) NCLocator.getInstance().lookup(IFuncRegisterQueryService.class);
    FuncRegisterVO function = qry.queryFunctionByCode(getFunnode());
    FuncletLinkListener linkListener = new FuncletLinkListener() {
      @Override
      public void dealLinkEvent(FuncletLinkEvent event) {
        if (event.getID() == IRBACAppConst.CLOSEOPERATE) {
          try {
            getRefreshSingleAction().doAction(null);
            isOpen = false;
          }
          catch (Exception e) {
            Logger.info(e.getMessage());
          }
        }
      }
    };
    if (!isOpen) {
      isOpen = true;
      FuncletWindowLauncher.openFuncNodeDialog(adaptor, function, data, linkListener, true, false, new Dimension(800, 600));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值