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    
021    package org.granite.builder.properties;
022    
023    import org.granite.builder.util.XStreamUtil;
024    import org.granite.generator.as3.DefaultAs3TypeFactory;
025    import org.granite.generator.as3.DefaultEntityFactory;
026    import org.granite.generator.as3.DefaultRemoteDestinationFactory;
027    import org.granite.generator.as3.JavaAs3GroovyTransformer;
028    import org.granite.generator.as3.reflect.JavaType.Kind;
029    import org.granite.generator.template.StandardTemplateUris;
030    
031    import com.thoughtworks.xstream.annotations.XStreamAlias;
032    import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
033    
034    /**
035     * @author Franck WOLFF
036     */
037    @XStreamAlias(value="graniteProperties")
038    public class GraniteProperties implements Validable {
039    
040            private transient long timestamp = -1L;
041            
042            public static final String VERSION_1_0 = "1.0";
043            public static final String VERSION_2_0 = "2.0";
044            public static final String CURRENT_VERSION = VERSION_2_0;
045            
046            @XStreamAsAttribute
047            private String version = VERSION_2_0;
048            
049            private Gas3 gas3;
050            
051            public long getTimestamp() {
052                    return timestamp;
053            }
054    
055            public void setTimestamp(long timestamp) {
056                    this.timestamp = timestamp;
057            }
058    
059            public String getVersion() {
060                    return version;
061            }
062    
063            public void setVersion(String version) {
064                    this.version = version;
065            }
066    
067            public Gas3 getGas3() {
068                    return gas3;
069            }
070    
071            public void setGas3(Gas3 gas3) {
072                    this.gas3 = gas3;
073            }
074            
075            @Override
076            public void validate(ValidationResults results) {
077                    if (gas3 != null)
078                            gas3.validate(results);
079                    
080                    if (!CURRENT_VERSION.equals(version)) {
081                            if (VERSION_1_0.equals(version)) {
082                                    Gas3Template template = gas3.getTemplate(Kind.INTERFACE);
083                                    gas3.getTemplates().remove(template);
084                                    gas3.getTemplates().add(new Gas3Template(Kind.INTERFACE, StandardTemplateUris.INTERFACE));
085                                    results.getWarnings().add("Base template for interfaces is deprecated (ignored)");
086                            }
087                            else
088                                    results.getWarnings().add("Unknown graniteProperties version: " + version);
089                    }
090                    
091                    if (gas3.getTemplate(Kind.REMOTE_DESTINATION) == null) {
092                            StringBuilder uris = new StringBuilder(StandardTemplateUris.REMOTE);
093                            uris.append(';');
094                            if (gas3.getTemplate(Kind.ENTITY).getUris().endsWith(StandardTemplateUris.TIDE_ENTITY_BASE))
095                                    uris.append(StandardTemplateUris.TIDE_REMOTE_BASE);
096                            else
097                                    uris.append(StandardTemplateUris.REMOTE_BASE);
098                            gas3.getTemplates().add(new Gas3Template(Kind.REMOTE_DESTINATION, uris.toString()));
099                    }
100                    
101                    if (gas3.getEntityFactory() == null)
102                            gas3.setEntityFactory(DefaultEntityFactory.class.getName());
103                    
104                    if (gas3.getRemoteDestinationFactory() == null)
105                            gas3.setRemoteDestinationFactory(DefaultRemoteDestinationFactory.class.getName());
106            }
107            
108            @Override
109            public String toString() {
110                    return XStreamUtil.toString(this);
111            }
112    
113            public static GraniteProperties getDefaultProperties() {
114                    Gas3 gas3 = new Gas3("uid", DefaultAs3TypeFactory.class.getName(), DefaultEntityFactory.class.getName(), DefaultRemoteDestinationFactory.class.getName());
115    
116                    gas3.getTemplates().add(new Gas3Template(
117                            Kind.BEAN,
118                            StandardTemplateUris.BEAN + ";" + StandardTemplateUris.BEAN_BASE
119                    ));
120    
121                    gas3.getTemplates().add(new Gas3Template(
122                            Kind.ENTITY,
123                            StandardTemplateUris.ENTITY + ";" + StandardTemplateUris.ENTITY_BASE
124                    ));
125    
126                    gas3.getTemplates().add(new Gas3Template(
127                            Kind.INTERFACE,
128                            StandardTemplateUris.INTERFACE
129                    ));
130    
131                    gas3.getTemplates().add(new Gas3Template(
132                            Kind.ENUM,
133                            StandardTemplateUris.ENUM
134                    ));
135                    
136                    gas3.getTemplates().add(new Gas3Template(
137                            Kind.REMOTE_DESTINATION,
138                            StandardTemplateUris.REMOTE + ";" + StandardTemplateUris.REMOTE_BASE
139                    ));
140                    
141                    gas3.getTransformers().add(new Gas3Transformer(JavaAs3GroovyTransformer.class.getName()));
142                    
143                    GraniteProperties properties = new GraniteProperties();
144                    properties.setGas3(gas3);
145                    return properties;
146            }
147    }