View Javadoc

1   package net.sf.cobol2j.examples;
2   
3   import net.sf.cobol2j.FieldFormat;
4   import net.sf.cobol2j.FieldsGroup;
5   import net.sf.cobol2j.FieldsList;
6   import net.sf.cobol2j.FileFormat;
7   import net.sf.cobol2j.FileFormatException;
8   import net.sf.cobol2j.RecordFormat;
9   import net.sf.cobol2j.RecordParseException;
10  import net.sf.cobol2j.RecordSet;
11  import net.sf.cobol2j.RecordsMap;
12  
13  import org.apache.commons.lang.mutable.MutableInt;
14  
15  import org.apache.poi.hssf.usermodel.HSSFRow;
16  import org.apache.poi.hssf.usermodel.HSSFSheet;
17  import org.apache.poi.hssf.usermodel.HSSFWorkbook;
18  
19  import java.io.FileInputStream;
20  import java.io.FileNotFoundException;
21  import java.io.FileOutputStream;
22  import java.io.IOException;
23  
24  import java.math.BigDecimal;
25  import java.math.BigInteger;
26  
27  import java.util.Iterator;
28  import java.util.List;
29  import java.util.Map;
30  
31  import javax.xml.bind.JAXBContext;
32  import javax.xml.bind.JAXBException;
33  import javax.xml.bind.Unmarshaller;
34  
35  
36  public class Dat2xls {
37      public static void main(String[] args)
38          throws FileNotFoundException, IOException, FileFormatException,
39              JAXBException, RecordParseException {
40          String xc2jfilename = args[0];
41          JAXBContext context = JAXBContext.newInstance("net.sf.cobol2j");
42          Unmarshaller unmarshaller = context.createUnmarshaller();
43          Object o = unmarshaller.unmarshal(new FileInputStream(xc2jfilename));
44          FileFormat fF = (FileFormat) o;
45          RecordSet rset = new RecordSet(System.in, fF);
46          int rowNr = 0;
47          HSSFWorkbook wb = new HSSFWorkbook();
48          HSSFSheet sheet = wb.createSheet("COBOL2J - dat2xls");
49          HSSFRow titlerow;
50          HSSFRow datarow;
51          Map recdefs = new RecordsMap(fF);
52  
53          while (rset.hasNext()) {
54              List fields = rset.next();
55              RecordFormat rF = (RecordFormat) recdefs.get("0");
56  
57              if (recdefs.size() > 1) {
58                  String first1 = fields.get(0).toString();
59                  rF = (RecordFormat) recdefs.get(first1);
60              }
61  
62              MutableInt cellNr = new MutableInt(0);
63              titlerow = sheet.createRow((short) rowNr);
64              datarow = sheet.createRow((short) rowNr + 1);
65  
66              Iterator data = fields.listIterator();
67              createFields(data, rF, titlerow, datarow, cellNr);
68              rowNr = rowNr + 2;
69          }
70  
71          wb.write(System.out);
72      }
73  
74      private static void createFields(Iterator data, FieldsList deflist,
75          HSSFRow titlerow, HSSFRow datarow, MutableInt cellNr) {
76          Iterator def = deflist.getFieldFormatOrFieldsGroup().listIterator();
77  
78          while (def.hasNext()) {
79              Object u = def.next();
80  
81              if (u instanceof FieldFormat) {
82                  int occurs = 1;
83                  FieldFormat ff = (FieldFormat) u;
84                  String dependingon = ff.getDependingOn();
85  
86                  if (dependingon.length() > 0) {
87                      int c = cellNr.intValue() - 1;
88  
89                      while (c >= 0) {
90                          if (titlerow.getCell((short) c).getStringCellValue() == dependingon) {
91                              occurs = Integer.parseInt(datarow.getCell((short) c)
92                                                               .getStringCellValue());
93  
94                              break;
95                          }
96  
97                          c--;
98                      }
99                  } else {
100                     occurs = ff.getOccurs().intValue();
101                 }
102 
103                 while (occurs-- > 0) {
104                     titlerow.createCell(cellNr.shortValue())
105                             .setCellValue(ff.getName());
106 
107                     Object o = data.next();
108 
109                     if (o instanceof BigDecimal) {
110                         datarow.createCell(cellNr.shortValue())
111                                .setCellValue(((BigDecimal) o).doubleValue());
112                     } else if (o instanceof BigInteger) {
113                         datarow.createCell(cellNr.shortValue())
114                                .setCellValue(((BigInteger) o).intValue());
115                     } else if (o instanceof Float) {
116                         datarow.createCell(cellNr.shortValue())
117                                .setCellValue(((Float) o).intValue());
118                     } else if (o instanceof Double) {
119                         datarow.createCell(cellNr.shortValue())
120                                .setCellValue(((Double) o).intValue());
121                     } else if (o instanceof String) {
122                         datarow.createCell(cellNr.shortValue())
123                                .setCellValue(o.toString());
124                     }
125 
126                     cellNr.increment();
127                 }
128             } else if (u instanceof FieldsGroup) {
129                 int occurs = 1;
130                 FieldsGroup fG = (FieldsGroup) u;
131                 String dependingon = fG.getDependingOn();
132 
133                 if (dependingon.length() > 0) {
134                     int c = cellNr.intValue() - 1;
135 
136                     while (c >= 0) {
137                         if (titlerow.getCell((short) c).getStringCellValue() == dependingon) {
138                             occurs = Integer.parseInt(datarow.getCell((short) c)
139                                                              .getStringCellValue());
140 
141                             break;
142                         }
143 
144                         c--;
145                     }
146                 } else {
147                     occurs = fG.getOccurs().intValue();
148                 }
149 
150                 while (occurs-- > 0) {
151                     createFields(data, fG, titlerow, datarow, cellNr);
152                 }
153             }
154         }
155     }
156 }