Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

84969: Merged PLATFORM1 (5.0/Cloud) to HEAD-BUG-FIX (5.0/Cloud)
      83756: ACE-2269	 - Allow AMPs to include literals in version number (e.g. -SNAPSHOT)


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@85284 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2014-09-20 09:56:48 +00:00
parent 57da7bc775
commit 6bba4fe0e8
14 changed files with 458 additions and 77 deletions

View File

@@ -224,6 +224,11 @@
<artifactId>subethasmtp</artifactId> <artifactId>subethasmtp</artifactId>
<version>3.1.6</version> <version>3.1.6</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.2.1</version>
</dependency>
<dependency> <dependency>
<groupId>de.schlichtherle.truezip</groupId> <groupId>de.schlichtherle.truezip</groupId>
<artifactId>truezip-driver-zip</artifactId> <artifactId>truezip-driver-zip</artifactId>

View File

@@ -24,15 +24,14 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.springframework.extensions.surf.util.I18NUtil;
import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.repo.tenant.TenantAdminService; import org.alfresco.repo.tenant.TenantAdminService;
import org.alfresco.service.ServiceRegistry; import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.module.ModuleService; import org.alfresco.service.cmr.module.ModuleService;
import org.alfresco.util.EqualsHelper; import org.alfresco.util.EqualsHelper;
import org.alfresco.util.PropertyCheck; import org.alfresco.util.PropertyCheck;
import org.alfresco.util.VersionNumber;
import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.BeanNameAware;
import org.springframework.extensions.surf.util.I18NUtil;
/** /**
* Implementation of a {@link org.alfresco.repo.module.ModuleComponent} to provide * Implementation of a {@link org.alfresco.repo.module.ModuleComponent} to provide
@@ -58,9 +57,9 @@ public abstract class AbstractModuleComponent implements ModuleComponent, BeanNa
private String moduleId; private String moduleId;
private String name; private String name;
private String description; private String description;
private VersionNumber sinceVersion; private ModuleVersionNumber sinceVersion;
private VersionNumber appliesFromVersion; private ModuleVersionNumber appliesFromVersion;
private VersionNumber appliesToVersion; private ModuleVersionNumber appliesToVersion;
private List<ModuleComponent> dependsOn; private List<ModuleComponent> dependsOn;
/** Defaults to <tt>true</tt> */ /** Defaults to <tt>true</tt> */
private boolean executeOnceOnly; private boolean executeOnceOnly;
@@ -68,9 +67,9 @@ public abstract class AbstractModuleComponent implements ModuleComponent, BeanNa
public AbstractModuleComponent() public AbstractModuleComponent()
{ {
sinceVersion = VersionNumber.VERSION_ZERO; sinceVersion = ModuleVersionNumber.VERSION_ZERO;
appliesFromVersion = VersionNumber.VERSION_ZERO; appliesFromVersion = ModuleVersionNumber.VERSION_ZERO;
appliesToVersion = VersionNumber.VERSION_BIG; appliesToVersion = ModuleVersionNumber.VERSION_BIG;
dependsOn = new ArrayList<ModuleComponent>(0); dependsOn = new ArrayList<ModuleComponent>(0);
executeOnceOnly = true; executeOnceOnly = true;
executed = new HashMap<String, Boolean>(1); executed = new HashMap<String, Boolean>(1);
@@ -226,7 +225,7 @@ public abstract class AbstractModuleComponent implements ModuleComponent, BeanNa
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public VersionNumber getSinceVersionNumber() public ModuleVersionNumber getSinceVersionNumber()
{ {
return sinceVersion; return sinceVersion;
} }
@@ -236,13 +235,13 @@ public abstract class AbstractModuleComponent implements ModuleComponent, BeanNa
*/ */
public void setSinceVersion(String version) public void setSinceVersion(String version)
{ {
this.sinceVersion = new VersionNumber(version); this.sinceVersion = new ModuleVersionNumber(version);
} }
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public VersionNumber getAppliesFromVersionNumber() public ModuleVersionNumber getAppliesFromVersionNumber()
{ {
return appliesFromVersion; return appliesFromVersion;
} }
@@ -253,13 +252,13 @@ public abstract class AbstractModuleComponent implements ModuleComponent, BeanNa
*/ */
public void setAppliesFromVersion(String version) public void setAppliesFromVersion(String version)
{ {
this.appliesFromVersion = new VersionNumber(version); this.appliesFromVersion = new ModuleVersionNumber(version);
} }
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public VersionNumber getAppliesToVersionNumber() public ModuleVersionNumber getAppliesToVersionNumber()
{ {
return appliesToVersion; return appliesToVersion;
} }
@@ -270,7 +269,7 @@ public abstract class AbstractModuleComponent implements ModuleComponent, BeanNa
*/ */
public void setAppliesToVersion(String version) public void setAppliesToVersion(String version)
{ {
this.appliesToVersion = new VersionNumber(version); this.appliesToVersion = new ModuleVersionNumber(version);
} }
/** /**

View File

@@ -58,17 +58,17 @@ public interface ModuleComponent
/** /**
* @return Returns the version number of the module for which this component was introduced. * @return Returns the version number of the module for which this component was introduced.
*/ */
VersionNumber getSinceVersionNumber(); ModuleVersionNumber getSinceVersionNumber();
/** /**
* @return Returns the smallest version number of the module to which this component applies. * @return Returns the smallest version number of the module to which this component applies.
*/ */
VersionNumber getAppliesFromVersionNumber(); ModuleVersionNumber getAppliesFromVersionNumber();
/** /**
* @return Returns the largest version number of the module to which this component applies. * @return Returns the largest version number of the module to which this component applies.
*/ */
VersionNumber getAppliesToVersionNumber(); ModuleVersionNumber getAppliesToVersionNumber();
/** /**
* A list of module components that <b>must</b> be executed prior to this instance. * A list of module components that <b>must</b> be executed prior to this instance.

View File

@@ -18,6 +18,7 @@
*/ */
package org.alfresco.repo.module; package org.alfresco.repo.module;
import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
@@ -28,9 +29,9 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.springframework.extensions.surf.util.I18NUtil;
import org.alfresco.repo.admin.registry.RegistryKey; import org.alfresco.repo.admin.registry.RegistryKey;
import org.alfresco.repo.admin.registry.RegistryService; import org.alfresco.repo.admin.registry.RegistryService;
import org.alfresco.repo.module.tool.ModuleManagementToolException;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.tenant.Tenant; import org.alfresco.repo.tenant.Tenant;
@@ -49,6 +50,7 @@ import org.alfresco.util.PropertyCheck;
import org.alfresco.util.VersionNumber; import org.alfresco.util.VersionNumber;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.I18NUtil;
/** /**
* Helper class to split up some of the code for managing module components. This class handles * Helper class to split up some of the code for managing module components. This class handles
@@ -421,13 +423,13 @@ public class ModuleComponentHelper
* @param moduleId * @param moduleId
* @return * @return
*/ */
VersionNumber getVersion(String moduleId) ModuleVersionNumber getVersion(String moduleId)
{ {
RegistryKey moduleKeyCurrentVersion = new RegistryKey( RegistryKey moduleKeyCurrentVersion = new RegistryKey(
ModuleComponentHelper.URI_MODULES_1_0, ModuleComponentHelper.URI_MODULES_1_0,
REGISTRY_PATH_MODULES, moduleId, REGISTRY_PROPERTY_CURRENT_VERSION); REGISTRY_PATH_MODULES, moduleId, REGISTRY_PROPERTY_CURRENT_VERSION);
VersionNumber versionCurrent = (VersionNumber) registryService.getProperty(moduleKeyCurrentVersion); Serializable versionCurrent = registryService.getProperty(moduleKeyCurrentVersion);
return versionCurrent; return getModuleVersionNumber(versionCurrent);
} }
/** /**
@@ -456,7 +458,7 @@ public class ModuleComponentHelper
{ {
// Get the specifics of the missing module // Get the specifics of the missing module
VersionNumber versionCurrent = getVersion(moduleId); ModuleVersionNumber versionCurrent = getVersion(moduleId);
// The module is missing, so warn // The module is missing, so warn
loggerService.warn(I18NUtil.getMessage(MSG_MISSING, moduleId, versionCurrent)); loggerService.warn(I18NUtil.getMessage(MSG_MISSING, moduleId, versionCurrent));
} }
@@ -527,7 +529,7 @@ public class ModuleComponentHelper
private void startModule(ModuleDetails module, Set<String> startedModules, Set<ModuleComponent> executedComponents) private void startModule(ModuleDetails module, Set<String> startedModules, Set<ModuleComponent> executedComponents)
{ {
String moduleId = module.getId(); String moduleId = module.getId();
VersionNumber moduleNewVersion = module.getVersion(); ModuleVersionNumber moduleNewVersion = module.getVersion();
// Double check whether we have done this module already // Double check whether we have done this module already
if (startedModules.contains(moduleId)) if (startedModules.contains(moduleId))
@@ -596,8 +598,8 @@ public class ModuleComponentHelper
RegistryKey moduleKeyCurrentVersion = new RegistryKey( RegistryKey moduleKeyCurrentVersion = new RegistryKey(
ModuleComponentHelper.URI_MODULES_1_0, ModuleComponentHelper.URI_MODULES_1_0,
REGISTRY_PATH_MODULES, moduleId, REGISTRY_PROPERTY_CURRENT_VERSION); REGISTRY_PATH_MODULES, moduleId, REGISTRY_PROPERTY_CURRENT_VERSION);
VersionNumber moduleInstallVersion = (VersionNumber) registryService.getProperty(moduleKeyInstalledVersion); Serializable moduleInstallVersion = registryService.getProperty(moduleKeyInstalledVersion);
VersionNumber moduleCurrentVersion = (VersionNumber) registryService.getProperty(moduleKeyCurrentVersion); Serializable moduleCurrentVersion = registryService.getProperty(moduleKeyCurrentVersion);
String msg = null; String msg = null;
if (moduleCurrentVersion == null) // No previous record of it if (moduleCurrentVersion == null) // No previous record of it
{ {
@@ -609,21 +611,23 @@ public class ModuleComponentHelper
} }
else // It is an upgrade or is the same else // It is an upgrade or is the same
{ {
ModuleVersionNumber currentModuleVersion = getModuleVersionNumber(moduleCurrentVersion);
// Check that we have an installed version // Check that we have an installed version
if (moduleInstallVersion == null) if (moduleInstallVersion == null)
{ {
// A current version, but no installed version // A current version, but no installed version
logger.warn(I18NUtil.getMessage(WARN_NO_INSTALL_VERSION, moduleId, moduleCurrentVersion)); logger.warn(I18NUtil.getMessage(WARN_NO_INSTALL_VERSION, moduleId, moduleCurrentVersion));
// Record the install version // Record the install version
registryService.addProperty(moduleKeyInstalledVersion, moduleCurrentVersion); registryService.addProperty(moduleKeyInstalledVersion, currentModuleVersion);
moduleInstallVersion = moduleCurrentVersion; moduleInstallVersion = moduleCurrentVersion;
} }
if (moduleCurrentVersion.compareTo(moduleNewVersion) == 0) // The current version is the same if (currentModuleVersion.compareTo(moduleNewVersion) == 0) // The current version is the same
{ {
msg = I18NUtil.getMessage(MSG_STARTING, moduleId, moduleNewVersion); msg = I18NUtil.getMessage(MSG_STARTING, moduleId, moduleNewVersion);
} }
else if (moduleCurrentVersion.compareTo(moduleNewVersion) > 0) // Downgrading not supported else if (currentModuleVersion.compareTo(moduleNewVersion) > 0) // Downgrading not supported
{ {
throw AlfrescoRuntimeException.create(ERR_NO_DOWNGRADE, moduleId, moduleCurrentVersion, moduleNewVersion); throw AlfrescoRuntimeException.create(ERR_NO_DOWNGRADE, moduleId, moduleCurrentVersion, moduleNewVersion);
} }
@@ -652,12 +656,20 @@ public class ModuleComponentHelper
} }
} }
protected ModuleVersionNumber getModuleVersionNumber(Serializable moduleVersion)
{
if (moduleVersion instanceof ModuleVersionNumber) return (ModuleVersionNumber) moduleVersion;
if (moduleVersion instanceof VersionNumber) return new ModuleVersionNumber((VersionNumber)moduleVersion);
if (moduleVersion instanceof String) return new ModuleVersionNumber((String)moduleVersion);
throw new ModuleManagementToolException("Invalid moduleVersion");
}
/** /**
* Execute the component, respecting dependencies. * Execute the component, respecting dependencies.
*/ */
private void executeComponent( private void executeComponent(
String moduleId, String moduleId,
VersionNumber currentVersion, ModuleVersionNumber currentVersion,
ModuleComponent component, ModuleComponent component,
Set<ModuleComponent> executedComponents) Set<ModuleComponent> executedComponents)
{ {
@@ -676,8 +688,8 @@ public class ModuleComponentHelper
executedComponents.add(component); executedComponents.add(component);
// Check the version applicability // Check the version applicability
VersionNumber minVersion = component.getAppliesFromVersionNumber(); ModuleVersionNumber minVersion = component.getAppliesFromVersionNumber();
VersionNumber maxVersion = component.getAppliesToVersionNumber(); ModuleVersionNumber maxVersion = component.getAppliesToVersionNumber();
if (currentVersion.compareTo(minVersion) < 0 || currentVersion.compareTo(maxVersion) > 0) if (currentVersion.compareTo(minVersion) < 0 || currentVersion.compareTo(maxVersion) > 0)
{ {
// It is out of the allowable range for execution so we just ignore it // It is out of the allowable range for execution so we just ignore it

View File

@@ -49,7 +49,7 @@ public class ModuleDetailsImpl implements ModuleDetails
private String id; private String id;
private List<String> aliases; private List<String> aliases;
private VersionNumber version; private ModuleVersionNumber version;
private String title; private String title;
private String description; private String description;
private List<String> editions; private List<String> editions;
@@ -77,6 +77,7 @@ public class ModuleDetailsImpl implements ModuleDetails
* whitespace strings are not supported. * whitespace strings are not supported.
* *
* @param properties the set of properties * @param properties the set of properties
* @Throws AlfrescoRuntimeException if unable to parse values
*/ */
public ModuleDetailsImpl(Properties properties) public ModuleDetailsImpl(Properties properties)
{ {
@@ -136,11 +137,11 @@ public class ModuleDetailsImpl implements ModuleDetails
{ {
try try
{ {
version = new VersionNumber(trimmedProperties.getProperty(PROP_VERSION)); version = new ModuleVersionNumber(trimmedProperties.getProperty(PROP_VERSION));
} }
catch (Throwable e) catch (Throwable e)
{ {
throw new AlfrescoRuntimeException("Unable to parse version information: " + trimmedProperties.getProperty(PROP_VERSION), e); throw new AlfrescoRuntimeException("Unable to parse version information: " + PROP_VERSION + ", " + trimmedProperties.getProperty(PROP_VERSION), e);
} }
} }
// TITLE // TITLE
@@ -151,14 +152,28 @@ public class ModuleDetailsImpl implements ModuleDetails
if (description == null) { missingProperties.add(PROP_DESCRIPTION); } if (description == null) { missingProperties.add(PROP_DESCRIPTION); }
// REPO MIN // REPO MIN
if (trimmedProperties.getProperty(PROP_REPO_VERSION_MIN) != null) if (trimmedProperties.getProperty(PROP_REPO_VERSION_MIN) != null)
{
try
{ {
repoVersionMin = new VersionNumber(trimmedProperties.getProperty(PROP_REPO_VERSION_MIN)); repoVersionMin = new VersionNumber(trimmedProperties.getProperty(PROP_REPO_VERSION_MIN));
} }
catch (Throwable t)
{
throw new AlfrescoRuntimeException("Unable to parse repo version min: " + PROP_REPO_VERSION_MIN + ", " + repoVersionMin, t);
}
}
// REPO MAX // REPO MAX
if (trimmedProperties.getProperty(PROP_REPO_VERSION_MAX) != null) if (trimmedProperties.getProperty(PROP_REPO_VERSION_MAX) != null)
{
try
{ {
repoVersionMax = new VersionNumber(trimmedProperties.getProperty(PROP_REPO_VERSION_MAX)); repoVersionMax = new VersionNumber(trimmedProperties.getProperty(PROP_REPO_VERSION_MAX));
} }
catch (Throwable t)
{
throw new AlfrescoRuntimeException("Unable to parse repo version max: " + PROP_REPO_VERSION_MAX + ", " + repoVersionMax, t);
}
}
// DEPENDENCIES // DEPENDENCIES
this.dependencies = extractDependencies(trimmedProperties); this.dependencies = extractDependencies(trimmedProperties);
@@ -174,7 +189,7 @@ public class ModuleDetailsImpl implements ModuleDetails
} }
catch (Throwable e) catch (Throwable e)
{ {
throw new AlfrescoRuntimeException("Unable to parse install date: " + installDateStr, e); throw new AlfrescoRuntimeException("Unable to parse install date: " + PROP_INSTALL_DATE + ", " + installDateStr, e);
} }
} }
// INSTALL STATE // INSTALL STATE
@@ -187,7 +202,7 @@ public class ModuleDetailsImpl implements ModuleDetails
} }
catch (Throwable e) catch (Throwable e)
{ {
throw new AlfrescoRuntimeException("Unable to parse install state: " + installStateStr, e); throw new AlfrescoRuntimeException("Unable to parse install state: " + PROP_INSTALL_STATE +", " + installStateStr, e);
} }
} }
// Check // Check
@@ -215,7 +230,7 @@ public class ModuleDetailsImpl implements ModuleDetails
* @param title title * @param title title
* @param description description * @param description description
*/ */
public ModuleDetailsImpl(String id, VersionNumber versionNumber, String title, String description) public ModuleDetailsImpl(String id, ModuleVersionNumber versionNumber, String title, String description)
{ {
// Set defaults // Set defaults
this(); this();
@@ -345,7 +360,7 @@ public class ModuleDetailsImpl implements ModuleDetails
return aliases; return aliases;
} }
public VersionNumber getVersion() public ModuleVersionNumber getVersion()
{ {
return version; return version;
} }
@@ -467,7 +482,7 @@ public class ModuleDetailsImpl implements ModuleDetails
private String dependencyId; private String dependencyId;
private String versionStr; private String versionStr;
private List<Pair<VersionNumber, VersionNumber>> versionRanges; private List<Pair<ModuleVersionNumber, ModuleVersionNumber>> versionRanges;
private ModuleDependencyImpl(String dependencyId, String versionStr) private ModuleDependencyImpl(String dependencyId, String versionStr)
{ {
@@ -491,9 +506,9 @@ public class ModuleDetailsImpl implements ModuleDetails
return sb.toString(); return sb.toString();
} }
private static List<Pair<VersionNumber, VersionNumber>> buildVersionRanges(String versionStr) private static List<Pair<ModuleVersionNumber, ModuleVersionNumber>> buildVersionRanges(String versionStr)
{ {
List<Pair<VersionNumber, VersionNumber>> versionRanges = new ArrayList<Pair<VersionNumber, VersionNumber>>(1); List<Pair<ModuleVersionNumber, ModuleVersionNumber>> versionRanges = new ArrayList<Pair<ModuleVersionNumber, ModuleVersionNumber>>(1);
StringTokenizer rangesTokenizer = new StringTokenizer(versionStr, ","); StringTokenizer rangesTokenizer = new StringTokenizer(versionStr, ",");
while (rangesTokenizer.hasMoreTokens()) while (rangesTokenizer.hasMoreTokens())
{ {
@@ -513,8 +528,8 @@ public class ModuleDetailsImpl implements ModuleDetails
} }
// The range must have at least one version in it // The range must have at least one version in it
StringTokenizer rangeTokenizer = new StringTokenizer(range, "-", false); StringTokenizer rangeTokenizer = new StringTokenizer(range, "-", false);
VersionNumber versionLower = null; ModuleVersionNumber versionLower = null;
VersionNumber versionUpper = null; ModuleVersionNumber versionUpper = null;
while (rangeTokenizer.hasMoreTokens()) while (rangeTokenizer.hasMoreTokens())
{ {
String version = rangeTokenizer.nextToken(); String version = rangeTokenizer.nextToken();
@@ -524,12 +539,12 @@ public class ModuleDetailsImpl implements ModuleDetails
if (version.equals("*")) if (version.equals("*"))
{ {
// Unbounded lower version // Unbounded lower version
versionLower = VersionNumber.VERSION_ZERO; versionLower = ModuleVersionNumber.VERSION_ZERO;
} }
else else
{ {
// Explicit lower bound // Explicit lower bound
versionLower = new VersionNumber(version); versionLower = new ModuleVersionNumber(version);
} }
} }
else if (versionUpper == null) else if (versionUpper == null)
@@ -537,12 +552,12 @@ public class ModuleDetailsImpl implements ModuleDetails
if (version.equals("*")) if (version.equals("*"))
{ {
// Unbounded upper version // Unbounded upper version
versionUpper = VersionNumber.VERSION_BIG; versionUpper = ModuleVersionNumber.VERSION_BIG;
} }
else else
{ {
// Explicit upper bound // Explicit upper bound
versionUpper = new VersionNumber(version); versionUpper = new ModuleVersionNumber(version);
} }
} }
} }
@@ -565,7 +580,7 @@ public class ModuleDetailsImpl implements ModuleDetails
versionLower = versionUpper; versionLower = versionUpper;
} }
// Create the range pair // Create the range pair
Pair<VersionNumber, VersionNumber> rangePair = new Pair<VersionNumber, VersionNumber>(versionLower, versionUpper); Pair<ModuleVersionNumber, ModuleVersionNumber> rangePair = new Pair<ModuleVersionNumber, ModuleVersionNumber>(versionLower, versionUpper);
versionRanges.add(rangePair); versionRanges.add(rangePair);
} }
return versionRanges; return versionRanges;
@@ -594,12 +609,12 @@ public class ModuleDetailsImpl implements ModuleDetails
return false; return false;
} }
// Check the version number // Check the version number
VersionNumber checkVersion = moduleDetails.getVersion(); ModuleVersionNumber checkVersion = moduleDetails.getVersion();
boolean matched = false; boolean matched = false;
for (Pair<VersionNumber, VersionNumber> versionRange : versionRanges) for (Pair<ModuleVersionNumber, ModuleVersionNumber> versionRange : versionRanges)
{ {
VersionNumber versionLower = versionRange.getFirst(); ModuleVersionNumber versionLower = versionRange.getFirst();
VersionNumber versionUpper = versionRange.getSecond(); ModuleVersionNumber versionUpper = versionRange.getSecond();
if (checkVersion.compareTo(versionLower) < 0) if (checkVersion.compareTo(versionLower) < 0)
{ {
// The version is too low // The version is too low

View File

@@ -196,7 +196,7 @@ public class ModuleServiceImpl implements ApplicationContextAware, ModuleService
if (moduleDetails == null) if (moduleDetails == null)
{ {
// Get the specifics of the missing module and add them to the list. // Get the specifics of the missing module and add them to the list.
VersionNumber currentVersion = moduleComponentHelper.getVersion(moduleId); ModuleVersionNumber currentVersion = moduleComponentHelper.getVersion(moduleId);
ModuleDetails newModuleDetails = new ModuleDetailsImpl(moduleId, currentVersion, "", ""); ModuleDetails newModuleDetails = new ModuleDetailsImpl(moduleId, currentVersion, "", "");

View File

@@ -0,0 +1,94 @@
package org.alfresco.repo.module;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import org.alfresco.util.VersionNumber;
import org.apache.maven.artifact.versioning.ComparableVersion;
/**
* The exising Alfresco VersionNumber can only be numeric.
* ModuleVersionNumber allows string literals in the version number.
*
* It follows maven conventions and actually uses the ComparableVersion class
* from the maven code base.
*
* @author Gethin James
*/
public class ModuleVersionNumber implements Externalizable
{
private static final long serialVersionUID = 8594906471270433420L;
public static final ModuleVersionNumber VERSION_ZERO = new ModuleVersionNumber("0");;
public static final ModuleVersionNumber VERSION_BIG = new ModuleVersionNumber("999.999.999.99");
protected ComparableVersion delegate;
public ModuleVersionNumber()
{
super();
}
public ModuleVersionNumber(String versionString)
{
delegate = new ComparableVersion(versionString);
}
public ModuleVersionNumber(VersionNumber versionCurrent)
{
this(versionCurrent.toString());
}
public int compareTo(ModuleVersionNumber installingVersion)
{
return delegate.compareTo(installingVersion.delegate);
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((this.delegate == null) ? 0 : this.delegate.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
ModuleVersionNumber other = (ModuleVersionNumber) obj;
if (this.delegate == null)
{
if (other.delegate != null) return false;
}
else if (!this.delegate.equals(other.delegate)) return false;
return true;
}
@Override
public String toString()
{
return this.delegate.toString();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException
{
out.writeUTF(delegate.toString());
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
{
String versionString = in.readUTF();
delegate = new ComparableVersion(versionString);
}
}

View File

@@ -75,7 +75,7 @@ public class ModuleDetailsHelper
} }
catch (FileNotFoundException error) catch (FileNotFoundException error)
{ {
throw new ModuleManagementToolException("Unable to load module details from property file.", error); throw new ModuleManagementToolException("Unable to load module details from property file. " + error.getMessage(), error);
} }
try try
@@ -85,7 +85,7 @@ public class ModuleDetailsHelper
catch (IOException exception) catch (IOException exception)
{ {
throw new ModuleManagementToolException( throw new ModuleManagementToolException(
"Unable to load module details from property file.", exception); "Unable to load module details from property file." + exception.getMessage(), exception);
} }
finally finally
{ {

View File

@@ -27,6 +27,7 @@ import java.util.Map.Entry;
import java.util.Properties; import java.util.Properties;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.module.ModuleVersionNumber;
import org.alfresco.service.cmr.module.ModuleDetails; import org.alfresco.service.cmr.module.ModuleDetails;
import org.alfresco.service.cmr.module.ModuleInstallState; import org.alfresco.service.cmr.module.ModuleInstallState;
import org.alfresco.util.VersionNumber; import org.alfresco.util.VersionNumber;
@@ -230,7 +231,7 @@ public class ModuleManagementTool implements LogOutput
throw new ModuleManagementToolException("No module.properties file has been found in the installing .amp file '" + ampFileLocation + "'"); throw new ModuleManagementToolException("No module.properties file has been found in the installing .amp file '" + ampFileLocation + "'");
} }
String installingId = installingModuleDetails.getId(); String installingId = installingModuleDetails.getId();
VersionNumber installingVersion = installingModuleDetails.getVersion(); ModuleVersionNumber installingVersion = installingModuleDetails.getVersion();
//A series of checks //A series of checks
warHelper.checkCompatibleVersion(warFile, installingModuleDetails); warHelper.checkCompatibleVersion(warFile, installingModuleDetails);
@@ -285,6 +286,10 @@ public class ModuleManagementTool implements LogOutput
TVFS.umount(); TVFS.umount();
} }
} }
catch (AlfrescoRuntimeException exception)
{
throw new ModuleManagementToolException("An error was encountered during deployment of the AMP into the WAR: " + exception.getMessage(), exception);
}
catch (IOException exception) catch (IOException exception)
{ {
throw new ModuleManagementToolException("An IO error was encountered during deployment of the AMP into the WAR", exception); throw new ModuleManagementToolException("An IO error was encountered during deployment of the AMP into the WAR", exception);
@@ -292,13 +297,13 @@ public class ModuleManagementTool implements LogOutput
} }
private void uninstallIfNecessary(String warFileLocation, ModuleDetails installedModuleDetails, boolean preview, private void uninstallIfNecessary(String warFileLocation, ModuleDetails installedModuleDetails, boolean preview,
boolean forceInstall, VersionNumber installingVersion) throws IOException boolean forceInstall, ModuleVersionNumber installingVersion) throws IOException
{ {
// Now clean up the old instance // Now clean up the old instance
if (installedModuleDetails != null) if (installedModuleDetails != null)
{ {
String installedId = installedModuleDetails.getId(); String installedId = installedModuleDetails.getId();
VersionNumber installedVersion = installedModuleDetails.getVersion(); ModuleVersionNumber installedVersion = installedModuleDetails.getVersion();
int compareValue = installedVersion.compareTo(installingVersion); int compareValue = installedVersion.compareTo(installingVersion);
if (compareValue > 0) if (compareValue > 0)
@@ -655,6 +660,7 @@ public class ModuleManagementTool implements LogOutput
* Lists all the currently installed modules in the WAR * Lists all the currently installed modules in the WAR
* *
* @param warLocation the war location * @param warLocation the war location
* @throws ModuleManagementToolException
*/ */
public void listModules(String warLocation) public void listModules(String warLocation)
{ {
@@ -688,6 +694,10 @@ public class ModuleManagementTool implements LogOutput
is = new TFileInputStream(moduleProperties); is = new TFileInputStream(moduleProperties);
moduleDetails = ModuleDetailsHelper.createModuleDetailsFromPropertiesStream(is); moduleDetails = ModuleDetailsHelper.createModuleDetailsFromPropertiesStream(is);
} }
catch (AlfrescoRuntimeException exception)
{
throw new ModuleManagementToolException("Unable to open module properties file '" + moduleProperties.getPath() + "' " + exception.getMessage(), exception);
}
catch (IOException exception) catch (IOException exception)
{ {
throw new ModuleManagementToolException("Unable to open module properties file '" + moduleProperties.getPath() + "'", exception); throw new ModuleManagementToolException("Unable to open module properties file '" + moduleProperties.getPath() + "'", exception);

View File

@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Properties; import java.util.Properties;
import org.alfresco.api.AlfrescoPublicApi; import org.alfresco.api.AlfrescoPublicApi;
import org.alfresco.repo.module.ModuleVersionNumber;
import org.alfresco.util.VersionNumber; import org.alfresco.util.VersionNumber;
/** /**
@@ -73,7 +74,7 @@ public interface ModuleDetails extends Serializable
* *
* @return module version number * @return module version number
*/ */
VersionNumber getVersion(); ModuleVersionNumber getVersion();
/** /**
* Get the title of the module * Get the title of the module

View File

@@ -42,6 +42,7 @@ public class AllUnitTestsSuite extends TestSuite
suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.lock.LockUtilsTest.class)); suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.lock.LockUtilsTest.class));
suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.lock.mem.LockStoreImplTest.class)); suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.lock.mem.LockStoreImplTest.class));
suite.addTestSuite(org.alfresco.repo.module.ModuleDetailsImplTest.class); suite.addTestSuite(org.alfresco.repo.module.ModuleDetailsImplTest.class);
suite.addTestSuite(org.alfresco.repo.module.ModuleVersionNumberTest.class);
suite.addTestSuite(org.alfresco.repo.module.tool.ModuleManagementToolTest.class); suite.addTestSuite(org.alfresco.repo.module.tool.ModuleManagementToolTest.class);
suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.module.tool.WarHelperImplTest.class)); suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.module.tool.WarHelperImplTest.class));
suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.nodelocator.NodeLocatorServiceImplTest.class)); suite.addTest(new JUnit4TestAdapter(org.alfresco.repo.nodelocator.NodeLocatorServiceImplTest.class));

View File

@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.alfresco.repo.admin.registry.RegistryService; import org.alfresco.repo.admin.registry.RegistryService;
import org.alfresco.repo.module.tool.ModuleManagementToolException;
import org.alfresco.repo.tenant.TenantAdminService; import org.alfresco.repo.tenant.TenantAdminService;
import org.alfresco.service.cmr.module.ModuleDetails; import org.alfresco.service.cmr.module.ModuleDetails;
import org.alfresco.service.cmr.module.ModuleService; import org.alfresco.service.cmr.module.ModuleService;
@@ -134,7 +135,7 @@ public class ModuleComponentHelperTest extends BaseAlfrescoTestCase
// See that it all starts OK // See that it all starts OK
} }
private void startComponents(VersionNumber moduleVersion) private void startComponents(ModuleVersionNumber moduleVersion)
{ {
int expectedCount = (Integer) EXECUTION_COUNT_BY_VERSION.get(moduleVersion); int expectedCount = (Integer) EXECUTION_COUNT_BY_VERSION.get(moduleVersion);
// Set the current version number for all modules // Set the current version number for all modules
@@ -149,7 +150,7 @@ public class ModuleComponentHelperTest extends BaseAlfrescoTestCase
// tenantCount = tenantDeployerService.getTenants(true).size(); // tenantCount = tenantDeployerService.getTenants(true).size();
// } // }
// // Check // // Check
// assertEquals( // assertEquals(ModuleVersionNumber
// "Incorrent number of executions (version " + moduleVersion + ")", // "Incorrent number of executions (version " + moduleVersion + ")",
// expectedCount + (expectedCount * tenantCount), // expectedCount + (expectedCount * tenantCount),
// executed); // executed);
@@ -159,48 +160,68 @@ public class ModuleComponentHelperTest extends BaseAlfrescoTestCase
public void testStartComponentsV00() public void testStartComponentsV00()
{ {
VersionNumber moduleVersion = new VersionNumber("0.0"); ModuleVersionNumber moduleVersion = new ModuleVersionNumber("0.0");
startComponents(moduleVersion); startComponents(moduleVersion);
} }
public void testStartComponentsV05() public void testStartComponentsV05()
{ {
VersionNumber moduleVersion = new VersionNumber("0.5"); ModuleVersionNumber moduleVersion = new ModuleVersionNumber("0.5");
startComponents(moduleVersion); startComponents(moduleVersion);
} }
public void testStartComponentsV10() public void testStartComponentsV10()
{ {
VersionNumber moduleVersion = new VersionNumber("1.0"); ModuleVersionNumber moduleVersion = new ModuleVersionNumber("1.0");
startComponents(moduleVersion); startComponents(moduleVersion);
} }
public void testStartComponentsV15() public void testStartComponentsV15()
{ {
VersionNumber moduleVersion = new VersionNumber("1.5"); ModuleVersionNumber moduleVersion = new ModuleVersionNumber("1.5");
startComponents(moduleVersion); startComponents(moduleVersion);
} }
public void testStartComponentsV30() public void testStartComponentsV30()
{ {
VersionNumber moduleVersion = new VersionNumber("3.0"); ModuleVersionNumber moduleVersion = new ModuleVersionNumber("3.0");
startComponents(moduleVersion); startComponents(moduleVersion);
} }
public void testStartComponentsV35() public void testStartComponentsV35()
{ {
VersionNumber moduleVersion = new VersionNumber("3.5"); ModuleVersionNumber moduleVersion = new ModuleVersionNumber("3.5");
startComponents(moduleVersion); startComponents(moduleVersion);
} }
public void testgetModuleVersionNumber() {
ModuleVersionNumber moduleVersion = new ModuleVersionNumber("3.5");
VersionNumber versNumber = new VersionNumber("3.5");
assertEquals(moduleVersion, helper.getModuleVersionNumber(moduleVersion));
assertEquals(moduleVersion, helper.getModuleVersionNumber(versNumber));
try {
helper.getModuleVersionNumber(null);
assertTrue(false); //should never get here
} catch (ModuleManagementToolException e) {
//should get here
}
try {
helper.getModuleVersionNumber("any object");
assertTrue(false); //should never get here
} catch (ModuleManagementToolException e) {
//should get here
}
assertTrue(true);
}
/** /**
* Helper bean to simulate module presences under controlled conditions. * Helper bean to simulate module presences under controlled conditions.
*/ */
private class DummyModuleService implements ModuleService private class DummyModuleService implements ModuleService
{ {
private VersionNumber currentVersion; private ModuleVersionNumber currentVersion;
/** Set the current version of all the modules */ /** Set the current version of all the modules */
public void setCurrentVersion(VersionNumber currentVersion) public void setCurrentVersion(ModuleVersionNumber currentVersion)
{ {
this.currentVersion = currentVersion; this.currentVersion = currentVersion;
} }

View File

@@ -0,0 +1,224 @@
package org.alfresco.repo.module;
/*
* Copyright (C) 2005-2014 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco 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 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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 Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import junit.framework.TestCase;
/**
* I took the existing @see VersionNumberTest class and added some
* additional tests for ModuleVersionNumber.
*
* @author Gethin James
*/
public class ModuleVersionNumberTest extends TestCase
{
public void testCreate()
{
ModuleVersionNumber version0 = ModuleVersionNumber.VERSION_ZERO;
assertNotNull(version0);
ModuleVersionNumber versionBig = ModuleVersionNumber.VERSION_BIG;
assertNotNull(versionBig);
ModuleVersionNumber version1 = new ModuleVersionNumber("1");
assertNotNull(version1);
ModuleVersionNumber version2 = new ModuleVersionNumber("1.2");
assertNotNull(version2);
ModuleVersionNumber version3 = new ModuleVersionNumber("1.2.3");
assertNotNull(version3);
ModuleVersionNumber versiona = new ModuleVersionNumber("1.2.3a");
assertNotNull(versiona);
ModuleVersionNumber versionSnap = new ModuleVersionNumber("1.2.3-SNAPSHOT");
assertNotNull(versionSnap);
ModuleVersionNumber versionFinal = new ModuleVersionNumber("1.2.3-final");
assertNotNull(versionFinal);
ModuleVersionNumber versionMixed = new ModuleVersionNumber("0.1-incubating-unreleased");
assertNotNull(versionMixed);
versionMixed = new ModuleVersionNumber("3.2.6-alfresco-patched");
assertNotNull(versionMixed);
versionMixed = new ModuleVersionNumber("0.2-20120518");
assertNotNull(versionMixed);
ModuleVersionNumber version1s = new ModuleVersionNumber("4.2.0-SNAPSHOT");
assertNotNull(version1s);
ModuleVersionNumber version4c = new ModuleVersionNumber("4.2.0-C");
assertNotNull(version4c);
ModuleVersionNumber version16 = new ModuleVersionNumber("4.0.1.16");
assertNotNull(version16);
ModuleVersionNumber versionn1 = new ModuleVersionNumber("4.0.16.1.7");
assertNotNull(versionn1);
ModuleVersionNumber versionn2 = new ModuleVersionNumber("4.0.1.2.8.9");
assertNotNull(versionn2);
ModuleVersionNumber versionc = new ModuleVersionNumber("4.2.c");
assertNotNull(versionc);
ModuleVersionNumber versionb = new ModuleVersionNumber("1.0.b");
assertNotNull(versionb);
ModuleVersionNumber versionsnap = new ModuleVersionNumber("1.0-SNAPSHOT");
assertNotNull(versionsnap);
}
public void testEquals()
{
ModuleVersionNumber version0 = new ModuleVersionNumber("1");
ModuleVersionNumber version1 = new ModuleVersionNumber("1.2");
ModuleVersionNumber version2 = new ModuleVersionNumber("1.2");
ModuleVersionNumber version3 = new ModuleVersionNumber("1.2.3");
ModuleVersionNumber version4 = new ModuleVersionNumber("1.2.3");
ModuleVersionNumber version5 = new ModuleVersionNumber("1.3.3");
ModuleVersionNumber version6 = new ModuleVersionNumber("1.0");
ModuleVersionNumber versiona = new ModuleVersionNumber("1.0.a");
ModuleVersionNumber versionb = new ModuleVersionNumber("1.0.b");
ModuleVersionNumber versionsnap = new ModuleVersionNumber("1.0-SNAPSHOT");
assertFalse(version0.equals(version1));
assertTrue(version1.equals(version2));
assertFalse(version2.equals(version3));
assertTrue(version3.equals(version4));
assertFalse(version4.equals(version5));
assertTrue(version0.equals(version6));
assertFalse(versiona.equals(version0));
assertFalse(versiona.equals(versionb));
assertFalse(versionsnap.equals(version6));
assertFalse(versionsnap.equals(versiona));
assertFalse(versionsnap.equals(versionb));
}
public void testCompare()
{
ModuleVersionNumber version0 = new ModuleVersionNumber("1");
ModuleVersionNumber version1 = new ModuleVersionNumber("1.2");
ModuleVersionNumber version2 = new ModuleVersionNumber("1.2");
ModuleVersionNumber version3 = new ModuleVersionNumber("1.2.3");
ModuleVersionNumber version4 = new ModuleVersionNumber("1.11");
ModuleVersionNumber version5 = new ModuleVersionNumber("1.3.3");
ModuleVersionNumber version6 = new ModuleVersionNumber("2.0");
ModuleVersionNumber version7 = new ModuleVersionNumber("2.0.1");
ModuleVersionNumber version8 = new ModuleVersionNumber("10.0");
ModuleVersionNumber version9 = new ModuleVersionNumber("10.3");
ModuleVersionNumber version10 = new ModuleVersionNumber("11.1");
assertEquals(-1, version0.compareTo(version1));
assertEquals(1, version1.compareTo(version0));
assertEquals(0, version1.compareTo(version2));
assertEquals(-1, version2.compareTo(version3));
assertEquals(-1, version2.compareTo(version4));
assertEquals(-1, version3.compareTo(version5));
assertEquals(1, version6.compareTo(version5));
assertEquals(-1, version6.compareTo(version7));
assertEquals(-1, version1.compareTo(version8));
assertEquals(-1, version8.compareTo(version9));
assertEquals(-1, version9.compareTo(version10));
ModuleVersionNumber version1point4 = new ModuleVersionNumber("1.4");
ModuleVersionNumber version1point4a = new ModuleVersionNumber("1.4.a");
ModuleVersionNumber version1point4b = new ModuleVersionNumber("1.4.b");
ModuleVersionNumber version1point4c = new ModuleVersionNumber("1.4.c");
ModuleVersionNumber version1point4d = new ModuleVersionNumber("1.4.d");
ModuleVersionNumber version1point4snapshot = new ModuleVersionNumber("1.4-SNAPSHOT");
ModuleVersionNumber version1point40 = new ModuleVersionNumber("1.4.0");
assertEquals(1, ModuleVersionNumber.VERSION_BIG.compareTo(version1));
assertEquals(1, ModuleVersionNumber.VERSION_BIG.compareTo(version0));
assertEquals(1, ModuleVersionNumber.VERSION_BIG.compareTo(version8));
assertEquals(1, ModuleVersionNumber.VERSION_BIG.compareTo(version1point4b));
assertEquals(1, ModuleVersionNumber.VERSION_BIG.compareTo(version1point4snapshot));
assertEquals(0, version1point4.compareTo(new ModuleVersionNumber("1.4")));
assertTrue(version1point4.compareTo(version1point4a) < 1);
assertTrue(version1point4.compareTo(version1point4snapshot) > 0);
assertTrue(version1point4b.compareTo(version1point4a) > 0);
assertTrue(version1point4b.compareTo(version1point4snapshot) > 0);
assertTrue(version1point4c.compareTo(version1point4b) > 0);
assertTrue(version1point4c.compareTo(version1point4d) < 0);
assertTrue(version1point4d.compareTo(version1point4c) > 0);
assertTrue(version1point40.compareTo(version1point4) == 0);// the same
ModuleVersionNumber versionBase = new ModuleVersionNumber("0.1");
ModuleVersionNumber versionMixed = new ModuleVersionNumber("0.1-incubating-unreleased");
assertTrue(versionMixed.compareTo(versionBase) > 0);
versionBase = new ModuleVersionNumber("3.2.6");
versionMixed = new ModuleVersionNumber("3.2.6-alfresco-patched");
assertTrue(versionMixed.compareTo(versionBase) > 0);
versionBase = new ModuleVersionNumber("0.2");
versionMixed = new ModuleVersionNumber("0.2-20120518");
assertTrue(versionMixed.compareTo(versionBase) > 0);
}
public void testSerialize() throws IOException, ClassNotFoundException
{
ModuleVersionNumber version0Before = new ModuleVersionNumber("1");
ModuleVersionNumber version6Before = new ModuleVersionNumber("1.0");
ModuleVersionNumber versionaBefore = new ModuleVersionNumber("1.0.a");
ModuleVersionNumber versionbBefore = new ModuleVersionNumber("1.0.b");
ModuleVersionNumber versionsnapBefore = new ModuleVersionNumber("1.0-SNAPSHOT");
//read and write versions then check they are the same.
ModuleVersionNumber version0 = writeAndRead(version0Before);
ModuleVersionNumber version6 = writeAndRead(version6Before);
ModuleVersionNumber versiona = writeAndRead(versionaBefore);
ModuleVersionNumber versionb = writeAndRead(versionbBefore);
ModuleVersionNumber versionsnap = writeAndRead(versionsnapBefore);
assertTrue(version0.equals(version0Before));
assertTrue(version6.equals(version6Before));
assertTrue(versiona.equals(versionaBefore));
assertTrue(versionb.equals(versionbBefore));
assertTrue(versionsnap.equals(versionsnapBefore));
assertTrue(version0.equals(version6));
assertFalse(versiona.equals(version0));
assertFalse(versiona.equals(versionb));
assertFalse(versionsnap.equals(version6));
assertFalse(versionsnap.equals(versiona));
assertFalse(versionsnap.equals(versionb));
}
private ModuleVersionNumber writeAndRead(ModuleVersionNumber versionNumber) throws IOException, ClassNotFoundException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(versionNumber);
oos.flush();
oos.close();
ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
return (ModuleVersionNumber) objectInputStream.readObject();
}
}

View File

@@ -6,7 +6,6 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@@ -14,6 +13,7 @@ import java.io.OutputStream;
import java.util.Properties; import java.util.Properties;
import org.alfresco.repo.module.ModuleDetailsImpl; import org.alfresco.repo.module.ModuleDetailsImpl;
import org.alfresco.repo.module.ModuleVersionNumber;
import org.alfresco.service.cmr.module.ModuleDetails; import org.alfresco.service.cmr.module.ModuleDetails;
import org.alfresco.util.TempFileProvider; import org.alfresco.util.TempFileProvider;
import org.alfresco.util.VersionNumber; import org.alfresco.util.VersionNumber;
@@ -23,7 +23,6 @@ import org.springframework.util.FileCopyUtils;
import de.schlichtherle.truezip.file.TArchiveDetector; import de.schlichtherle.truezip.file.TArchiveDetector;
import de.schlichtherle.truezip.file.TConfig; import de.schlichtherle.truezip.file.TConfig;
import de.schlichtherle.truezip.file.TFile; import de.schlichtherle.truezip.file.TFile;
import de.schlichtherle.truezip.file.TFileInputStream;
import de.schlichtherle.truezip.fs.archive.zip.ZipDriver; import de.schlichtherle.truezip.fs.archive.zip.ZipDriver;
import de.schlichtherle.truezip.socket.sl.IOPoolLocator; import de.schlichtherle.truezip.socket.sl.IOPoolLocator;
@@ -76,7 +75,7 @@ public class WarHelperImplTest extends WarHelperImpl
{ {
TFile theWar = getFile(".war", "module/test.war"); //Version 4.1.0 TFile theWar = getFile(".war", "module/test.war"); //Version 4.1.0
ModuleDetails installingModuleDetails = new ModuleDetailsImpl("test_it", new VersionNumber("9999"), "Test Mod", "Testing module"); ModuleDetails installingModuleDetails = new ModuleDetailsImpl("test_it", new ModuleVersionNumber("9999"), "Test Mod", "Testing module");
installingModuleDetails.setRepoVersionMin(new VersionNumber("10.1")); installingModuleDetails.setRepoVersionMin(new VersionNumber("10.1"));
try try
{ {
@@ -131,7 +130,7 @@ public class WarHelperImplTest extends WarHelperImpl
{ {
//Now check the compatible versions using the manifest //Now check the compatible versions using the manifest
TFile theWar = getFile(".war", "module/share-3.4.11.war"); TFile theWar = getFile(".war", "module/share-3.4.11.war");
ModuleDetails installingModuleDetails = new ModuleDetailsImpl("test_it", new VersionNumber("9999"), "Test Mod", "Testing module"); ModuleDetails installingModuleDetails = new ModuleDetailsImpl("test_it", new ModuleVersionNumber("9999"), "Test Mod", "Testing module");
installingModuleDetails.setRepoVersionMin(new VersionNumber("10.1")); installingModuleDetails.setRepoVersionMin(new VersionNumber("10.1"));
try try
{ {
@@ -181,7 +180,7 @@ public class WarHelperImplTest extends WarHelperImpl
} }
theWar = getFile(".war", "module/share-4.2.a.war"); theWar = getFile(".war", "module/share-4.2.a.war");
installingModuleDetails = new ModuleDetailsImpl("test_it", new VersionNumber("9999"), "Test Mod", "Testing module"); installingModuleDetails = new ModuleDetailsImpl("test_it", new ModuleVersionNumber("9999"), "Test Mod", "Testing module");
installingModuleDetails.setRepoVersionMin(new VersionNumber("101.1")); installingModuleDetails.setRepoVersionMin(new VersionNumber("101.1"));
//this should fail BUT we are using a non-numeric version number so instead it passes without validation //this should fail BUT we are using a non-numeric version number so instead it passes without validation
this.checkCompatibleVersionUsingManifest(theWar, installingModuleDetails); this.checkCompatibleVersionUsingManifest(theWar, installingModuleDetails);
@@ -312,7 +311,7 @@ public class WarHelperImplTest extends WarHelperImpl
{ {
TFile theWar = getFile(".war", "module/empty.war"); TFile theWar = getFile(".war", "module/empty.war");
ModuleDetails installingModuleDetails = new ModuleDetailsImpl("test_it", new VersionNumber("9999"), "Test Mod", "Testing module"); ModuleDetails installingModuleDetails = new ModuleDetailsImpl("test_it", new ModuleVersionNumber("9999"), "Test Mod", "Testing module");
installingModuleDetails.setRepoVersionMin(new VersionNumber("10.1")); installingModuleDetails.setRepoVersionMin(new VersionNumber("10.1"));
this.checkCompatibleVersion(theWar, installingModuleDetails); //does not throw exception this.checkCompatibleVersion(theWar, installingModuleDetails); //does not throw exception
this.checkCompatibleEdition(theWar, installingModuleDetails); //does not throw exception this.checkCompatibleEdition(theWar, installingModuleDetails); //does not throw exception