mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-08 14:51:49 +00:00
Merged HEAD-BUG-FIX (5.1/Cloud) to HEAD (5.1/Cloud)
106705: Made findManifest and backup public so they can be reused. UTF-77 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@106796 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -397,7 +397,7 @@ public class ModuleManagementTool implements LogOutput
|
|||||||
* @see ModuleManagementTool#installModule(String, String, boolean, boolean, boolean)
|
* @see ModuleManagementTool#installModule(String, String, boolean, boolean, boolean)
|
||||||
*
|
*
|
||||||
* @param warFile the location of the AMP file to be installed
|
* @param warFile the location of the AMP file to be installed
|
||||||
* @param warFileLocation the location of the WAR file into which the AMP file is to be installed
|
* @param backupWAR true if you want it to perform the backup
|
||||||
*/
|
*/
|
||||||
private void backupWar(TFile warFile, boolean backupWAR) throws IOException
|
private void backupWar(TFile warFile, boolean backupWAR) throws IOException
|
||||||
{
|
{
|
||||||
@@ -405,24 +405,7 @@ public class ModuleManagementTool implements LogOutput
|
|||||||
// Make a backup of the war we are going to modify
|
// Make a backup of the war we are going to modify
|
||||||
if (backupWAR == true)
|
if (backupWAR == true)
|
||||||
{
|
{
|
||||||
|
warHelper.backup(warFile);
|
||||||
String backupLocation = warFile.getAbsolutePath()+"-" + System.currentTimeMillis() + ".bak";
|
|
||||||
|
|
||||||
if (warFile.isArchive())
|
|
||||||
{
|
|
||||||
outputVerboseMessage("Backing up WAR file...");
|
|
||||||
TFile source = new TFile(warFile.getAbsolutePath(), TArchiveDetector.NULL);
|
|
||||||
TFile backup = new TFile(backupLocation, TArchiveDetector.NULL);
|
|
||||||
source.cp_rp(backup); //Just copy the file
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
outputVerboseMessage("Backing up war DIRECTORY...");
|
|
||||||
TFile backup = new TFile(backupLocation);
|
|
||||||
warFile.cp_rp(backup); //Copy the directory
|
|
||||||
}
|
|
||||||
outputVerboseMessage("WAR has been backed up to '" + backupLocation + "'");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,7 +4,9 @@ import org.alfresco.service.cmr.module.ModuleDetails;
|
|||||||
|
|
||||||
import de.schlichtherle.truezip.file.TFile;
|
import de.schlichtherle.truezip.file.TFile;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.jar.Manifest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs various actions on a war file or exploded war directory
|
* Performs various actions on a war file or exploded war directory
|
||||||
@@ -37,7 +39,7 @@ public interface WarHelper
|
|||||||
* @param war a valid war file or exploded directory from a war
|
* @param war a valid war file or exploded directory from a war
|
||||||
*/
|
*/
|
||||||
public void checkCompatibleVersion(TFile war, ModuleDetails installingModuleDetails);
|
public void checkCompatibleVersion(TFile war, ModuleDetails installingModuleDetails);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This checks to see if the module that is being installed is compatible with the war.
|
* This checks to see if the module that is being installed is compatible with the war.
|
||||||
* If not module edition is specfied then it will just return. However, if an edition is specified and it doesn't match
|
* If not module edition is specfied then it will just return. However, if an edition is specified and it doesn't match
|
||||||
@@ -65,4 +67,23 @@ public interface WarHelper
|
|||||||
* @throws ModuleManagementToolException
|
* @throws ModuleManagementToolException
|
||||||
*/
|
*/
|
||||||
List<ModuleDetails> listModules(TFile war);
|
List<ModuleDetails> listModules(TFile war);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backs up a given file or directory.
|
||||||
|
*
|
||||||
|
* @since 5.1
|
||||||
|
* @param file the file to backup
|
||||||
|
* @return the absolute path to the backup file.
|
||||||
|
*/
|
||||||
|
public String backup(TFile file) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds a war manifest file.
|
||||||
|
* @since 5.1
|
||||||
|
* @param war the war
|
||||||
|
* @return Manifest
|
||||||
|
* @throws ModuleManagementToolException
|
||||||
|
*/
|
||||||
|
public Manifest findManifest(TFile war) throws ModuleManagementToolException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package org.alfresco.repo.module.tool;
|
package org.alfresco.repo.module.tool;
|
||||||
|
|
||||||
|
import de.schlichtherle.truezip.file.TArchiveDetector;
|
||||||
import de.schlichtherle.truezip.file.TFile;
|
import de.schlichtherle.truezip.file.TFile;
|
||||||
import de.schlichtherle.truezip.file.TFileInputStream;
|
import de.schlichtherle.truezip.file.TFileInputStream;
|
||||||
import org.alfresco.error.AlfrescoRuntimeException;
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
@@ -110,20 +111,33 @@ public class WarHelperImpl implements WarHelper
|
|||||||
* @throws ModuleManagementToolException
|
* @throws ModuleManagementToolException
|
||||||
*/
|
*/
|
||||||
protected String findManifestArtibute(TFile war, String attributeName) throws ModuleManagementToolException {
|
protected String findManifestArtibute(TFile war, String attributeName) throws ModuleManagementToolException {
|
||||||
|
|
||||||
InputStream is = null;
|
Manifest manifest = findManifest(war);
|
||||||
|
Attributes attribs = manifest.getMainAttributes();
|
||||||
try
|
return attribs.getValue(attributeName);
|
||||||
{
|
}
|
||||||
is = new TFileInputStream(war+MANIFEST_FILE);
|
|
||||||
Manifest manifest = new Manifest(is);
|
/**
|
||||||
Attributes attribs = manifest.getMainAttributes();
|
* Finds a single attribute from a war manifest file.
|
||||||
return attribs.getValue(attributeName);
|
* @param war the war
|
||||||
}
|
* @return Manifest
|
||||||
catch (IOException e)
|
* @throws ModuleManagementToolException
|
||||||
{
|
*/
|
||||||
throw new ModuleManagementToolException("Unabled to read a manifest for the war file: "+ war);
|
@Override
|
||||||
}
|
public Manifest findManifest(TFile war) throws ModuleManagementToolException {
|
||||||
|
|
||||||
|
InputStream is = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
is = new TFileInputStream(war+MANIFEST_FILE);
|
||||||
|
Manifest manifest = new Manifest(is);
|
||||||
|
return manifest;
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
throw new ModuleManagementToolException("Unabled to read a manifest for the war file: "+ war);
|
||||||
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (is != null)
|
if (is != null)
|
||||||
@@ -131,8 +145,7 @@ public class WarHelperImpl implements WarHelper
|
|||||||
try { is.close(); } catch (Throwable e ) {}
|
try { is.close(); } catch (Throwable e ) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compares the version information with the module details to see if their valid. If they are invalid then it throws an exception.
|
* Compares the version information with the module details to see if their valid. If they are invalid then it throws an exception.
|
||||||
@@ -335,6 +348,36 @@ public class WarHelperImpl implements WarHelper
|
|||||||
return moduleDetails;
|
return moduleDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backs up a given file or directory.
|
||||||
|
*
|
||||||
|
* @param file the file to backup
|
||||||
|
* @return the absolute path to the backup file.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String backup(TFile file) throws IOException
|
||||||
|
{
|
||||||
|
|
||||||
|
String backupLocation = file.getAbsolutePath()+"-" + System.currentTimeMillis() + ".bak";
|
||||||
|
|
||||||
|
if (file.isArchive())
|
||||||
|
{
|
||||||
|
log.info("Backing up file...");
|
||||||
|
TFile source = new TFile(file.getAbsolutePath(), TArchiveDetector.NULL);
|
||||||
|
TFile backup = new TFile(backupLocation, TArchiveDetector.NULL);
|
||||||
|
source.cp_rp(backup); //Just copy the file
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log.info("Backing up DIRECTORY...");
|
||||||
|
TFile backup = new TFile(backupLocation);
|
||||||
|
file.cp_rp(backup); //Copy the directory
|
||||||
|
}
|
||||||
|
log.info("The back up is at '" + backupLocation + "'");
|
||||||
|
|
||||||
|
return backupLocation;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the module details for the specified module from the war.
|
* Gets the module details for the specified module from the war.
|
||||||
* @param war a valid war file or exploded directory from a war
|
* @param war a valid war file or exploded directory from a war
|
||||||
|
@@ -28,6 +28,7 @@ import org.springframework.util.FileCopyUtils;
|
|||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -387,7 +388,7 @@ public class ModuleManagementToolTest extends TestCase
|
|||||||
assertEquals(details.size(), 3);
|
assertEquals(details.size(), 3);
|
||||||
|
|
||||||
//Sort them by installation date
|
//Sort them by installation date
|
||||||
details.sort(new Comparator<ModuleDetails>() {
|
Collections.sort(details, new Comparator<ModuleDetails>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(ModuleDetails a, ModuleDetails b) {
|
public int compare(ModuleDetails a, ModuleDetails b) {
|
||||||
return a.getInstallDate().compareTo(b.getInstallDate());
|
return a.getInstallDate().compareTo(b.getInstallDate());
|
||||||
|
@@ -17,6 +17,7 @@ import org.springframework.util.FileCopyUtils;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
import java.util.jar.Manifest;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
@@ -290,6 +291,25 @@ public class WarHelperImplTest extends WarHelperImpl
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testfindManifest() throws Exception {
|
||||||
|
//Now check the compatible versions using the manifest
|
||||||
|
TFile theWar = getFile(".war", "module/share-3.4.11.war");
|
||||||
|
Manifest manifest = this.findManifest(theWar);
|
||||||
|
|
||||||
|
assertNotNull(manifest);
|
||||||
|
assertEquals("Alfresco Share Enterprise", manifest.getMainAttributes().getValue(MANIFEST_IMPLEMENTATION_TITLE));
|
||||||
|
assertEquals("3.4.11", manifest.getMainAttributes().getValue(MANIFEST_SPECIFICATION_VERSION));
|
||||||
|
|
||||||
|
theWar = getFile(".war", "module/alfresco-4.2.a.war");
|
||||||
|
manifest = this.findManifest(theWar);
|
||||||
|
|
||||||
|
assertNotNull(manifest);
|
||||||
|
assertEquals("Alfresco Repository Community", manifest.getMainAttributes().getValue(MANIFEST_IMPLEMENTATION_TITLE));
|
||||||
|
assertEquals("4.2.a", manifest.getMainAttributes().getValue(MANIFEST_SPECIFICATION_VERSION));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testListModules() throws Exception
|
public void testListModules() throws Exception
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user