if (deployPathFile == null || !deployPathFile.exists() ||
!deployPathFile.isDirectory() || deployPathFile.getParentFile() == null ||
!deployToDir.equals(deployPathFile.getParentFile().getParent()))
{
throw new DeploymentException("Cannot undeploy decorator at " + deployPathFile + ": invalid decorator path");
}
String id = deployPathFile.getName();
try
{
// undeploy decorator
log.info("Undeploying decorator " + id + " at " + deployPathFile.getAbsolutePath());
// detect language/country localized decorator components
final List localeSpecificDeployPathsList = getLocaleSpecificDeployPaths(deployPathFile.getParentFile());
// undeploy individual locale specific decorator components depth first
for (int i = localeSpecificDeployPathsList.size() - 1; i > -1; i--)
{
File localeDeployPathFile = new File((File) localeSpecificDeployPathsList.get(i), id);
if (localeDeployPathFile.exists())
{
log.info("Undeploying locale specific decorator component at " + localeDeployPathFile.getPath());
DirectoryHelper cleanup = new DirectoryHelper(localeDeployPathFile);
cleanup.remove();
cleanup.close();
localeDeployPathFile.getParentFile().delete();
}
}
// now undeploy the decorator root itself
DirectoryHelper cleanup = new DirectoryHelper(deployPathFile);
cleanup.remove();
cleanup.close();
log.info("Decorator " + id + " undeployed successfuly.");
}
catch (Exception e)
{
throw new DeploymentException("Error undeploying decorator " + id, e);
}
}