KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openbravo > base > MultipartRequest


1 /*
2  ************************************************************************************
3  * Copyright (C) 2001-2006 Openbravo S.L.
4  * Licensed under the Apache Software License version 2.0
5  * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6  * Unless required by applicable law or agreed to in writing, software distributed
7  * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
8  * CONDITIONS OF ANY KIND, either express or implied. See the License for the
9  * specific language governing permissions and limitations under the License.
10  ************************************************************************************
11 */

12 package org.openbravo.base;
13
14 import java.io.*;
15 import java.util.*;
16 import org.apache.commons.fileupload.FileItem;
17 import org.openbravo.data.*;
18
19 public class MultipartRequest implements FieldProvider {
20   public VariablesBase vars;
21   public String JavaDoc filename;
22   public boolean firstRowHeads=false;
23   public String JavaDoc format = "C";
24   public Vector<Object JavaDoc> vector = new Vector<Object JavaDoc>();
25   public FieldProvider[] rows;
26
27   FieldProvider objectFieldProvider[];
28
29   public MultipartRequest() {
30   }
31
32   public MultipartRequest(VariablesBase vars, String JavaDoc filename, boolean firstLineHeads, String JavaDoc format, FieldProvider[] data) throws IOException {
33     init(vars, filename, firstLineHeads, format, data);
34     readSubmittedFile();
35   }
36
37   public String JavaDoc getField(String JavaDoc index) {
38     int i = Integer.valueOf(index).intValue();
39     if (i>=vector.size()) return null;
40     return ((String JavaDoc)vector.elementAt(i));
41   }
42
43   public void addField(String JavaDoc value) {
44     if (vector==null) vector = new Vector<Object JavaDoc>();
45     vector.addElement(value);
46   }
47
48   private String JavaDoc setFormatSeparator(String JavaDoc _format) {
49     if (_format.equalsIgnoreCase("F")) return("FIXED");
50     else if (_format.equalsIgnoreCase("T")) return("\t");
51     else if (_format.equalsIgnoreCase("S")) return(";");
52     else if (_format.equalsIgnoreCase("P")) return("+");
53     else if (_format.equalsIgnoreCase("C")) return(",");
54     else return("");
55   }
56
57   public FieldProvider[] getFieldProvider() {
58     return objectFieldProvider;
59   }
60
61   public FieldProvider setFieldProvider(String JavaDoc linea) {
62     if (format.equalsIgnoreCase("FIXED")) return lineFixedSize(linea);
63     else if (format.equals("")) return lineComplete(linea);
64     else return lineSeparatorFormated(linea);
65   }
66
67   public void init(VariablesBase vars, String JavaDoc filename, boolean firstLineHeads, String JavaDoc format, FieldProvider[] data) throws IOException {
68     if (vars==null) throw new IllegalArgumentException JavaDoc("VariablesBase cannot be null");
69     if (filename==null || filename.equals("")) throw new IllegalArgumentException JavaDoc("filename cannot be null");
70     this.vars = vars;
71     this.filename = filename;
72     this.firstRowHeads = firstLineHeads;
73     this.format = setFormatSeparator(format);
74     this.rows = data;
75   }
76
77   public FieldProvider lineFixedSize(String JavaDoc linea) {
78     if (linea == null || linea.length() < 1) return null;
79     MultipartRequest data = new MultipartRequest();
80     if (rows==null || rows.length==0) data.addField(linea);
81     else {
82       for (int i=0;i<rows.length;i++) {
83         int init = Integer.valueOf(rows[i].getField("startno")).intValue();
84         int end = Integer.valueOf(rows[i].getField("endno")).intValue();
85         if (init>linea.length()) {
86           data.addField("");
87         } else {
88           if (init<0) init = 0;
89           if (end<0 || end<init) end=init;
90           else if (end>linea.length()) end = linea.length();
91           String JavaDoc actual = linea.substring(init, end);
92           data.addField(actual);
93         }
94       }
95     }
96     return data;
97   }
98
99   public FieldProvider lineSeparatorFormated(String JavaDoc linea) {
100     return null;
101   }
102
103   public FieldProvider lineComplete(String JavaDoc linea) {
104     if (linea == null || linea.length() < 1) return null;
105     MultipartRequest data = new MultipartRequest();
106     data.addField(linea);
107     return data;
108   }
109
110
111   protected void readSubmittedFile() throws IOException {
112     FileItem fi = vars.getMultiFile(filename);
113     if (fi==null) throw new IOException("Invalid filename: " + filename);
114     InputStream in = fi.getInputStream();
115     if (in==null) throw new IOException("Corrupted filename: " + filename);
116
117     Vector<FieldProvider> vector = new Vector<FieldProvider>();
118     int result = 0;
119     String JavaDoc linea = "";
120     Vector<Byte JavaDoc> vectorInt = new Vector<Byte JavaDoc>();
121     boolean isFirstRow = true;
122     while ((result = in.read()) != -1) {
123       if (result==13 || result==10) {
124         if (vectorInt.size()>0) {
125           byte[] b = new byte[vectorInt.size()];
126           for (int i=0;i<vectorInt.size();i++) {
127             Byte JavaDoc bAux = vectorInt.elementAt(i);
128             b[i] = bAux.byteValue();
129           }
130           vectorInt = new Vector<Byte JavaDoc>();
131           linea = new String JavaDoc(b);
132           if (!isFirstRow || !firstRowHeads) {
133             FieldProvider fieldProvider = setFieldProvider(linea);
134             vector.addElement(fieldProvider);
135           }
136         }
137         isFirstRow=false;
138       } else {
139         byte aux = new Integer JavaDoc(result).byteValue();
140         vectorInt.addElement(new Byte JavaDoc(aux));
141       }
142     }
143     if (vectorInt.size()>0 && (!isFirstRow || !firstRowHeads)) {
144       byte[] b = new byte[vectorInt.size()];
145       for (int i=0;i<vectorInt.size();i++) {
146         Byte JavaDoc bAux = vectorInt.elementAt(i);
147         b[i] = bAux.byteValue();
148       }
149       vectorInt = new Vector<Byte JavaDoc>();
150       linea = new String JavaDoc(b);
151       FieldProvider fieldProvider = setFieldProvider(linea);
152       vector.addElement(fieldProvider);
153     }
154     objectFieldProvider = new FieldProvider[vector.size()];
155     vector.copyInto(objectFieldProvider);
156   }
157 }
158
Popular Tags