mirror of https://github.com/apache/poi.git
Ruby Bindings for POI - initial checkin
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353634 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2c0bd05c9b
commit
083ea96601
|
@ -0,0 +1,316 @@
|
||||||
|
#Adapted from the Makefile for PyLucene, by the OSAF
|
||||||
|
# Makefile for building Poi4R
|
||||||
|
#
|
||||||
|
# Supported operating systems: Linux, Mac OS X and Windows.
|
||||||
|
# See INSTALL file for requirements.
|
||||||
|
#
|
||||||
|
# Steps to build
|
||||||
|
# 1. Edit the sections below as documented
|
||||||
|
# 2. make all
|
||||||
|
# 3. make install
|
||||||
|
#
|
||||||
|
# The install target installs the Poi4R python extension in python's
|
||||||
|
# site-packages directory. On Mac OS X, it also installs the gcj runtime
|
||||||
|
# libraries into $(PREFIX)/lib.
|
||||||
|
#
|
||||||
|
# To successfully import the Poi4R extension into Ruby, all required
|
||||||
|
# libraries need to be found. If the locations you chose are non-standard,
|
||||||
|
# the relevant DYLD_LIBRARY_PATH (Mac OS X), LD_LIBRARY_PATH (Linux), or
|
||||||
|
# PATH (Windows) need to be set accordingly.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
VERSION=0.1.0
|
||||||
|
POI_VER=2.0-final-20040126
|
||||||
|
RUBY_VER=1.8
|
||||||
|
|
||||||
|
POI4R:=$(shell pwd)
|
||||||
|
POI=$(POI4R)/poi-$(POI_VER)
|
||||||
|
#DEBUG=1
|
||||||
|
|
||||||
|
#
|
||||||
|
# You need to uncomment and edit the variables below in the section
|
||||||
|
# corresponding to your operating system.
|
||||||
|
#
|
||||||
|
# PREFIX: where programs are normally installed on your system (Unix).
|
||||||
|
# PREFIX_RUBY: where your version of python is installed.
|
||||||
|
# GCJ_HOME: where GCC/GCJ is installed.
|
||||||
|
# Windows drive-absolute paths need to be expressed cygwin style.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Mac OS X (Darwin)
|
||||||
|
#PREFIX=/usr/local
|
||||||
|
#PREFIX_RUBY=/Library/Frameworks/Ruby.framework/Versions/$(RUBY_VER)
|
||||||
|
#SWIG=$(PREFIX)/bin/swig
|
||||||
|
#GCJ_HOME=/usr/local/gcc-3.4.1
|
||||||
|
#DB=$(POI4R)/db-$(DB_VER)
|
||||||
|
#PREFIX_DB=/usr/local/BerkeleyDB.$(DB_LIB_VER)
|
||||||
|
|
||||||
|
# Linux
|
||||||
|
PREFIX=/usr
|
||||||
|
PREFIX_RUBY=$(PREFIX)
|
||||||
|
SWIG=$(PREFIX)/bin/swig
|
||||||
|
GCJ_HOME=/usr
|
||||||
|
#DB=$(POI4R)/db-$(DB_VER)
|
||||||
|
#PREFIX_DB=$(PREFIX)/BerkeleyDB.$(DB_LIB_VER)
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
#PREFIX_RUBY=/cygdrive/o/Python-2.3.2
|
||||||
|
#SWIG=/cygdrive/c/utils/bin/swig.exe
|
||||||
|
#GCJ_HOME=/cygdrive/o/mingw-3.1
|
||||||
|
#DB=/cygdrive/o/db-$(DB_VER)
|
||||||
|
#PREFIX_DB=$(DB)
|
||||||
|
|
||||||
|
#
|
||||||
|
# No edits required below
|
||||||
|
#
|
||||||
|
|
||||||
|
OS=$(shell uname)
|
||||||
|
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
|
||||||
|
OS=Cygwin
|
||||||
|
endif
|
||||||
|
ifeq ($(findstring WINNT,$(OS)),WINNT)
|
||||||
|
OS=Cygwin
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
COMP_OPT=DEBUG=1
|
||||||
|
SUFFIX=d
|
||||||
|
_SUFFIX=_d
|
||||||
|
BINDIR=debug
|
||||||
|
else
|
||||||
|
COMP_OPT=
|
||||||
|
SUFFIX=
|
||||||
|
_SUFFIX=
|
||||||
|
BINDIR=release
|
||||||
|
endif
|
||||||
|
|
||||||
|
SWIG_OPT=-DSWIG_COBJECT_TYPES -DPOI4R_VER="'$(VERSION)'" -DPOI_VER="'$(POI_VER)'"
|
||||||
|
|
||||||
|
JCCFLAGS=--encoding=UTF-8
|
||||||
|
#JCCFLAGS=--encoding=UTF-8 -findirect-dispatch
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)/site-packages
|
||||||
|
RUBY_INC=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)
|
||||||
|
POI4R=$(BINDIR)/poi4r.so
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
CCFLAGS=-O0 -g
|
||||||
|
LDFLAGS=-g
|
||||||
|
else
|
||||||
|
CCFLAGS=-O2
|
||||||
|
LDFLAGS=
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby/site-ruby/$(RUBY_VER)/
|
||||||
|
RUBY_INC=$(PREFIX_RUBY)/lib/ruby/$(RUBY_VER)/i686-linux
|
||||||
|
POI4R_LIB=$(BINDIR)/poi4r.so
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
CCFLAGS=-O0 -g -fPIC
|
||||||
|
LDFLAGS=-g
|
||||||
|
else
|
||||||
|
CCFLAGS=-O2 -fPIC
|
||||||
|
LDFLAGS=
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
RUBY_SITE=`cygpath -aw $(PREFIX_RUBY)/Lib/site-packages`
|
||||||
|
RUBY_INC=`cygpath -aw $(PREFIX_RUBY)/Include`
|
||||||
|
RUBY_PC=`cygpath -aw $(PREFIX_RUBY)/PC`
|
||||||
|
POI4R_LIB=$(BINDIR)/poi4r$(_SUFFIX).so
|
||||||
|
ifeq ($(DEBUG),1)
|
||||||
|
CCFLAGS=-O -g
|
||||||
|
LDFLAGS=-g
|
||||||
|
else
|
||||||
|
CCFLAGS=-O2
|
||||||
|
LDFLAGS=
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
|
||||||
|
RUBY=unknown
|
||||||
|
RUBY_SITE=unknown
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
CLASSES=$(BINDIR)/classes
|
||||||
|
JAR_CLASSES=$(CLASSES)/jar
|
||||||
|
|
||||||
|
CC=$(GCJ_HOME)/bin/gcc
|
||||||
|
CXX=$(GCJ_HOME)/bin/g++
|
||||||
|
JCC=$(GCJ_HOME)/bin/gcj
|
||||||
|
JCCH=$(GCJ_HOME)/bin/gcjh
|
||||||
|
JAR=$(GCJ_HOME)/bin/jar
|
||||||
|
POI_ZIP=poi-$(POI_VER).jar
|
||||||
|
POI_JAR=poi-$(POI_VER).jar
|
||||||
|
|
||||||
|
POI4R_CP:=$(BINDIR)/$(POI_JAR):$(CLASSES)
|
||||||
|
|
||||||
|
OBJS=$(BINDIR)/poi.o $(BINDIR)/io.java.o $(BINDIR)/io.cpp.o
|
||||||
|
|
||||||
|
LIBS=$(POI4R_LIB)
|
||||||
|
|
||||||
|
default: all
|
||||||
|
|
||||||
|
patches:
|
||||||
|
|
||||||
|
|
||||||
|
env:
|
||||||
|
ifndef PREFIX_RUBY
|
||||||
|
@echo Operating system is $(OS)
|
||||||
|
@echo You need to edit that section of the Makefile
|
||||||
|
@false
|
||||||
|
else
|
||||||
|
@true
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
$(BINDIR):
|
||||||
|
mkdir -p $(BINDIR)/classes/jar
|
||||||
|
|
||||||
|
|
||||||
|
DISTRIB=Poi-$(VERSION)
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
POI4R_CP:=`cygpath -awp $(POI4R_CP)`
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
_poi=`cygpath -aw $(POI)`
|
||||||
|
else
|
||||||
|
_poi=$(POI)
|
||||||
|
endif
|
||||||
|
|
||||||
|
$(BINDIR)/$(POI_JAR):
|
||||||
|
cp $(POI4R)/$(POI_JAR) $(BINDIR)/$(POI_JAR)
|
||||||
|
cd $(JAR_CLASSES); $(JAR) -xf $(POI4R)/$(POI_JAR)
|
||||||
|
|
||||||
|
$(BINDIR)/io.java.o: java/org/apache/poi/RubyOutputStream.java
|
||||||
|
$(JCC) $(JCCFLAGS) -C -d $(CLASSES) java/org/apache/poi/RubyOutputStream.java
|
||||||
|
$(JCC) $(JCCFLAGS) $(CCFLAGS) -I$(GCJ_HOME)/include -c -o $@ java/org/apache/poi/RubyOutputStream.java
|
||||||
|
|
||||||
|
$(CLASSES)/org/apache/poi/RubyOutputStream.h: $(BINDIR)/io.java.o Makefile
|
||||||
|
mkdir -p $(CLASSES)/org/apache/poi/hssf/usermodel
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFWorkbook
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFSheet
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFRow
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCell
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFHeader
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFooter
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFont
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFDataFormat
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCellStyle
|
||||||
|
$(JCCH) -d $(CLASSES) --classpath=$(CLASSES) org.apache.poi.RubyOutputStream
|
||||||
|
|
||||||
|
|
||||||
|
$(BINDIR)/io.cpp.o: $(CLASSES)/org/apache/poi/RubyOutputStream.h cpp/RubyIO.cpp $(BINDIR)/io.java.o
|
||||||
|
$(JCC) -I$(RUBY_INC) -I$(GCJ_HOME)/include -I$(CLASSES) $(CCFLAGS) -c -o $@ cpp/RubyIO.cpp
|
||||||
|
|
||||||
|
$(BINDIR)/poi.o: $(BINDIR)/$(POI_JAR)
|
||||||
|
$(JCC) $(JCCFLAGS) $(CCFLAGS) -c -o $@ $(BINDIR)/$(POI_JAR)
|
||||||
|
|
||||||
|
Poi4R_wrap.cxx: $(BINDIR)/io.cpp.o Poi4R.i
|
||||||
|
ifdef SWIG
|
||||||
|
$(SWIG) $(SWIG_OPT) -I$(CLASSES) -c++ -ruby Poi4R.i
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||||
|
$(CXX) -shared -bundle -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(GCJ_HOME)/include -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -L$(GCJ_HOME)/lib -lgcj -liconv -undefined suppress -flat_namespace -multiply_defined suppress
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||||
|
$(CXX) -shared -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -lgcj
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
||||||
|
$(CXX) -c $(CCFLAGS) $(PYDBG) -D_NO_OLDNAMES -D_off_t=off_t $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_PC) -I$(RUBY_INC) -o $(BINDIR)/Poi4R_wrap.o Poi4R_wrap.cxx
|
||||||
|
$(CXX) -shared $(LDFLAGS) -o $@ $(OBJS) `cygpath -aw $(PREFIX_RUBY)/python23$(_SUFFIX).dll` $(BINDIR)/Poi4R_wrap.o -lgcj -lwin32k -lws2_32
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
all: env $(BINDIR) $(LIBS)
|
||||||
|
@echo build of $(POI4R_LIB) complete
|
||||||
|
|
||||||
|
install:: all
|
||||||
|
install Poi4R.rb $(RUBY_SITE)
|
||||||
|
install $(POI4R_LIB) $(RUBY_SITE)
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
install::
|
||||||
|
install $(GCJ_HOME)/lib/libgcj.5.dylib $(PREFIX)/lib
|
||||||
|
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(PREFIX)/lib
|
||||||
|
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(PREFIX)/lib
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
install::
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
install::
|
||||||
|
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BINDIR) Poi4R.rb* Poi4R_wrap.cxx
|
||||||
|
|
||||||
|
realclean: clean
|
||||||
|
rm -rf $(POI) $(STORE) $(DISTRIB)
|
||||||
|
|
||||||
|
distrib::
|
||||||
|
mkdir -p $(DISTRIB)/python
|
||||||
|
install Poi4R.rb $(DISTRIB)/python
|
||||||
|
install $(POI4R_LIB) $(DISTRIB)/python
|
||||||
|
install README $(DISTRIB)
|
||||||
|
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
distrib::
|
||||||
|
ifdef DB
|
||||||
|
mkdir -p $(DISTRIB)/db
|
||||||
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||||
|
install libdb_java-$(DB_LIB_VER).la.osx $(DISTRIB)/db
|
||||||
|
endif
|
||||||
|
mkdir -p $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcj.5.dylib $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(DISTRIB)/gcj
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Linux)
|
||||||
|
distrib::
|
||||||
|
ifdef DB
|
||||||
|
mkdir -p $(DISTRIB)/db
|
||||||
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||||
|
endif
|
||||||
|
mkdir -p $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcj.so.5 $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libstdc++.so.6 $(DISTRIB)/gcj
|
||||||
|
install $(GCJ_HOME)/lib/libgcc_s.so.1 $(DISTRIB)/gcj
|
||||||
|
else
|
||||||
|
|
||||||
|
ifeq ($(OS),Cygwin)
|
||||||
|
distrib::
|
||||||
|
ifdef DB
|
||||||
|
mkdir -p $(DISTRIB)/db
|
||||||
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
|
@ -0,0 +1,613 @@
|
||||||
|
/* ====================================================================
|
||||||
|
Copyright 2005 Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed 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/Hashtable.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::Hashtable *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::Hashtable();
|
||||||
|
|
||||||
|
java::util::Hashtable *props = (java::util::Hashtable *)
|
||||||
|
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$);
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/* ====================================================================
|
||||||
|
Copyright 2005 Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed 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.
|
||||||
|
==================================================================== */
|
||||||
|
#include <gcj/cni.h>
|
||||||
|
|
||||||
|
#include "ruby.h"
|
||||||
|
#include "org/apache/poi/RubyOutputStream.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The native functions declared in org.apache.poi.RubyoutputStream
|
||||||
|
*
|
||||||
|
* @author aviks
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace org {
|
||||||
|
namespace apache {
|
||||||
|
namespace poi {
|
||||||
|
|
||||||
|
void RubyOutputStream::close(void)
|
||||||
|
{
|
||||||
|
rb_funcall3((VALUE ) rubyIO, rb_intern("close"), 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void RubyOutputStream::write(jint toWrite)
|
||||||
|
{
|
||||||
|
rb_funcall((VALUE ) rubyIO, rb_intern("putc"),1,INT2FIX(toWrite));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* ====================================================================
|
||||||
|
Copyright 2005 Apache Software Foundation
|
||||||
|
|
||||||
|
Licensed 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.
|
||||||
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.poi;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author aviks
|
||||||
|
* Wrap a java.io.OutputStream around a Ruby IO object
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class RubyOutputStream extends OutputStream {
|
||||||
|
|
||||||
|
//pointer to native ruby VALUE
|
||||||
|
protected long rubyIO;
|
||||||
|
|
||||||
|
public RubyOutputStream (long rubyIO)
|
||||||
|
{
|
||||||
|
this.rubyIO = rubyIO;
|
||||||
|
// incRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void finalize()
|
||||||
|
throws Throwable
|
||||||
|
{
|
||||||
|
// decRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
// protected native void incRef();
|
||||||
|
// protected native void decRef();
|
||||||
|
|
||||||
|
public native void close()
|
||||||
|
throws IOException;
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.io.OutputStream#write(int)
|
||||||
|
*/
|
||||||
|
public native void write(int arg0) throws IOException;
|
||||||
|
}
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,83 @@
|
||||||
|
require 'test/unit'
|
||||||
|
require 'release/poi4r'
|
||||||
|
|
||||||
|
class TC_base_tests < Test::Unit::TestCase
|
||||||
|
|
||||||
|
def setup()
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_get_constant
|
||||||
|
h=Poi4r::HSSFWorkbook.new
|
||||||
|
s=h.createSheet("Sheet1")
|
||||||
|
r=s.createRow(0)
|
||||||
|
c=r.createCell(0)
|
||||||
|
assert_equal(3,Poi4r::HSSFCell.CELL_TYPE_BLANK,"Constant CELL_TYPE_BLANK")
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_base
|
||||||
|
system("rm test.xls")
|
||||||
|
h=Poi4r::HSSFWorkbook.new
|
||||||
|
|
||||||
|
#Test Sheet Creation
|
||||||
|
s=h.createSheet("Sheet1")
|
||||||
|
s=h.createSheet("Sheet2")
|
||||||
|
assert_equal(2,h.getNumberOfSheets(),"Number of sheets is 2")
|
||||||
|
|
||||||
|
#Test setting cell values
|
||||||
|
s=h.getSheetAt(0)
|
||||||
|
r=s.createRow(0)
|
||||||
|
c=r.createCell(0)
|
||||||
|
c.setCellValue(1.5)
|
||||||
|
assert_equal(c.getNumericCellValue(),1.5,"Numeric Cell Value")
|
||||||
|
c=r.createCell(1)
|
||||||
|
c.setCellValue("Ruby")
|
||||||
|
assert_equal(c.getStringCellValue(),"Ruby","String Cell Value")
|
||||||
|
#Test error handling
|
||||||
|
assert_raise (RuntimeError) {c.getNumericCellValue()}
|
||||||
|
|
||||||
|
#Test styles
|
||||||
|
st = h.createCellStyle()
|
||||||
|
c=r.createCell(2)
|
||||||
|
st.setAlignment(Poi4r::HSSFCellStyle.ALIGN_CENTER)
|
||||||
|
c.setCellStyle(st)
|
||||||
|
c.setCellValue("centr'd")
|
||||||
|
|
||||||
|
#Date handling
|
||||||
|
c=r.createCell(3)
|
||||||
|
t1=Time.now
|
||||||
|
c.setCellValue(Time.now)
|
||||||
|
t2= c.getDateCellValue().gmtime
|
||||||
|
assert_equal(t1.year,t2.year,"year")
|
||||||
|
assert_equal(t1.mon,t2.mon,"month")
|
||||||
|
assert_equal(t1.day,t2.day,"day")
|
||||||
|
assert_equal(t1.hour,t2.hour,"hour")
|
||||||
|
assert_equal(t1.min,t2.min,"min")
|
||||||
|
assert_equal(t1.sec,t2.sec,"sec")
|
||||||
|
st=h.createCellStyle();
|
||||||
|
st.setDataFormat(Poi4r::HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"))
|
||||||
|
c.setCellStyle(st)
|
||||||
|
|
||||||
|
#Fonts
|
||||||
|
c=r.createCell(4)
|
||||||
|
font = h.createFont();
|
||||||
|
font.setFontHeightInPoints(24);
|
||||||
|
font.setFontName("Courier New");
|
||||||
|
font.setItalic(true);
|
||||||
|
font.setStrikeout(true);
|
||||||
|
style = h.createCellStyle();
|
||||||
|
style.setFont(font);
|
||||||
|
c.setCellValue("This is a test of fonts");
|
||||||
|
c.setCellStyle(style);
|
||||||
|
|
||||||
|
#Formulas
|
||||||
|
c=r.createCell(5)
|
||||||
|
c.setCellFormula("A1*2")
|
||||||
|
assert_equal("A1*2",c.getCellFormula,"formula")
|
||||||
|
|
||||||
|
#Test writing
|
||||||
|
h.write(File.new("test.xls","w"))
|
||||||
|
assert_nothing_raised {File.new("test.xls","r")}
|
||||||
|
#h.write(0.1)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,15 @@
|
||||||
|
require 'test/unit'
|
||||||
|
require 'release/poi4r'
|
||||||
|
|
||||||
|
class TC_gc < Test::Unit::TestCase
|
||||||
|
def test_premature_collection
|
||||||
|
h=Poi4r::HSSFWorkbook.new
|
||||||
|
h.createSheet("Sheet1");
|
||||||
|
5000.times do
|
||||||
|
hh=Poi4r::HSSFWorkbook.new
|
||||||
|
GC.start()
|
||||||
|
end
|
||||||
|
assert_equal(1,h.getNumberOfSheets(),"Number of sheets")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
require 'test/unit'
|
||||||
|
require 'tests/tc_base_tests'
|
||||||
|
require 'tests/tc_gc'
|
Loading…
Reference in New Issue