progressbean.java

来自「OperaMasks是一种基于J2EE的Web开发技术」· Java 代码 · 共 128 行

JAVA
128
字号
/*
 * $Id: ProgressBean.java,v 1.3 2008/07/28 02:44:27 libin Exp $
 *
 * Copyright (c) 2000-2006 Apusic Software, Inc.
 * All rights reserved
 */

package demo;

import org.operamasks.faces.annotation.ManagedBean;
import org.operamasks.faces.annotation.ManagedBeanScope;
import org.operamasks.faces.annotation.SaveState;
import org.operamasks.faces.component.ajax.ProgressAction;
import org.operamasks.faces.component.ajax.ProgressState;
import org.operamasks.faces.component.ajax.ProgressStatus;

/**
 * This bean is for illustration only. An actual progress object should query
 * external resource to get progress status.
 */
@ManagedBean(scope = ManagedBeanScope.SESSION)
public class ProgressBean {
	@SaveState
	private int percentage = 0;

	public void percentageAction(ProgressStatus status) {
		switch (status.getAction().ordinal()) {
		case ProgressAction._START:
			this.percentage = 0;
			status.setPercentage(0);
			status.setState(ProgressState.RUNNING);
			break;

		case ProgressAction._STOP:
			this.percentage = 0;
			status.setPercentage(0);
			status.setMessage("Progress stopped");
			status.setState(ProgressState.STOPPED);
			break;

		case ProgressAction._POLL:
			this.percentage += 4;
			if (percentage >= 100) {
				status.setPercentage(100);
				status.setMessage("Progress completed");
				status.setState(ProgressState.COMPLETED);
			} else {
				status.setPercentage(percentage);
				status.setState(ProgressState.RUNNING);
			}
			break;

		case ProgressAction._PAUSE:
			status.setPercentage(percentage);
			status.setMessage("Progress paused");
			status.setState(ProgressState.PAUSED);
			break;

		case ProgressAction._RESUME:
			status.setPercentage(percentage);
			status.setState(ProgressState.RUNNING);
			break;
		}
	}

	@SaveState
	private int phase = 0;
	private int maxPhase = 4;

	private String phaseMessages[] = { "Initializing...", "Loading...",
			"Configuring...", "Running...", "Finished" };

	public void phaseAction(ProgressStatus status) {
		switch (status.getAction().ordinal()) {
		case ProgressAction._START:
			this.phase = 0;
			status.setPercentage(0);
			status.setMessage(phaseMessages[0]);
			status.setState(ProgressState.RUNNING);
			break;

		case ProgressAction._POLL:
			if (phase < maxPhase) {
				this.phase++;
				status.setPercentage(phase, maxPhase);
				status.setMessage(phaseMessages[phase]);
				if (phase >= maxPhase) {
					status.setState(ProgressState.COMPLETED);
				} else {
					status.setState(ProgressState.RUNNING);
				}
			}
			break;
		}
	}

	public void complexAction(ProgressStatus status) {
		switch (status.getAction().ordinal()) {
		case ProgressAction._START:
			this.phase = 0;
			this.percentage = 0;
			status.setPhase(phase);
			status.setPercentage(percentage);
			status.setMessage(phaseMessages[0]);
			status.setState(ProgressState.RUNNING);
			break;

		case ProgressAction._POLL:
			boolean completed = false;
			percentage += 25;
			if (percentage == 100) {
				if (++phase >= maxPhase) {
					phase = maxPhase;
					completed = true;
				}
			} else if (percentage > 100) {
				percentage = 0;
			}

			status.setPhase(phase);
			status.setPercentage(percentage);
			status.setMessage(phaseMessages[phase]);
			status.setState(completed ? ProgressState.COMPLETED
					: ProgressState.RUNNING);
		}
	}
}

⌨️ 快捷键说明

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