/*
* © Copyright IBM Corp. 2012
*
* 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.sbt.jslibrary.servlet;
import com.ibm.commons.util.StringUtil;
import com.ibm.sbt.services.endpoints.Endpoint;
import com.ibm.sbt.services.endpoints.js.JSReference;
/**
* Dojo specific library implementation for versions that do not support AMD
*
* @author mwallace
*/
public class DojoLibrary extends AbstractLibrary {
private String minimumAmdVersion;
private String minimumDojo2Version;
public static final String NAME = "dojo"; //$NON-NLS-1$
public static final String MODULE_BRIDGE = "sbt._bridge"; //$NON-NLS-1$
public static final String MODULE_SBT_WIDGET = "sbt.widget"; //$NON-NLS-1$
public static final String MODULE_SBTX = "sbtx"; //$NON-NLS-1$
public static final String MODULE_SBTX_WIDGET = "sbtx.widget"; //$NON-NLS-1$
public static final String MODULE_AMDCOMPAT = "sbt._bridge.amdcompat"; //$NON-NLS-1$
public static final String MODULE_BRIDGE_AMD = "sbt/_bridge"; //$NON-NLS-1$
public static final String MODULE_SBT_WIDGET_AMD = "sbt/widget"; //$NON-NLS-1$
public static final String MODULE_SBTX_WIDGET_AMD = "sbtx/widget"; //$NON-NLS-1$
public static final String MODULE_REQUESTTRANSPORT = "sbt/_bridge/RequestTransport"; //$NON-NLS-1$
public static final String PATH_BRIDGE = "_bridges/dojo"; //$NON-NLS-1$
public static final String PATH_BRIDGE_AMD = "_bridges/dojo-amd"; //$NON-NLS-1$
public static final String PATH_DOJO = "dojo"; //$NON-NLS-1$
public static final String PATH_DOJO2 = "dojo2"; //$NON-NLS-1$
public static final String PATH_SBTX_DOJO = "dojo"; //$NON-NLS-1$
public static final String PATH_SBTX_DOJO2 = "dojo2"; //$NON-NLS-1$
public static final String _JS = "_js"; //$NON-NLS-1$
static private final String[][] REGISTER_MODULES = { { MODULE_SBT, PATH_SBT },
{ MODULE_BRIDGE, PATH_BRIDGE },
{ MODULE_SBT_WIDGET, PATH_DOJO } };
static private final String[] REQUIRE_MODULES = { MODULE_AMDCOMPAT };
static private final String[][] REGISTER_MODULES_AMD = { { MODULE_SBT, PATH_SBT },
{ MODULE_BRIDGE_AMD, PATH_BRIDGE_AMD },
{ MODULE_SBT_WIDGET_AMD, PATH_DOJO2 } };
static private final String[] REQUIRE_MODULES_AMD = new String[0];
// extension modules
private static final String[][] REGISTER_EXT_MODULES = { { MODULE_SBTX, PATH_SBTX },
{ MODULE_SBTX_WIDGET, PATH_SBTX_DOJO } };
private static final String[][] REGISTER_EXT_MODULES_AMD= { { MODULE_SBTX, PATH_SBTX },
{ MODULE_SBTX_WIDGET_AMD, PATH_DOJO2 } };
static private final String DEFINE_MODULE = MODULE_CONFIG;
static private final String DEFINE_MODULE_LAYER = MODULE_CONFIG_LAYER;
/**
* Default constructor
*/
public DojoLibrary() {
// TODO remove hardcoded strings
this(NAME, "1.4", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/**
* @param libraryName
* @param minimumVersion
* @param maximumVersion
* @throws ClassNotFoundException
*/
public DojoLibrary(String libraryName, String minimumVersion, String maximumVersion) {
super(libraryName, minimumVersion, maximumVersion);
minimumAmdVersion = normalizeVersion("1.7.0");
minimumDojo2Version = normalizeVersion("1.8.0");
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#enableDefineCheck(java. lang.String)
*/
@Override
public boolean enableDefineCheck(String version) {
if (!StringUtil.isEmpty(version)) {
return !isExceedsVersion(version, minimumAmdVersion);
}
return true;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.BaseLibrary#getName()
*/
@Override
public String getName() {
return NAME;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.BaseLibrary#getRegisterModules(LibraryRequest)
*/
@Override
protected String[][] getRegisterModules(LibraryRequest request) {
return REGISTER_MODULES;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#getRegisterModulesAmd(LibraryRequest)
*/
@Override
protected String[][] getRegisterModulesAmd(LibraryRequest request) {
if (isExceedsVersion(request.getJsVersion(), minimumDojo2Version)) {
REGISTER_MODULES_AMD[2][1] = PATH_SBTX_DOJO2;
} else {
REGISTER_MODULES_AMD[2][1] = PATH_SBTX_DOJO;
}
return REGISTER_MODULES_AMD;
}
/* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#getRegisterExtModules(LibraryRequest)
*/
@Override
protected String[][] getRegisterExtModules(LibraryRequest request) {
return REGISTER_EXT_MODULES;
}
/* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#getRegisterExtModulesAmd(LibraryRequest)
*/
@Override
protected String[][] getRegisterExtModulesAmd(LibraryRequest request) {
if (isExceedsVersion(request.getJsVersion(), minimumDojo2Version)) {
REGISTER_EXT_MODULES_AMD[1][1] = PATH_SBTX_DOJO2;
} else {
REGISTER_EXT_MODULES_AMD[1][1] = PATH_SBTX_DOJO;
}
return REGISTER_EXT_MODULES_AMD;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.BaseLibrary#getDefineModule()
*/
@Override
protected String getDefineModule() {
return DEFINE_MODULE;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.BaseLibrary#getDefineModule()
*/
@Override
protected String getDefineModuleLayer() {
return DEFINE_MODULE_LAYER;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.BaseLibrary#getRequireModules()
*/
@Override
protected String[] getRequireModules() {
return REQUIRE_MODULES;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#getRequireModulesAmd()
*/
@Override
protected String[] getRequireModulesAmd() {
return REQUIRE_MODULES_AMD;
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#generateRegisterModulePath (java.lang.String, java.lang.String)
*/
@Override
protected String generateRegisterModulePath(LibraryRequest request, String moduleName, String moduleUrl) {
StringBuilder sb = new StringBuilder();
if (isExceedsVersion(request.getJsVersion(), minimumAmdVersion)) {
// Dojo AMD syntax
sb.append("require({paths:{'").append(moduleName).append("': '").append(moduleUrl).append("'}});").append(newLine());
} else {
// Non AMD dojo syntax
sb.append("dojo.registerModulePath('").append(moduleName).append("','").append(moduleUrl)
.append("')").append(";").append(newLine());
}
return sb.toString();
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#generateRequire(java.lang .String)
*/
@Override
protected String generateRequire(String module) {
StringBuilder sb = new StringBuilder();
sb.append("dojo.require('").append(module).append("')").append(";").append(newLine());
return sb.toString();
}
/* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#generateProvide()
*/
@Override
protected String generateProvide() {
return "dojo.provide(\"sbt.library.init\");";
}
/*
* (non-Javadoc)
* @see com.ibm.sbt.jslibrary.servlet.AbstractLibrary#getTransport(LibraryRequest, Endpoint, java.lang.String)
*/
@Override
protected JSReference getTransport(LibraryRequest request, Endpoint endpoint, String endpointName) {
// Dojo2 versions from 1.8 and above should use RequestTransport
String transport = request.getParameter("transport");
if ("request".equals(transport) && isExceedsVersion(request.getJsVersion(), minimumDojo2Version)) {
return endpoint.getTransport(endpointName, MODULE_REQUESTTRANSPORT);
}
return super.getTransport(request, endpoint, endpointName);
}
}