blob: e2b09c259d4fb37620dbe6a69b23c36e83da1c14 [file] [log] [blame]
package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.jar.Attributes;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.EndpointDescriptionWriter;
import org.osgi.service.remoteserviceadmin.EndpointDescription;
public class EDEFBundleGenerator {
private static final String MANIFEST_VERSION = "Manifest-Version"; //$NON-NLS-1$
private static final String BUNDLE_MANIFEST_VERSION = "Bundle-ManifestVersion"; //$NON-NLS-1$
private static final String BUNDLE_NAME = "Bundle-Name"; //$NON-NLS-1$
private static final String BUNDLE_SYMBOLIC_NAME = "Bundle-SymbolicName"; //$NON-NLS-1$
private static final String BUNDLE_VERSION = "Bundle-Version"; //$NON-NLS-1$
private static final String REMOTE_SERVICE = "Remote-Service"; //$NON-NLS-1$
private static final String EDEF_FILENAME = "edef.xml"; //$NON-NLS-1$
private File targetBundleDirectory;
private String targetBundleSymbolicName;
private String targetBundleVersion;
private EndpointDescriptionWriter edWriter;
public EDEFBundleGenerator(File targetBundleDirectory, String targetBundleSymbolicName, String targetBundleVersion, EndpointDescriptionWriter edWriter) {
this.targetBundleDirectory = targetBundleDirectory;
this.targetBundleSymbolicName = targetBundleSymbolicName;
this.targetBundleVersion = targetBundleVersion;
this.edWriter = (edWriter==null)?new EndpointDescriptionWriter():edWriter;
}
public void generateEDEFBundle(EndpointDescription [] endpointDescriptions) throws IOException {
Manifest mf = new Manifest();
Attributes attribs = mf.getMainAttributes();
attribs.putValue(MANIFEST_VERSION, "1.0"); //$NON-NLS-1$
attribs.putValue(BUNDLE_MANIFEST_VERSION, "2"); //$NON-NLS-1$
attribs.putValue(BUNDLE_NAME, "RSA EDEF - "+ targetBundleSymbolicName + "." + targetBundleVersion); //$NON-NLS-1$
attribs.putValue(BUNDLE_SYMBOLIC_NAME, targetBundleSymbolicName);
attribs.putValue(BUNDLE_VERSION, targetBundleVersion);
attribs.putValue(REMOTE_SERVICE, EDEF_FILENAME);
File targetBundleFile = new File(targetBundleDirectory, targetBundleSymbolicName+"_"+targetBundleVersion+".jar");
if (targetBundleFile.exists()) throw new IOException("file "+targetBundleFile+" already exists. Cannot overrite");
JarOutputStream jos = null;
try {
jos = new JarOutputStream(new FileOutputStream(targetBundleFile), mf);
ZipEntry edefFileEntry = new ZipEntry(EDEF_FILENAME);
jos.putNextEntry(edefFileEntry);
OutputStreamWriter outsWriter = new OutputStreamWriter(jos);
outsWriter.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append("\n");
edWriter.writeEndpointDescriptions(outsWriter, endpointDescriptions);
outsWriter.flush();
jos.closeEntry();
jos.finish();
} finally {
if (jos != null)
jos.close();
}
}
}