1 16 package org.outerj.daisy.frontend; 17 18 import org.outerj.daisy.frontend.util.AbstractDaisyApple; 19 import org.outerj.daisy.frontend.components.siteconf.SitesManager; 20 import org.outerj.daisy.frontend.components.siteconf.SiteConf; 21 import org.outerj.daisy.repository.Repository; 22 import org.outerj.daisy.repository.VariantKey; 23 import org.outerj.daisy.repository.acl.AclPermission; 24 import org.apache.cocoon.components.flow.apples.AppleRequest; 25 import org.apache.cocoon.components.flow.apples.AppleResponse; 26 import org.apache.cocoon.components.flow.apples.StatelessAppleController; 27 import org.apache.avalon.framework.service.Serviceable; 28 import org.apache.avalon.framework.service.ServiceManager; 29 import org.apache.avalon.framework.service.ServiceException; 30 import org.apache.avalon.framework.activity.Disposable; 31 32 import java.util.*; 33 34 public class IndexPageApple extends AbstractDaisyApple implements StatelessAppleController, Serviceable, Disposable { 35 private ServiceManager serviceManager; 36 private SitesManager sitesManager; 37 38 public void service(ServiceManager serviceManager) throws ServiceException { 39 this.serviceManager = serviceManager; 40 this.sitesManager = (SitesManager)serviceManager.lookup(SitesManager.ROLE); 41 } 42 43 public void dispose() { 44 if (sitesManager != null) 45 serviceManager.release(sitesManager); 46 } 47 48 protected void processInternal(AppleRequest appleRequest, AppleResponse appleResponse) throws Exception { 49 Repository repository = WikiHelper.getRepository(appleRequest.getCocoonRequest(), serviceManager); 50 51 Collection siteConfs = sitesManager.getSiteConfs(); 53 List homePageDocKeys = new ArrayList(siteConfs.size()); 54 Iterator siteConfsIt = siteConfs.iterator(); 55 while (siteConfsIt.hasNext()) { 56 SiteConf siteConf = (SiteConf)siteConfsIt.next(); 57 if (siteConf.getHomePageDocId() != -1) 58 homePageDocKeys.add(new VariantKey(siteConf.getHomePageDocId(), siteConf.getBranchId(), siteConf.getLanguageId())); 59 } 60 61 WikiVersionMode versionMode = WikiHelper.getVersionMode(appleRequest.getCocoonRequest()); 62 AclPermission filterPermission = versionMode == WikiVersionMode.LAST ? AclPermission.READ : AclPermission.READ_LIVE; 63 64 VariantKey[] filteredHomePageDocKeys = repository.getAccessManager().filterDocuments((VariantKey[])homePageDocKeys.toArray(new VariantKey[homePageDocKeys.size()]), filterPermission); 66 Arrays.sort(filteredHomePageDocKeys); 67 68 ArrayList filteredSiteConfs = new ArrayList(siteConfs.size()); 70 siteConfsIt = siteConfs.iterator(); 71 while (siteConfsIt.hasNext()) { 72 SiteConf siteConf = (SiteConf)siteConfsIt.next(); 73 if (siteConf.getHomePageDocId() == -1 74 || (Arrays.binarySearch(filteredHomePageDocKeys, new VariantKey(siteConf.getHomePageDocId(), siteConf.getBranchId(), siteConf.getLanguageId())) >= 0)) { 75 filteredSiteConfs.add(siteConf); 76 } 77 } 78 79 Map viewData = new HashMap(); 80 viewData.put("sites", filteredSiteConfs); 81 viewData.put("pageContext", new PageContext(getMountPoint(), repository, getLayoutType(), getSkin(), SkinConfHelper.getGlobalSkinConf(serviceManager), getContext())); 82 83 appleResponse.sendPage("IndexPagePipe", viewData); 84 } 85 } 86 | Popular Tags |