View Javadoc

1   /**
2    * Copyright 2005-2012 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.rice.krms.impl.repository;
17  
18  
19  import org.apache.commons.lang.StringUtils;
20  import org.kuali.rice.krad.service.BusinessObjectService;
21  import org.kuali.rice.krms.api.repository.context.ContextDefinition;
22  import org.kuali.rice.krms.impl.util.KrmsImplConstants.PropertyNames;
23  
24  import java.util.*;
25  
26  /**
27   * This is the interface for accessing KRMS repository Context related
28   * business objects. 
29   * 
30   * @author Kuali Rice Team (rice.collab@kuali.org)
31   *
32   */
33  public final class ContextBoServiceImpl implements ContextBoService {
34  
35      private BusinessObjectService businessObjectService;
36  
37  	/**
38  	 * This method will create a {@link ContextDefinition} as described
39  	 * by the parameter passed in.
40  	 * 
41  	 * @see org.kuali.rice.krms.impl.repository.ContextBoService#createContext(org.kuali.rice.krms.api.repository.context.ContextDefinition)
42  	 */
43  	@Override
44  	public ContextDefinition createContext(ContextDefinition context) {
45  		if (context == null){
46  	        throw new IllegalArgumentException("context is null");
47  		}
48  		final String contextIdKey = context.getId();
49  		final ContextDefinition existing = getContextByContextId(contextIdKey);
50  		if (existing != null){
51              throw new IllegalStateException("the context to create already exists: " + context);			
52  		}	
53  		ContextBo bo = (ContextBo)businessObjectService.save(ContextBo.from(context));
54  		return ContextBo.to(bo);
55  	}
56  
57  	/**
58  	 * This method updates an existing Context in the repository.
59  	 */
60  	@Override
61  	public void updateContext(ContextDefinition context) {
62  		if (context == null){
63  	        throw new IllegalArgumentException("context is null");
64  		}
65  
66  		// must already exist to be able to update
67  		final String contextIdKey = context.getId();
68  		final ContextBo existing = businessObjectService.findBySinglePrimaryKey(ContextBo.class, contextIdKey);
69          if (existing == null) {
70              throw new IllegalStateException("the context does not exist: " + context);
71          }
72          final ContextDefinition toUpdate;
73          if (!existing.getId().equals(context.getId())){
74  			// if passed in id does not match existing id, correct it
75          	final ContextDefinition.Builder builder = ContextDefinition.Builder.create(context);
76          	builder.setId(existing.getId());
77          	toUpdate = builder.build();
78          } else {
79          	toUpdate = context;
80          }
81          
82  		// copy all updateable fields to bo
83  		ContextBo boToUpdate = ContextBo.from(toUpdate);
84  
85  		// delete any old, existing attributes
86  		Map<String,String> fields = new HashMap<String,String>(1);
87  		fields.put(PropertyNames.Context.CONTEXT_ID, toUpdate.getId());
88  		businessObjectService.deleteMatching(ContextAttributeBo.class, fields);
89          
90  		// update the rule and create new attributes
91          businessObjectService.save(boToUpdate);
92  	}
93  
94  	/**
95  	 * This overridden method ...
96  	 */
97  	@Override
98  	public ContextDefinition getContextByContextId(String contextId) {
99  		if (StringUtils.isBlank(contextId)){
100             return null;			
101 		}
102 		ContextBo bo = businessObjectService.findBySinglePrimaryKey(ContextBo.class, contextId);
103 		return ContextBo.to(bo);
104 	}
105 
106 	/**
107 	 * This overridden method ...
108 	 */
109 	public ContextDefinition getContextByNameAndNamespace( String name, String namespace ){
110 		if (StringUtils.isBlank(name)){
111 			throw new IllegalArgumentException("name is null or blank");
112 		}
113 		if (StringUtils.isBlank(namespace)){
114 			throw new IllegalArgumentException("namespace is null or blank");
115 		}
116         final Map<String, Object> map = new HashMap<String, Object>();
117         map.put("name", name);
118         map.put("namespace", namespace);
119 		ContextBo bo = businessObjectService.findByPrimaryKey(ContextBo.class, map);
120 		return ContextBo.to(bo);
121 	}
122 	
123 //	/**
124 //	 * This overridden method ...
125 //	 * 
126 //	 * @see org.kuali.rice.krms.impl.repository.ContextBoService#createContextAttribute(org.kuali.rice.krms.api.repository.ContextAttribute)
127 //	 */
128 //	@Override
129 //	public void createContextAttribute(ContextAttribute attribute) {
130 //		if (attribute == null){
131 //	        throw new IllegalArgumentException("context attribute is null");
132 //		}
133 //		final String attrIdKey = attribute.getId();
134 //		final ContextAttribute existing = getContextAttributeById(attrIdKey);
135 //		if (existing != null){
136 //            throw new IllegalStateException("the context attribute to create already exists: " + attribute);			
137 //		}
138 //		
139 //		businessObjectService.save(ContextAttributeBo.from(attribute));		
140 //	}
141 //
142 //	/**
143 //	 * This overridden method ...
144 //	 * 
145 //	 * @see org.kuali.rice.krms.impl.repository.ContextBoService#updateContextAttribute(org.kuali.rice.krms.api.repository.ContextAttribute)
146 //	 */
147 //	@Override
148 //	public void updateContextAttribute(ContextAttribute attribute) {
149 //		if (attribute == null){
150 //	        throw new IllegalArgumentException("context attribute is null");
151 //		}
152 //		final String attrIdKey = attribute.getId();
153 //		final ContextAttribute existing = getContextAttributeById(attrIdKey);
154 //        if (existing == null) {
155 //            throw new IllegalStateException("the context attribute does not exist: " + attribute);
156 //        }
157 //        final ContextAttribute toUpdate;
158 //        if (!existing.getId().equals(attribute.getContextId())){
159 //        	final ContextAttribute.Builder builder = ContextAttribute.Builder.create(attribute);
160 //        	builder.setId(existing.getId());
161 //        	toUpdate = builder.build();
162 //        } else {
163 //        	toUpdate = attribute;
164 //        }
165 //        
166 //        businessObjectService.save(ContextAttributeBo.from(toUpdate));		
167 //	}
168 //	
169 //	
170 //	/**
171 //	 * This method ...
172 //	 * 
173 //	 * @see org.kuali.rice.krms.impl.repository.ContextBoService#getContextsByRuleId(java.lang.String)
174 //	 */
175 //	public ContextAttribute getContextAttributeById(String attrId) {
176 //		if (StringUtils.isBlank(attrId)){
177 //            return null;			
178 //		}
179 //		ContextAttributeBo bo = businessObjectService.findBySinglePrimaryKey(ContextAttributeBo.class, attrId);
180 //		return ContextAttributeBo.to(bo);
181 //	}
182 
183 
184     /**
185      * Sets the businessObjectService attribute value.
186      *
187      * @param businessObjectService The businessObjectService to set.
188      */
189     public void setBusinessObjectService(final BusinessObjectService businessObjectService) {
190         this.businessObjectService = businessObjectService;
191     }
192 
193 
194 }