/* * � Copyright IBM Corp. 2010 * * 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 com.ibm.xsp.extlib.minifier; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.faces.context.FacesContext; import com.ibm.commons.util.DoubleMap; import com.ibm.commons.util.StringUtil; import com.ibm.xsp.context.DojoLibrary; import com.ibm.xsp.context.RequestParameters; import com.ibm.xsp.extlib.plugin.DominoPluginActivator; import com.ibm.xsp.extlib.resources.ExtlibResourceProvider; import com.ibm.xsp.extlib.util.ExtLibUtil; import com.ibm.xsp.minifier.CSSResource; import com.ibm.xsp.minifier.DojoResource; import com.ibm.xsp.minifier.ResourceLoader; import com.ibm.xsp.util.FacesUtil; /** * Resource Loader that loads the resource from core DWA. */ public class DWALoader extends ResourceLoader { public static class DWADojoLocaleResource extends UrlDojoLocaleResource { public DWADojoLocaleResource(DojoLibrary dojoLibrary, String name, String baseUrl) { super(dojoLibrary, name, baseUrl); } @Override protected URL getResourceURL(String baseUrl, String name) throws IOException { String path = baseUrl+StringUtil.replace(name, '.', '/')+".js"; // $NON-NLS-1$ URL url = ExtLibUtil.getResourceURL(DominoPluginActivator.instance.getBundle(), path); return url; } // TEMP XPages bug @Override protected String getModulePath(String locale) { String s = super.getModulePath(locale); s = StringUtil.replace(s, "..", "."); return s; } } public static class DWACSSResource extends UrlCSSResource { public DWACSSResource(DojoLibrary dojoLibrary, String name, URL url) { super(dojoLibrary,name,url); } @Override protected String calculateUrlPrefix() { String s = super.calculateUrlPrefix(); // If we try to access a resource through a servlet, add the prefix... if(s.startsWith("/.ibmxspres/")) { // $NON-NLS-1$ s = "/xsp"+s; // $NON-NLS-1$ } return s; } } // Resources private HashMap<String,CSSResource> cssResources = new HashMap<String,CSSResource>(); public DWALoader() { } // ======================================================== // Handling Dojo // ======================================================== @Override public DojoResource getDojoResource(String name, DojoLibrary dojoLibrary) { Map<String,DojoResource> dojoResources = (Map<String,DojoResource>)dojoLibrary.getDojoResources(); DojoResource r = dojoResources.get(name); if(r==null) { synchronized(this) { r = dojoResources.get(name); if(r==null) { r = loadDojoResource(name,dojoLibrary); if(r!=null) { dojoResources.put(name, r); } } } } return r; } protected DojoResource loadDojoResource(String name, DojoLibrary dojoLibrary) { if(name.startsWith("dwa.")) { // $NON-NLS-1$ String dojoName = name; String path = ExtlibResourceProvider.DWA_RES_PATH+StringUtil.replace(dojoName, '.', '/')+".js"; // $NON-NLS-1$ URL u = ExtLibUtil.getResourceURL(DominoPluginActivator.instance.getBundle(), path); if(u!=null) { return new UrlDojoResource(dojoLibrary,name,u); } } // Look for resources... if( name.startsWith("!dwa.")) { // $NON-NLS-1$ return new DWADojoLocaleResource(dojoLibrary,name,ExtlibResourceProvider.DWA_RES_PATH); } return null; } @Override public void loadDojoShortcuts(DoubleMap<String, String> aliases, DoubleMap<String, String> prefixes) { super.loadDojoShortcuts(aliases, prefixes); /// ALIASES if(aliases!=null) { aliases.put("@Wa","dwa.cv.calendarView"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Wb","dwa.data.DominoCalendarStore"); // $NON-NLS-1$ $NON-NLS-2$ aliases.put("@Wc","dwa.xsp.listView"); // $NON-NLS-2$ $NON-NLS-1$ } /// PREFIXES if(prefixes!=null) { prefixes.put("W","dwa."); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wa","dwa.common"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Wb","dwa.cv"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wc","dwa.data"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Wd","dwa.date"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2We","dwa.lv"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Wf","dwa.xsp"); // $NON-NLS-1$ $NON-NLS-2$ } } // ======================================================== // Handling CSS // ======================================================== @Override public CSSResource getCSSResource(String name, DojoLibrary dojoLibrary) { CSSResource r = cssResources.get(name); if(r==null) { synchronized(this) { r = cssResources.get(name); if(r==null) { r = loadCSSResource(name,dojoLibrary); if(r!=null) { cssResources.put(name, r); } } } } return r; } public CSSResource loadCSSResource(String name, DojoLibrary dojoLibrary) { if(name.startsWith("/.ibmxspres/.dwa/")) { // $NON-NLS-1$ String path = ExtlibResourceProvider.DWA_RES_PATH+"dwa/"+name.substring(17); // $NON-NLS-1$ URL u = ExtLibUtil.getResourceURL(DominoPluginActivator.instance.getBundle(), path); if(u!=null) { return new DWACSSResource(dojoLibrary,name,u); } } return null; } @Override public void loadCSSShortcuts(DoubleMap<String, String> aliases, DoubleMap<String, String> prefixes) { super.loadCSSShortcuts(aliases, prefixes); /// ALIASES if(aliases!=null) { //aliases.put("@Ec","/.ibmxspres/.extlib/css/tagcloud.css"); } /// PREFIXES if(prefixes!=null) { prefixes.put("W","/.ibmxspres/"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wa","/.ibmxspres/.dwa/"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Wb","/.ibmxspres/.dwa/common/themes/"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wc","/.ibmxspres/.dwa/common/themes/hannover/"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Wd","/.ibmxspres/.dwa/cv/themes/"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2We","/.ibmxspres/.dwa/cv/themes/hannover/"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wf","/.ibmxspres/.dwa/date/themes/"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wg","/.ibmxspres/.dwa/date/themes/hannover/"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wh","/.ibmxspres/.dwa/lv/themes/"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Wi","/.ibmxspres/.dwa/lv/themes/hannover/"); // $NON-NLS-1$ $NON-NLS-2$ } } }