/**
   * All the BND magic happens here.
   *
   * @param jarInputStream On what to operate.
   * @param instructions BND instructions from user API
   * @param symbolicName Mandatory Header. In case user does not set it.
   * @return Bundle Jar Stream
   * @throws Exception Problems go here
   */
  private InputStream createBundle(
      InputStream jarInputStream, Properties instructions, String symbolicName) throws Exception {
    NullArgumentException.validateNotNull(jarInputStream, "Jar URL");
    NullArgumentException.validateNotNull(instructions, "Instructions");
    NullArgumentException.validateNotEmpty(symbolicName, "Jar info");

    final Jar jar = new Jar("dot", sink(jarInputStream));

    final Properties properties = new Properties();
    properties.putAll(instructions);

    final Analyzer analyzer = new Analyzer();
    analyzer.setJar(jar);
    analyzer.setProperties(properties);

    // throw away already existing headers that we overwrite:

    analyzer.mergeManifest(jar.getManifest());

    checkMandatoryProperties(analyzer, jar, symbolicName);
    Manifest manifest = analyzer.calcManifest();
    jar.setManifest(manifest);

    return createInputStream(jar);
  }
Пример #2
0
 /** Test url includes */
 public static void testUrlIncludes2() throws IOException {
   Analyzer a = new Analyzer();
   Properties p = new Properties();
   p.setProperty("a", "1");
   p.setProperty("-include", "jar:file:jar/osgi.jar/!/META-INF/MANIFEST.MF");
   a.setProperties(p);
   assertEquals("1", a.getProperty("a"));
   assertEquals("osgi", a.getProperty("Bundle-SymbolicName"));
 }
Пример #3
0
 public static void testAbsentIncludes() throws IOException {
   Analyzer analyzer = new Analyzer();
   analyzer.setBase(IO.getFile("src/test"));
   Properties p = new Properties();
   p.put("-include", "-iamnotthere.txt");
   analyzer.setProperties(p);
   System.err.println(analyzer.getErrors());
   assertEquals(0, analyzer.getErrors().size());
 }
Пример #4
0
  public static void testPrecedence() throws Exception {
    File base = IO.getFile("src/test");
    String a = "a=a.props\n";
    String b = "a=b.props\n";
    File aa = new File(base, "a.props");
    File bb = new File(base, "b.props");
    write(aa, a);
    write(bb, b);

    Analyzer analyzer = new Analyzer();
    analyzer.setBase(base);
    Properties x = new Properties();
    x.put("a", "x");
    x.put("-include", "a.props, b.props");
    analyzer.setProperties(x);
    assertEquals("b.props", analyzer.getProperty("a")); // from org

    analyzer = new Analyzer();
    analyzer.setBase(base);
    x = new Properties();
    x.put("a", "x");
    x.put("-include", "~a.props, b.props");
    analyzer.setProperties(x);
    assertEquals("b.props", analyzer.getProperty("a")); // from org

    analyzer = new Analyzer();
    analyzer.setBase(base);
    x = new Properties();
    x.put("a", "x");
    x.put("-include", "a.props, ~b.props");
    analyzer.setProperties(x);
    assertEquals("a.props", analyzer.getProperty("a")); // from org

    analyzer = new Analyzer();
    analyzer.setBase(base);
    x = new Properties();
    x.put("a", "x");
    x.put("-include", "~a.props, ~b.props");
    analyzer.setProperties(x);
    assertEquals("x", analyzer.getProperty("a")); // from org

    aa.delete();
    bb.delete();
  }
Пример #5
0
 /** Test url includes props: a\ b\ c\ d last-props: end */
 public static void testUrlIncludes() throws IOException {
   Analyzer a = new Analyzer();
   Properties p = new Properties();
   p.setProperty("a", "1");
   p.setProperty("-include", "file:src/test/includeheadertest.prop");
   a.setProperties(p);
   assertEquals("1", a.getProperty("a"));
   assertEquals("end", a.getProperty("last-props"));
   assertEquals("abcd", a.getProperty("props"));
 }
Пример #6
0
 public static void testInvalidCaseForHeader() throws Exception {
   Properties p = new Properties();
   p.put("Export-package", "org.apache.mina.*");
   p.put("Bundle-Classpath", ".");
   Analyzer analyzer = new Analyzer();
   analyzer.setProperties(p);
   analyzer.getProperties();
   System.err.println("Errors   " + analyzer.getErrors());
   System.err.println("Warnings " + analyzer.getWarnings());
   assertEquals(0, analyzer.getErrors().size());
   assertEquals(2, analyzer.getWarnings().size());
 }
Пример #7
0
 public static void testIncludeHeader() throws IOException {
   Analyzer analyzer = new Analyzer();
   analyzer.setBase(IO.getFile("src/test"));
   Properties p = new Properties();
   p.put("a", "1");
   p.put("-include", "includeheadertest.mf, includeheadertest.prop");
   analyzer.setProperties(p);
   System.err.println(analyzer.getProperties());
   assertEquals("1", analyzer.getProperty("a"));
   assertEquals("end", analyzer.getProperty("last-props"));
   assertEquals("end", analyzer.getProperty("last-manifest"));
   assertEquals("abcd", analyzer.getProperty("manifest"));
   assertEquals("abcd", analyzer.getProperty("props"));
   assertEquals("1", analyzer.getProperty("test"));
 }
Пример #8
0
 public static void testIncludeWithProperty() throws IOException {
   File home = new File(System.getProperty("user.home"));
   File include = new File(home, "includeheadertest.txt");
   try {
     FileOutputStream fw = new FileOutputStream(include);
     fw.write("IncludeHeaderTest: yes\n\r".getBytes());
     fw.write("a: 2\n\r".getBytes());
     fw.write("b: ${a}\n\r".getBytes());
     fw.close();
     Analyzer analyzer = new Analyzer();
     analyzer.setBase(IO.getFile("src/test"));
     Properties p = new Properties();
     p.put("a", "1");
     p.put("-include", "-iamnotthere.txt, ${user.home}/includeheadertest.txt");
     analyzer.setProperties(p);
     String value = analyzer.getProperty("IncludeHeaderTest");
     assertEquals("yes", value);
     assertEquals("2", analyzer.getProperty("a"));
     assertEquals("2", analyzer.getProperty("b"));
     assertEquals(0, analyzer.getErrors().size());
   } finally {
     include.delete();
   }
 }
Пример #9
0
 public static void testTopBottom() throws Exception {
   Analyzer analyzer = new Analyzer();
   analyzer.setProperties(IO.getFile("src/test/include.bnd/top.bnd"));
   assertEquals("0.0.257", analyzer.getProperty("Bundle-Version"));
 }