/* * Copyright 2014 cruxframework.org. * * 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 org.cruxframework.crux.core.rebind.offline; 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.ext.linker.ArtifactSet; import com.google.gwt.core.ext.linker.LinkerOrder; import com.google.gwt.core.ext.linker.LinkerOrder.Order; import com.google.gwt.core.ext.linker.Shardable; import com.google.gwt.core.linker.IFrameLinker; /** * A GWT linker that modifies the generated html files to use a cache manifest. */ @LinkerOrder(Order.PRIMARY) @Shardable public class OfflineLinker extends IFrameLinker { private String appcacheManifest = null; @Override public ArtifactSet link(TreeLogger logger, LinkerContext context, ArtifactSet artifacts, boolean onePermutation) throws UnableToCompleteException { if (onePermutation) { appcacheManifest = AppCacheLinker.getManifestName(artifacts); } else { appcacheManifest = null; } return super.link(logger, context, artifacts, onePermutation); } @Override protected String getModulePrefix(TreeLogger logger, LinkerContext context, String strongName) throws UnableToCompleteException { String result = super.getModulePrefix(logger, context, strongName); return appendManifestIntoHTML(result); } @Override protected String getModulePrefix(TreeLogger logger, LinkerContext context, String strongName, int numFragments) throws UnableToCompleteException { String result = super.getModulePrefix(logger, context, strongName, numFragments); return appendManifestIntoHTML(result); } private String appendManifestIntoHTML(String prefix) { return prefix.replaceFirst("<html>", "<html manifest=\""+appcacheManifest+"\">"); } }