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

📄 requestqueueimpl.java

📁 ZK 基础介绍 功能操作 模块 结合数据库操作
💻 JAVA
字号:
/* RequestQueueImpl.java{{IS_NOTE	Purpose:			Description:			History:		Fri Jan 20 09:51:39     2006, Created by tomyeh}}IS_NOTECopyright (C) 2006 Potix Corporation. All Rights Reserved.{{IS_RIGHT	This program is distributed under GPL Version 2.0 in the hope that	it will be useful, but WITHOUT ANY WARRANTY.}}IS_RIGHT*/package org.zkoss.zk.ui.impl;import java.util.Iterator;import java.util.Collection;import java.util.List;import java.util.LinkedList;import org.zkoss.lang.D;import org.zkoss.lang.Objects;import org.zkoss.util.logging.Log;import org.zkoss.zk.au.AuRequest;import org.zkoss.zk.au.Command;import org.zkoss.zk.ui.sys.RequestQueue;/** * An implementation of {@link RequestQueue} behaving as * a queue of {@link AuRequest}. * There is one queue for each desktop. * * <p>Implementation Note: * Unlike only of desktop members, this class must be thread-safe. * * @author tomyeh */public class RequestQueueImpl implements RequestQueue {//	private static final Log log = Log.lookup(RequestQueueImpl.class);	/** A list of pending {@link AuRequest}. */	private final List _requests = new LinkedList();	/** The previous returned request used to eliminate redudant requests. */	private AuRequest _prev;	/** A list of request ID. */	private List _reqIds;	/** The in-process flag to denote Whether this queue is being processed	 * by an execution.	 */	private boolean _process;	//-- RequestQueue --//	public void addRequestId(String requestId) {		if (_reqIds == null)			_reqIds = new LinkedList();		_reqIds.add(requestId);	}	public Collection clearRequestIds() {		final List old = _reqIds;		_reqIds = null;		return old;	}	synchronized public boolean endWithRequest() {		_process = false;		return !_requests.isEmpty();	}	synchronized public AuRequest nextRequest() {//		if (D.ON && log.finerable()) log.finer("Next req "+_requests);		if (_requests.isEmpty()) {			_process = false;			return _prev = null;		}		return _prev = (AuRequest)_requests.remove(0);	}	synchronized public void setInProcess() {		_process = true;	}	synchronized public boolean addRequests(Collection requests) {		for (Iterator it = requests.iterator(); it.hasNext();)			addRequest((AuRequest)it.next());		return _process;	}	private void addRequest(AuRequest request) {//		if (D.ON && log.finerable()) log.finer("Arrive "+request+". Current "+_requests);		//case 1a, both _prev and request are CTRL_GROUP		final Command cmd = request.getCommand();		final int flags = cmd.getFlags();		if (_prev != null		&& (_prev.getCommand().getFlags() & Command.CTRL_GROUP) != 0		&& (flags & Command.CTRL_GROUP) != 0) {			return; //drop request		}				//case 2, IGNORABLE: Drop any existent ignorable requests		//We don't need to iterate all because requests is added one-by-one		//In other words, if any temporty request, it must be the last		{			int last = _requests.size() - 1;			if (last < 0) { //optimize the most common case				_requests.add(request);				return;			}			final AuRequest req2 = (AuRequest)_requests.get(last);			if ((req2.getCommand().getFlags() & Command.IGNORABLE) != 0) {//				if (D.ON && log.debugable()) log.debug("Eat request: "+req2);				_requests.remove(last); //drop it				if (last == 0) {					_requests.add(request);					return;				}			}		}		//Case 1b, CTRL_GROUP: drop new request if similar already exists		if ((flags & Command.CTRL_GROUP) != 0) {			for (Iterator it = _requests.iterator(); it.hasNext();) {				final AuRequest req2 = (AuRequest)it.next();				if ((req2.getCommand().getFlags() & Command.CTRL_GROUP) != 0) {//					if (D.ON && log.debugable()) log.debug("Eat request: "+req2);					return; //drop request				}			}		//case 3, IGNORE_OLD_EQUIV: drop existent request if they are the same		//as the arrival.		} else if ((flags & Command.IGNORE_OLD_EQUIV) != 0) {			final String uuid = request.getComponentUuid();			for (Iterator it = _requests.iterator(); it.hasNext();) {				final AuRequest req2 = (AuRequest)it.next();				if (req2.getCommand() == cmd				&& Objects.equals(req2.getComponentUuid(), uuid)) {//					if (D.ON && log.debugable()) log.debug("Eat request: "+req2);					it.remove(); //drop req2					break; //no need to iterate because impossible to have more				}			}		//Case 4, IGNORE_IMMEDIATE_OLD_EQUIV: drop existent if the immediate		//following is the same		} else if ((flags & Command.IGNORE_IMMEDIATE_OLD_EQUIV) != 0) {			final int last = _requests.size() - 1;			final AuRequest req2 = (AuRequest)_requests.get(last);			if (req2.getCommand() == cmd			&& Objects.equals(req2.getComponentUuid(), request.getComponentUuid())) {//				if (D.ON && log.debugable()) log.debug("Eat request: "+req2);				_requests.remove(last);			}		}		_requests.add(request);	}}

⌨️ 快捷键说明

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