Java tutorial
/* * * Copyright (c) 2010 Sonrisa Informatikai Kft. All Rights Reserved. * * This software is the confidential and proprietary information of * Sonrisa Informatikai Kft. ("Confidential Information"). * You shall not disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sonrisa. * * SONRISA MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SONRISA SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. */ package com.zh.snmp.snmpcore.aop; import java.lang.reflect.Method; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.reflect.MethodSignature; /** * AOP-s interceptor-ok szosztlya, ami nhny kzs segd metdust tartalmaz. * * @author Joe */ public class BaseInterceptor { /** Log zenetben az zenet egyes szegmentumait elvlaszt karakter. */ protected static final String DELIMITER = " - "; /** Log zenetben az argumentumok listja el kerl prefix. */ private static final String ARGUMENTS_LIST_PREFIX = "arg(s): "; /** Log zenetben az argumentumok indexe s rtke kz kerl karakter. Pldul ha az els argumentum rtke "bar", akkor: 0=bar */ private static final String ARGUMENT_INDEX_AND_VALUE_DELIMITER = "="; /** Log zenetben tbb argumentum esetn az argumentumok kz kerl elvlaszt karakter. */ private static final String ARGUMENTS_DELIMITER = "; "; /** Log zenetben a metdusok neve utn rt zrjelet, a metdusok knnyebb lthatsga rdekben. */ private static final String ROUND_BRACKETS = "()"; /** Log zenetben az osztly s metdus nv kz rt pont karakter. */ private static final String DOT = "."; /** Log zenetben az argumentumok listjt ilyen zrjelek kz rjuk ki. */ private static final String OPEN_SQUARE_BRACKET = "["; /** Log zenetben az argumentumok listjt ilyen zrjelek kz rjuk ki. */ private static final String CLOSE_SQUARE_BRACKET = "]"; /** Log zenetben akkor rjuk ki ezt, ha nincs a metdusnak argumentuma. */ private static final String NO_ARGS_MSG = "[no args]"; // ------------------------------------------------------------------------- // ~ Protected methods // ------------------------------------------------------------------------- /** * Visszaadja a meghvott metdus argumentumainak nevt s rtkt egy * Srting-ben. * * @param joinPoint kapcsoldsi pont arra a metdusra, amit az aspektus figyel * @return */ protected String appendAgrList(final JoinPoint joinPoint) { StringBuilder str = new StringBuilder(); str.append(ARGUMENTS_LIST_PREFIX); Object[] argValues = joinPoint.getArgs(); //ha nincs argumentum if (argValues == null || argValues.length == 0) { str.append(NO_ARGS_MSG); return str.toString(); } //argumentum sorszm s rtek sszefzse str.append(OPEN_SQUARE_BRACKET); for (int i = 0; i < argValues.length; i++) { str.append(i); str.append(ARGUMENT_INDEX_AND_VALUE_DELIMITER); str.append(argValues[i]); if (i < argValues.length - 1) { str.append(ARGUMENTS_DELIMITER); } } str.append(CLOSE_SQUARE_BRACKET); return str.toString(); } /** * Visszaadja, hogy melyik osztly, melyik metdusa kerlt meghvsra * szveges reprezentciban. * <p/> * * A <code>useSimpleClassName</code> rtktl fggen az osztlyokra * azok rvid vagy teljes nevvel hivatkozik. * <p/> * * Peldaul: <br/> * foo.bar.example.MyClass.myMethod() <br/> * vagy <br/> * MyClass.myMethod() * * @param joinPoint kapcsoldsi pont arra a metdusra, amit az aspektus figyel * @param useSimpleClassName osztlyok rvid vagy teljes nevt hasznlja-e */ protected String getInvocationTarget(final JoinPoint joinPoint, final boolean useSimpleClassName) { String className; if (useSimpleClassName) { className = joinPoint.getTarget().getClass().getSimpleName(); } else { className = joinPoint.getTarget().getClass().getName(); } return appendClassWithMethod(className, joinPoint.getSignature().getName()); } /** * Visszaadja a hvott metdust, mint reflexis objektum. * * @param joinPoint kapcsoldsi pont arra a metdusra, amit az aspektus figyel * @return */ protected Method retrieveTargetMethodFrom(JoinPoint joinPoint) { MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); return methodSignature.getMethod(); } // ------------------------------------------------------------------------- // ~ Private methods // ------------------------------------------------------------------------- /** * sszefzi az osztlynevet a metdusnvvel, * ilyen formaban: * <p/> * * className.methodName() * * @param className osztly neve * @param methodName metdus neve * */ private String appendClassWithMethod(final String className, final String methodName) { StringBuilder str = new StringBuilder(); str.append(className); str.append(DOT); str.append(methodName); str.append(ROUND_BRACKETS); return str.toString(); } }