/* * © 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.sbtsdk.resources; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.Map; import com.ibm.commons.util.DoubleMap; import com.ibm.commons.util.StringUtil; import com.ibm.sbt.web.SbtWebActivator; import com.ibm.xsp.context.DojoLibrary; import com.ibm.xsp.extlib.plugin.DominoPluginActivator; 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; /** * Resource Loader that loads the resource from core DWA. */ public class SbtLoader extends ResourceLoader { // This is to support both the development mode and the deployed (compiled) one public static String BASE_WEBRESOURCE_PATH = "WebContent/"; static { try { URL u = ExtLibUtil.getResourceURL(SbtWebActivator.instance.getBundle(), "src/main/webapp/js/sdk/sbt/lang.js"); if(u!=null) { BASE_WEBRESOURCE_PATH = "src/main/webapp/"; } } catch(Throwable ex) {} } public static class SbtDojoLocaleResource extends UrlDojoLocaleResource { public SbtDojoLocaleResource(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 SbtCSSResource extends UrlCSSResource { public SbtCSSResource(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 SbtLoader() { } // ======================================================== // 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("sbt.")) { // $NON-NLS-1$ String dojoName = name; String basePath; if(name.startsWith("sbt._bridge.")) { dojoName = dojoName.substring(12); if(ExtLibUtil.isXPages853()) { basePath = BASE_WEBRESOURCE_PATH+"js/sdk/_bridges/dojo/"; // $NON-NLS-1$ } else { basePath = BASE_WEBRESOURCE_PATH+"js/sdk/_bridges/dojo-amd/"; // $NON-NLS-1$ } } else if(name.startsWith("sbt.dojo.")) { dojoName = dojoName.substring(9); basePath = BASE_WEBRESOURCE_PATH+"js/sdk/dojo/"; // $NON-NLS-1$ } else { basePath = BASE_WEBRESOURCE_PATH+"js/sdk/"; // $NON-NLS-1$ } String path = basePath+StringUtil.replace(dojoName, '.', '/')+".js"; // $NON-NLS-1$ URL u = ExtLibUtil.getResourceURL(SbtWebActivator.instance.getBundle(), path); if(u!=null) { return new UrlDojoResource(dojoLibrary,name,u); } } // Look for resources... if( name.startsWith("!sbt.")) { // $NON-NLS-1$ return new SbtDojoLocaleResource(dojoLibrary,name,BASE_WEBRESOURCE_PATH+"js/sdk"); } return null; } @Override public void loadDojoShortcuts(DoubleMap<String, String> aliases, DoubleMap<String, String> prefixes) { super.loadDojoShortcuts(aliases, prefixes); /// ALIASES if(aliases!=null) { aliases.put("@Ya","sbt"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Yb","sbt.Endpoint"); // $NON-NLS-1$ $NON-NLS-2$ aliases.put("@Yc","sbt.Proxy"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Yd","sbt.Transport"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Ye","sbt.dom"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Yf","sbt.xpath"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Yg","sbt.xml"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Yh","sbt.json"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Yi","sbt.lang"); // $NON-NLS-2$ $NON-NLS-1$ aliases.put("@Yj","sbt.stringutil"); // $NON-NLS-2$ $NON-NLS-1$ } /// PREFIXES if(prefixes!=null) { prefixes.put("Y","sbt."); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Ya","sbt._bridges"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Yb","sbt.dojo"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Yc","sbt.authentication"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Yd","sbt.base"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Ye","sbt.connections"); // $NON-NLS-2$ $NON-NLS-1$ prefixes.put("2Yf","sbt.smartcloud"); // $NON-NLS-1$ $NON-NLS-2$ prefixes.put("2Yg","sbt.domino"); // $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/.sbtsdk/bootstrap/")) { // $NON-NLS-1$ String path = "/resources/bootstrap/css/"+name.substring(30); // $NON-NLS-1$ URL u = ExtLibUtil.getResourceURL(SbtWebActivator.instance.getBundle(), path); if(u!=null) { return new SbtCSSResource(dojoLibrary,name,u); } } return null; } @Override public void loadCSSShortcuts(DoubleMap<String, String> aliases, DoubleMap<String, String> prefixes) { /// ALIASES if(aliases!=null) { aliases.put("@Ya","/.ibmxspres/.sbtsdk/bootstrap/css/bootstrap.css"); //$NON-NLS-1$ //$NON-NLS-2$ aliases.put("@Yb","/.ibmxspres/.sbtsdk/bootstrap/css/bootstrap-responsive.css"); //$NON-NLS-1$ //$NON-NLS-2$ aliases.put("@Yc","/.ibmxspres/.sbtsdk/bootstrap/css/bootstrap.min.css"); //$NON-NLS-1$ //$NON-NLS-2$ aliases.put("@Yd","/.ibmxspres/.sbtsdk/bootstrap/css/bootstrap-responsive.min.css"); //$NON-NLS-1$ //$NON-NLS-2$ } /// PREFIXES if(prefixes!=null) { prefixes.put("2Ya","/.ibmxspres/.sbtsdk/"); //$NON-NLS-1$ //$NON-NLS-2$ prefixes.put("2Yb","/.ibmxspres/.sbtsdk/bootstrap/"); //$NON-NLS-1$ //$NON-NLS-2$ prefixes.put("2Yc","/.ibmxspres/.sbtsdk/bootstrap/css/"); //$NON-NLS-1$ //$NON-NLS-2$ } } }