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.reference.ReferenceObjectBinding;
022import org.kuali.rice.krms.api.repository.reference.ReferenceObjectBindingContract;
023
024/**
025 * The mutable implementation of the @{link ReferenceObjectBindingContract} interface, the counterpart to the immutable implementation {@link ReferenceObjectBinding}.
026 * @author Kuali Rice Team (rice.collab@kuali.org)
027 * 
028 */
029public class ReferenceObjectBindingBo
030    extends PersistableBusinessObjectBase
031    implements ReferenceObjectBindingContract
032{
033
034    private String collectionName;
035    private String krmsDiscriminatorType;
036    private String krmsObjectId;
037    private String namespace;
038    private String referenceDiscriminatorType;
039    private String referenceObjectId;
040    private String id;
041    private boolean active;
042    private Long versionNumber;
043    private SequenceAccessorService sequenceAccessorService;
044
045    /**
046     * Default Constructor
047     * 
048     */
049    public ReferenceObjectBindingBo() {
050    }
051
052    @Override
053    public String getCollectionName() {
054        return this.collectionName;
055    }
056
057    @Override
058    public String getKrmsDiscriminatorType() {
059        return this.krmsDiscriminatorType;
060    }
061
062    @Override
063    public String getKrmsObjectId() {
064        return this.krmsObjectId;
065    }
066
067    @Override
068    public String getNamespace() {
069        return this.namespace;
070    }
071
072    @Override
073    public String getReferenceDiscriminatorType() {
074        return this.referenceDiscriminatorType;
075    }
076
077    @Override
078    public String getReferenceObjectId() {
079        return this.referenceObjectId;
080    }
081
082    @Override
083    public String getId() {
084        return this.id;
085    }
086
087    @Override
088    public boolean isActive() {
089        return this.active;
090    }
091
092    @Override
093    public Long getVersionNumber() {
094        return this.versionNumber;
095    }
096
097    /**
098     * Sets the value of collectionName on this builder to the given value.
099     * 
100     * @param collectionName the collectionName value to set.
101     * 
102     */
103    public void setCollectionName(String collectionName) {
104        this.collectionName = collectionName;
105    }
106
107    /**
108     * Sets the value of krmsDiscriminatorType on this builder to the given value.
109     * 
110     * @param krmsDiscriminatorType the krmsDiscriminatorType value to set.
111     * 
112     */
113    public void setKrmsDiscriminatorType(String krmsDiscriminatorType) {
114        this.krmsDiscriminatorType = krmsDiscriminatorType;
115    }
116
117    /**
118     * Sets the value of krmsObjectId on this builder to the given value.
119     * 
120     * @param krmsObjectId the krmsObjectId value to set.
121     * 
122     */
123    public void setKrmsObjectId(String krmsObjectId) {
124        this.krmsObjectId = krmsObjectId;
125    }
126
127    /**
128     * Sets the value of namespace on this builder to the given value.
129     * 
130     * @param namespace the namespace value to set.
131     * 
132     */
133    public void setNamespace(String namespace) {
134        this.namespace = namespace;
135    }
136
137    /**
138     * Sets the value of referenceDiscriminatorType on this builder to the given value.
139     * 
140     * @param referenceDiscriminatorType the referenceDiscriminatorType value to set.
141     * 
142     */
143    public void setReferenceDiscriminatorType(String referenceDiscriminatorType) {
144        this.referenceDiscriminatorType = referenceDiscriminatorType;
145    }
146
147    /**
148     * Sets the value of referenceObjectId on this builder to the given value.
149     * 
150     * @param referenceObjectId the referenceObjectId value to set.
151     * 
152     */
153    public void setReferenceObjectId(String referenceObjectId) {
154        this.referenceObjectId = referenceObjectId;
155    }
156
157    /**
158     * Sets the value of id on this builder to the given value.
159     * 
160     * @param id the id value to set.
161     * 
162     */
163    public void setId(String id) {
164        this.id = id;
165    }
166
167    /**
168     * Sets the value of active on this builder to the given value.
169     * 
170     * @param active the active value to set.
171     * 
172     */
173    public void setActive(boolean active) {
174        this.active = active;
175    }
176
177    /**
178     * Sets the value of versionNumber on this builder to the given value.
179     * 
180     * @param versionNumber the versionNumber value to set.
181     * 
182     */
183    public void setVersionNumber(Long versionNumber) {
184        this.versionNumber = versionNumber;
185    }
186
187    /**
188     * Converts a mutable {@link ReferenceObjectBindingBo} to its immutable counterpart, {@link ReferenceObjectBinding}.
189     * @param referenceObjectBindingBo the mutable business object.
190     * @return a {@link ReferenceObjectBinding} the immutable object.
191     * 
192     */
193    public static ReferenceObjectBinding to(ReferenceObjectBindingBo referenceObjectBindingBo) {
194        if (referenceObjectBindingBo == null) { return null; }
195        return ReferenceObjectBinding.Builder.create(referenceObjectBindingBo).build();
196    }
197
198    /**
199     * Converts a immutable {@link ReferenceObjectBinding} to its mutable {@link ReferenceObjectBindingBo} counterpart.
200     * @param referenceObjectBinding the immutable object.
201     * @return a {@link ReferenceObjectBindingBo} the mutable ReferenceObjectBindingBo.
202     * 
203     */
204    public static org.kuali.rice.krms.impl.repository.ReferenceObjectBindingBo from(ReferenceObjectBinding referenceObjectBinding) {
205        if (referenceObjectBinding == null) return null;
206        ReferenceObjectBindingBo referenceObjectBindingBo = new ReferenceObjectBindingBo();
207        referenceObjectBindingBo.setCollectionName(referenceObjectBinding.getCollectionName());
208        referenceObjectBindingBo.setKrmsDiscriminatorType(referenceObjectBinding.getKrmsDiscriminatorType());
209        referenceObjectBindingBo.setKrmsObjectId(referenceObjectBinding.getKrmsObjectId());
210        referenceObjectBindingBo.setNamespace(referenceObjectBinding.getNamespace());
211        referenceObjectBindingBo.setReferenceDiscriminatorType(referenceObjectBinding.getReferenceDiscriminatorType());
212        referenceObjectBindingBo.setReferenceObjectId(referenceObjectBinding.getReferenceObjectId());
213        referenceObjectBindingBo.setId(referenceObjectBinding.getId());
214        referenceObjectBindingBo.setActive(referenceObjectBinding.isActive());
215        referenceObjectBindingBo.setVersionNumber(referenceObjectBinding.getVersionNumber());
216        // TODO collections, etc.
217        return referenceObjectBindingBo;
218    }
219
220    /**
221     * Returns the next available id for the given table and class.
222     * @return String the next available id for the given table and class.
223     * 
224     */
225    private String getNewId(String table, Class clazz) {
226        if (sequenceAccessorService == null) {
227            sequenceAccessorService = KRADServiceLocator.getSequenceAccessorService();
228        }
229        Long id = sequenceAccessorService.getNextAvailableSequenceNumber(table, clazz);
230        return id.toString();
231    }
232
233    /**
234     * Set the SequenceAccessorService, useful for testing.
235     * @param sas SequenceAccessorService to use for getNewId.
236     * 
237     */
238    public void setSequenceAccessorService(SequenceAccessorService sas) {
239        sequenceAccessorService = sas;
240    }
241
242    public SequenceAccessorService getSequenceAccessorService() {
243        return sequenceAccessorService;
244    }
245
246}