dmose%mozilla.org 0efb7c174c updated xPL license boilerplate to v1.1, a=chofmann@netscape.com,r=endico@mozilla.org
git-svn-id: svn://10.0.0.236/trunk@52910 18797224-902f-48f8-a5cc-f745e15eee43
1999-11-06 03:43:54 +00:00

272 lines
9.2 KiB
Java

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (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.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
package netscape.softupdate;
/**
* A class for 'triggering' the SmartUpdate and obtaining info
* No instances, all static methods
*/
public class Trigger {
/**
* diff levels are borrowed from the VersionInfo class
*/
public static final int MAJOR_DIFF = 4;
public static final int MINOR_DIFF = 3;
public static final int REL_DIFF = 2;
public static final int BLD_DIFF = 1;
public static final int EQUAL = 0;
/**
* DEFAULT_MODE has UI, triggers conditionally
* @see StartSoftwareUpdate flags argument
*
*/
public static int DEFAULT_MODE = 0;
/**
* FORCE_MODE will install the package regardless of what was installed previously
* @see StartSoftwareUpdate flags argument
*/
public static int FORCE_MODE = 1;
/**
* SILENT_MODE will not display the UI
*/
public static int SILENT_MODE = 2;
/**
* @return true if SmartUpdate is enabled
*/
public static native boolean UpdateEnabled();
/**
* @param componentName version registry name of the component
* @return version of the package. null if not installed, or SmartUpdate disabled
*/
public static VersionInfo GetVersionInfo( String componentName )
{
if (UpdateEnabled())
return VersionRegistry.componentVersion( componentName );
else
return null;
}
/**
* Unconditionally starts the software update
* @param url URL of the JAR file
* @param flags SmartUpdate modifiers (SILENT_INSTALL, FORCE_INSTALL)
* @return false if SmartUpdate did not trigger
*/
public static native boolean StartSoftwareUpdate( String url, int flags );
public static boolean StartSoftwareUpdate( String url )
{
return StartSoftwareUpdate( url, DEFAULT_MODE );
}
/**
* Conditionally starts the software update
* @param url URL of JAR file
* @param componentName name of component in the registry to compare
* the version against. This doesn't have to be the
* registry name of the installed package but could
* instead be a sub-component -- useful because if a
* file doesn't exist then it triggers automatically.
* @param diffLevel Specifies which component of the version must be
* different. If not supplied BLD_DIFF is assumed.
* If the diffLevel is positive the install is triggered
* if the specified version is NEWER (higher) than the
* registered version. If the diffLevel is negative then
* the install is triggered if the specified version is
* OLDER than the registered version. Obviously this
* will only have an effect if FORCE_MODE is also used.
* @param version The version that must be newer (can be a VersionInfo
* object or a string version
* @param flags Same flags as StartSoftwareUpdate (force, silent)
*/
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
int diffLevel,
VersionInfo version,
int flags)
{
try
{
boolean needJar = false;
if ((version == null) || (componentName == null))
needJar = true;
else
{
int stat = VersionRegistry.validateComponent( componentName );
if ( stat == VersionRegistry.REGERR_NOFIND ||
stat == VersionRegistry.REGERR_NOFILE )
{
// either component is not in the registry or it's a file
// node and the physical file is missing
needJar = true;
}
else
{
VersionInfo oldVer =
VersionRegistry.componentVersion( componentName );
if ( oldVer == null )
needJar = true;
else if ( diffLevel < 0 )
needJar = (version.compareTo( oldVer ) <= diffLevel);
else
needJar = (version.compareTo( oldVer ) >= diffLevel);
}
}
if (needJar)
return StartSoftwareUpdate( url, flags );
else
return false;
}
catch(Throwable e)
{
e.printStackTrace();
}
return false;
}
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
VersionInfo version)
{
return ConditionalSoftwareUpdate( url, componentName,
BLD_DIFF, version, DEFAULT_MODE );
}
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
String version)
{
return ConditionalSoftwareUpdate( url, componentName,
BLD_DIFF, new VersionInfo(version), DEFAULT_MODE );
}
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
VersionInfo version,
int flags)
{
return ConditionalSoftwareUpdate( url, componentName,
BLD_DIFF, version, flags );
}
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
String version,
int flags)
{
return ConditionalSoftwareUpdate( url, componentName,
BLD_DIFF, new VersionInfo(version), flags );
}
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
int diffLevel,
VersionInfo version)
{
return ConditionalSoftwareUpdate( url, componentName,
diffLevel, version, DEFAULT_MODE );
}
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
int diffLevel,
String version)
{
return ConditionalSoftwareUpdate( url, componentName,
diffLevel, new VersionInfo(version), DEFAULT_MODE );
}
public static boolean
ConditionalSoftwareUpdate( String url,
String componentName,
int diffLevel,
String version,
int flags)
{
return ConditionalSoftwareUpdate( url, componentName,
diffLevel, new VersionInfo(version), flags );
}
/**
* Validates existence and compares versions
*
* @param regName name of component in the registry to compare
* the version against. This doesn't have to be the
* registry name of an installed package but could
* instead be a sub-component. If the named item
* has a Path property the file must exist or a
* null version is used in the comparison.
* @param version The version to compare against
*/
public static int
CompareVersion( String regName, VersionInfo version )
{
if (!UpdateEnabled())
return EQUAL;
VersionInfo regVersion = GetVersionInfo( regName );
if ( regVersion == null ||
VersionRegistry.validateComponent( regName ) ==
VersionRegistry.REGERR_NOFILE ) {
regVersion = new VersionInfo(0,0,0,0);
}
return regVersion.compareTo( version );
}
public static int
CompareVersion( String regName, String version )
{
return CompareVersion( regName, new VersionInfo( version ) );
}
public static int
CompareVersion( String regName, int maj, int min, int rel, int bld )
{
return CompareVersion( regName, new VersionInfo(maj, min, rel, bld) );
}
}