package org.sef4j.core.util.factorydef; import java.io.Closeable; import org.sef4j.core.util.Handle; import org.sef4j.core.util.HandleSet; import org.sef4j.core.util.ISharedStartableSupport; import org.sef4j.core.util.IStartableSupport; /** * helper abstract class for Object with associated definition, supporting ISharedStartableSupport via handles * * @param <TDef> */ public abstract class AbstractSharedStartableObject<TDef> implements Closeable, ISharedStartableSupport, IStartableSupport { protected final String displayName; private HandleSet autoStartableHandleSet = new HandleSet(this); // ------------------------------------------------------------------------ protected AbstractSharedStartableObject(String displayName) { this.displayName = displayName; } // ------------------------------------------------------------------------ // cf Closeable @Override public void close() { autoStartableHandleSet.clear(); this.autoStartableHandleSet = null; // this.def = null; if (isStarted()) { stop(); } } // cf ISharedStartableSupport @Override public Handle registerStart() { return autoStartableHandleSet.addGenerated(); } @Override public void unregisterStop(Handle handle) { autoStartableHandleSet.remove(handle); } // cf IStartableSupport @Override public abstract boolean isStarted(); @Override public abstract void start(); @Override public abstract void stop(); // ------------------------------------------------------------------------ @Override public String toString() { return "AbstractSharedStartableObject[" + displayName + "]"; } }