On Sat, Jul 23, 2011 at 12:39 PM,  <[email protected]> wrote:
> Author: svenmeier
> Date: Sat Jul 23 09:39:15 2011
> New Revision: 1150077
>
> URL: http://svn.apache.org/viewvc?rev=1150077&view=rev
> Log:
> cleaned up TODO: removed transient members, no more setter for localizer (as 
> it is lost on following detach) override getLocalizer() instead, no more 
> component shuffling inside assignment wrapper
>
> Modified:
>    
> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
>
> Modified: 
> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
> URL: 
> http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java?rev=1150077&r1=1150076&r2=1150077&view=diff
> ==============================================================================
> --- 
> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
>  (original)
> +++ 
> wicket/trunk/wicket-core/src/main/java/org/apache/wicket/model/StringResourceModel.java
>  Sat Jul 23 09:39:15 2011
> @@ -52,9 +52,11 @@ import org.apache.wicket.util.string.int
>  * reusable components/containers that are packaged with their own string 
> resource bundles it should
>  * be the actual component/container rather than the page. For more 
> information on this please see
>  * {@link org.apache.wicket.resource.loader.ComponentStringResourceLoader}. 
> The relative component
> - * may actually be <code>null</code> when all resource loading is to be done 
> from a global resource
> - * loader. However, we recommend that a relative component is still supplied 
> even in these cases in
> - * order to 'future proof' your application with regards to changing 
> resource loading strategies.
> + * may actually be {@code null} if this model is wrapped on assignment (
> + * {@link IComponentAssignedModel}) or when all resource loading is to be 
> done from a global
> + * resource loader. However, we recommend that a relative component is still 
> supplied even in the
> + * latter case in order to 'future proof' your application with regards to 
> changing resource loading
> + * strategies.
>  * <li><b>model </b>- This parameter is mandatory if either the resourceKey, 
> the found string
>  * resource (see below) or any of the substitution parameters (see below) 
> contain property
>  * expressions. Where property expressions are present they will all be 
> evaluated relative to this
> @@ -184,15 +186,6 @@ public class StringResourceModel extends
>  {
>        private static final long serialVersionUID = 1L;
>
> -       /** The locale to use. */
> -       private transient Locale locale;
> -
> -       /**
> -        * The localizer to be used to access localized resources and the 
> associated locale for
> -        * formatting.
> -        */
> -       private transient Localizer localizer;
> -
>        /** The wrapped model. */
>        private final IModel<?> model;
>
> @@ -200,7 +193,7 @@ public class StringResourceModel extends
>        private final Object[] parameters;
>
>        /** The relative component used for lookups. */
> -       private Component component;
> +       private final Component component;
>
>        /** The key of message to get. */
>        private final String resourceKey;
> @@ -213,7 +206,9 @@ public class StringResourceModel extends
>                return new AssignmentWrapper(component);
>        }
>
> -       private class AssignmentWrapper implements IWrapModel<String>
> +       private class AssignmentWrapper extends 
> LoadableDetachableModel<String>
> +               implements
> +                       IWrapModel<String>
>        {
>                private static final long serialVersionUID = 1L;
>
> @@ -229,27 +224,29 @@ public class StringResourceModel extends
>                        this.component = component;
>                }
>
> +               @Override
>                public void detach()
>                {
> +                       super.detach();
> +
>                        StringResourceModel.this.detach();
>                }
>
> -               public String getObject()
> +               @Override
> +               protected String load()
>                {
>                        if (StringResourceModel.this.component != null)
>                        {
> +                               // ignore assignment if component was 
> specified explicitely
>                                return StringResourceModel.this.getObject();
>                        }
>                        else
>                        {
> -                               // TODO: Remove this as soon as we can break 
> binary compatibility
> -                               StringResourceModel.this.component = 
> component;
> -                               String res = 
> StringResourceModel.this.getObject();
> -                               StringResourceModel.this.component = null;
> -                               return res;
> +                               return getString(component);
>                        }
>                }
>
> +               @Override
>                public void setObject(String object)
>                {
>                        StringResourceModel.this.setObject(object);
> @@ -379,50 +376,33 @@ public class StringResourceModel extends
>         */
>        public Localizer getLocalizer()
>        {
> -               if (localizer != null)
> -               {
> -                       return localizer;
> -               }
> -               else if (component != null)
> -               {
> -                       return component.getLocalizer();
> -               }
> -               else
> -               {
> -                       return 
> Application.get().getResourceSettings().getLocalizer();
> -               }
> +               return Application.get().getResourceSettings().getLocalizer();
>        }
>
>
>        /**
> -        * Gets the string currently represented by this string resource 
> model. The string that is
> -        * returned may vary for each call to this method depending on the 
> values contained in the model
> -        * and an the parameters that were passed when this string resource 
> model was created.
> +        * Gets the string currently represented by this model. The string 
> that is returned may vary for
> +        * each call to this method depending on the values contained in the 
> model and an the parameters
> +        * that were passed when this string resource model was created.
>         *
>         * @return The string
>         */
>        public final String getString()
>        {
> -               final Localizer localizer = getLocalizer();
> +               return getString(component);
> +       }
>
> -               // Make sure we have a localizer before commencing
> -               if (getLocalizer() == null)
> -               {
> -                       if (component != null)
> -                       {
> -                               setLocalizer(component.getLocalizer());
> -                       }
> -                       else
> -                       {
> -                               throw new IllegalStateException("No localizer 
> has been set");
> -                       }
> -               }
> +       private String getString(Component component)
> +       {
>
> -               // Make sure we have the locale
> -               if (locale == null)
> +               final Localizer localizer = getLocalizer();
> +               final Session session = Session.get();
> +               if (session == null)
This wont return null. Better use 'if (Session.exists() == false)'
>                {
> -                       locale = Session.get().getLocale();
> +                       throw new WicketRuntimeException(
> +                               "Cannot attach a string resource model 
> without a Session context because that is required to get a Locale");
>                }
> +               final Locale locale = session.getLocale();
>
>                String value;
>
> @@ -453,7 +433,7 @@ public class StringResourceModel extends
>                                Object[] realParams = new 
> Object[parameters.length];
>                                for (int i = 0; i < parameters.length; i++)
>                                {
> -                                       if (parameters[i] instanceof IModel)
> +                                       if (parameters[i] instanceof 
> IModel<?>)
>                                        {
>                                                realParams[i] = 
> ((IModel<?>)parameters[i]).getObject();
>                                        }
> @@ -534,18 +514,6 @@ public class StringResourceModel extends
>        }
>
>        /**
> -        * Sets the localizer that is being used by this string resource 
> model. This method is provided
> -        * to allow the default application localizer to be overridden if 
> required.
> -        *
> -        * @param localizer
> -        *            The localizer to use
> -        */
> -       public final void setLocalizer(final Localizer localizer)
> -       {
> -               this.localizer = localizer;
> -       }
> -
> -       /**
>         * This method just returns debug information, so it won't return the 
> localized string. Please
>         * use getString() for that.
>         *
> @@ -598,55 +566,37 @@ public class StringResourceModel extends
>        }
>
>        /**
> -        * Gets the string that this string resource model currently 
> represents. The string is returned
> -        * as an object to allow it to be used generically within components.
> -        *
> +        * Gets the string that this string resource model currently 
> represents.
>         */
>        @Override
>        protected String load()
>        {
> -               // Initialize information that we need to work successfully
> -               final Session session = Session.get();
> -               if (session != null)
> -               {
> -                       locale = session.getLocale();
> -               }
> -               else
> -               {
> -                       throw new WicketRuntimeException(
> -                               "Cannot attach a string resource model 
> without a Session context because that is required to get a Localizer");
> -               }
>                return getString();
>        }
>
>        /**
> -        * Detaches from the given session
> +        * @see org.apache.wicket.model.IDetachable#detach()
>         */
>        @Override
>        protected final void onDetach()
>        {
> -               // Detach any model
> +               // detach any model
>                if (model != null)
>                {
>                        model.detach();
>                }
>
> -               // some parameters can be imodels, detach them
> +               // some parameters can be detachable
>                if (parameters != null)
>                {
>                        for (Object parameter : parameters)
>                        {
> -                               if (parameter instanceof IModel<?>)
> +                               if (parameter instanceof IDetachable)
>                                {
> -                                       ((IModel<?>)parameter).detach();
> +                                       ((IDetachable)parameter).detach();
>                                }
>                        }
>                }
> -
> -
> -               // Null out references
> -               localizer = null;
> -               locale = null;
>        }
>
>        @Override
> @@ -654,4 +604,4 @@ public class StringResourceModel extends
>        {
>                throw new UnsupportedOperationException();
>        }
> -}
> +}
> \ No newline at end of file
>
>
>



-- 
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com

Reply via email to