All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zusmart.base.activity.support.AbstractActivity Maven / Gradle / Ivy

Go to download

提供基础的工具类及方法类,Logging,Scanner,Buffer,NetWork,Future,Thread

There is a newer version: 1.0.6
Show newest version
package com.zusmart.base.activity.support;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.zusmart.base.activity.Activity;
import com.zusmart.base.activity.ActivityListener;
import com.zusmart.base.logging.Logger;
import com.zusmart.base.logging.LoggerFactory;

public abstract class AbstractActivity> implements Activity {

	private static final Logger logger = LoggerFactory.getLogger(AbstractActivity.class);

	private static final byte T_FAILED = -1;
	private static final byte T_STARTED = 0;
	private static final byte T_STOPPED = 1;
	private static final byte T_STARTING = 2;
	private static final byte T_STOPPING = 3;

	private volatile byte state = T_STOPPED;

	private List> listeners = new ArrayList>();

	@Override
	public synchronized void start() throws Exception {
		if (!this.isRunning()) {
			this.state = T_STARTING;
			this.fireEvent(T_STARTING, null);
			try {
				this.doStart();
			} catch (Exception e) {
				this.state = T_FAILED;
				this.fireEvent(T_FAILED, e);
				throw e;
			}
			this.state = T_STARTED;
			this.fireEvent(T_STARTED, null);
		}
	}

	@Override
	public synchronized void close() throws Exception {
		if (this.isRunning()) {
			this.state = T_STOPPING;
			this.fireEvent(T_STOPPING, null);
			try {
				this.wakeup();
			} catch (Exception e) {
				logger.error(e.getMessage(), e);
			}
			try {
				this.doClose();
			} catch (Exception e) {
				logger.error(e.getMessage(), e);
			}
			this.state = T_STOPPED;
			this.fireEvent(T_STOPPED, null);
		}
	}

	@Override
	public void addListener(ActivityListener listener) {
		synchronized (this) {
			if (this.isRunning() || null == listener) {
				return;
			}
			this.listeners.add(listener);
			Collections.sort(this.listeners);
		}
	}

	@Override
	public void delListener(ActivityListener listener) {
		synchronized (this) {
			if (this.isRunning() || null == listener) {
				return;
			}
			this.listeners.remove(listener);
			Collections.sort(this.listeners);
		}
	}

	@Override
	public boolean isRunning() {
		return this.state == T_STARTED;
	}

	@Override
	public boolean isFailed() {
		return this.state == T_FAILED;
	}

	@Override
	public boolean isStopped() {
		return this.state == T_STOPPED;
	}

	@Override
	public boolean isStarting() {
		return this.state == T_STARTING;
	}

	@Override
	public boolean isStopping() {
		return this.state == T_STOPPING;
	}

	public void wakeup() {
		// IGNORE
	}

	protected void fireEvent(byte event, Exception exception) {
		if (this.listeners.size() == 0) {
			return;
		}
		A activity = this.getActivity();
		if (event == T_STARTING) {
			for (ActivityListener listener : this.listeners) {
				try {
					listener.onStarting(activity);
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
			}
		} else if (event == T_STARTED) {
			for (ActivityListener listener : this.listeners) {
				try {
					listener.onStarted(activity);
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
			}
		} else if (event == T_STOPPED) {
			for (ActivityListener listener : this.listeners) {
				try {
					listener.onStopped(activity);
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
			}
		} else if (event == T_STOPPING) {
			for (ActivityListener listener : this.listeners) {
				try {
					listener.onStopping(activity);
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
			}
		} else if (event == T_FAILED) {
			for (ActivityListener listener : this.listeners) {
				try {
					listener.onFailed(activity, exception);
				} catch (Exception e) {
					logger.error(e.getMessage(), e);
				}
			}
		}
	}

	protected abstract A getActivity();

	protected abstract void doStart() throws Exception;

	protected abstract void doClose() throws Exception;

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy