Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] @DeclareParents disallowed

Hello,

I'm trying to set a DeclareParents annotation with an around advice (see code below) and I get this error:

The annotation @DeclareParents is disallowed for this location

Is it possible to do such a thing? Or what did I do wrong?

I use Eclipse and AJDT under Windows XP

Regards

Pierre

package com.uwyn.ecalendar.aop;

import java.util.Locale;

import javax.servlet.http.HttpSession;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;

import com.uwyn.rife.engine.ElementContext;
import com.uwyn.rife.engine.ElementSupport;

@Aspect
public class Localization { public interface Localized { public static final String PARAM_SESSION_LANGUAGE = "sessionLanguage"; // $NON-NLS-1$ public static final String PARAM_SESSION_COUNTRY = "sessionCountry"; // $NON-NLS-1$
       public Void setLocale(Locale locale);
       public Locale getLocale();
   };

   @DeclareParents("com.uwyn.rife.engine.ElementSupport")
   class LocalizedImpl implements Localized {
private static final String EMPTY_STRING = ""; // $NON-NLS-1$

       private Locale locale = null;
       private HttpSession session = null;
       {
           this.session = ElementContext.getActiveElement()
                                   .getHttpServletRequest()
                                   .getSession(false);
           if (this.session != null) {
String sessionLanguage = (String) this.session.getAttribute(PARAM_SESSION_LANGUAGE); if ((sessionLanguage != null) && (! sessionLanguage.equals(EMPTY_STRING))) { String sessionCountry = (String) this.session.getAttribute(PARAM_SESSION_COUNTRY); this.locale = new Locale(sessionLanguage, sessionCountry);
               }
           }
       }
public Void setLocale (Locale locale) {
           this.locale = locale;
           if (this.session != null) {
               if (this.locale != null) {
this.session.setAttribute(PARAM_SESSION_LANGUAGE, locale.getLanguage()); this.session.setAttribute(PARAM_SESSION_COUNTRY, locale.getCountry());
               }
               else {
                   this.session.removeAttribute(PARAM_SESSION_LANGUAGE);
                   this.session.removeAttribute(PARAM_SESSION_COUNTRY);
               }
           }
           else {
               if (locale != null) {
                   this.session = ElementContext.getActiveElement()
                                           .getHttpServletRequest()
                                           .getSession(true);
this.session.setAttribute(PARAM_SESSION_LANGUAGE, locale.getLanguage()); this.session.setAttribute(PARAM_SESSION_COUNTRY, locale.getCountry());
               }
           }
       }

       public Locale getLocale() {
           Locale userLocale = this.locale;
           if (userLocale == null) {
userLocale = ElementContext.getActiveElement().getRequestLocale();
           }
           return userLocale;
       }
   }


@Around("execution(public static String com.uwyn.rife.config.RifeConfig.Tools.getDefaultLanguage())" +
           " && this(localized)")
public Object getDefaultLanguage(ProceedingJoinPoint thisJoinPoint, Localized localized)
   throws Throwable{
       return localized.getLocale().getLanguage();
   }

}





Back to the top