001/**
002 * Copyright 2005-2016 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.krms.api.repository.language;
017
018import org.kuali.rice.core.api.CoreConstants;
019import org.kuali.rice.core.api.mo.AbstractDataTransferObject;
020import org.kuali.rice.core.api.mo.ModelBuilder;
021import org.kuali.rice.krms.api.KrmsConstants;
022import org.w3c.dom.Element;
023import javax.xml.bind.annotation.XmlAccessType;
024import javax.xml.bind.annotation.XmlAccessorType;
025import javax.xml.bind.annotation.XmlAnyElement;
026import javax.xml.bind.annotation.XmlElement;
027import javax.xml.bind.annotation.XmlRootElement;
028import javax.xml.bind.annotation.XmlType;
029import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
030import java.io.Serializable;
031import java.util.Collection;
032import java.util.Collections;
033import java.util.HashMap;
034import java.util.Map;
035
036/**
037 * Generated using JVM arguments -DNOT_BLANK=languageCode,naturalLanguageUsageId,typeId,template -DFOREIGN_KEY=naturalLanguageUsageId:org.kuali.rice.krms.api.repository.language.NaturalLanguageUsage,typeId:org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition 
038 * Concrete model object implementation, immutable. 
039 * Instances can be (un)marshalled to and from XML.
040 * 
041 * @see NaturalLanguageTemplateContract
042 * 
043 * @author Kuali Rice Team (rice.collab@kuali.org)
044 * 
045 */
046@XmlRootElement(name = NaturalLanguageTemplate.Constants.ROOT_ELEMENT_NAME)
047@XmlAccessorType(XmlAccessType.NONE)
048@XmlType(name = NaturalLanguageTemplate.Constants.TYPE_NAME, propOrder = {
049    NaturalLanguageTemplate.Elements.ATTRIBUTES,
050    NaturalLanguageTemplate.Elements.LANGUAGE_CODE,
051    NaturalLanguageTemplate.Elements.NATURAL_LANGUAGE_USAGE_ID,
052    NaturalLanguageTemplate.Elements.TYPE_ID,
053    NaturalLanguageTemplate.Elements.TEMPLATE,
054    NaturalLanguageTemplate.Elements.ID,
055    NaturalLanguageTemplate.Elements.ACTIVE,
056    CoreConstants.CommonElements.VERSION_NUMBER,
057    CoreConstants.CommonElements.FUTURE_ELEMENTS
058})
059public final class NaturalLanguageTemplate
060    extends AbstractDataTransferObject
061    implements NaturalLanguageTemplateContract
062{
063
064    @XmlJavaTypeAdapter(org.kuali.rice.core.api.util.jaxb.MapStringStringAdapter.class)
065    @XmlElement(name = Elements.ATTRIBUTES, required = false)
066    private final Map<String, String> attributes;
067    @XmlElement(name = Elements.LANGUAGE_CODE, required = false)
068    private final String languageCode;
069    @XmlElement(name = Elements.NATURAL_LANGUAGE_USAGE_ID, required = false)
070    private final String naturalLanguageUsageId;
071    @XmlElement(name = Elements.TYPE_ID, required = false)
072    private final String typeId;
073    @XmlElement(name = Elements.TEMPLATE, required = false)
074    private final String template;
075    @XmlElement(name = Elements.ID, required = false)
076    private final String id;
077    @XmlElement(name = Elements.ACTIVE, required = false)
078    private final boolean active;
079    @XmlElement(name = CoreConstants.CommonElements.VERSION_NUMBER, required = false)
080    private final Long versionNumber;
081    @SuppressWarnings("unused")
082    @XmlAnyElement
083    private final Collection<Element> _futureElements = null;
084
085    /**
086     * Private constructor used only by JAXB. This constructor should never be called.
087     * It is only present for use during JAXB unmarshalling.
088     * 
089     */
090    private NaturalLanguageTemplate() {
091        this.attributes = null;
092        this.languageCode = null;
093        this.naturalLanguageUsageId = null;
094        this.typeId = null;
095        this.template = null;
096        this.id = null;
097        this.active = true;
098        this.versionNumber = null;
099    }
100
101    /**
102     * Constructs an object from the given builder.  This constructor is private and should only ever be invoked from the builder.
103     * 
104     * @param builder the Builder from which to construct the object.
105     * 
106     */
107    private NaturalLanguageTemplate(Builder builder) {
108        this.attributes = builder.getAttributes();
109        this.languageCode = builder.getLanguageCode();
110        this.naturalLanguageUsageId = builder.getNaturalLanguageUsageId();
111        this.typeId = builder.getTypeId();
112        this.template = builder.getTemplate();
113        this.id = builder.getId();
114        this.active = builder.isActive();
115        this.versionNumber = builder.getVersionNumber();
116    }
117
118    @Override
119    public Map<String, String> getAttributes() {
120        return this.attributes;
121    }
122
123    @Override
124    public String getLanguageCode() {
125        return this.languageCode;
126    }
127
128    @Override
129    public String getNaturalLanguageUsageId() {
130        return this.naturalLanguageUsageId;
131    }
132
133    @Override
134    public String getTypeId() {
135        return this.typeId;
136    }
137
138    @Override
139    public String getTemplate() {
140        return this.template;
141    }
142
143    @Override
144    public String getId() {
145        return this.id;
146    }
147
148    @Override
149    public boolean isActive() {
150        return this.active;
151    }
152
153    @Override
154    public Long getVersionNumber() {
155        return this.versionNumber;
156    }
157
158
159    /**
160     * A builder which can be used to construct {@link NaturalLanguageTemplate} instances.  Enforces the constraints of the {@link NaturalLanguageTemplateContract}.
161     * 
162     */
163    public final static class Builder
164        implements Serializable, ModelBuilder, NaturalLanguageTemplateContract
165    {
166
167        private Map<String, String> attributes;
168        private String languageCode;
169        private String naturalLanguageUsageId;
170        private String typeId;
171        private String template;
172        private String id;
173        private boolean active;
174        private Long versionNumber;
175
176        private Builder(String languageCode, String naturalLanguageUsageId, String template, String typeId) {
177            // TODO modify this constructor as needed to pass any required values and invoke the appropriate 'setter' methods
178            setAttributes(null); // setAttributes will create empty map for null
179            setLanguageCode(languageCode);
180            setNaturalLanguageUsageId(naturalLanguageUsageId);
181            setTemplate(template);
182            setTypeId(typeId);
183        }
184
185        public static Builder create(String languageCode, String naturalLanguageUsageId, String template, String typeId) {
186            // TODO modify as needed to pass any required values and add them to the signature of the 'create' method
187            return new Builder(languageCode, naturalLanguageUsageId, template, typeId);
188        }
189
190        public static Builder create(NaturalLanguageTemplateContract contract) {
191            if (contract == null) {
192                throw new IllegalArgumentException("contract was null");
193            }
194            // TODO if create() is modified to accept required parameters, this will need to be modified
195            Builder builder = create(contract.getLanguageCode(), contract.getNaturalLanguageUsageId(), contract.getTemplate(), contract.getTypeId());
196            builder.setId(contract.getId());
197            builder.setActive(contract.isActive());
198            builder.setAttributes(contract.getAttributes());
199            builder.setVersionNumber(contract.getVersionNumber());
200            return builder;
201        }
202
203        /**
204         * Builds an instance of a NaturalLanguageTemplate based on the current state of the builder.
205         * 
206         * @return the fully-constructed NaturalLanguageTemplate.
207         * 
208         */
209        public NaturalLanguageTemplate build() {
210            return new NaturalLanguageTemplate(this);
211        }
212
213        @Override
214        public boolean isActive() {
215            return this.active;
216        }
217
218        @Override
219        public Map<String, String> getAttributes() {
220            return this.attributes;
221        }
222
223        @Override
224        public String getId() {
225            return this.id;
226        }
227
228        @Override
229        public String getLanguageCode() {
230            return this.languageCode;
231        }
232
233        @Override
234        public String getNaturalLanguageUsageId() {
235            return this.naturalLanguageUsageId;
236        }
237
238        @Override
239        public String getTemplate() {
240            return this.template;
241        }
242
243        @Override
244        public String getTypeId() {
245            return this.typeId;
246        }
247
248        @Override
249        public Long getVersionNumber() {
250            return this.versionNumber;
251        }
252
253        /**
254         * Sets the value of active on this builder to the given value.
255         * 
256         * @param active the active value to set.
257         * 
258         */
259        public void setActive(boolean active) {
260            this.active = active;
261        }
262
263        /**
264         * Sets the Map of attributes as name / value pairs.
265         * 
266         * @param attributes a Map of name value String pairs representing the attributes.
267         * 
268         */
269        public void setAttributes(Map<String, String> attributes) {
270            if (attributes == null){
271                this.attributes = Collections.emptyMap();
272            } else {
273                this.attributes = Collections.unmodifiableMap(attributes);
274            }
275        }
276
277        /**
278         * Sets the value of id on this builder to the given value.
279         * 
280         * @param id the id value to set., may be null, representing the Object has not been persisted, but must not be blank.
281         * @throws IllegalArgumentException if the id is blank
282         * 
283         */
284        public void setId(String id) {
285            if (id != null && org.apache.commons.lang.StringUtils.isBlank(id)) {
286                throw new IllegalArgumentException("id is blank");
287            }
288            this.id = id;
289        }
290
291        /**
292         * Sets the value of languageCode on this builder to the given value.
293         * 
294         * @param languageCode the languageCode value to set., must not be null or blank
295         * @throws IllegalArgumentException if the languageCode is null or blank
296         * 
297         */
298        public void setLanguageCode(String languageCode) {
299            if (org.apache.commons.lang.StringUtils.isBlank(languageCode)) {
300                throw new IllegalArgumentException("languageCode is null or blank");
301            }
302            this.languageCode = languageCode;
303        }
304
305        /**
306         * Sets the value of naturalLanguageUsageId on this builder to the given value.
307         * 
308         * @param naturalLanguageUsageId the naturalLanguageUsageId value to set., must not be null or blank
309         * @throws IllegalArgumentException if the naturalLanguageUsageId is null or blank
310         * 
311         */
312        public void setNaturalLanguageUsageId(String naturalLanguageUsageId) {
313            if (org.apache.commons.lang.StringUtils.isBlank(naturalLanguageUsageId)) {
314                throw new IllegalArgumentException("naturalLanguageUsageId is null or blank");
315            }
316            this.naturalLanguageUsageId = naturalLanguageUsageId;
317        }
318
319        /**
320         * Sets the value of template on this builder to the given value.
321         * 
322         * @param template the template value to set., must not be null or blank
323         * @throws IllegalArgumentException if the template is null or blank
324         * 
325         */
326        public void setTemplate(String template) {
327            if (org.apache.commons.lang.StringUtils.isBlank(template)) {
328                throw new IllegalArgumentException("template is null or blank");
329            }
330            this.template = template;
331        }
332
333        /**
334         * Sets the value of typeId on this builder to the given value.
335         * 
336         * @param typeId the typeId value to set., must not be null or blank
337         * @throws IllegalArgumentException if the typeId is null or blank
338         * 
339         */
340        public void setTypeId(String typeId) {
341            if (org.apache.commons.lang.StringUtils.isBlank(typeId)) {
342                throw new IllegalArgumentException("typeId is null or blank");
343            }
344            this.typeId = typeId;
345        }
346
347        /**
348         * Sets the value of versionNumber on this builder to the given value.
349         * 
350         * @param versionNumber the versionNumber value to set.
351         * 
352         */
353        public void setVersionNumber(Long versionNumber) {
354            this.versionNumber = versionNumber;
355        }
356
357    }
358
359
360    /**
361     * Defines some internal constants used on this class.
362     * 
363     */
364    static class Constants {
365
366        final static String ROOT_ELEMENT_NAME = "naturalLanguageTemplate";
367        final static String TYPE_NAME = "NaturalLanguageTemplateType";
368
369    }
370
371
372    /**
373     * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML.
374     * 
375     */
376    static class Elements {
377
378        final static String ATTRIBUTES = "attributes";
379        final static String LANGUAGE_CODE = "languageCode";
380        final static String NATURAL_LANGUAGE_USAGE_ID = "naturalLanguageUsageId";
381        final static String TYPE_ID = "typeId";
382        final static String TEMPLATE = "template";
383        final static String ID = "id";
384        final static String ACTIVE = "active";
385
386    }
387
388    public static class Cache {
389        public static final String NAME = KrmsConstants.Namespaces.KRMS_NAMESPACE_2_0 + "/" + NaturalLanguageTemplate.Constants.TYPE_NAME;
390    }
391
392}