You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by jw...@apache.org on 2013/10/24 17:28:48 UTC

svn commit: r1535415 - in /myfaces/trinidad/trunk: trinidad-api/src/main/java/org/apache/myfaces/trinidad/skin/ trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/ trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin...

Author: jwaldman
Date: Thu Oct 24 15:28:47 2013
New Revision: 1535415

URL: http://svn.apache.org/r1535415
Log:
TRINIDAD-2406 externalize skin repositories by using SkinProvider SPI
thanks to Anand for the patch
this patch fixes the issue where skin additions specified in trindiad-skins.xml (mainly simple skin additions) for skins registered using SkinFactory.addSkin (mainly in Configurator's init or reloadSkin) are not getting picked up. 

The solution is to ensure that the skin additions are added when we return skin from ExternalSkinProvider. ExternalSkinProvider is the place where the Skins registered using SkinFactory.addSkin will reside. ExternalSkinProvider will now call an API (internal) on TrindiadSkinProvider to get the SkinAdditions added, if they are not already. 

Modified:
    myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/skin/SkinAddition.java
    myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java
    myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/SkinUtils.java
    myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/ExternalSkinProvider.java
    myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/SkinProviderRegistry.java
    myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/TrinidadSkinProvider.java
    myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/RenderKitTestCase.java
    myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/XhtmlLafUtilsTest.java

Modified: myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/skin/SkinAddition.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/skin/SkinAddition.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/skin/SkinAddition.java (original)
+++ myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/skin/SkinAddition.java Thu Oct 24 15:28:47 2013
@@ -44,8 +44,6 @@ import javax.faces.el.ValueBinding;
  * Most likely this is the simple.desktop skin.
  * The other elements are used to create a SkinAddition object.
  * </p>
- *
- *
  */
 public class SkinAddition
 {
@@ -318,6 +316,39 @@ public class SkinAddition
     private SkinFeatures _skinFeatures;
   }
 
+  @Override
+  public boolean equals(Object o)
+  {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+
+    SkinAddition addition = (SkinAddition) o;
+
+    if (_resourceBundleName != null ? !_resourceBundleName.equals(addition._resourceBundleName) : addition._resourceBundleName != null)
+      return false;
+    if (_skinFeatures != null ? !_skinFeatures.equals(addition._skinFeatures) : addition._skinFeatures != null)
+      return false;
+    if (_skinId != null ? !_skinId.equals(addition._skinId) : addition._skinId != null)
+      return false;
+    if (_styleSheetName != null ? !_styleSheetName.equals(addition._styleSheetName) : addition._styleSheetName != null)
+      return false;
+    if (_translationSourceVE != null ? !_translationSourceVE.equals(addition._translationSourceVE) : addition._translationSourceVE != null)
+      return false;
+
+    return true;
+  }
+
+  @Override
+  public int hashCode()
+  {
+    int result = 17;
+    result = 37 * result + (null == _styleSheetName ? 0 : _styleSheetName.hashCode());
+    result = 37 * result + (null == _skinId ? 0 : _skinId.hashCode());
+    result = 37 * result + (null == _resourceBundleName ? 0 : _resourceBundleName.hashCode());
+    result = 37 * result + (null == _translationSourceVE ? 0 : _translationSourceVE.hashCode());
+    result = 37 * result + (null == _skinFeatures ? 0 : _skinFeatures.hashCode());
+    return result;
+  }
 
   /**
    * Constructor for SkinAddition based on Builder

Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/config/GlobalConfiguratorImpl.java Thu Oct 24 15:28:47 2013
@@ -60,6 +60,7 @@ import org.apache.myfaces.trinidadintern
 import org.apache.myfaces.trinidadinternal.skin.SkinFactoryImpl;
 import org.apache.myfaces.trinidadinternal.skin.provider.ExternalSkinProvider;
 import org.apache.myfaces.trinidadinternal.skin.provider.SkinProviderRegistry;
+import org.apache.myfaces.trinidadinternal.skin.provider.TrinidadSkinProvider;
 
 /**
  * This is the implementation of the Trinidad's Global configurator. It provides the entry point for
@@ -438,6 +439,13 @@ public final class GlobalConfiguratorImp
         if (externalSkinProvider == null)
           ec.getApplicationMap().put(ExternalSkinProvider.EXTERNAL_SKIN_PROVIDER_KEY, new ExternalSkinProvider());
 
+        // init trinidad skin provider
+        // this has to be done before SkinProviderRegistry, because SkinProviderRegistry uses this
+        Object trinidadSkinProvider = ec.getApplicationMap().get(TrinidadSkinProvider.TRINDIAD_SKIN_PROVIDER_KEY);
+
+        if (trinidadSkinProvider  == null)
+          ec.getApplicationMap().put(TrinidadSkinProvider.TRINDIAD_SKIN_PROVIDER_KEY, new TrinidadSkinProvider());
+
         // init skin provider
         Object provider = ec.getApplicationMap().get(SkinProvider.SKIN_PROVIDER_INSTANCE_KEY);
 

Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/SkinUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/SkinUtils.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/SkinUtils.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/SkinUtils.java Thu Oct 24 15:28:47 2013
@@ -53,6 +53,7 @@ import org.apache.myfaces.trinidad.skin.
 import org.apache.myfaces.trinidad.skin.SkinVersion;
 import org.apache.myfaces.trinidad.util.ClassLoaderUtils;
 import org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
+import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.TrinidadRenderingConstants;
 import org.apache.myfaces.trinidadinternal.share.xml.ClassParserFactory;
 import org.apache.myfaces.trinidadinternal.share.xml.ParseContextImpl;
 import org.apache.myfaces.trinidadinternal.share.xml.ParserFactory;
@@ -64,6 +65,7 @@ import org.apache.myfaces.trinidadintern
 import org.apache.myfaces.trinidadinternal.skin.parse.SkinsNode;
 import org.apache.myfaces.trinidadinternal.skin.parse.XMLConstants;
 import org.apache.myfaces.trinidadinternal.skin.provider.ExternalSkinProvider;
+import org.apache.myfaces.trinidadinternal.skin.provider.TrinidadSkinProvider;
 import org.apache.myfaces.trinidadinternal.style.StyleContext;
 
 import org.xml.sax.InputSource;
@@ -77,6 +79,11 @@ import org.xml.sax.InputSource;
  */
 public class SkinUtils
 {
+  /**
+   * Utility method to get the SkinProvider instance
+   * @param context Tries to obtain the default FacesContext if null is passed
+   * @return
+   */
   static public SkinProvider getSkinProvider(FacesContext context)
   {
     if (context == null)
@@ -88,6 +95,11 @@ public class SkinUtils
     return SkinProvider.getCurrentInstance(context.getExternalContext());
   }
 
+  /**
+   * Utility method to get the ExternalSkinProvider instance
+   * @param context Tries to obtain the default FacesContext if null is passed
+   * @return
+   */
   static public SkinProvider getExternalSkinProvider(FacesContext context)
   {
     if (context == null)
@@ -100,6 +112,76 @@ public class SkinUtils
   }
 
   /**
+   * Utility method to get the TrinidadSkinProvider instance
+   * @param context Tries to obtain the default FacesContext if null is passed
+   * @return
+   */
+  static public TrinidadSkinProvider getTrinidadSkinProvider(FacesContext context)
+  {
+    if (context == null)
+      context = FacesContext.getCurrentInstance();
+
+    if (context == null)
+      throw new NullPointerException("Cannot retrieve FacesContext. FacesContext is null.");
+
+    return TrinidadSkinProvider.getCurrentInstance(context.getExternalContext());
+  }
+
+  /**
+   * Adds skinAddition passed into the skin object passed, if the skin object does not have
+   * the same skin addition already.
+   * @param skin
+   * @param skinAddition
+   * @return true if the SkinAddition was added into Skin and false if it was not.
+   */
+  static public boolean addSkinAdditionToSkinIfAbsent(Skin skin, SkinAddition skinAddition)
+  {
+    if (skin == null || skinAddition == null)
+      throw new NullPointerException("Skin or SkinAddition passed is null");
+
+    List<SkinAddition> additions = skin.getSkinAdditions();
+
+    if (skinAddition != null)
+    {
+      for (SkinAddition addn : additions)
+        if (addn != null && addn.equals(skinAddition))
+          return false;
+    }
+
+    skin.addSkinAddition(skinAddition);
+    return true;
+  }
+
+  /**
+   * @param provider skin provider
+   * @param context faces context
+   * @param renderKitId renderKit Id for default skin
+   * @return the default skin for the renderKit passed. Assumes renderKit as DESKTOP if null.
+   *         does not return null, returns the DESKTOP simple skin in worst case.
+   */
+  public static Skin getDefaultSkinForRenderKitId(SkinProvider provider, FacesContext context, String renderKitId)
+  {
+
+    if (provider == null || context == null)
+      throw new NullPointerException("SkinProvider or FacesContext is passed as null.");
+
+    String defaultSkinId;
+
+    if (TrinidadRenderingConstants.APACHE_TRINIDAD_PORTLET.equals(renderKitId))
+      defaultSkinId = TrinidadRenderingConstants.SIMPLE_PORTLET_ID;
+    else if (TrinidadRenderingConstants.APACHE_TRINIDAD_PDA.equals(renderKitId))
+      defaultSkinId = TrinidadRenderingConstants.SIMPLE_PDA_ID;
+    else
+      defaultSkinId = TrinidadRenderingConstants.SIMPLE_DESKTOP_ID;
+
+    Skin defaultSkin = provider.getSkin(context, new SkinMetadata.Builder().id(defaultSkinId).build());
+
+    assert (defaultSkin != null);
+
+    return defaultSkin;
+  }
+
+  /**
    * Builds the SkinMetadata hierarchy from trinidad-skins.xml
    * @return
    */

Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/ExternalSkinProvider.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/ExternalSkinProvider.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/ExternalSkinProvider.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/ExternalSkinProvider.java Thu Oct 24 15:28:47 2013
@@ -28,6 +28,7 @@ import org.apache.myfaces.trinidad.skin.
 import org.apache.myfaces.trinidad.skin.SkinFactory;
 import org.apache.myfaces.trinidad.skin.SkinMetadata;
 import org.apache.myfaces.trinidadinternal.config.GlobalConfiguratorImpl;
+import org.apache.myfaces.trinidadinternal.skin.SkinUtils;
 
 /**
  * ExternalSkinProvider serves to maintain backward compatibility with legacy SkinFactory users.
@@ -46,6 +47,25 @@ public class ExternalSkinProvider extend
    * {@inheritDoc}
    */
   @Override
+  public Skin getSkin(FacesContext context, SkinMetadata skinMetadata)
+  {
+    synchronized (this)
+    {
+      Skin skin = super.getSkin(context, skinMetadata);
+
+      // ensure that the skin's and its parent's skin additions are added before we return.
+      // see _ensureSkinAdditions method documentation for more information on why we need to do this.
+      if (skin != null)
+        _ensureSkinAdditions(context, skin);
+
+      return skin;
+    }
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
   protected Skin loadAvailableSkin(FacesContext context, SkinMetadata skinMetadata)
   {
     // this case will never rise with this provider.
@@ -109,6 +129,32 @@ public class ExternalSkinProvider extend
   }
 
   /**
+   * {@link org.apache.myfaces.trinidad.config.Configurator} allows access to SkinFactory in its init() and
+   * reloadSkin() API. These are now deprecated. But for existing use cases where user registers Skins during init() of
+   * Configurator, they obtains their base skin by doing something like SkinFactory.getSkin(null, "simple.desktop");
+   * Then custom skin is created using the simple skin as base and put it into SkinFactory using SkinFactory.addSkin method.
+   * All skins registered using SkinFactory.addSkin method lands up here in ExternalSkinProvider.
+   * Such skins will not have the skin additions registered in trinidad-skins.xml because
+   * TrinidadSkinProvider was not able to kick in and provide this information. So we need to ensure that
+   * skins returned from ExternalSkinProvider the skin additions for that skin and its base skins are added, before we
+   * return them to the caller.
+   * @param context
+   * @param skin
+   * @return
+   */
+  private Skin _ensureSkinAdditions(FacesContext context, Skin skin)
+  {
+    // It is possible to optimize here by keeping track of skins which already went through
+    // this process. Such optimization will avoid repeating this operation for skins which already
+    // went through this. However, this is a corner case as there are not many skins are registered
+    // like this. Moreover we are deprecating SkinFactory.addSkin and it may be removed
+    // in a later release, so there is no point in adding premature optimization.
+    TrinidadSkinProvider trinidadSkinProvider = SkinUtils.getTrinidadSkinProvider(context);
+    trinidadSkinProvider.ensureSkinAdditions(skin);
+    return skin;
+  }
+
+  /**
    * Key for the ExternalSkinProvider stored in ExternalContext
    */
   public static final String EXTERNAL_SKIN_PROVIDER_KEY =

Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/SkinProviderRegistry.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/SkinProviderRegistry.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/SkinProviderRegistry.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/SkinProviderRegistry.java Thu Oct 24 15:28:47 2013
@@ -62,7 +62,7 @@ public class SkinProviderRegistry extend
     if (_LOG.isFine())
       _LOG.fine("Adding TrinidadSkinProvider... ");
 
-    providers.add(new TrinidadSkinProvider());
+    providers.add(SkinUtils.getTrinidadSkinProvider(null));
 
     if (_LOG.isFine())
       _LOG.fine("Adding TrinidadBaseSkinProvider... ");
@@ -144,7 +144,8 @@ public class SkinProviderRegistry extend
       assert  (skinMetadata.getRenderKitId() != null);
       // if renderKit is available return the simple skin for that renderKit
       // skinMetadata.getRenderKitId() can never be null, default renderKit will always be DESKTOP
-      return _returnSkin(context, skinMetadata, _getSimpleSkinForRenderKit(context, skinMetadata.getRenderKitId()));
+      return _returnSkin(context, skinMetadata,
+        SkinUtils.getDefaultSkinForRenderKitId(this, context, skinMetadata.getRenderKitId()));
     }
 
 
@@ -487,17 +488,6 @@ public class SkinProviderRegistry extend
     }
   }
 
-  private Skin _getSimpleSkinForRenderKit(FacesContext context, String renderKitId)
-  {
-    if (renderKitId != null && renderKitId.equals(TrinidadRenderingConstants.APACHE_TRINIDAD_PORTLET))
-      return getSkin(context, new SkinMetadata.Builder().id(TrinidadRenderingConstants.SIMPLE_PORTLET_ID).build());
-
-    if (renderKitId != null && renderKitId.equals(TrinidadRenderingConstants.APACHE_TRINIDAD_PDA))
-      return getSkin(context, new SkinMetadata.Builder().id(TrinidadRenderingConstants.SIMPLE_PDA_ID).build());
-
-    return getSkin(context, new SkinMetadata.Builder().id(TrinidadRenderingConstants.SIMPLE_DESKTOP_ID).build());
-  }
-
   private final List<SkinProvider> _providers;
 
   private static final String _SKIN_PROVIDER_CONTEXT =

Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/TrinidadSkinProvider.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/TrinidadSkinProvider.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/TrinidadSkinProvider.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/skin/provider/TrinidadSkinProvider.java Thu Oct 24 15:28:47 2013
@@ -22,9 +22,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
-
-import javax.el.ValueExpression;
 
 import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
@@ -34,8 +31,6 @@ import org.apache.myfaces.trinidad.skin.
 import org.apache.myfaces.trinidad.skin.SkinAddition;
 import org.apache.myfaces.trinidad.skin.SkinMetadata;
 import org.apache.myfaces.trinidad.skin.SkinProvider;
-import org.apache.myfaces.trinidad.skin.SkinVersion;
-import org.apache.myfaces.trinidadinternal.config.LazyValueExpression;
 import org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.TrinidadRenderingConstants;
 import org.apache.myfaces.trinidadinternal.skin.SkinExtension;
 import org.apache.myfaces.trinidadinternal.skin.SkinUtils;
@@ -49,6 +44,44 @@ import org.apache.myfaces.trinidadintern
 public final class TrinidadSkinProvider extends BaseSkinProvider
 {
   /**
+   * Key for the TrinidadSkinProvider stored in ExternalContext
+   */
+  public static final String TRINDIAD_SKIN_PROVIDER_KEY =
+    "org.apache.myfaces.trinidad.skin.TRINDIAD_SKIN_PROVIDER_INSTANCE";
+
+  /**
+   * static factory method to get hold of a TrinidadSkinProvider object
+   * This can be used for easy creation of Skin object without having to
+   * implement the abstract class
+   * @param ec
+   * @return
+   */
+  public static TrinidadSkinProvider getCurrentInstance(ExternalContext ec)
+  {
+    if (ec == null)
+      throw new NullPointerException("ExternalContext is passed as null");
+
+    TrinidadSkinProvider trinidadSkinProvider = (TrinidadSkinProvider) ec.getApplicationMap().get(TRINDIAD_SKIN_PROVIDER_KEY);
+    return trinidadSkinProvider;
+  }
+
+  /**
+   * used by ExternalSkinProvider to ensure that the skin and its base skin additions are added correctly
+   * @param skin
+   */
+  public void ensureSkinAdditions(Skin skin)
+  {
+    if (_skinAdditionNodes == null || _skinAdditionNodes.isEmpty())
+      return;
+
+    for (SkinAddition addition : _skinAdditionNodes)
+    {
+      // skin additions in _skinAdditionNodes will not be null
+      _checkAndAddInHierarchy(skin, addition);
+    }
+  }
+
+  /**
    * {@inheritDoc}
    */
   @Override
@@ -96,7 +129,7 @@ public final class TrinidadSkinProvider 
 
     // if there is no base skin then use the default base skin for the renderKit
     if (baseSkin == null)
-      baseSkin = _getDefaultBaseSkin(provider, renderKitId);
+      baseSkin = SkinUtils.getDefaultSkinForRenderKitId(provider, context, renderKitId);
 
     if (id == null)
       throw new NullPointerException(_LOG.getMessage("NULL_SKIN_ID"));
@@ -123,13 +156,12 @@ public final class TrinidadSkinProvider 
           loadedSkin.addSkinAddition(addition);
         }
 
-        if (baseSkinId.equals(additionSkinId)
-          && !_hasSkinAddition(baseSkin.getSkinAdditions(), addition))
+        if (baseSkinId.equals(additionSkinId))
         {
-            if (_LOG.isFine())
-              _LOG.fine("Adding parent skin addition : " + addition);
+          boolean added = SkinUtils.addSkinAdditionToSkinIfAbsent(baseSkin, addition);
 
-            baseSkin.addSkinAddition(addition);
+          if (added && _LOG.isFine())
+            _LOG.fine("Adding parent skin addition: " + addition);
         }
       }
 
@@ -185,35 +217,23 @@ public final class TrinidadSkinProvider 
     }
   }
 
-  private boolean _hasSkinAddition(List<SkinAddition> additions, SkinAddition search)
+  private void _checkAndAddInHierarchy(Skin skin, SkinAddition addition)
   {
-    if (search == null)
-      return false;
-
-    // here we check only stylesheet name as an addition with a stylesheet name needs to added only once
-    for (SkinAddition addn : additions)
-      if (addn != null && search.getStyleSheetName().equals(addn.getStyleSheetName()))
-        return true;
-
-    return false;
-  }
+    // exit condition for the recursive call
+    if (skin == null)
+      return;
 
-  private static Skin _getDefaultBaseSkin(SkinProvider provider, String renderKitId)
-  {
-    String baseSkinId;
+    String skinId = addition.getSkinId();
 
-    if (TrinidadRenderingConstants.APACHE_TRINIDAD_PDA.equals(renderKitId))
-      baseSkinId =  TrinidadRenderingConstants.SIMPLE_PDA_ID;
-    else if (TrinidadRenderingConstants.APACHE_TRINIDAD_PORTLET.equals(renderKitId))
-      baseSkinId =  TrinidadRenderingConstants.SIMPLE_PORTLET_ID;
-    else
-      baseSkinId = TrinidadRenderingConstants.SIMPLE_DESKTOP_ID;
+    if (skinId != null && skinId.equals(skin.getId()))
+    {
+      boolean added = SkinUtils.addSkinAdditionToSkinIfAbsent(skin, addition);
 
-    Skin baseSkin = provider.getSkin(null, new SkinMetadata.Builder().id(baseSkinId).build());
+      if (added && _LOG.isFine())
+        _LOG.fine("Adding skin addition : " + addition);
+    }
 
-    // this will never be null because we are asking for the default simple skin
-    assert (baseSkin != null);
-    return baseSkin;
+    _checkAndAddInHierarchy(skin.getBaseSkin(), addition);
   }
 
   private List<SkinMetadata> _skinMetadata;

Modified: myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/RenderKitTestCase.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/RenderKitTestCase.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/RenderKitTestCase.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/renderkit/RenderKitTestCase.java Thu Oct 24 15:28:47 2013
@@ -56,6 +56,7 @@ import org.apache.myfaces.trinidadbuild.
 import org.apache.myfaces.trinidadinternal.io.XhtmlResponseWriter;
 import org.apache.myfaces.trinidadinternal.skin.provider.ExternalSkinProvider;
 import org.apache.myfaces.trinidadinternal.skin.provider.SkinProviderRegistry;
+import org.apache.myfaces.trinidadinternal.skin.provider.TrinidadSkinProvider;
 
 import junit.framework.AssertionFailedError;
 import junit.framework.TestResult;
@@ -188,6 +189,7 @@ abstract public class RenderKitTestCase 
       boolean testMode)
     {
       MFacesContext ctx = new MFacesContext(mockApplication, testMode);
+      ctx.getExternalContext().getApplicationMap().put(TrinidadSkinProvider.TRINDIAD_SKIN_PROVIDER_KEY, new TrinidadSkinProvider());
       ctx.getExternalContext().getApplicationMap().put(ExternalSkinProvider.EXTERNAL_SKIN_PROVIDER_KEY, new ExternalSkinProvider());
       ctx.getExternalContext().getApplicationMap().put(SkinProvider.SKIN_PROVIDER_INSTANCE_KEY, new SkinProviderRegistry());
       return ctx;

Modified: myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/XhtmlLafUtilsTest.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/XhtmlLafUtilsTest.java?rev=1535415&r1=1535414&r2=1535415&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/XhtmlLafUtilsTest.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/test/java/org/apache/myfaces/trinidadinternal/ui/laf/base/xhtml/XhtmlLafUtilsTest.java Thu Oct 24 15:28:47 2013
@@ -33,6 +33,7 @@ import org.apache.myfaces.trinidadintern
 import org.apache.myfaces.trinidadinternal.renderkit.MRequestContext;
 import org.apache.myfaces.trinidadinternal.renderkit.RenderKitBootstrap;
 import org.apache.myfaces.trinidadinternal.renderkit.core.CoreRenderingContext;
+import org.apache.myfaces.trinidadinternal.skin.provider.TrinidadSkinProvider;
 
 /**
  * Unit tests for XhtmlLafUtils.
@@ -67,6 +68,7 @@ public class XhtmlLafUtilsTest extends T
     _requestContext.setAgent(RenderKitBootstrap.getGeckoAgent());
     _requestContext.setRightToLeft(false);
     _requestContext.setAccessibilityMode(null);
+    _facesContext.getExternalContext().getApplicationMap().put(TrinidadSkinProvider.TRINDIAD_SKIN_PROVIDER_KEY, new TrinidadSkinProvider());
     _facesContext.getExternalContext().getApplicationMap().put(ExternalSkinProvider.EXTERNAL_SKIN_PROVIDER_KEY, new ExternalSkinProvider());
     _facesContext.getExternalContext().getApplicationMap().put(SkinProvider.SKIN_PROVIDER_INSTANCE_KEY, new SkinProviderRegistry());