001 /**
002 * GRANITE DATA SERVICES
003 * Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S.
004 *
005 * This file is part of the Granite Data Services Platform.
006 *
007 * Granite Data Services is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 *
012 * Granite Data Services is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
015 * General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
020 * USA, or see <http://www.gnu.org/licenses/>.
021 */
022
023 package org.granite.generator.as3;
024
025 import java.util.Collections;
026 import java.util.List;
027 import java.util.Set;
028
029
030 /**
031 * @author Franck WOLFF
032 */
033 public class As3Type implements ClientType {
034
035 ///////////////////////////////////////////////////////////////////////////
036 // Fields.
037
038 public static final As3Type INT = new As3Type(null, "int", Integer.valueOf(0));
039 public static final As3Type UINT = new As3Type(null, "uint", Integer.valueOf(0));
040 public static final As3Type BOOLEAN = new As3Type(null, "Boolean", Boolean.valueOf(false));
041 public static final As3Type NUMBER = new As3Type(null, "Number", "Number.NaN");
042 public static final As3Type LONG = new As3Type("org.granite.math", "Long");
043 public static final As3Type BIG_INTEGER = new As3Type("org.granite.math", "BigInteger");
044 public static final As3Type BIG_DECIMAL = new As3Type("org.granite.math", "BigDecimal");
045 public static final As3Type MATH_CONTEXT = new As3Type("org.granite.math", "MathContext");
046 public static final As3Type ROUNDING_MODE = new As3Type("org.granite.math", "RoundingMode");
047 public static final As3Type OBJECT = new As3Type(null, "Object");
048 public static final As3Type STRING = new As3Type(null, "String");
049 public static final As3Type ARRAY = new As3Type(null, "Array");
050 public static final As3Type DATE = new As3Type(null, "Date");
051 public static final As3Type XML = new As3Type(null, "XML");
052 public static final As3Type BYTE_ARRAY = new As3Type("flash.utils", "ByteArray");
053 public static final As3Type DICTIONARY = new As3Type("flash.utils", "Dictionary");
054
055 public static final As3Type LIST_COLLECTION_VIEW = new As3Type("mx.collections", "ListCollectionView");
056 public static final As3Type ARRAY_COLLECTION = new As3Type("mx.collections", "ArrayCollection");
057 public static final As3Type ILIST = new As3Type("mx.collections", "IList");
058 public static final As3Type IMAP = new As3Type("org.granite.collections", "IMap");
059 public static final As3Type ENUM = new As3Type("org.granite.util", "Enum");
060
061 public static final As3Type PAGE = new As3Type("org.granite.tide.data.model", "Page");
062 public static final As3Type PAGE_INFO = new As3Type("org.granite.tide.data.model", "PageInfo");
063 public static final As3Type SORT_INFO = new As3Type("org.granite.tide.data.model", "SortInfo");
064
065 private final String packageName;
066 private final String name;
067 private final String qualifiedName;
068 private final Object nullValue;
069
070 ///////////////////////////////////////////////////////////////////////////
071 // Constructors.
072
073 public As3Type(String packageName, String simpleName) {
074 this(packageName, simpleName, null);
075 }
076 public As3Type(String packageName, String name, Object nullValue) {
077 this.packageName = (packageName != null ? packageName : "");
078 this.name = name;
079 this.qualifiedName = (hasPackage() ? (packageName + '.' + name) : name);
080 this.nullValue = nullValue;
081 }
082
083 ///////////////////////////////////////////////////////////////////////////
084 // Properties.
085
086 @Override
087 public boolean hasPackage() {
088 return packageName.length() > 0;
089 }
090
091 @Override
092 public String getPackageName() {
093 return packageName;
094 }
095
096 @Override
097 public String getName() {
098 return name;
099 }
100
101 @Override
102 public String getQualifiedName() {
103 return qualifiedName;
104 }
105
106 @Override
107 public Object getNullValue() {
108 return nullValue;
109 }
110
111 public boolean isNumber() {
112 return NUMBER.equals(this);
113 }
114
115 ///////////////////////////////////////////////////////////////////////////
116 // Methods
117
118 @Override
119 public Set<String> getImports() {
120 if (hasPackage())
121 return Collections.singleton(qualifiedName);
122
123 return Collections.emptySet();
124 }
125
126 @Override
127 public void addImports(Set<String> imports) {
128 }
129
130 @Override
131 public As3Type toArrayType() {
132 return ARRAY;
133 }
134
135 @Override
136 public As3Type translatePackage(PackageTranslator translator) {
137 return new As3Type(translator.translate(packageName), getName());
138 }
139
140 @Override
141 public As3Type translatePackages(List<PackageTranslator> translators) {
142 boolean translate = false;
143
144 PackageTranslator translator = PackageTranslator.forPackage(translators, packageName);
145 String translatedPackageName = packageName;
146 if (translator != null) {
147 translate = true;
148 translatedPackageName = translator.translate(packageName);
149 }
150
151 if (!translate)
152 return this;
153
154 return new As3Type(translatedPackageName, getName());
155 }
156
157 ///////////////////////////////////////////////////////////////////////////
158 // Utilities.
159
160 @Override
161 public int hashCode() {
162 return qualifiedName.hashCode();
163 }
164
165 @Override
166 public boolean equals(Object obj) {
167 if (obj == this)
168 return true;
169 if (!(obj instanceof As3Type))
170 return false;
171 return qualifiedName.equals(((As3Type)obj).qualifiedName);
172 }
173
174 @Override
175 public String toString() {
176 return qualifiedName;
177 }
178 }