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 }