View Javadoc
1   /**
2    *
3    */
4   package net.sf.flatpack.xml;
5   
6   import java.util.Collections;
7   import java.util.HashMap;
8   import java.util.Iterator;
9   import java.util.List;
10  import java.util.Map;
11  import java.util.Map.Entry;
12  
13  import net.sf.flatpack.structure.ColumnMetaData;
14  import net.sf.flatpack.util.FPConstants;
15  
16  /**
17   * @author Benoit Xhenseval
18   *
19   */
20  public class MetaData {
21      private List<ColumnMetaData> columnsNames;
22      private Map columnIndexMap;
23      private final Map<String, XMLRecordElement> xmlRecordElements;
24  
25      public MetaData(final List<ColumnMetaData> columnNames, final Map columnIndexMap) {
26          this.columnsNames = Collections.unmodifiableList(columnNames);
27          this.columnIndexMap = Collections.unmodifiableMap(columnIndexMap);
28          this.xmlRecordElements = new HashMap();
29      }
30  
31      MetaData(final List<ColumnMetaData> columnNames, final Map columnIndexMap, final Map<String, XMLRecordElement> xmlRecordElements) {
32          this.columnsNames = Collections.unmodifiableList(columnNames);
33          this.columnIndexMap = columnIndexMap;
34          this.xmlRecordElements = xmlRecordElements;
35      }
36  
37      public List<ColumnMetaData> getColumnsNames() {
38          return columnsNames;
39      }
40  
41      public Map getColumnIndexMap() {
42          return columnIndexMap;
43      }
44  
45      public void setColumnIndexMap(final Map columnIndexMap) {
46          this.columnIndexMap = columnIndexMap;
47      }
48  
49      public void setColumnsNames(final List<ColumnMetaData> columnsNames) {
50          this.columnsNames = Collections.unmodifiableList(columnsNames);
51      }
52  
53      public boolean isAnyRecordFormatSpecified() {
54          return xmlRecordElements != null && !xmlRecordElements.isEmpty();
55      }
56  
57      public Iterator<Entry<String, XMLRecordElement>> xmlRecordIterator() {
58          return xmlRecordElements.entrySet().iterator();
59      }
60  
61      public List<ColumnMetaData> getListColumnsForRecord(final String key) {
62          return xmlRecordElements.get(key).getColumns();
63      }
64  
65      public int getColumnIndex(final String key, final String columnName) {
66          int idx = -1;
67          if (key != null && !key.equals(FPConstants.DETAIL_ID) && !key.equals(FPConstants.COL_IDX)) {
68              idx = xmlRecordElements.get(key).getColumnIndex(columnName);
69          } else if (key == null || key.equals(FPConstants.DETAIL_ID)) {
70              final Integer i = (Integer) columnIndexMap.get(columnName);
71              if (i != null) { // happens when the col name does not exist in the
72                  // mapping
73                  idx = i.intValue();
74              }
75          }
76          return idx;
77      }
78  
79      @Override
80      public String toString() {
81          final StringBuilder buf = new StringBuilder();
82          buf.append("Col Names:").append(columnsNames).append(System.lineSeparator());
83          buf.append("Col Index Map:").append(columnIndexMap).append(System.lineSeparator());
84          buf.append("XML Record Elements:").append(xmlRecordElements).append(System.lineSeparator());
85          return buf.toString();
86      }
87  }