CCM NG: LifecycleManager
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4218 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
3c5625b033
commit
b7458c77a8
|
|
@ -18,6 +18,8 @@
|
||||||
*/
|
*/
|
||||||
package org.librecms.lifecycle;
|
package org.librecms.lifecycle;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.libreccm.security.AuthorizationRequired;
|
import org.libreccm.security.AuthorizationRequired;
|
||||||
import org.libreccm.security.RequiresPrivilege;
|
import org.libreccm.security.RequiresPrivilege;
|
||||||
import org.librecms.CmsConstants;
|
import org.librecms.CmsConstants;
|
||||||
|
|
@ -37,6 +39,9 @@ import javax.transaction.Transactional;
|
||||||
@RequestScoped
|
@RequestScoped
|
||||||
public class LifecycleManager {
|
public class LifecycleManager {
|
||||||
|
|
||||||
|
public static final Logger LOGGER = LogManager.getLogger(
|
||||||
|
LifecycleManager.class);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private LifecycleDefinitionRepository lifecycleDefinitionRepo;
|
private LifecycleDefinitionRepository lifecycleDefinitionRepo;
|
||||||
|
|
||||||
|
|
@ -136,7 +141,7 @@ public class LifecycleManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//ToDo Invoke Listeners
|
invokeLifecycleEventListener(lifecycle, LifecycleEvent.STARTED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -160,9 +165,15 @@ public class LifecycleManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
lifecycle.getPhases().get(current).setFinished(true);
|
lifecycle.getPhases().get(current).setFinished(true);
|
||||||
|
invokePhaseEventListener(lifecycle,
|
||||||
|
lifecycle.getPhases().get(current),
|
||||||
|
PhaseEvent.FINISHED);
|
||||||
//Check for last phase, if not set next phase to started
|
//Check for last phase, if not set next phase to started
|
||||||
if (current < lifecycle.getPhases().size() - 1) {
|
if (current < lifecycle.getPhases().size() - 1) {
|
||||||
lifecycle.getPhases().get(current + 1).setStarted(true);
|
lifecycle.getPhases().get(current + 1).setStarted(true);
|
||||||
|
invokePhaseEventListener(lifecycle,
|
||||||
|
lifecycle.getPhases().get(current + 1),
|
||||||
|
PhaseEvent.STARTED);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
startLifecycle(lifecycle);
|
startLifecycle(lifecycle);
|
||||||
|
|
@ -182,7 +193,96 @@ public class LifecycleManager {
|
||||||
phaseRepo.save(phase);
|
phaseRepo.save(phase);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
invokeLifecycleEventListener(lifecycle, LifecycleEvent.RESET);
|
||||||
lifecycleRepo.save(lifecycle);
|
lifecycleRepo.save(lifecycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void invokeLifecycleEventListener(final Lifecycle lifecycle,
|
||||||
|
final LifecycleEvent event) {
|
||||||
|
final String listenerClassName = lifecycle.getListener();
|
||||||
|
final Class<?> listenerClass;
|
||||||
|
try {
|
||||||
|
listenerClass = Class.forName(listenerClassName);
|
||||||
|
} catch (ClassNotFoundException ex) {
|
||||||
|
LOGGER.error("Failed to find LifecycleListener class \"{}\". "
|
||||||
|
+ "Listener is ignored.",
|
||||||
|
listenerClassName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!LifecycleEventListener.class.isAssignableFrom(listenerClass)) {
|
||||||
|
LOGGER.warn("Class \"{}\" is not an implementation of the "
|
||||||
|
+ "interface \"{}\".",
|
||||||
|
listenerClassName,
|
||||||
|
LifecycleEventListener.class.getName());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Object object;
|
||||||
|
try {
|
||||||
|
object = listenerClass.newInstance();
|
||||||
|
} catch (IllegalAccessException |
|
||||||
|
InstantiationException ex) {
|
||||||
|
LOGGER.error("Failed to create instance of LifecycleEventListener "
|
||||||
|
+ "of class \"{}\".",
|
||||||
|
listenerClass.getName());
|
||||||
|
LOGGER.error("Reason: ", ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object instanceof LifecycleEventListener) {
|
||||||
|
final LifecycleEventListener listener
|
||||||
|
= (LifecycleEventListener) object;
|
||||||
|
listener.update(lifecycle, event);
|
||||||
|
} else {
|
||||||
|
LOGGER.error("Generated object is not an instance of \"{}\". "
|
||||||
|
+ "Ignoring listener.",
|
||||||
|
LifecycleEventListener.class.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void invokePhaseEventListener(final Lifecycle lifecycle,
|
||||||
|
final Phase phase,
|
||||||
|
final PhaseEvent event) {
|
||||||
|
final String listenerClassName = phase.getListener();
|
||||||
|
final Class<?> listenerClass;
|
||||||
|
try {
|
||||||
|
listenerClass = Class.forName(listenerClassName);
|
||||||
|
} catch (ClassNotFoundException ex) {
|
||||||
|
LOGGER.error("Failed to find PhaseListener class \"{}\". "
|
||||||
|
+ "Listener is ignored.",
|
||||||
|
listenerClassName);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PhaseEventListener.class.isAssignableFrom(listenerClass)) {
|
||||||
|
LOGGER.warn("Class \"{}\" is not an implementation of the "
|
||||||
|
+ "interface \"{}\".",
|
||||||
|
listenerClassName,
|
||||||
|
PhaseEventListener.class.getName());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Object object;
|
||||||
|
try {
|
||||||
|
object = listenerClass.newInstance();
|
||||||
|
} catch (IllegalAccessException |
|
||||||
|
InstantiationException ex) {
|
||||||
|
LOGGER.error("Failed to create instance of PhaseEventListener "
|
||||||
|
+ "of class \"{}\".",
|
||||||
|
listenerClass.getName());
|
||||||
|
LOGGER.error("Reason: ", ex);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (object instanceof PhaseEventListener) {
|
||||||
|
final PhaseEventListener listener = (PhaseEventListener) object;
|
||||||
|
listener.update(lifecycle, phase, event);
|
||||||
|
} else {
|
||||||
|
LOGGER.error("Generated object is not an instance of \"{}\". "
|
||||||
|
+ "Ignoring listener.",
|
||||||
|
PhaseEventListener.class.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue