package org.perl.inline.java ;
import java.util.* ;
import java.io.* ;
public class InlineJavaHandle {
private static final String charset = "ISO-8859-1" ;
static String read(Object o, int len) throws InlineJavaException, IOException {
String ret = null ;
if (InlineJavaClass.ClassIsReadHandle(o.getClass())){
if (o instanceof java.io.Reader){
char buf[] = new char[len] ;
int rc = ((java.io.Reader)o).read(buf) ;
if (rc != -1){
ret = new String(buf) ;
}
}
else {
byte buf[] = new byte[len] ;
int rc = ((java.io.InputStream)o).read(buf) ;
if (rc != -1){
ret = new String(buf, charset) ;
}
}
}
else {
throw new InlineJavaException("Can't read from non-readhandle object (" + o.getClass().getName() + ")") ;
}
return ret ;
}
static String readLine(Object o) throws InlineJavaException, IOException {
String ret = null ;
if (InlineJavaClass.ClassIsReadHandle(o.getClass())){
if (o instanceof java.io.BufferedReader){
ret = ((java.io.BufferedReader)o).readLine() ;
}
else {
throw new InlineJavaException("Can't read line from non-buffered Reader or InputStream") ;
}
}
else {
throw new InlineJavaException("Can't read line from non-readhandle object (" + o.getClass().getName() + ")") ;
}
return ret ;
}
static Object makeBuffered(Object o) throws InlineJavaException, IOException {
Object ret = null ;
if (InlineJavaClass.ClassIsReadHandle(o.getClass())){
if (o instanceof java.io.BufferedReader){
ret = (java.io.BufferedReader)o ;
}
else if (o instanceof java.io.Reader){
ret = new BufferedReader((java.io.Reader)o) ;
}
else {
ret = new BufferedReader(new InputStreamReader((java.io.InputStream)o, charset)) ;
}
}
else if (InlineJavaClass.ClassIsWriteHandle(o.getClass())){
if (o instanceof java.io.BufferedWriter){
ret = (java.io.BufferedWriter)o ;
}
else if (o instanceof java.io.Writer){
ret = new BufferedWriter((java.io.Writer)o) ;
}
else {
ret = new BufferedWriter(new OutputStreamWriter((java.io.OutputStream)o, charset)) ;
}
}
else {
throw new InlineJavaException("Can't make non-handle object buffered (" + o.getClass().getName() + ")") ;
}
return ret ;
}
static int write(Object o, String str) throws InlineJavaException, IOException {
int ret = -1 ;
if (InlineJavaClass.ClassIsWriteHandle(o.getClass())){
if (o instanceof java.io.Writer){
((java.io.Writer)o).write(str) ;
ret = str.length() ;
}
else {
byte b[] = str.getBytes(charset) ;
((java.io.OutputStream)o).write(b) ;
ret = b.length ;
}
}
else {
throw new InlineJavaException("Can't write to non-writehandle object (" + o.getClass().getName() + ")") ;
}
return ret ;
}
static void close(Object o) throws InlineJavaException, IOException {
if (InlineJavaClass.ClassIsReadHandle(o.getClass())){
if (o instanceof java.io.Reader){
((java.io.Reader)o).close() ;
}
else {
((java.io.InputStream)o).close() ;
}
}
else if (InlineJavaClass.ClassIsWriteHandle(o.getClass())){
if (o instanceof java.io.Writer){
((java.io.Writer)o).close() ;
}
else {
((java.io.OutputStream)o).close() ;
}
}
else {
throw new InlineJavaException("Can't close non-handle object (" + o.getClass().getName() + ")") ;
}
}
}