001/* 002 GRANITE DATA SERVICES 003 Copyright (C) 2011 GRANITE DATA SERVICES S.A.S. 004 005 This file is part of Granite Data Services. 006 007 Granite Data Services is free software; you can redistribute it and/or modify 008 it under the terms of the GNU Library General Public License as published by 009 the Free Software Foundation; either version 2 of the License, or (at your 010 option) any later version. 011 012 Granite Data Services is distributed in the hope that it will be useful, but 013 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License 015 for more details. 016 017 You should have received a copy of the GNU Library General Public License 018 along with this library; if not, see <http://www.gnu.org/licenses/>. 019*/ 020 021package org.granite.builder.properties; 022 023import java.beans.PropertyChangeListener; 024import java.beans.PropertyChangeSupport; 025import java.util.ArrayList; 026import java.util.HashSet; 027import java.util.List; 028import java.util.Set; 029import java.util.TreeSet; 030 031import org.granite.generator.TemplateUri; 032import org.granite.generator.as3.reflect.JavaType.Kind; 033 034import com.thoughtworks.xstream.annotations.XStreamAlias; 035import com.thoughtworks.xstream.annotations.XStreamAsAttribute; 036import com.thoughtworks.xstream.annotations.XStreamImplicit; 037import com.thoughtworks.xstream.annotations.XStreamOmitField; 038 039/** 040 * @author Franck WOLFF 041 */ 042@XStreamAlias(value="gas3") 043public class Gas3 implements Validable { 044 045 @XStreamOmitField 046 private PropertyChangeSupport _pcs = null; 047 048 @XStreamAsAttribute 049 private String uid; 050 051 @XStreamAsAttribute 052 private String as3TypeFactory; 053 054 @XStreamAsAttribute 055 private String entityFactory; 056 057 @XStreamAsAttribute 058 private String remoteDestinationFactory; 059 060 @XStreamAsAttribute 061 private boolean debugEnabled; 062 063 @XStreamAsAttribute 064 private boolean flexConfig; 065 066 @XStreamAsAttribute 067 private boolean externalizeLong; 068 069 @XStreamAsAttribute 070 private boolean externalizeBigInteger; 071 072 @XStreamAsAttribute 073 private boolean externalizeBigDecimal; 074 075 @XStreamImplicit(itemFieldName="source") 076 private TreeSet<Gas3Source> sources; 077 078 @XStreamImplicit(itemFieldName="project") 079 private TreeSet<Gas3Project> projects; 080 081 @XStreamImplicit(itemFieldName="classpath") 082 private List<Gas3Classpath> classpaths; 083 084 @XStreamImplicit(itemFieldName="template") 085 private Set<Gas3Template> templates; 086 087 @XStreamImplicit(itemFieldName="transformer") 088 private List<Gas3Transformer> transformers; 089 090 @XStreamImplicit(itemFieldName="translator") 091 private Set<Gas3Translator> translators; 092 093 public Gas3() { 094 _pcs = new PropertyChangeSupport(this); 095 } 096 097 public Gas3(String uid, String as3TypeFactory, String entityFactory, String remoteDestinationFactory) { 098 this.uid = uid; 099 this.as3TypeFactory = as3TypeFactory; 100 this.entityFactory = entityFactory; 101 this.remoteDestinationFactory = remoteDestinationFactory; 102 103 _pcs = new PropertyChangeSupport(this); 104 } 105 106 public String getUid() { 107 return uid; 108 } 109 110 public void setUid(String uid) { 111 this.uid = uid; 112 } 113 114 public String getAs3TypeFactory() { 115 return as3TypeFactory; 116 } 117 118 public void setAs3TypeFactory(String as3TypeFactory) { 119 String old = this.as3TypeFactory; 120 this.as3TypeFactory = as3TypeFactory; 121 if (_pcs != null) 122 _pcs.firePropertyChange("as3TypeFactory", old, as3TypeFactory); 123 } 124 125 public String getEntityFactory() { 126 return entityFactory; 127 } 128 129 public void setEntityFactory(String entityFactory) { 130 this.entityFactory = entityFactory; 131 } 132 133 public String getRemoteDestinationFactory() { 134 return remoteDestinationFactory; 135 } 136 137 public void setRemoteDestinationFactory(String remoteDestinationFactory) { 138 this.remoteDestinationFactory = remoteDestinationFactory; 139 } 140 141 public boolean isDebugEnabled() { 142 return debugEnabled; 143 } 144 145 public void setDebugEnabled(boolean debugEnabled) { 146 this.debugEnabled = debugEnabled; 147 } 148 149 public boolean isFlexConfig() { 150 return flexConfig; 151 } 152 153 public void setFlexConfig(boolean flexConfig) { 154 this.flexConfig = flexConfig; 155 } 156 157 public boolean isExternalizeLong() { 158 return externalizeLong; 159 } 160 161 public void setExternalizeLong(boolean externalizeLong) { 162 this.externalizeLong = externalizeLong; 163 } 164 165 public boolean isExternalizeBigInteger() { 166 return externalizeBigInteger; 167 } 168 169 public void setExternalizeBigInteger(boolean externalizeBigInteger) { 170 this.externalizeBigInteger = externalizeBigInteger; 171 } 172 173 public boolean isExternalizeBigDecimal() { 174 return externalizeBigDecimal; 175 } 176 177 public void setExternalizeBigDecimal(boolean externalizeBigDecimal) { 178 this.externalizeBigDecimal = externalizeBigDecimal; 179 } 180 181 public TreeSet<Gas3Source> getSources() { 182 if (sources == null) 183 sources = new TreeSet<Gas3Source>(); 184 return sources; 185 } 186 187 public void setSources(TreeSet<Gas3Source> sources) { 188 this.sources = sources; 189 } 190 191 public Gas3Source getMatchingSource(String path, String file) { 192 if (sources != null) { 193 for (Gas3Source source : sources) { 194 if (source.match(path, file)) 195 return source; 196 } 197 } 198 return null; 199 } 200 201 public TreeSet<Gas3Project> getProjects() { 202 if (projects == null) 203 projects = new TreeSet<Gas3Project>(); 204 return projects; 205 } 206 207 public void setProjects(TreeSet<Gas3Project> projects) { 208 this.projects = projects; 209 } 210 211 public List<Gas3Classpath> getClasspaths() { 212 if (classpaths == null) 213 classpaths = new ArrayList<Gas3Classpath>(); 214 return classpaths; 215 } 216 217 public void setClasspaths(List<Gas3Classpath> classpaths) { 218 this.classpaths = classpaths; 219 } 220 221 public Set<Gas3Template> getTemplates() { 222 if (templates == null) 223 templates = new HashSet<Gas3Template>(); 224 return templates; 225 } 226 227 public void setTemplates(Set<Gas3Template> templates) { 228 this.templates = templates; 229 } 230 231 public Gas3Template getTemplate(Kind kind) { 232 for (Gas3Template template : getTemplates()) { 233 if (kind.equals(template.getKind())) 234 return template; 235 } 236 return null; 237 } 238 239 public TemplateUri[] getMatchingTemplateUris(Kind kind) { 240 if (templates != null) { 241 for (Gas3Template template : templates) { 242 if (kind.equals(template.getKind())) 243 return template.getTemplateUris(); 244 } 245 } 246 return null; 247 } 248 249 public List<Gas3Transformer> getTransformers() { 250 if (transformers == null) 251 transformers = new ArrayList<Gas3Transformer>(); 252 return transformers; 253 } 254 255 public Set<Gas3Translator> getTranslators() { 256 if (translators == null) 257 translators = new HashSet<Gas3Translator>(); 258 return translators; 259 } 260 261 @Override 262 public void validate(ValidationResults results) { 263 if (sources != null) { 264 for (Validable validable : sources) 265 validable.validate(results); 266 } 267 if (classpaths != null) { 268 for (Validable validable : classpaths) 269 validable.validate(results); 270 } 271 if (templates != null) { 272 for (Validable validable : templates) 273 validable.validate(results); 274 } 275 if (transformers != null) { 276 for (Validable validable : transformers) 277 validable.validate(results); 278 } 279 if (translators != null) { 280 for (Validable validable : translators) 281 validable.validate(results); 282 } 283 } 284 285 public void addPropertyChangeListener(String name, PropertyChangeListener listener) { 286 if (_pcs == null) 287 _pcs = new PropertyChangeSupport(this); 288 _pcs.addPropertyChangeListener(name, listener); 289 } 290 291 public void addPropertyChangeListener(PropertyChangeListener listener) { 292 if (_pcs == null) 293 _pcs = new PropertyChangeSupport(this); 294 _pcs.addPropertyChangeListener(listener); 295 } 296 297 public void removePropertyChangeListener(String name, PropertyChangeListener listener) { 298 if (_pcs == null) 299 _pcs = new PropertyChangeSupport(this); 300 _pcs.removePropertyChangeListener(name, listener); 301 } 302 303 public void removePropertyChangeListener(PropertyChangeListener listener) { 304 if (_pcs == null) 305 _pcs = new PropertyChangeSupport(this); 306 _pcs.removePropertyChangeListener(listener); 307 } 308}