#!/bin/sh

cat >testdomimpl.java <<EOF
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

class testdomimpl {
  public static void main(String[] arg) {

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    System.out.println(factory);
    try {
      DocumentBuilder parser = factory.newDocumentBuilder();
      System.out.println(parser);
      if (parser.getDOMImplementation() != null) {
        System.out.println(parser.getDOMImplementation());
      }
    } catch (java.lang.Throwable ex) {
      ex.printStackTrace();
    }

  }
}
EOF

gcj -o testdomimpl1 --main=testdomimpl testdomimpl.java
./testdomimpl1

mkdir -p headers
gcjh -cp /usr/share/java/jaxp-1.3.jar:/usr/share/java/libgcj.jar -d headers \
  org.w3c.dom.DOMImplementation \
  javax.xml.parsers.DocumentBuilder \
  javax.xml.parsers.DocumentBuilderFactory 

cat >testdomimpl.cpp <<EOF
#include <gcj/cni.h>

#include <java/lang/System.h>
#include <java/lang/Throwable.h>
#include <java/io/PrintStream.h>
#include <org/w3c/dom/DOMImplementation.h>
#include <javax/xml/parsers/DocumentBuilderFactory.h>
#include <javax/xml/parsers/DocumentBuilder.h>

#include <stdio.h>

using namespace java::lang;
using namespace javax::xml::parsers;

int main(int argc, char** argv) {
  JvCreateJavaVM(NULL);
  JvAttachCurrentThread(NULL, NULL);
  JvInitClass(&System::class$);
  JvInitClass(&DocumentBuilderFactory::class$);

  DocumentBuilderFactory *factory = DocumentBuilderFactory::newInstance();
  System::out->println(factory);
  try {
    DocumentBuilder *parser = factory->newDocumentBuilder();
    System::out->println(parser);
    if (parser->getDOMImplementation()) {
      System::out->println(parser->getDOMImplementation());
    }
  } catch (java::lang::Throwable *ex) {
    ex->printStackTrace();
  }
  return 0;
}
EOF

echo
g++ -c -Iheaders -o testdomimpl.o testdomimpl.cpp
gcj -o testdomimpl2 testdomimpl.o
./testdomimpl2
