aboutsummaryrefslogtreecommitdiffstats
path: root/examples/src/main/ruby/Poi4R.i
diff options
context:
space:
mode:
Diffstat (limited to 'examples/src/main/ruby/Poi4R.i')
-rw-r--r--examples/src/main/ruby/Poi4R.i614
1 files changed, 614 insertions, 0 deletions
diff --git a/examples/src/main/ruby/Poi4R.i b/examples/src/main/ruby/Poi4R.i
new file mode 100644
index 0000000000..2f72ce9948
--- /dev/null
+++ b/examples/src/main/ruby/Poi4R.i
@@ -0,0 +1,614 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+%module poi4r
+
+
+%{
+
+#include <gcj/cni.h>
+#include <java/lang/Object.h>
+#include <java/lang/Thread.h>
+#include <java/lang/ThreadGroup.h>
+#include <java/lang/Runnable.h>
+#include <java/lang/String.h>
+#include <java/lang/Throwable.h>
+#include <java/lang/Comparable.h>
+#include <java/lang/Integer.h>
+#include <java/lang/Long.h>
+#include <java/lang/Float.h>
+#include <java/lang/Double.h>
+#include <java/io/StringWriter.h>
+#include <java/io/PrintWriter.h>
+#include <java/util/HashMap.h>
+#include <java/util/Date.h>
+#include <java/util/Calendar.h>
+#include <java/lang/System.h>
+
+#include "org/apache/poi/hssf/usermodel/HSSFWorkbook.h"
+#include "org/apache/poi/hssf/usermodel/HSSFSheet.h"
+#include "org/apache/poi/hssf/usermodel/HSSFRow.h"
+#include "org/apache/poi/hssf/usermodel/HSSFCell.h"
+#include "org/apache/poi/hssf/usermodel/HSSFFont.h"
+#include "org/apache/poi/hssf/usermodel/HSSFCellStyle.h"
+#include "org/apache/poi/hssf/usermodel/HSSFDataFormat.h"
+#include "org/apache/poi/hssf/usermodel/HSSFHeader.h"
+#include "org/apache/poi/hssf/usermodel/HSSFFooter.h"
+#include "org/apache/poi/RubyOutputStream.h"
+
+
+typedef ::org::apache::poi::hssf::usermodel::HSSFWorkbook *jhworkbook;
+typedef ::org::apache::poi::hssf::usermodel::HSSFSheet *jhsheet;
+typedef ::org::apache::poi::hssf::usermodel::HSSFRow *jhrow;
+typedef ::org::apache::poi::hssf::usermodel::HSSFCell *jhcell;
+typedef ::org::apache::poi::hssf::usermodel::HSSFCellStyle *jhcellstyle;
+typedef ::org::apache::poi::hssf::usermodel::HSSFFont *jhfont;
+typedef ::org::apache::poi::hssf::usermodel::HSSFFooter *jhfooter;
+typedef ::org::apache::poi::hssf::usermodel::HSSFHeader *jhheader;
+typedef ::org::apache::poi::hssf::usermodel::HSSFDataFormat *jhdataformat;
+
+typedef ::java::util::Date *jdate;
+typedef ::java::util::Calendar *jcalendar;
+typedef ::java::io::OutputStream *joutputstream;
+typedef ::java::io::InputStream *jinputstream;
+typedef ::java::util::Collection *jstringCollection;
+typedef ::java::util::Collection *jtermCollection;
+typedef ::java::util::Locale *jlocale;
+typedef ::java::lang::Comparable *jcomparable;
+typedef JArray<jobject> *jobjectArray;
+typedef JArray<jstring> *jstringArray;
+
+
+static java::lang::Thread *nextThread;
+static java::util::HashMap *objects;
+
+
+static void store_reference(jobject object) {
+ java::lang::Integer *ji =new java::lang::Integer(java::lang::System::identityHashCode(object));
+ jobject jo = objects->get(ji);
+ if (!jo) {
+ // printf("put object in hash\n");
+ objects->put(ji,object);
+ }
+}
+static VALUE jo2rv(jobject object, swig_type_info *descriptor)
+{
+ if (object == NULL)
+ {
+ return Qnil;
+ }
+ else
+ {
+ return SWIG_NewPointerObj((void *) object, descriptor, 0);
+ }
+}
+static int cvtptr(VALUE value, void **jo, swig_type_info *info)
+{
+ if (SWIG_ConvertPtr(value, jo, info, 0) == 0)
+ return 0;
+ else
+ {
+ return -1;
+ }
+}
+
+static int rv2jo(VALUE rv, jobject *jo, swig_type_info *descriptor)
+{
+ if (NIL_P(rv))
+ *jo = NULL;
+ else
+ {
+ java::lang::Object *javaObj;
+
+ if (cvtptr(rv, (void **) &javaObj, descriptor) == -1)
+ return 0;
+
+ *jo = javaObj;
+ }
+
+ return 1;
+}
+
+
+static jstring r2j(VALUE object)
+{
+ if (NIL_P(object)){
+ return NULL;
+ }
+ else {
+ char *ps = STR2CSTR(object);
+ jstring js = JvNewStringLatin1(ps);
+
+ if (!js)
+ {
+ rb_raise(rb_eRuntimeError, "ruby str cannot be converted to java: %s",ps);
+ }
+
+ return js;
+ }
+}
+
+VALUE j2r(jstring js)
+{
+ if (!js)
+ {
+ return Qnil;
+ }
+ else
+ {
+ jint len = JvGetStringUTFLength(js);
+ char buf[len + 1];
+
+ JvGetStringUTFRegion(js, 0, len, buf);
+ buf[len] = '\0';
+
+ return rb_str_new2(buf);
+ }
+}
+
+static void free_java_obj(void* arg1) {
+ jobject object =(jobject) arg1;
+ java::lang::Integer *ji =new java::lang::Integer(java::lang::System::identityHashCode(object));
+ jobject jo = objects->get(ji);
+ if (jo) {
+ // printf("removed object from hash\n");
+ objects->remove(ji);
+ }
+}
+
+static void raise_ruby_error(java::lang::Throwable *e) {
+ java::io::StringWriter *buffer = new java::io::StringWriter();
+ java::io::PrintWriter *writer = new java::io::PrintWriter(buffer);
+ e->printStackTrace(writer);
+ writer->close();
+ jstring message = buffer->toString();
+ jint len = JvGetStringUTFLength(message);
+ char buf[len + 1];
+ JvGetStringUTFRegion(message, 0, len, buf);
+ buf[len] = '\0';
+ rb_raise(rb_eRuntimeError, "error calling poi \n %s", buf);
+}
+
+%}
+
+typedef long jint;
+typedef long long jlong;
+typedef char jbyte;
+typedef float jfloat;
+typedef float jdouble;
+typedef int jshort;
+typedef bool jboolean;
+
+%typemap(in) SWIGTYPE * {
+
+ if (!rv2jo($input, (jobject *) &$1, $1_descriptor))
+ rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping");
+}
+%typemap(out) SWIGTYPE * {
+
+ $result = jo2rv($1, $1_descriptor);
+}
+
+%typemap(in) org::apache::poi::hssf::usermodel::HSSFWorkbook{
+
+ if (!rv2jo($input, (jobject *) &$1,
+ $descriptor(org::apache::poi::hssf::usermodel::HSSFWorkbook *)))
+ SWIG_fail;
+}
+%typemap(out) org::apache::poi::hssf::usermodel::HSSFWorkbook {
+ $result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFWorkbook *));
+}
+
+%typemap(in) jhsheet{
+
+ if (!rv2jo($input, (jobject *) &$1,
+ $descriptor(org::apache::poi::hssf::usermodel::HSSFSheet *)))
+ SWIG_fail;
+}
+%typemap(out) jhsheet {
+
+ $result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFSheet *));
+}
+%typemap(in) jhrow{
+
+ if (!rv2jo($input, (jobject *) &$1,
+ $descriptor(org::apache::poi::hssf::usermodel::HSSFRow *)))
+ SWIG_fail;
+}
+%typemap(out) jhrow {
+
+ $result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFRow *));
+}
+%typemap(in) jhcell{
+
+ if (!rv2jo($input, (jobject *) &$1,
+ $descriptor(org::apache::poi::hssf::usermodel::HSSFCell *)))
+ SWIG_fail;
+}
+%typemap(out) jhcell {
+
+ $result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFCell *));
+}
+%typemap(in) jhfont{
+
+ if (!rv2jo($input, (jobject *) &$1,
+ $descriptor(org::apache::poi::hssf::usermodel::HSSFFont *)))
+ rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFFont");
+}
+
+%typemap(out) jhfont {
+
+ $result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFFont *));
+}
+
+%typemap(in) jhcellstyle{
+
+ if (!rv2jo($input, (jobject *) &$1,
+ $descriptor(org::apache::poi::hssf::usermodel::HSSFCellStyle *)))
+ rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFCellStyle");
+}
+%typemap(out) jhcellstyle {
+
+ $result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFCellStyle *));
+}
+%typemap(in) jhdataformat{
+
+ if (!rv2jo($input, (jobject *) &$1,
+ $descriptor(org::apache::poi::hssf::usermodel::HSSFDataFormat *)))
+ rb_raise(rb_eRuntimeError, "Unrecoverable error in SWIG typemapping of HSSFDataFormat");
+}
+%typemap(out) jhdataformat {
+
+ $result = jo2rv($1, $descriptor(org::apache::poi::hssf::usermodel::HSSFDataFormat *));
+}
+
+
+%typemap(in) jstring {
+ $1 = r2j($input);
+}
+%typemap(out) jstring {
+ $result = j2r($1);
+}
+%typecheck(SWIG_TYPECHECK_STRING) jstring {
+ $1 = ( NIL_P($input) || TYPE($input)==T_STRING );
+}
+
+%typemap(in) joutputstream {
+
+ jlong ptr;
+ if (!rb_respond_to($input, rb_intern("putc"))) rb_raise(rb_eTypeError,"Expected IO");
+ *(VALUE *) &ptr = (VALUE) $input;
+ $1 = new org::apache::poi::RubyOutputStream(ptr);
+}
+%typemap(in) jcalendar {
+ $1 = java::util::Calendar::getInstance();
+ //$1->setTimeInMillis((long long) NUM2DBL(rb_funcall($input,rb_intern("to_i"),0,NULL))*1000.0);
+ $1->set(FIX2INT(rb_funcall($input,rb_intern("year"),0,NULL)),
+ FIX2INT(rb_funcall($input,rb_intern("mon"),0,NULL))-1,
+ FIX2INT(rb_funcall($input,rb_intern("day"),0,NULL)),
+ FIX2INT(rb_funcall($input,rb_intern("hour"),0,NULL)),
+ FIX2INT(rb_funcall($input,rb_intern("min"),0,NULL)),
+ FIX2INT(rb_funcall($input,rb_intern("sec"),0,NULL))
+ );
+}
+
+%typecheck(SWIG_TYPECHECK_POINTER) jcalendar {
+ $1 = rb_respond_to($input, rb_intern("asctime"));
+}
+
+%typemap(out) jdate {
+ jlong t = ((jdate) $1)->getTime();
+ //TODO: separate seconds and microsecs
+ int ts=t/1000;
+ $result=rb_time_new((time_t) ts, 0 );
+}
+
+
+%freefunc org::apache::poi::hssf::usermodel::HSSFWorkbook "free_java_obj";
+
+%exception {
+ try {
+ $action
+ } catch (java::lang::Throwable *e) {
+ raise_ruby_error(e);
+ }
+}
+%exception org::apache::poi::hssf::usermodel::HSSFWorkbook::HSSFWorkbook {
+ try {
+ $action
+ store_reference(result);
+ } catch (java::lang::Throwable *e) {
+ raise_ruby_error(e);
+ }
+}
+
+
+
+
+namespace java {
+ namespace lang {
+ class Object {
+ jstring toString();
+ };
+%nodefault;
+ class System : public Object {
+ public:
+ static jstring getProperty(jstring);
+ static jstring getProperty(jstring, jstring);
+ static void load(jstring);
+ static void loadLibrary(jstring);
+ static void mapLibraryName(jstring);
+ static void runFinalization();
+ static void setProperty(jstring, jstring);
+ };
+%makedefault;
+ }
+ namespace io {
+%nodefault;
+ class InputStream : public ::java::lang::Object {
+ };
+ class OutputStream : public ::java::lang::Object {
+ };
+
+%makedefault;
+ }
+ namespace util {
+ class Date : public ::java::lang::Object {
+ public:
+ Date();
+ Date(jlong);
+ void setTime(jlong);
+ jstring toString();
+ };
+ }
+}
+
+
+namespace org {
+ namespace apache {
+ namespace poi {
+ namespace hssf {
+ namespace usermodel {
+%nodefault;
+ class HSSFWorkbook : public ::java::lang::Object {
+ public:
+ HSSFWorkbook();
+ jstring getSheetName(jint);
+ jint getNumberOfSheets();
+ void setSheetOrder(jstring,jint);
+ void setSheetName(jint,jstring);
+ void setSheetName(jint,jstring,jshort);
+ jint getSheetIndex(jstring);
+ jhsheet createSheet();
+ jhsheet cloneSheet(jint);
+ jhsheet createSheet(jstring);
+ jhsheet getSheetAt(jint);
+ jhsheet getSheet(jstring);
+ void removeSheetAt(jint);
+ jhcellstyle createCellStyle();
+ jhfont createFont();
+ jhdataformat createDataFormat();
+ void write(joutputstream);
+
+ };
+
+ class HSSFSheet : public ::java::lang::Object {
+ public:
+ jhrow createRow(jint);
+ jhrow getRow(jint);
+ jhfooter getFooter();
+ jhheader getHeader();
+ };
+ class HSSFRow : public ::java::lang::Object {
+ public:
+ jhcell createCell(jshort);
+ jhcell getCell(jshort);
+ //jboolean getProtect(); //only in 2.5
+
+ };
+ class HSSFCell : public ::java::lang::Object {
+ public:
+ void setCellValue(jdouble);
+ void setCellValue(jstring);
+ void setCellValue(jboolean);
+ void setCellValue(jcalendar);
+ void setCellFormula(jstring);
+ jstring getStringCellValue();
+ jdouble getNumericCellValue();
+ jdate getDateCellValue();
+ jstring getCellFormula();
+ jboolean getBooleanCellValue();
+ jint getCellType();
+ jshort getEncoding();
+ void setAsActiveCell();
+
+ void setCellStyle(jhcellstyle);
+ void setEncoding(jshort encoding);
+
+ static const jint CELL_TYPE_BLANK;
+ static const jint CELL_TYPE_BOOLEAN;
+ static const jint CELL_TYPE_ERROR;
+ static const jint CELL_TYPE_FORMULA;
+ static const jint CELL_TYPE_NUMERIC;
+ static const jint CELL_TYPE_STRING;
+
+ static const jshort ENCODING_COMPRESSED_UNICODE;
+ static const jshort ENCODING_UTF_16;
+ };
+ class HSSFCellStyle : public ::java::lang::Object {
+ public:
+ static const jshort ALIGN_CENTER;
+ static const jshort ALIGN_CENTER_SELECTION;
+ static const jshort ALIGN_FILL;
+ static const jshort ALIGN_GENERAL;
+ static const jshort ALIGN_JUSTIFY;
+ static const jshort ALIGN_LEFT;
+ static const jshort ALIGN_RIGHT;
+ static const jshort ALT_BARS;
+ static const jshort BIG_SPOTS;
+ static const jshort BORDER_DASH_DOT;
+ static const jshort BORDER_DASH_DOT_DOT;
+ static const jshort BORDER_DASHED;
+ static const jshort BORDER_DOTTED;
+ static const jshort BORDER_DOUBLE;
+ static const jshort BORDER_HAIR;
+ static const jshort BORDER_MEDIUM;
+ static const jshort BORDER_MEDIUM_DASH_DOT;
+ static const jshort BORDER_MEDIUM_DASH_DOT_DOT;
+ static const jshort BORDER_MEDIUM_DASHED;
+ static const jshort BORDER_NONE;
+ static const jshort BORDER_SLANTED_DASH_DOT;
+ static const jshort BORDER_THICK;
+ static const jshort BORDER_THIN;
+ static const jshort BRICKS;
+ static const jshort DIAMONDS;
+ static const jshort FINE_DOTS;
+ static const jshort NO_FILL;
+ static const jshort SOLID_FOREGROUND;
+ static const jshort SPARSE_DOTS;
+ static const jshort SQUARES;
+ static const jshort THICK_BACKWARD_DIAG;
+ static const jshort THICK_FORWARD_DIAG;
+ static const jshort THICK_HORZ_BANDS;
+ static const jshort THICK_VERT_BANDS;
+ static const jshort THIN_BACKWARD_DIAG;
+ static const jshort THIN_FORWARD_DIAG;
+ static const jshort THIN_HORZ_BANDS;
+ static const jshort THIN_VERT_BANDS;
+ static const jshort VERTICAL_BOTTOM;
+ static const jshort VERTICAL_CENTER;
+ static const jshort VERTICAL_JUSTIFY;
+ static const jshort VERTICAL_TOP;
+
+ jshort getAlignment();
+ jshort getBorderBottom();
+ jshort getBorderLeft();
+ jshort getBorderRight();
+ jshort getBorderTop();
+ jshort getBottomBorderColor();
+ jshort getDataFormat();
+ jshort getFillBackgroundColor();
+ jshort getFillForegroundColor();
+ jshort getFillPattern();
+ jshort getFontIndex();
+ jboolean getHidden();
+ jshort getIndention();
+ jshort getIndex();
+ jshort getLeftBorderColor();
+ jboolean getLocked();
+ jshort getRightBorderColor();
+ jshort getRotation();
+ jshort getTopBorderColor();
+ jshort getVerticalAlignment();
+ jboolean getWrapText();
+ void setAlignment(jshort) ;
+ void setBorderBottom(jshort );
+ void setBorderLeft(jshort );
+ void setBorderRight(jshort );
+ void setBorderTop(jshort );
+ void setBottomBorderColor(jshort );
+ void setDataFormat(jshort );
+ void setFillBackgroundColor(jshort );
+ void setFillForegroundColor(jshort );
+ void setFillPattern(jshort );
+ void setFont(jhfont );
+ void setHidden(jboolean );
+ void setIndention(jshort );
+ void setLeftBorderColor(jshort );
+ void setLocked(jboolean );
+ void setRightBorderColor(jshort );
+ void setRotation(jshort );
+ void setTopBorderColor(jshort );
+ void setVerticalAlignment(jshort );
+ void setWrapText(jboolean );
+ };
+ class HSSFDataFormat : public ::java::lang::Object {
+ public:
+ static jstring getBuiltinFormat(jshort);
+ static jshort getBuiltinFormat(jstring);
+ jstring getFormat(jshort);
+ jshort getFormat(jstring);
+ static jint getNumberOfBuiltinBuiltinFormats();
+ //TODO static jlist getBuiltinFormats();
+
+ };
+ class HSSFFont : public ::java::lang::Object {
+ public:
+ static const jshort BOLDWEIGHT_BOLD;
+static const jshort BOLDWEIGHT_NORMAL;
+static const jshort COLOR_NORMAL;
+static const jshort COLOR_RED;
+static const jstring FONT_ARIAL;
+static const jshort SS_NONE;
+static const jshort SS_SUB;
+static const jshort SS_SUPER;
+static const jshort U_DOUBLE;
+static const jshort U_DOUBLE_ACCOUNTING;
+static const jshort U_NONE;
+static const jshort U_SINGLE;
+static const jshort U_SINGLE_ACCOUNTING;
+
+ jshort getBoldweight();
+ jshort getColor();
+ jshort getFontHeight();
+ jshort getFontHeightInPoints();
+ jstring getFontName();
+ jshort getIndex();
+ jboolean getItalic();
+ jboolean getStrikeout();
+ jshort getTypeOffset();
+ jshort getUnderline();
+ void setBoldweight(jshort );
+ void setColor(jshort );
+ void setFontHeight(jshort );
+ void setFontHeightInPoints(jshort );
+ void setFontName(jstring );
+ void setItalic(jboolean );
+ void setStrikeout(jboolean );
+ void setTypeOffset(jshort );
+ void setUnderline(jshort );
+};
+%makedefault;
+ }
+ }
+ }
+ }
+}
+
+
+
+
+
+%init %{
+
+ JvCreateJavaVM(NULL);
+ JvAttachCurrentThread(NULL, NULL);
+
+ nextThread = new java::lang::Thread();
+ objects = new java::util::HashMap();
+
+ java::util::HashMap *props = (java::util::HashMap *)
+ java::lang::System::getProperties();
+ props->put(JvNewStringUTF("inRuby"), objects);
+
+ JvInitClass(&org::apache::poi::hssf::usermodel::HSSFFont::class$);
+ JvInitClass(&org::apache::poi::hssf::usermodel::HSSFCell::class$);
+ JvInitClass(&org::apache::poi::hssf::usermodel::HSSFSheet::class$);
+ JvInitClass(&org::apache::poi::hssf::usermodel::HSSFCellStyle::class$);
+
+%}
+