001/** 002 * Copyright 2005-2017 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.mock; 017 018import java.util.ArrayList; 019import java.util.LinkedHashMap; 020import java.util.List; 021import java.util.Map; 022import java.util.UUID; 023import org.kuali.rice.core.api.exception.RiceIllegalArgumentException; 024import org.kuali.rice.krms.api.repository.term.TermDefinition; 025import org.kuali.rice.krms.api.repository.term.TermRepositoryService; 026import org.kuali.rice.krms.api.repository.term.TermResolverDefinition; 027import org.kuali.rice.krms.api.repository.term.TermSpecificationDefinition; 028 029public class TermRepositoryServiceMockImpl implements TermRepositoryService { 030 // cache variable 031 // The LinkedHashMap is just so the values come back in a predictable order 032 033 private Map<String, TermDefinition> termMap = new LinkedHashMap<String, TermDefinition>(); 034 private Map<String, TermSpecificationDefinition> termSpecificationMap = new LinkedHashMap<String, TermSpecificationDefinition>(); 035 private Map<String, TermResolverDefinition> termResolverMap = new LinkedHashMap<String, TermResolverDefinition>(); 036 037 public void clear() { 038 this.termMap.clear(); 039 this.termSpecificationMap.clear(); 040 this.termResolverMap.clear(); 041 } 042 043 @Override 044 public List<TermResolverDefinition> findTermResolversByNamespace(String namespace) 045 throws RiceIllegalArgumentException { 046 List<TermResolverDefinition> list = new ArrayList<TermResolverDefinition>(); 047 for (TermResolverDefinition info : this.termResolverMap.values()) { 048 if (info.getNamespace().equals(namespace)) { 049 list.add(info); 050 } 051 } 052 return list; 053 } 054 055 @Override 056 public TermDefinition getTerm(String termId) 057 throws RiceIllegalArgumentException { 058 // GET_BY_ID 059 if (!this.termMap.containsKey(termId)) { 060 throw new RiceIllegalArgumentException(termId); 061 } 062 return this.termMap.get(termId); 063 } 064 065 @Override 066 public TermSpecificationDefinition getTermSpecificationById(String id) throws RiceIllegalArgumentException { 067 // GET_BY_ID 068 if (!this.termSpecificationMap.containsKey(id)) { 069 throw new RiceIllegalArgumentException(id); 070 } 071 return this.termSpecificationMap.get(id); 072 } 073 074 @Override 075 public TermSpecificationDefinition createTermSpecification(TermSpecificationDefinition termSpec) 076 throws RiceIllegalArgumentException { 077 try { 078 TermSpecificationDefinition orig = this.getTermSpecificationById(termSpec.getId()); 079 if (orig != null) { 080 throw new RiceIllegalArgumentException(termSpec.getId() + "." + termSpec.getName()); 081 } 082 } catch (RiceIllegalArgumentException ex) { 083 // same as getting null 084 } 085 TermSpecificationDefinition.Builder copy = TermSpecificationDefinition.Builder.create(termSpec); 086 if (copy.getId() == null) { 087 copy.setId(UUID.randomUUID().toString()); 088 } 089 TermSpecificationDefinition termSpecDefinition = copy.build(); 090 termSpecificationMap.put(termSpecDefinition.getId(), termSpecDefinition); 091 return termSpecDefinition; 092 } 093 094 @Override 095 public TermDefinition createTerm(TermDefinition termDef) throws RiceIllegalArgumentException { 096 try { 097 TermDefinition orig = this.getTerm(termDef.getId()); 098 if (orig != null) { 099 throw new RiceIllegalArgumentException(termDef.getId()); 100 } 101 } catch (RiceIllegalArgumentException ex) { 102 // same as getting null 103 } 104 TermDefinition.Builder copy = TermDefinition.Builder.create(termDef); 105 if (copy.getId() == null) { 106 copy.setId(UUID.randomUUID().toString()); 107 } 108 TermDefinition termDefinition = copy.build(); 109 termMap.put(termDefinition.getId(), termDefinition); 110 return termDefinition; 111 } 112 113 @Override 114 public TermResolverDefinition getTermResolverById(String id) throws RiceIllegalArgumentException { 115 // GET_BY_ID 116 if (!this.termResolverMap.containsKey(id)) { 117 throw new RiceIllegalArgumentException(id); 118 } 119 return this.termResolverMap.get(id); 120 } 121 122 @Override 123 public List<TermResolverDefinition> findTermResolversByOutputId(String id, String namespace) 124 throws RiceIllegalArgumentException { 125 List<TermResolverDefinition> list = new ArrayList<TermResolverDefinition>(); 126 for (TermResolverDefinition info : this.termResolverMap.values()) { 127 if (info.getNamespace().equals(namespace)) { 128 if (info.getOutput().getId().equals(id)) { 129 list.add(info); 130 } 131 } 132 } 133 return list; 134 } 135 136 @Override 137 public TermResolverDefinition createTermResolver(TermResolverDefinition termResolver) throws RiceIllegalArgumentException { 138 try { 139 TermResolverDefinition orig = this.getTermResolverById(termResolver.getId()); 140 if (orig != null) { 141 throw new RiceIllegalArgumentException(termResolver.getId() + "." + termResolver.getName()); 142 } 143 } catch (RiceIllegalArgumentException ex) { 144 // same as getting null 145 } 146 TermResolverDefinition.Builder copy = TermResolverDefinition.Builder.create(termResolver); 147 if (copy.getId() == null) { 148 copy.setId(UUID.randomUUID().toString()); 149 } 150 TermResolverDefinition termResolverDefinition = copy.build(); 151 termResolverMap.put(termResolverDefinition.getId(), termResolverDefinition); 152 return termResolverDefinition; 153 } 154 155 @Override 156 public void updateTermSpecification(TermSpecificationDefinition termSpec) throws RiceIllegalArgumentException { 157 TermSpecificationDefinition existing = this.getTermSpecificationById(termSpec.getId()); 158 if (existing == null) { 159 throw new RiceIllegalArgumentException(termSpec.getId() + " does not exist"); 160 } 161 this.termSpecificationMap.put(termSpec.getId(), termSpec); 162 163 } 164 165 @Override 166 public void deleteTermSpecification(String id) throws RiceIllegalArgumentException { 167 if (this.termSpecificationMap.remove(id) == null) { 168 throw new RiceIllegalArgumentException(id + " does not exist"); 169 } 170 } 171 172 @Override 173 public void updateTerm(TermDefinition termDef) throws RiceIllegalArgumentException { 174 TermDefinition existing = this.getTerm(termDef.getId()); 175 if (existing == null) { 176 throw new RiceIllegalArgumentException(termDef.getId() + " does not exist"); 177 } 178 this.termMap.put(termDef.getId(), termDef); 179 } 180 181 @Override 182 public void deleteTerm(String id) throws RiceIllegalArgumentException { 183 if (this.termMap.remove(id) == null) { 184 throw new RiceIllegalArgumentException(id + " does not exist"); 185 } 186 } 187 188 @Override 189 public void updateTermResolver(TermResolverDefinition termResolver) throws RiceIllegalArgumentException { 190 TermResolverDefinition existing = this.getTermResolverById(termResolver.getId()); 191 if (existing == null) { 192 throw new RiceIllegalArgumentException(termResolver.getId() + " does not exist"); 193 } 194 this.termResolverMap.put(termResolver.getId(), termResolver); 195 } 196 197 @Override 198 public void deleteTermResolver(String id) throws RiceIllegalArgumentException { 199 if (this.termResolverMap.remove(id) == null) { 200 throw new RiceIllegalArgumentException(id + " does not exist"); 201 } 202 } 203 204 @Override 205 public TermResolverDefinition getTermResolverByNameAndNamespace(String name, String namespace) 206 throws RiceIllegalArgumentException { 207 if (name == null || name.trim().isEmpty()) { 208 throw new RiceIllegalArgumentException ("name is " + name); 209 } 210 if (namespace == null || namespace.trim().isEmpty()) { 211 throw new RiceIllegalArgumentException ("namespace is " + namespace); 212 } 213 for (TermResolverDefinition info : this.termResolverMap.values()) { 214 if (namespace.equals(info.getNamespace())) { 215 if (name.equals(name)) { 216 return info; 217 } 218 } 219 } 220 return null; 221 } 222 223 @Override 224 public TermSpecificationDefinition getTermSpecificationByNameAndNamespace(String name, String namespace) 225 throws RiceIllegalArgumentException { 226 if (name == null || name.trim().isEmpty()) { 227 throw new RiceIllegalArgumentException ("name is " + name); 228 } 229 if (namespace == null || namespace.trim().isEmpty()) { 230 throw new RiceIllegalArgumentException ("namespace is " + namespace); 231 } 232 for (TermSpecificationDefinition info : this.termSpecificationMap.values()) { 233 if (namespace.equals(info.getNamespace())) { 234 if (name.equals(name)) { 235 return info; 236 } 237 } 238 } 239 return null; 240 } 241 242 @Override 243 public List<TermSpecificationDefinition> findAllTermSpecificationsByContextId(String contextId) { 244 throw new UnsupportedOperationException(getClass().getName() + " does not support this operation"); 245 } 246}