Example usage for org.springframework.aop IntroductionInterceptor IntroductionInterceptor

List of usage examples for org.springframework.aop IntroductionInterceptor IntroductionInterceptor

Introduction

In this page you can find the example usage for org.springframework.aop IntroductionInterceptor IntroductionInterceptor.

Prototype

IntroductionInterceptor

Source Link

Usage

From source file:it.cilea.osd.common.dao.impl.NamedQueryIntroductionAdvisor.java

public NamedQueryIntroductionAdvisor() {
    super(new IntroductionInterceptor() {
        /**// ww w. j ava2 s  .c om
         * Execute the appropriate method of the genericDAO implementation
         * basing on the start characters of the original invoked method on
         * the DAO class
         */
        public Object invoke(MethodInvocation mi) throws Throwable {
            NamedQueryExecutor genericDao = (NamedQueryExecutor) mi.getThis();
            String methodName = mi.getMethod().getName();
            if (methodName.startsWith("find")) {
                Object[] args = mi.getArguments();
                return genericDao.executeFinder(mi.getMethod(), args);
            } else if (methodName.startsWith("unique")) {
                Object[] args = mi.getArguments();
                return genericDao.executeUnique(mi.getMethod(), args);
            } else if (methodName.startsWith("count")) {
                Object[] args = mi.getArguments();
                return genericDao.executeCounter(mi.getMethod(), args);
            } else if (methodName.startsWith("delete") && !methodName.equals("delete")) {
                Object[] args = mi.getArguments();
                return genericDao.executeDelete(mi.getMethod(), args);
            } else if (methodName.startsWith("idFind")) {
                Object[] args = mi.getArguments();
                return genericDao.executeIdFinder(mi.getMethod(), args);
            } else if (methodName.startsWith("paginate")) {
                Object[] args = mi.getArguments();
                String sort = (String) args[args.length - 4];
                boolean inverse = (Boolean) args[args.length - 3];
                int firstResult = (Integer) args[args.length - 2];
                int maxResults = (Integer) args[args.length - 1];
                args = Arrays.asList(args).subList(0, args.length - 4).toArray();
                return genericDao.executePaginator(mi.getMethod(), args, sort, inverse, firstResult,
                        maxResults);
            } else if (methodName.startsWith("is") || methodName.startsWith("has")
                    || methodName.startsWith("check")) {
                Object[] args = mi.getArguments();
                return genericDao.executeBoolean(mi.getMethod(), args);
            } else if (methodName.startsWith("sum")) {
                Object[] args = mi.getArguments();
                return genericDao.executeDouble(mi.getMethod(), args);
            } else if (methodName.startsWith("singleResult")) {
                Object[] args = mi.getArguments();
                return genericDao.executeSingleResult(mi.getMethod(), args);
            } else if (methodName.startsWith("max")) {
                Object[] args = mi.getArguments();
                return genericDao.executeMax(mi.getMethod(), args);
            } else {
                return mi.proceed();
            }
        }

        public boolean implementsInterface(Class intf) {
            return intf.isInterface() && NamedQueryExecutor.class.isAssignableFrom(intf);
        }
    });
}