/*
* Smart GWT (GWT for SmartClient)
* Copyright 2008 and beyond, Isomorphic Software, Inc.
*
* Smart GWT is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version 3
* is published by the Free Software Foundation. Smart GWT is also
* available under typical commercial license terms - see
* http://smartclient.com/license
*
* This software 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
* Lesser General Public License for more details.
*/
package com.smartgwt.linker;
import com.google.gwt.core.ext.LinkerContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.linker.IFrameLinker;
import com.google.gwt.util.tools.Utility;
import java.io.IOException;
/**
* Linker that inject domain sync Javascript to bypass same-origin policy restrictions on scripts
* deployed on different subdomains under the same parent domain (eg. a portal environment)
*/
public class SmartGwtDomainSyncLinker extends IFrameLinker {
private static final String SCRIPT_FILE = "com/smartgwt/linker/DomainSyncScript.js";
@Override
public String getDescription() {
return "SmartGwtDomainSyncLinker";
}
protected String getModulePrefix(TreeLogger logger, LinkerContext context,
String strongName) throws UnableToCompleteException {
logger.log(TreeLogger.INFO, "Processing SmartGWT Domain Sync");
String defaultModulePrefix = super.getModulePrefix(logger, context, strongName);
return appendDomainScyncScript(defaultModulePrefix, logger);
}
@Override
protected String getModulePrefix(TreeLogger logger, LinkerContext context,
String strongName, int numFragments) throws UnableToCompleteException {
logger.log(TreeLogger.INFO, "Processing SmartGWT Domain Sync");
String defaultModulePrefix = super.getModulePrefix(logger, context, strongName, numFragments);
return appendDomainScyncScript(defaultModulePrefix, logger);
}
private String appendDomainScyncScript(String defaultModulePrefix, TreeLogger logger) throws UnableToCompleteException {
String domainSycnScript;
try {
domainSycnScript = Utility.getFileFromClassPath(SCRIPT_FILE);
} catch (IOException e) {
logger.log(TreeLogger.ERROR, "Unable to read file: " + SCRIPT_FILE, e);
throw new UnableToCompleteException();
}
//append the domain sync code at the very beginning of the script
return defaultModulePrefix.replaceFirst("<script>", "<script>\n" + domainSycnScript + "\n");
}
}