* @param the abstract archive
*/
public void write(Application application, ReadableArchive in,
WritableArchive out) throws IOException {
if (application.isVirtual()) {
ModuleDescriptor aModule = (ModuleDescriptor) application.getModules().iterator().next();
Archivist moduleArchivist = archivistFactory.getArchivist(aModule.getModuleType());
write((BundleDescriptor)aModule.getDescriptor(), moduleArchivist, in, out);
} else {
// this is a real application.
// let's start by writing out all submodules deployment descriptors
for (ModuleDescriptor aModule : application.getModules()) {
Archivist moduleArchivist = archivistFactory.getArchivist(aModule.getModuleType());
if (aModule.getAlternateDescriptor()!=null) {
// the application is using alternate deployment descriptors
// write or copy standard deployment descriptor
String ddPath = aModule.getAlternateDescriptor();
DeploymentDescriptorFile ddFile =
moduleArchivist.getStandardDDFile();
BundleDescriptor bundle =
(BundleDescriptor)aModule.getDescriptor();
if (!bundle.isFullFlag()) {
if (ddFile != null) {
OutputStream os = out.putNextEntry(ddPath);
ddFile.write(bundle, os);
out.closeEntry();
}
} else {
if (aModule.getModuleType().equals(XModuleType.WAR)) {
WebBundleDescriptor webBundle =
(WebBundleDescriptor) aModule.getDescriptor();
if (webBundle.hasWebServices()) {
if (ddFile != null) {
OutputStream os = out.putNextEntry(ddPath);
ddFile.write(webBundle, os);
out.closeEntry();
}
} else {
moduleArchivist.copyAnEntry(in, out, ddPath);
}
} else {
moduleArchivist.copyAnEntry(in, out, ddPath);
}
}
String runtimeDDPath = "glasfish-" + ddPath;
DeploymentDescriptorFile confDDFile = moduleArchivist.getConfigurationDDFile();
if (confDDFile!=null) {
OutputStream os = out.putNextEntry(runtimeDDPath);
confDDFile.write(aModule.getDescriptor(), os);
out.closeEntry();
}
} else {
WritableArchive moduleArchive = out.createSubArchive(aModule.getArchiveUri());
ReadableArchive moduleArchive2 = in.getSubArchive(aModule.getArchiveUri());
write((BundleDescriptor)aModule.getDescriptor(), moduleArchivist, moduleArchive2, moduleArchive);
}
}
// now let's write the application descriptor
ApplicationArchivist archivist =