CCM NG: LifecycleManager

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4218 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2016-08-12 12:30:23 +00:00
parent 3c5625b033
commit b7458c77a8
1 changed files with 102 additions and 2 deletions

View File

@ -18,6 +18,8 @@
*/
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.RequiresPrivilege;
import org.librecms.CmsConstants;
@ -37,6 +39,9 @@ import javax.transaction.Transactional;
@RequestScoped
public class LifecycleManager {
public static final Logger LOGGER = LogManager.getLogger(
LifecycleManager.class);
@Inject
private LifecycleDefinitionRepository lifecycleDefinitionRepo;
@ -135,8 +140,8 @@ public class LifecycleManager {
lifecycle, LifecycleEvent.STARTED);
}
}
//ToDo Invoke Listeners
invokeLifecycleEventListener(lifecycle, LifecycleEvent.STARTED);
}
}
@ -160,9 +165,15 @@ public class LifecycleManager {
}
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
if (current < lifecycle.getPhases().size() - 1) {
lifecycle.getPhases().get(current + 1).setStarted(true);
invokePhaseEventListener(lifecycle,
lifecycle.getPhases().get(current + 1),
PhaseEvent.STARTED);
}
} else {
startLifecycle(lifecycle);
@ -182,7 +193,96 @@ public class LifecycleManager {
phaseRepo.save(phase);
});
invokeLifecycleEventListener(lifecycle, LifecycleEvent.RESET);
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());
}
}
}