Improve Gda Value conversion from PrimaryKeyItem.
[online-glom:gwt-glom.git] / src / main / java / org / glom / web / server / Utils.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.server;
21
22 import java.io.File;
23
24 import org.glom.libglom.Field.glom_field_type;
25 import org.glom.libglom.Value;
26 import org.glom.web.shared.PrimaryKeyItem;
27 import org.glom.web.shared.layout.LayoutItemField.GlomFieldType;
28
29 /**
30  * @author Ben Konrath <ben@bagu.org>
31  * 
32  */
33 public class Utils {
34
35         /*
36          * This method safely converts longs from libglom into ints. This method was taken from stackoverflow:
37          * 
38          * http://stackoverflow.com/questions/1590831/safely-casting-long-to-int-in-java
39          */
40         public static int safeLongToInt(long value) {
41                 if (value < Integer.MIN_VALUE || value > Integer.MAX_VALUE) {
42                         throw new IllegalArgumentException(value + " cannot be cast to int without changing its value.");
43                 }
44                 return (int) value;
45         }
46
47         public static String getFileName(String fileURI) {
48                 String[] splitURI = fileURI.split(File.separator);
49                 return splitURI[splitURI.length - 1];
50         }
51
52         public static Value getGdaValueForPrimaryKey(String documentID, String tableName, glom_field_type glomFieldType,
53                         PrimaryKeyItem primaryKeyValue) {
54                 Value gdaPrimaryKeyValue = null;
55                 switch (glomFieldType) {
56                 case TYPE_NUMERIC:
57                         if (primaryKeyValue.getGlomFieldType() == GlomFieldType.TYPE_NUMERIC) {
58                                 // Only trust the PrimaryKeyItem if the types match
59                                 gdaPrimaryKeyValue = primaryKeyValue.isEmpty() ? new Value() : new Value(primaryKeyValue.getNumber());
60                         } else {
61                                 // Don't use the primary key value when the type from the PrimaryKeyItem doesn't match the type from the
62                                 // Glom document.
63                                 gdaPrimaryKeyValue = new Value(); // an emtpy Value
64                                 Log.info(documentID, tableName, "PrimaryKeyItem type: " + primaryKeyValue.getGlomFieldType()
65                                                 + " doesn't match the type from the Glom document: " + glomFieldType);
66                                 Log.info(documentID, tableName, "The value in the PrimaryKeyItem is being ignored.");
67                         }
68                         break;
69                 case TYPE_TEXT:
70                         if (primaryKeyValue.getGlomFieldType() == GlomFieldType.TYPE_TEXT) {
71                                 // Only trust the PrimaryKeyItem if the types match
72                                 gdaPrimaryKeyValue = primaryKeyValue.isEmpty() ? new Value("") : new Value(primaryKeyValue.getText());
73                         } else {
74                                 // Don't use the primary key value when the type from the PrimaryKeyItem doesn't match the type from the
75                                 // Glom document.
76                                 gdaPrimaryKeyValue = new Value(""); // an emtpy string Value
77                                 Log.info(documentID, tableName, "PrimaryKeyItem type: " + primaryKeyValue.getGlomFieldType()
78                                                 + " doesn't match the type from the Glom document: " + glomFieldType);
79                                 Log.info(documentID, tableName, "The value in the PrimaryKeyItem is being ignored.");
80                         }
81                         break;
82                 default:
83                         Log.error(documentID, tableName, "Unsupported Glom Field Type to use as a primary key: " + glomFieldType
84                                         + ". Query may not work.");
85                         break;
86                 }
87                 return gdaPrimaryKeyValue;
88         }
89 }