001    /**
002     * Copyright 2005-2013 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     */
016    package org.kuali.rice.krms.impl.repository;
017    
018    import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
019    import org.kuali.rice.krad.service.KRADServiceLocator;
020    import org.kuali.rice.krad.service.SequenceAccessorService;
021    import org.kuali.rice.krms.api.repository.language.NaturalLanguageTemplateAttribute;
022    import org.kuali.rice.krms.api.repository.language.NaturalLanguageTemplateAttributeContract;
023    import org.kuali.rice.krms.api.repository.type.KrmsAttributeDefinitionContract;
024    
025    /**
026     * The mutable implementation of the @{link NaturalLanguageTemplateAttributeContract} interface, the counterpart to the immutable implementation {@link NaturalLanguageTemplateAttribute}.
027     * @author Kuali Rice Team (rice.collab@kuali.org)
028     * 
029     */
030    public class NaturalLanguageTemplateAttributeBo
031        extends PersistableBusinessObjectBase
032        implements NaturalLanguageTemplateAttributeContract
033    {
034    
035        private String naturalLanguageTemplateId;
036        private Long versionNumber;
037        private String value;
038        private String attributeDefinitionId;
039        private KrmsAttributeDefinitionContract attributeDefinition;
040        private String id;
041        private SequenceAccessorService sequenceAccessorService;
042    
043        /**
044         * Default Constructor
045         * 
046         */
047        public NaturalLanguageTemplateAttributeBo() {
048        }
049    
050        @Override
051        public String getNaturalLanguageTemplateId() {
052            return this.naturalLanguageTemplateId;
053        }
054    
055        @Override
056        public Long getVersionNumber() {
057            return this.versionNumber;
058        }
059    
060        @Override
061        public String getValue() {
062            return this.value;
063        }
064    
065        @Override
066        public String getAttributeDefinitionId() {
067            return this.attributeDefinitionId;
068        }
069    
070        @Override
071        public KrmsAttributeDefinitionContract getAttributeDefinition() {
072            return this.attributeDefinition;
073        }
074    
075        @Override
076        public String getId() {
077            return this.id;
078        }
079    
080        /**
081         * Sets the value of naturalLanguageTemplateId on this builder to the given value.
082         * 
083         * @param naturalLanguageTemplateId the naturalLanguageTemplateId value to set.
084         * 
085         */
086        public void setNaturalLanguageTemplateId(String naturalLanguageTemplateId) {
087            this.naturalLanguageTemplateId = naturalLanguageTemplateId;
088        }
089    
090        /**
091         * Sets the value of versionNumber on this builder to the given value.
092         * 
093         * @param versionNumber the versionNumber value to set.
094         * 
095         */
096        public void setVersionNumber(Long versionNumber) {
097            this.versionNumber = versionNumber;
098        }
099    
100        /**
101         * Sets the value of value on this builder to the given value.
102         * 
103         * @param value the value value to set.
104         * 
105         */
106        public void setValue(String value) {
107            this.value = value;
108        }
109    
110        /**
111         * Sets the value of attributeDefinitionId on this builder to the given value.
112         * 
113         * @param attributeDefinitionId the attributeDefinitionId value to set.
114         * 
115         */
116        public void setAttributeDefinitionId(String attributeDefinitionId) {
117            this.attributeDefinitionId = attributeDefinitionId;
118        }
119    
120        /**
121         * Sets the value of attributeDefinition on this builder to the given value.
122         * 
123         * @param attributeDefinition the attributeDefinition value to set.
124         * 
125         */
126        public void setAttributeDefinition(KrmsAttributeDefinitionContract attributeDefinition) {
127            this.attributeDefinition = attributeDefinition;
128        }
129    
130        /**
131         * Sets the value of id on this builder to the given value.
132         * 
133         * @param id the id value to set.
134         * 
135         */
136        public void setId(String id) {
137            this.id = id;
138        }
139    
140        /**
141         * Converts a mutable {@link NaturalLanguageTemplateAttributeBo} to its immutable counterpart, {@link NaturalLanguageTemplateAttribute}.
142         * @param naturalLanguageTemplateAttributeBo the mutable business object.
143         * @return a {@link NaturalLanguageTemplateAttribute} the immutable object.
144         * 
145         */
146        public static NaturalLanguageTemplateAttribute to(NaturalLanguageTemplateAttributeBo naturalLanguageTemplateAttributeBo) {
147            if (naturalLanguageTemplateAttributeBo == null) { return null; }
148            return NaturalLanguageTemplateAttribute.Builder.create(naturalLanguageTemplateAttributeBo).build();
149        }
150    
151        /**
152         * Converts a immutable {@link NaturalLanguageTemplateAttribute} to its mutable {@link NaturalLanguageTemplateAttributeBo} counterpart.
153         * @param naturalLanguageTemplateAttribute the immutable object.
154         * @return a {@link NaturalLanguageTemplateAttributeBo} the mutable NaturalLanguageTemplateAttributeBo.
155         * 
156         */
157        public static org.kuali.rice.krms.impl.repository.NaturalLanguageTemplateAttributeBo from(NaturalLanguageTemplateAttribute naturalLanguageTemplateAttribute) {
158            if (naturalLanguageTemplateAttribute == null) return null;
159            NaturalLanguageTemplateAttributeBo naturalLanguageTemplateAttributeBo = new NaturalLanguageTemplateAttributeBo();
160            naturalLanguageTemplateAttributeBo.setNaturalLanguageTemplateId(naturalLanguageTemplateAttribute.getNaturalLanguageTemplateId());
161            naturalLanguageTemplateAttributeBo.setVersionNumber(naturalLanguageTemplateAttribute.getVersionNumber());
162            naturalLanguageTemplateAttributeBo.setValue(naturalLanguageTemplateAttribute.getValue());
163            naturalLanguageTemplateAttributeBo.setAttributeDefinitionId(naturalLanguageTemplateAttribute.getAttributeDefinitionId());
164            naturalLanguageTemplateAttributeBo.setAttributeDefinition(naturalLanguageTemplateAttribute.getAttributeDefinition());
165            naturalLanguageTemplateAttributeBo.setId(naturalLanguageTemplateAttribute.getId());
166            // TODO collections, etc.
167            return naturalLanguageTemplateAttributeBo;
168        }
169    
170        /**
171         * Returns the next available id for the given table and class.
172         * @return String the next available id for the given table and class.
173         * 
174         */
175        private String getNewId(String table, Class clazz) {
176            if (sequenceAccessorService == null) {
177                sequenceAccessorService = KRADServiceLocator.getSequenceAccessorService();
178            }
179            Long id = sequenceAccessorService.getNextAvailableSequenceNumber(table, clazz);
180            return id.toString();
181        }
182    
183        /**
184         * Set the SequenceAccessorService, useful for testing.
185         * @param sas SequenceAccessorService to use for getNewId.
186         * 
187         */
188        public void setSequenceAccessorService(SequenceAccessorService sas) {
189            sequenceAccessorService = sas;
190        }
191    
192        public SequenceAccessorService getSequenceAccessorService() {
193            return sequenceAccessorService;
194        }
195    
196    }