Quantcast
Channel: WebCenter Sites – ATeam Chronicles
Viewing all articles
Browse latest Browse all 68

Lookup up a translated asset with Groovy elements

$
0
0

In our continued exploration of Groovy as an alternative to traditional JSP element to implement the rendering business logic, we step today into multi-dimensionable assets. Or to put it more simply: how do I look up a translated asset in Groovy.

The example makes use of the FirstSiteII sample site assets. The assetids reference that site.

The code itself is straight forward once you understand the moving parts. To lookup a translated asset 3 components are used: a Dimension (the french locale), a DimensionSet (what it the falldown locale order for the requested locale), and the translated asset. Most of the MDA API works with Collections which makes to sometimes a bit hard to read.

 

import com.fatwire.assetapi.data.AssetId
import com.fatwire.mda.Dimension
import com.fatwire.mda.DimensionFilterInstance
import com.fatwire.mda.DimensionManager
import com.fatwire.mda.DimensionSetInstance
import com.fatwire.mda.DimensionSetManager
import com.fatwire.system.Session
import com.fatwire.system.SessionFactory
import com.openmarket.xcelerate.asset.AssetIdImpl
import com.openmarket.xcelerate.asset.DimensionSetManagerImpl

Session session = SessionFactory.getSession(ics);

DimensionSetManager dimensionSetManager =  new DimensionSetManagerImpl(ics);

DimensionManager dimensionManager =  (DimensionManager) session.getManager(DimensionManager.class.getName());
AssetId french = new AssetIdImpl("Dimension", 1154551493546L);
Collection<AssetId> preferredDimensionIds = Collections.singleton(french); 

List<Dimension> preferredDimensions = dimensionManager.loadDimensions(preferredDimensionIds);
DimensionSetInstance dimset = dimensionSetManager.loadDimensionSet(1154551493573L); //FSIIGlobal
DimensionFilterInstance dimensionFilter = dimset.getFilter();
if (dimensionFilter != null){
     dimensionFilter.setDimensonPreference(preferredDimensions);

     Collection<AssetId> home = Collections.singleton(new AssetIdImpl("Page", 1118867611403L)); //The English home page

     Collection<AssetId> filtered = dimensionFilter.filterAssets(home);

     for (AssetId id: filtered){
           ics.StreamEvalBytes(id.toString());
           ics.StreamEvalBytes("<br/>");
     }
}

As you can see, the DimensionSet it populated with the preferred Dimension, in our case the French locale, and then it filters for the English ‘Home’ asset. The returned result in our sample is a single asset: the French HomePage asset.


Viewing all articles
Browse latest Browse all 68

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>