Allow primary keys to be any type, and test it.
[online-glom:gwt-glom.git] / src / main / java / org / glom / web / shared / TypedDataItem.java
1 /*
2  * Copyright (C) 2011 Openismus GmbH
3  *
4  * This file is part of GWT-Glom.
5  *
6  * GWT-Glom is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or (at your
9  * option) any later version.
10  *
11  * GWT-Glom is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
14  * for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with GWT-Glom.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 package org.glom.web.shared;
21
22 import java.util.Date;
23
24 import org.glom.web.shared.libglom.Field.GlomFieldType;
25
26 /**
27  * This specialization of DataItem can hold a primary key item.
28  */
29 @SuppressWarnings("serial")
30 public class TypedDataItem extends DataItem {
31         private boolean empty = true;
32         private GlomFieldType type = GlomFieldType.TYPE_INVALID;
33         private String unknown = null;
34
35         public TypedDataItem() {
36         }
37
38         public boolean isEmpty() {
39                 return empty;
40         }
41
42         /** Get the value.
43          * 
44          * This is a generic alternative to getNumber(), getText(), etc.
45          * @return
46          */
47         public Object getValue() {
48                 switch(type) {
49                 case TYPE_NUMERIC:
50                         return getNumber();
51                 case TYPE_TEXT:
52                         return getText();
53                 case TYPE_DATE:
54                         return getDate();
55                 //TODO: case TYPE_TIME:
56                 //      return getTime();
57                 case TYPE_BOOLEAN:
58                         return getBoolean();
59                 case TYPE_IMAGE:
60                         return getImageData();
61                 case TYPE_INVALID:
62                         return "value-with-invalid-type";
63                 default:
64                         return "value-with-unknown-type";
65                 }
66         }
67
68         //TODO: Why is this override necessary?
69         /*
70          * (non-Javadoc)
71          * 
72          * @see org.glom.web.shared.DataItem#setBoolean(boolean)
73          */
74         @Override
75         public void setBoolean(final boolean bool) {
76                 this.empty = false;
77                 this.type = GlomFieldType.TYPE_BOOLEAN;
78                 super.setBoolean(bool);
79         }
80
81         /*
82          * (non-Javadoc)
83          * 
84          * @see org.glom.web.shared.DataItem#setNumber(double)
85          */
86         @Override
87         public void setNumber(final double number) {
88                 this.empty = false;
89                 this.type = GlomFieldType.TYPE_NUMERIC;
90                 super.setNumber(number);
91         }
92
93         /*
94          * (non-Javadoc)
95          * 
96          * @see org.glom.web.shared.DataItem#setText(java.lang.String)
97          */
98         @Override
99         public void setText(final String text) {
100                 this.empty = false;
101                 this.type = GlomFieldType.TYPE_TEXT;
102                 super.setText(text);
103         }
104         
105         /*
106          * (non-Javadoc)
107          * 
108          * @see org.glom.web.shared.DataItem#setNumber(double)
109          */
110         @Override
111         public void setDate(final Date date) {
112                 this.empty = false;
113                 this.type = GlomFieldType.TYPE_DATE;
114                 super.setDate(date);
115         }
116
117         public void setImageData(final byte[] imageData) {
118                 this.empty = false;
119                 this.type = GlomFieldType.TYPE_IMAGE;
120                 super.setImageData(imageData);
121         }
122
123         public void setImageDataUrl(final String image) {
124                 this.empty = false;
125                 this.type = GlomFieldType.TYPE_IMAGE;
126                 super.setImageDataUrl(image);
127         }
128         
129
130         /*
131          * (non-Javadoc)
132          * 
133          * @see org.glom.web.shared.DataItem#setText(java.lang.String)
134          */
135         public void setUnknown(final String value) {
136                 this.empty = false;
137                 this.type = GlomFieldType.TYPE_INVALID;
138                 this.unknown = value;
139         }
140
141         public String getUnknown() {
142                 return unknown;
143         }
144
145         public GlomFieldType getType() {
146                 return type;
147         }
148
149 }