private static void registerCallPointcuts(final String uuid,
final AspectWerkzDefinitionImpl definition) {
// get all aspects definitions
for (Iterator it1 = definition.getAspectDefinitions().iterator(); it1.hasNext();) {
AspectDefinition aspectDefinition = (AspectDefinition)it1.next();
AspectMetaData aspect = SystemLoader.getSystem(uuid).
getAspectMetaData(aspectDefinition.getName());
try {
// get all bind-advice rules defined in this aspect
List bindAdviceRules = aspectDefinition.getBindAdviceRules();
for (Iterator it2 = bindAdviceRules.iterator(); it2.hasNext();) {
BindAdviceRule bindAdviceRule = (BindAdviceRule)it2.next();
// create call pointcut
Expression expression = bindAdviceRule.getExpression();
if (!expression.getType().equals(PointcutType.CALL)) {
continue;
}
CallPointcut pointcut = new CallPointcut(uuid, expression);
// add before and after advices
List adviceRefs = bindAdviceRule.getAdviceRefs();
for (Iterator it3 = adviceRefs.iterator(); it3.hasNext();) {
String adviceRef = (String)it3.next();
if (((XmlDefSystem)SystemLoader.getSystem(uuid)).
getAdvice(adviceRef) instanceof PreAdvice) {
pointcut.addBeforeAdvice(adviceRef);
}
else if (((XmlDefSystem)SystemLoader.getSystem(uuid)).
getAdvice(adviceRef) instanceof PostAdvice) {
pointcut.addAfterAdvice(adviceRef);
}
}
// add advices from advice stacks
List adviceStackRefs = bindAdviceRule.getAdviceStackRefs();
for (Iterator it3 = adviceStackRefs.iterator(); it3.hasNext();) {
AdviceStackDefinition adviceStackDefinition =
definition.getAdviceStackDefinition((String)it3.next());
adviceRefs = adviceStackDefinition.getAdviceRefs();
for (Iterator it4 = adviceRefs.iterator(); it4.hasNext();) {
String adviceRef = (String)it4.next();
if (((XmlDefSystem)SystemLoader.getSystem(uuid)).
getAdvice(adviceRef) instanceof PreAdvice) {
pointcut.addBeforeAdvice(adviceRef);
}
else if (((XmlDefSystem)SystemLoader.getSystem(uuid)).
getAdvice(adviceRef) instanceof PostAdvice) {
pointcut.addAfterAdvice(adviceRef);
}
}
}
// add the call pointcut
aspect.addCallPointcut(pointcut);
}
}
catch (NullPointerException e) {
throw new DefinitionException("call pointcuts in aspect <" + aspect.getName() + "> are not properly defined");
}
catch (Exception e) {
throw new WrappedRuntimeException(e);
}
}