Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  // Copyright 2006, 2007, 2008, 2010 The Apache Software Foundation
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  // http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
 // distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
 package org.apache.tapestry5.internal.transform;
 
Peforms transformations that allow pages to be injected into components.

 
 {
     private final class InjectedPageConduit extends ReadOnlyFieldValueConduit
     {
         private final String injectedPageName;
 
         private Object page;
 
         private InjectedPageConduit(ComponentResources resourcesString fieldName,
                 String injectedPageName)
         {
             super(resourcesfieldName);
 
             this. = injectedPageName;
 
             resources.addPageLifecycleListener(new PageLifecycleAdapter()
             {
                 @Override
                 public void containingPageDidDetach()
                 {
                      = null;
                 }
             });
         }
 
         public Object get()
         {
             if ( == null)
                  = .getPage();
 
             return ;
         }
     }
 
     private final ComponentSource componentSource;
 
     private final ComponentClassResolver resolver;
 
     public InjectPageWorker(ComponentSource componentSourceComponentClassResolver resolver)
     {
         this. = componentSource;
         this. = resolver;
     }
 
     public void transform(ClassTransformation transformationMutableComponentModel model)
     {
         for (TransformField field : transformation.matchFieldsWithAnnotation(InjectPage.class))
         {
             addInjectedPage(field);
         }
     }
 
     private void addInjectedPage(TransformField field)
     {
         InjectPage annotation = field.getAnnotation(InjectPage.class);
 
         field.claim(annotation);
 
         String pageName = annotation.value();
 
         final String fieldName = field.getName();
 
         final String injectedPageName = InternalUtils.isBlank(pageName) ? 
                 .resolvePageClassNameToPageName(field.getType()) : pageName;
 
        {
            public FieldValueConduit get(ComponentResources resources)
            {
                return new InjectedPageConduit(resourcesfieldNameinjectedPageName);
            }
        };
        field.replaceAccess(provider);
    }
New to GrepCode? Check out our FAQ X