1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  package com.healthmarketscience.jackcess.impl.complex;
18  
19  import java.io.IOException;
20  
21  import com.healthmarketscience.jackcess.Column;
22  import com.healthmarketscience.jackcess.Row;
23  import com.healthmarketscience.jackcess.Table;
24  import com.healthmarketscience.jackcess.complex.ComplexDataType;
25  import com.healthmarketscience.jackcess.complex.ComplexValue;
26  import com.healthmarketscience.jackcess.complex.ComplexValueForeignKey;
27  import com.healthmarketscience.jackcess.complex.MultiValueColumnInfo;
28  import com.healthmarketscience.jackcess.complex.SingleValue;
29  
30  
31  
32  
33  
34  
35  public class MultiValueColumnInfoImpl extends ComplexColumnInfoImpl<SingleValue>
36    implements MultiValueColumnInfo
37  {
38    private final Column _valueCol;
39    
40    public MultiValueColumnInfoImpl(Column column, int complexId,
41                                    Table../../../../com/healthmarketscience/jackcess/Table.html#Table">Table typeObjTable, Table flatTable) 
42      throws IOException
43    {
44      super(column, complexId, typeObjTable, flatTable);
45  
46      _valueCol = getTypeColumns().get(0);
47    }
48  
49    @Override
50    public ComplexDataType getType()
51    {
52      return ComplexDataType.MULTI_VALUE;
53    }
54  
55    public Column getValueColumn() {
56      return _valueCol;
57    }
58  
59    @Override
60    protected SingleValueImpl toValue(
61        ComplexValueForeignKey complexValueFk,
62        Row rawValue)
63    {
64      ComplexValue.Id id = getValueId(rawValue);
65      Object value = getValueColumn().getRowValue(rawValue);
66  
67      return new SingleValueImpl(id, complexValueFk, value);
68    }
69  
70    @Override
71    protected Object[] asRow(Object[] row, SingleValue value) throws IOException {
72      super.asRow(row, value);
73      getValueColumn().setRowValue(row, value.get());
74      return row;
75    }
76    
77    public static SingleValue newSingleValue(Object value) {
78      return newSingleValue(INVALID_FK, value);
79    }
80  
81    public static SingleValue newSingleValue(
82        ComplexValueForeignKey complexValueFk, Object value) {
83      return new SingleValueImpl(INVALID_ID, complexValueFk, value);
84    }
85  
86  
87    private static class SingleValueImpl extends ComplexValueImpl
88      implements SingleValue
89    {
90      private Object _value;
91  
92      private SingleValueImpl(Id id, ComplexValueForeignKey complexValueFk,
93                              Object value)
94      {
95        super(id, complexValueFk);
96        _value = value;
97      }
98      
99      @Override
100     public Object get() {
101       return _value;
102     }
103 
104     @Override
105     public void set(Object value) {
106       _value = value;
107     }
108 
109     @Override
110     public void update() throws IOException {
111       getComplexValueForeignKey().updateMultiValue(this);
112     }
113     
114     @Override
115     public void delete() throws IOException {
116       getComplexValueForeignKey().deleteMultiValue(this);
117     }
118     
119     @Override
120     public String toString()
121     {
122       return "SingleValue(" + getComplexValueForeignKey() + "," + getId() +
123         ") " + get();
124     } 
125   }
126 }