diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java index cc80f9cd97..cae84b3d74 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/apps/form/WFileImport.java @@ -26,6 +26,8 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.PipedReader; +import java.io.Reader; import java.io.StringBufferInputStream; import java.nio.charset.Charset; import java.sql.PreparedStatement; @@ -44,6 +46,7 @@ import org.adempiere.webui.component.Textbox; import org.adempiere.webui.component.VerticalBox; import org.adempiere.webui.panel.ADForm; import org.adempiere.webui.session.SessionManager; +import org.adempiere.webui.util.ReaderInputStream; import org.adempiere.webui.window.FDialog; import org.compiere.impexp.ImpFormat; import org.compiere.impexp.ImpFormatRow; @@ -96,7 +99,7 @@ public class WFileImport extends ADForm implements EventListener private Button bPrevious = new Button(); private InputStream m_file_istream; - + private Textbox rawData = new Textbox(); private Textbox[] m_fields; @@ -200,7 +203,7 @@ public class WFileImport extends ADForm implements EventListener previewPanel.setWidth("100%"); - //rawDataPane.appendChild(rawData); + centerPanel.setWidth("100%"); // Elaine 2008/11/07 - fix text area is not expanded in IE7 centerPanel.appendChild(rawData); centerPanel.appendChild(new Separator()); centerPanel.appendChild(previewPanel); @@ -342,20 +345,13 @@ public class WFileImport extends ADForm implements EventListener e.printStackTrace(); } - //JFileChooser chooser = new JFileChooser(directory); - //chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - //chooser.setMultiSelectionEnabled(false); - //chooser.setDialogTitle(Msg.getMsg(Env.getCtx(), "FileImportFileInfo")); - //if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) - // return; - if (media == null) return; - if (Env.isWindows()) - m_file_istream = new ByteArrayInputStream(media.getByteData()); + if (media.isBinary()) + m_file_istream = media.getStreamData(); else - m_file_istream = new StringBufferInputStream(media.getStringData()); + m_file_istream = new ReaderInputStream(media.getReaderData()); log.config(media.getName()); bFile.setLabel(media.getName()); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java index 214e585e41..98d439b247 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java @@ -66,6 +66,11 @@ public class UserPanel extends Vbox implements EventListener { this.setStyle("text-align:right"); + // Elaine 2008/11/07 - fix the layout problem in IE7 + this.setWidth("100%"); + this.setAlign("right"); + // + lblUserNameValue.setValue(getUserName() + "@" + getClientName() + "." + getOrgName()); lblUserNameValue.setStyle("text-align:right"); LayoutUtils.addSclass("headerFont", lblUserNameValue); diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/util/ReaderInputStream.java b/zkwebui/WEB-INF/src/org/adempiere/webui/util/ReaderInputStream.java new file mode 100644 index 0000000000..985c91b102 --- /dev/null +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/util/ReaderInputStream.java @@ -0,0 +1,204 @@ +/* + * 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. + * + */ +package org.adempiere.webui.util; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; + +/** + * Adapted from org.apache.tools.ant.util.ReaderInputStream. + * + */ +public class ReaderInputStream extends InputStream { + private static final int BYTE_MASK = 0xFF; + + /** Source Reader */ + private Reader in; + + private String encoding = System.getProperty("file.encoding"); + + private byte[] slack; + + private int begin; + + /** + * Construct a ReaderInputStream + * for the specified Reader. + * + * @param reader Reader. Must not be null. + */ + public ReaderInputStream(Reader reader) { + in = reader; + } + + /** + * Construct a ReaderInputStream + * for the specified Reader, + * with the specified encoding. + * + * @param reader non-null Reader. + * @param encoding non-null String encoding. + */ + public ReaderInputStream(Reader reader, String encoding) { + this(reader); + if (encoding == null) { + throw new IllegalArgumentException("encoding must not be null"); + } else { + this.encoding = encoding; + } + } + + /** + * Reads from the Reader, returning the same value. + * + * @return the value of the next character in the Reader. + * + * @exception IOException if the original Reader fails to be read + */ + public synchronized int read() throws IOException { + if (in == null) { + throw new IOException("Stream Closed"); + } + + byte result; + if (slack != null && begin < slack.length) { + result = slack[begin]; + if (++begin == slack.length) { + slack = null; + } + } else { + byte[] buf = new byte[1]; + if (read(buf, 0, 1) <= 0) { + return -1; + } else { + result = buf[0]; + } + } + return result & BYTE_MASK; + } + + /** + * Reads from the Reader into a byte array + * + * @param b the byte array to read into + * @param off the offset in the byte array + * @param len the length in the byte array to fill + * @return the actual number read into the byte array, -1 at + * the end of the stream + * @exception IOException if an error occurs + */ + public synchronized int read(byte[] b, int off, int len) + throws IOException { + if (in == null) { + throw new IOException("Stream Closed"); + } + if (len == 0) { + return 0; + } + while (slack == null) { + char[] buf = new char[len]; // might read too much + int n = in.read(buf); + if (n == -1) { + return -1; + } + if (n > 0) { + slack = new String(buf, 0, n).getBytes(encoding); + begin = 0; + } + } + + if (len > slack.length - begin) { + len = slack.length - begin; + } + + System.arraycopy(slack, begin, b, off, len); + + begin += len; + if (begin >= slack.length) { + slack = null; + } + + return len; + } + + /** + * Marks the read limit of the Reader. + * + * @param limit the maximum limit of bytes that can be read before the + * mark position becomes invalid + */ + public synchronized void mark(final int limit) { + try { + in.mark(limit); + } catch (IOException ioe) { + throw new RuntimeException(ioe.getMessage()); + } + } + + + /** + * @return the current number of bytes ready for reading + * @exception IOException if an error occurs + */ + public synchronized int available() throws IOException { + if (in == null) { + throw new IOException("Stream Closed"); + } + if (slack != null) { + return slack.length - begin; + } + if (in.ready()) { + return 1; + } + return 0; + } + + /** + * @return false - mark is not supported + */ + public boolean markSupported () { + return false; // would be imprecise + } + + /** + * Resets the Reader. + * + * @exception IOException if the Reader fails to be reset + */ + public synchronized void reset() throws IOException { + if (in == null) { + throw new IOException("Stream Closed"); + } + slack = null; + in.reset(); + } + + /** + * Closes the Reader. + * + * @exception IOException if the original Reader fails to be closed + */ + public synchronized void close() throws IOException { + if (in != null) { + in.close(); + slack = null; + in = null; + } + } +}