View Javadoc

1   /*
2    * Copyright 2011 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.osedu.org/licenses/ECL-2.0
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.student.service.impl.mock;
17  
18  import java.util.ArrayList;
19  import java.util.Date;
20  import java.util.LinkedHashMap;
21  import java.util.List;
22  import java.util.Map;
23  import org.kuali.rice.core.api.criteria.QueryByCriteria;
24  import org.kuali.student.common.UUIDHelper;
25  import org.kuali.student.common.mock.MockService;
26  import org.kuali.student.r1.common.dictionary.dto.ObjectStructureDefinition;
27  import org.kuali.student.r2.common.dto.ContextInfo;
28  import org.kuali.student.r2.common.dto.MetaInfo;
29  import org.kuali.student.r2.common.dto.StatusInfo;
30  import org.kuali.student.r2.common.dto.ValidationResultInfo;
31  import org.kuali.student.r2.common.exceptions.DataValidationErrorException;
32  import org.kuali.student.r2.common.exceptions.DependentObjectsExistException;
33  import org.kuali.student.r2.common.exceptions.DoesNotExistException;
34  import org.kuali.student.r2.common.exceptions.InvalidParameterException;
35  import org.kuali.student.r2.common.exceptions.MissingParameterException;
36  import org.kuali.student.r2.common.exceptions.OperationFailedException;
37  import org.kuali.student.r2.common.exceptions.PermissionDeniedException;
38  import org.kuali.student.r2.common.exceptions.ReadOnlyException;
39  import org.kuali.student.r2.common.exceptions.VersionMismatchException;
40  import org.kuali.student.r2.core.class1.type.dto.TypeInfo;
41  import org.kuali.student.r2.core.proposal.dto.ProposalInfo;
42  import org.kuali.student.r2.core.proposal.service.ProposalService;
43  import org.kuali.student.r2.core.search.dto.SearchRequestInfo;
44  import org.kuali.student.r2.core.search.dto.SearchResultInfo;
45  
46  public class ProposalServiceMockImpl implements MockService, ProposalService {
47      // cache variable 
48      // The LinkedHashMap is just so the values come back in a predictable order
49  
50      private Map<String, ProposalInfo> proposalMap = new LinkedHashMap<String, ProposalInfo>();
51  
52      @Override
53      public void clear() {
54          this.proposalMap.clear();
55      }
56  
57      @Override
58      public ProposalInfo getProposal(String proposalId, ContextInfo contextInfo)
59              throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
60          // GET_BY_ID
61          if (!this.proposalMap.containsKey(proposalId)) {
62              throw new OperationFailedException(proposalId);
63          }
64          return new ProposalInfo(this.proposalMap.get(proposalId));
65      }
66  
67      @Override
68      public List<ProposalInfo> getProposalsByIds(List<String> proposalIds, ContextInfo contextInfo)
69              throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
70          // GET_BY_IDS
71          List<ProposalInfo> list = new ArrayList<ProposalInfo>();
72          for (String id : proposalIds) {
73              list.add(this.getProposal(id, contextInfo));
74          }
75          return list;
76      }
77  
78      @Override
79      public List<ProposalInfo> getProposalsByProposalType(String proposalTypeKey, ContextInfo contextInfo)
80              throws InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
81          // GET_INFOS_BY_OTHER
82          List<ProposalInfo> list = new ArrayList<ProposalInfo>();
83          for (ProposalInfo info : proposalMap.values()) {
84              if (proposalTypeKey.equals(info.getTypeKey())) {
85                  list.add(new ProposalInfo(info));
86              }
87          }
88          return list;
89      }
90  
91      @Override
92      public List<ProposalInfo> getProposalsByReference(String referenceTypeKey, String referenceId, ContextInfo contextInfo)
93              throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
94          // GET_INFOS_BY_OTHER
95          List<ProposalInfo> list = new ArrayList<ProposalInfo>();
96          for (ProposalInfo info : proposalMap.values()) {
97              if (referenceTypeKey.equals(info.getTypeKey())) {
98                  if (info.getProposalReference().contains(referenceId)) {
99                      list.add(new ProposalInfo(info));
100                 }
101             }
102         }
103         return list;
104     }
105 
106     @Override
107     public List<ProposalInfo> getProposalsByState(String proposalState, String proposalTypeKey, ContextInfo contextInfo)
108             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
109         // GET_INFOS_BY_OTHER
110         List<ProposalInfo> list = new ArrayList<ProposalInfo>();
111         for (ProposalInfo info : proposalMap.values()) {
112             if (proposalState.equals(info.getStateKey())) {
113                 if (proposalTypeKey.equals(info.getTypeKey())) {
114                     list.add(new ProposalInfo(info));
115                 }
116             }
117         }
118         return list;
119     }
120 
121     @Override
122     public ProposalInfo getProposalByWorkflowId(String workflowId, ContextInfo contextInfo)
123             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
124         // GET_BY_ID
125         if (!this.proposalMap.containsKey(workflowId)) {
126             throw new OperationFailedException(workflowId);
127         }
128         return new ProposalInfo(this.proposalMap.get(workflowId));
129     }
130 
131     @Override
132     public List<ValidationResultInfo> validateProposal(String validationTypeKey, ProposalInfo proposalInfo, ContextInfo contextInfo)
133             throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException {
134         // VALIDATE
135         return new ArrayList<ValidationResultInfo>();
136     }
137 
138     @Override
139     public ProposalInfo createProposal(String proposalTypeKey, ProposalInfo proposalInfo, ContextInfo contextInfo)
140             throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, ReadOnlyException {
141         // CREATE
142         if (!proposalTypeKey.equals(proposalInfo.getTypeKey())) {
143             throw new InvalidParameterException("The type parameter does not match the type on the info object");
144         }
145         ProposalInfo copy = new ProposalInfo(proposalInfo);
146         if (copy.getId() == null) {
147             copy.setId(UUIDHelper.genStringUUID());
148         }
149         copy.setMeta(newMeta(contextInfo));
150         proposalMap.put(copy.getId(), copy);
151         return new ProposalInfo(copy);
152     }
153 
154     @Override
155     public ProposalInfo updateProposal(String proposalId, ProposalInfo proposalInfo, ContextInfo contextInfo)
156             throws DataValidationErrorException, DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException, VersionMismatchException {
157         // UPDATE
158         if (!proposalId.equals(proposalInfo.getId())) {
159             throw new InvalidParameterException("The id parameter does not match the id on the info object");
160         }
161         ProposalInfo copy = new ProposalInfo(proposalInfo);
162         ProposalInfo old = this.getProposal(proposalInfo.getId(), contextInfo);
163         if (!old.getMeta().getVersionInd().equals(copy.getMeta().getVersionInd())) {
164             throw new VersionMismatchException(old.getMeta().getVersionInd());
165         }
166         copy.setMeta(updateMeta(copy.getMeta(), contextInfo));
167         this.proposalMap.put(proposalInfo.getId(), copy);
168         return new ProposalInfo(copy);
169     }
170 
171     @Override
172     public StatusInfo deleteProposal(String proposalId, ContextInfo contextInfo)
173             throws DoesNotExistException, InvalidParameterException, MissingParameterException, DependentObjectsExistException, OperationFailedException, PermissionDeniedException {
174         // DELETE
175         if (this.proposalMap.remove(proposalId) == null) {
176             throw new OperationFailedException(proposalId);
177         }
178         return newStatus();
179     }
180 
181     @Override
182     public List<String> searchForProposalIds(QueryByCriteria criteria, ContextInfo contextInfo)
183             throws InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
184         // UNKNOWN
185         throw new OperationFailedException("searchForProposalIds has not been implemented");
186     }
187 
188     @Override
189     public List<ProposalInfo> searchForProposals(QueryByCriteria criteria, ContextInfo contextInfo)
190             throws InvalidParameterException, MissingParameterException, OperationFailedException, PermissionDeniedException {
191         // UNKNOWN
192         throw new OperationFailedException("searchForProposals has not been implemented");
193     }
194 
195     private StatusInfo newStatus() {
196         StatusInfo status = new StatusInfo();
197         status.setSuccess(Boolean.TRUE);
198         return status;
199     }
200 
201     private MetaInfo newMeta(ContextInfo context) {
202         MetaInfo meta = new MetaInfo();
203         meta.setCreateId(context.getPrincipalId());
204         meta.setCreateTime(new Date());
205         meta.setUpdateId(context.getPrincipalId());
206         meta.setUpdateTime(meta.getCreateTime());
207         meta.setVersionInd("0");
208         return meta;
209     }
210 
211     private MetaInfo updateMeta(MetaInfo old, ContextInfo context) {
212         MetaInfo meta = new MetaInfo(old);
213         meta.setUpdateId(context.getPrincipalId());
214         meta.setUpdateTime(new Date());
215         meta.setVersionInd((Integer.parseInt(meta.getVersionInd()) + 1) + "");
216         return meta;
217     }
218 
219     @Override
220     public List<String> getObjectTypes() {
221         throw new UnsupportedOperationException("Not supported yet.");
222     }
223 
224     @Override
225     public ObjectStructureDefinition getObjectStructure(String objectTypeKey) {
226         throw new UnsupportedOperationException("Not supported yet.");
227     }
228 
229     @Override
230     public List<TypeInfo> getSearchTypes(ContextInfo contextInfo) throws InvalidParameterException, MissingParameterException, OperationFailedException {
231         throw new UnsupportedOperationException("Not supported yet.");
232     }
233 
234     @Override
235     public TypeInfo getSearchType(String searchTypeKey, ContextInfo contextInfo) throws DoesNotExistException, InvalidParameterException, MissingParameterException, OperationFailedException {
236         throw new UnsupportedOperationException("Not supported yet.");
237     }
238 
239     @Override
240     public SearchResultInfo search(SearchRequestInfo searchRequestInfo, ContextInfo contextInfo) throws MissingParameterException, OperationFailedException, PermissionDeniedException {
241         throw new UnsupportedOperationException("Not supported yet.");
242     }
243 }