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.impl.repository;
017
018import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
019import org.kuali.rice.krad.service.KRADServiceLocator;
020import org.kuali.rice.krad.service.SequenceAccessorService;
021import org.kuali.rice.krms.api.repository.language.NaturalLanguageTemplateAttribute;
022import org.kuali.rice.krms.api.repository.language.NaturalLanguageTemplateAttributeContract;
023import 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 */
030public 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}