1 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 filename; 22 public boolean firstRowHeads=false; 23 public String format = "C"; 24 public Vector<Object > vector = new Vector<Object >(); 25 public FieldProvider[] rows; 26 27 FieldProvider objectFieldProvider[]; 28 29 public MultipartRequest() { 30 } 31 32 public MultipartRequest(VariablesBase vars, String filename, boolean firstLineHeads, String format, FieldProvider[] data) throws IOException { 33 init(vars, filename, firstLineHeads, format, data); 34 readSubmittedFile(); 35 } 36 37 public String getField(String index) { 38 int i = Integer.valueOf(index).intValue(); 39 if (i>=vector.size()) return null; 40 return ((String )vector.elementAt(i)); 41 } 42 43 public void addField(String value) { 44 if (vector==null) vector = new Vector<Object >(); 45 vector.addElement(value); 46 } 47 48 private String setFormatSeparator(String _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 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 filename, boolean firstLineHeads, String format, FieldProvider[] data) throws IOException { 68 if (vars==null) throw new IllegalArgumentException ("VariablesBase cannot be null"); 69 if (filename==null || filename.equals("")) throw new IllegalArgumentException ("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 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 actual = linea.substring(init, end); 92 data.addField(actual); 93 } 94 } 95 } 96 return data; 97 } 98 99 public FieldProvider lineSeparatorFormated(String linea) { 100 return null; 101 } 102 103 public FieldProvider lineComplete(String 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 linea = ""; 120 Vector<Byte > vectorInt = new Vector<Byte >(); 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 bAux = vectorInt.elementAt(i); 128 b[i] = bAux.byteValue(); 129 } 130 vectorInt = new Vector<Byte >(); 131 linea = new String (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 (result).byteValue(); 140 vectorInt.addElement(new Byte (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 bAux = vectorInt.elementAt(i); 147 b[i] = bAux.byteValue(); 148 } 149 vectorInt = new Vector<Byte >(); 150 linea = new String (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 |