Package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin

Source Code of org.eclipse.ecf.tests.osgi.services.remoteserviceadmin.EDEFBundleGenerator

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();
    }
  }

}
TOP

Related Classes of org.eclipse.ecf.tests.osgi.services.remoteserviceadmin.EDEFBundleGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.