/* * Copyright (C) 2003-2014 eXo Platform SAS. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.exoplatform.services.wcm.skin; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.exoplatform.portal.resource.SkinConfig; import org.exoplatform.portal.resource.SkinKey; import org.exoplatform.portal.resource.SkinVisitor; import org.exoplatform.services.wcm.utils.WCMCoreUtils; /** * Created by The eXo Platform SAS * Author : eXoPlatform * exo@exoplatform.com * Jun 16, 2014 */ public class WCMSkinVisitor implements SkinVisitor{ private List<SkinConfig> wcmSiteSkins = new ArrayList<SkinConfig>(); private List<SkinConfig> wcmSharedSkins = new ArrayList<SkinConfig>(); private String skinName; private String moduleName; public WCMSkinVisitor(String siteName,String skinName){ this.skinName = skinName; this.moduleName = XSkinService.createModuleName(siteName); } @Override public void visitPortalSkin(Entry<SkinKey, SkinConfig> entry) { String name = entry.getKey().getName(); if (name.equals(this.skinName)) visit(wcmSharedSkins, entry); } @Override public void visitSkin(Entry<SkinKey, SkinConfig> entry) { String module = entry.getKey().getModule(); String name = entry.getKey().getName(); if (name.equals(this.skinName) && module.equals(moduleName)) visit(wcmSiteSkins,entry); } @Override public Collection<SkinConfig> getSkins() { List<SkinConfig> skins = new LinkedList<SkinConfig>(); Comparator<SkinConfig> skinComparator = new Comparator<SkinConfig>(){ @Override public int compare(SkinConfig o1, SkinConfig o2) { return o1.getCSSPriority() - o2.getCSSPriority(); }}; Collections.sort(wcmSharedSkins, skinComparator); skins.addAll(wcmSharedSkins); Collections.sort(wcmSiteSkins, skinComparator); skins.addAll(wcmSiteSkins); return skins; } private void visit(Collection<SkinConfig> skins, Entry<SkinKey, SkinConfig> entry){ String currentContext = WCMCoreUtils.getRepository().getConfiguration().getName(); String cssPath = entry.getValue().getCSSPath(); Map<String,String> params = XSkinService.getSkinParams(cssPath); if (cssPath.matches(XSkinService.SKIN_PATH_REGEXP)){ if (!params.get(XSkinService.CONTEXT_PARAM).equals(currentContext)) return; } skins.add(entry.getValue()); } }