blob: 7d827fdb9eb89f6bccfa220c357763cb62dcd36c [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.flex.compiler.config;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.flex.compiler.filespecs.IFileSpecification;
/**
* The runtime RSL settings for a given library. The specified library will
* have all of its symbols removed from the application. The runtime RSL
* settings are written in the root class of the application and read in
* frame1 of application.
*/
public class RSLSettings
{
/**
* A RSL URL and a policy file URL.
*/
public static class RSLAndPolicyFileURLPair
{
/**
* Create a new RSL URL and Policy File URL pair.
*
* @param rslURL THe URL of the runtime shared library.
* @param policyFileURL The URL of the policy file.
*/
public RSLAndPolicyFileURLPair(String rslURL, String policyFileURL)
{
this.rslURL = rslURL;
this.policyFileURL = policyFileURL;
}
private String rslURL;
private String policyFileURL;
/**
* @return the url of the RSL to load.
*/
public String getRSLURL()
{
return rslURL;
}
/**
* @return the url of the policy file.
*/
public String getPolicyFileURL()
{
return policyFileURL;
}
}
/**
* The extension given to a signed RLS that is assumed to be signed.
* Unsigned RSLs should use the standard "swf" extension.
*/
private static final String SIGNED_RSL_URL_EXTENSION = "swz";
private static final String SIGNED_RSL_URL_DOT_EXTENSION = "." + SIGNED_RSL_URL_EXTENSION;
/**
* Test if the url is a signed RSL. Signed RSL have a .swz extension.
*
* @param url url to test, the file specified by the url does not
* need to exist.
* @return true if the url specifies a signed rsl, false otherwise.
*/
public static boolean isSignedRSL(String url)
{
if (url == null)
return false;
return url.endsWith(SIGNED_RSL_URL_DOT_EXTENSION);
}
/**
* Create RSLSettings with:
* - a default {@link ApplicationDomainTarget}
* - verify digest set to true
*
* @param libraryFile the library whose classes will be removed
* from the application. May not be null.
* @throws NullPointerException if libraryFile is null.
*/
RSLSettings(IFileSpecification libraryFile)
{
if (libraryFile == null)
throw new NullPointerException("libraryFile may not be null");
this.libraryFile = new File(libraryFile.getPath());
rslURLs = new ArrayList<RSLAndPolicyFileURLPair>();
setApplicationDomain(ApplicationDomainTarget.DEFAULT);
setVerifyDigest(true);
}
/**
* Create RSLSettings with:
* - a default {@link ApplicationDomainTarget}
* - verify digest set to true
*
* @param libraryFile the library whose classes will be removed
* from the application. May not be null.
* @throws NullPointerException if libraryFile is null.
*/
public RSLSettings(File libraryFile)
{
if (libraryFile == null)
throw new NullPointerException("libraryFile may not be null");
this.libraryFile = libraryFile;
rslURLs = new ArrayList<RSLAndPolicyFileURLPair>();
setApplicationDomain(ApplicationDomainTarget.DEFAULT);
setVerifyDigest(true);
}
private File libraryFile; // the library whose definitions are externed
private List<RSLAndPolicyFileURLPair> rslURLs; // list of rsls and failovers
private ApplicationDomainTarget applicationDomain;
private boolean verifyDigest; // if true the digest will be verified at runtime
private boolean forceLoad; // true if the RSL should be forced to load regardless of its use
/**
* @return true if the RSL should be force loaded, false otherwise.
*/
public boolean isForceLoad()
{
return forceLoad;
}
/**
* Sets a flag on the RSL so the compiler is not allowed to remove it when
* the "remove unused RSLs" feature is on.
*
* @param forceLoad true to force the RSL to be loaded at runtime, false otherwise.
*/
public void setForceLoad(boolean forceLoad)
{
this.forceLoad = forceLoad;
}
/**
* @return a List of {@link RSLAndPolicyFileURLPair}
*/
public List<RSLAndPolicyFileURLPair> getRSLURLs()
{
return rslURLs;
}
/**
* Add a new RSL URL and Policy file URL. This first pair is the primary
* RSL and the following RSLs are failover RSLs.
*
* @param rslURL A String representing the URL to load the RSL from. May
* not be null.
* @param policyFileURL A String representing the URL to load a policy file
* from. This is optional and may be null to indicate there is no policy
* file.
* @throws NullPointerException if rslURL is null.
*/
public void addRSLURLAndPolicyFileURL(String rslURL, String policyFileURL)
{
if (rslURL == null)
throw new NullPointerException("rslURL may not be null");
rslURLs.add(new RSLAndPolicyFileURLPair(rslURL, policyFileURL));
}
/**
* @return the libraryFile
*/
public File getLibraryFile()
{
return libraryFile;
}
/**
* @param applicationDomain the new value of the applicationDomain.
*/
public void setApplicationDomain(ApplicationDomainTarget applicationDomain)
{
this.applicationDomain = applicationDomain;
}
/**
* One of {@link ApplicationDomainTarget} that control which domain an RSL
* is loaded into.
*
* @return the applicationDomain
*/
public ApplicationDomainTarget getApplicationDomain()
{
return applicationDomain;
}
/**
* Change the value of the verify digests flag.
*
* @param verifyDigest The new value of the verify digests flag.
*/
public void setVerifyDigest(boolean verifyDigest)
{
this.verifyDigest = verifyDigest;
}
/**
* @return if true, the RSL's digest must be verified at runtime.
*/
public boolean getVerifyDigest()
{
return verifyDigest;
}
}