// Copyright (C) 2001-2003 Jon A. Maxwell (JAM)
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library 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.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
package net.sourceforge.jnlp;
import static net.sourceforge.jnlp.runtime.Translator.R;
import java.net.*;
import java.util.*;
/**
* The J2SE/Java element.
*
* @author Jon A. Maxwell (JAM) - initial author
* @version $Revision: 1.5 $
*/
public class JREDesc {
/** the platform version or the product version if location is not null */
final private Version version;
/** the location of a JRE product or null */
final private URL location;
/** inital heap size */
final private String initialHeapSize;
/** maximum head size */
final private String maximumHeapSize;
/** args to pass to the vm */
final private String vmArgs;
/** list of ResourceDesc objects */
final private List resources;
/**
* Create a JRE descriptor.
*
* @param version the platform version or the product version
* if location is not null
* @param location the location of a JRE product or null
* @param initialHeapSize inital heap size
* @param maximumHeapSize maximum head size
* @param resources list of ResourceDesc objects
*/
public JREDesc(Version version, URL location,
String vmArgs, String initialHeapSize,
String maximumHeapSize, List resources) throws ParseException {
this.version = version;
this.location = location;
this.vmArgs = vmArgs;
checkHeapSize(initialHeapSize);
this.initialHeapSize = initialHeapSize;
checkHeapSize(maximumHeapSize);
this.maximumHeapSize = maximumHeapSize;
this.resources = resources;
}
/**
* Returns the JRE version. Use isPlatformVersion to
* determine if this version corresponds to a platform or
* product version.
*/
public Version getVersion() {
return version;
}
/**
* Returns true if the JRE version is a Java platform version
* (java.specification.version property) or false if it is a
* product version (java.version property).
*/
public boolean isPlatformVersion() {
return getLocation() == null;
}
/**
* Returns the JRE version string.
*/
public URL getLocation() {
return location;
}
/**
* Returns the maximum heap size in bytes.
*/
public String getMaximumHeapSize() {
return maximumHeapSize;
}
/**
* Returns the initial heap size in bytes.
*/
public String getInitialHeapSize() {
return initialHeapSize;
}
/**
* Returns the resources defined for this JRE.
*/
public List getResourcesDesc() {
return resources;
}
/**
* Returns the additional arguments to pass to the Java VM
* Can be null
*/
public String getVMArgs() {
return vmArgs;
}
/**
* Check for valid heap size string
* @throws ParseException if heapSize is invalid
*/
static private void checkHeapSize(String heapSize) throws ParseException {
// need to implement for completeness even though not used in netx
if (heapSize == null) {
return;
}
boolean lastCharacterIsDigit = true;
// the last character must be 0-9 or k/K/m/M
char lastChar = Character.toLowerCase(heapSize.charAt(heapSize.length() - 1));
if ((lastChar < '0' || lastChar > '9')) {
lastCharacterIsDigit = false;
if (lastChar != 'k' && lastChar != 'm') {
throw new ParseException(R("PBadHeapSize", heapSize));
}
}
int indexOfLastDigit = heapSize.length() - 1;
if (!lastCharacterIsDigit) {
indexOfLastDigit = indexOfLastDigit - 1;
}
String size = heapSize.substring(0, indexOfLastDigit);
try {
// check that the number is a number!
Integer.valueOf(size);
} catch (NumberFormatException numberFormat) {
throw new ParseException(R("PBadHeapSize", heapSize), numberFormat);
}
}
}