import java.util.HashMap;

import ag.ion.bion.officelayer.application.IOfficeApplication;
import ag.ion.bion.officelayer.application.OfficeApplicationRuntime;
import ag.ion.bion.officelayer.document.DocumentDescriptor;
import ag.ion.bion.officelayer.document.IDocument;
import ag.ion.bion.officelayer.document.IDocumentService;

import com.sun.star.beans.XPropertySet;
import com.sun.star.document.XEmbeddedObjectSupplier2;
import com.sun.star.frame.XController;
import com.sun.star.frame.XModel;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.text.TextContentAnchorType;
import com.sun.star.text.XTextContent;
import com.sun.star.text.XTextCursor;
import com.sun.star.text.XTextRange;
import com.sun.star.text.XTextViewCursor;
import com.sun.star.text.XTextViewCursorSupplier;
import com.sun.star.uno.UnoRuntime;

public class Math {

  private final static String      OPEN_OFFICE_ORG_PATH = "C:\\Programme\\OpenOffice.org 3";

  public static IOfficeApplication officeAplication     = null;

  public static void main(String[] args) {
    HashMap configuration = new HashMap();
    configuration.put(IOfficeApplication.APPLICATION_HOME_KEY, OPEN_OFFICE_ORG_PATH);
    configuration.put(IOfficeApplication.APPLICATION_TYPE_KEY, IOfficeApplication.LOCAL_APPLICATION);

    try {
      officeAplication = OfficeApplicationRuntime.getApplication(configuration);
      officeAplication.activate();

      IDocumentService documentService = officeAplication.getDocumentService();

      IDocument doc = (IDocument) documentService.constructNewDocument(IDocument.WRITER,
          DocumentDescriptor.DEFAULT);

      XMultiServiceFactory xMultiServiceFactory = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class,
          doc.getXComponent());

      // Create a TextEmbeddedObject to provide accessors for embedding the chart.
      XTextContent embeddedObject = (XTextContent) UnoRuntime.queryInterface(XTextContent.class,
          xMultiServiceFactory.createInstance("com.sun.star.text.TextEmbeddedObject"));
      XPropertySet props = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
          embeddedObject);
      props.setPropertyValue("CLSID", "078B7ABA-54FC-457F-8551-6147e776a997");
      props.setPropertyValue("AnchorType", TextContentAnchorType.AS_CHARACTER);
      XModel xModel = (XModel) UnoRuntime.queryInterface(XModel.class, doc.getXComponent());
      XController xController = xModel.getCurrentController();
      XTextViewCursorSupplier xTextViewCursorSupplier = (XTextViewCursorSupplier) UnoRuntime.queryInterface(XTextViewCursorSupplier.class,
          xController);
      XTextViewCursor viewCursor = xTextViewCursorSupplier.getViewCursor();
      XTextCursor xTextCursor = viewCursor.getText().createTextCursorByRange(viewCursor.getStart());
      XTextRange range = xTextCursor.getStart();
      range.getText().insertTextContent(range, embeddedObject, false);

      XEmbeddedObjectSupplier2 xEmbeddedObjectSupplier = (XEmbeddedObjectSupplier2) UnoRuntime.queryInterface(XEmbeddedObjectSupplier2.class,
          embeddedObject);
      XComponent xEmbeddedObjectModel = xEmbeddedObjectSupplier.getEmbeddedObject();

      XPropertySet xFormulaProperties = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class,
          xEmbeddedObjectModel);

      xFormulaProperties.setPropertyValue("Formula", "1 {5}over{9} + 3 {5}over{9} = 5 {1}over{9}");

    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }
}
