1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.rice.krms.test;
17  
18  import org.junit.Before;
19  import org.kuali.rice.core.api.criteria.QueryByCriteria;
20  import org.kuali.rice.core.api.criteria.QueryResults;
21  import org.kuali.rice.kns.service.KNSServiceLocator;
22  import org.kuali.rice.krad.data.DataObjectService;
23  import org.kuali.rice.krad.service.BusinessObjectService;
24  import org.kuali.rice.krad.service.KRADServiceLocator;
25  import org.kuali.rice.krms.api.repository.context.ContextDefinition;
26  import org.kuali.rice.krms.api.repository.type.KrmsAttributeDefinition;
27  import org.kuali.rice.krms.api.repository.type.KrmsTypeAttribute;
28  import org.kuali.rice.krms.api.repository.type.KrmsTypeDefinition;
29  import org.kuali.rice.krms.api.repository.type.KrmsTypeRepositoryService;
30  import org.kuali.rice.krms.impl.repository.ContextAttributeBo;
31  import org.kuali.rice.krms.impl.repository.ContextBo;
32  import org.kuali.rice.krms.impl.repository.ContextBoService;
33  import org.kuali.rice.krms.impl.repository.KrmsAttributeDefinitionBo;
34  import org.kuali.rice.krms.impl.repository.KrmsAttributeDefinitionService;
35  import org.kuali.rice.krms.impl.repository.KrmsRepositoryServiceLocator;
36  import org.kuali.rice.test.BaselineTestCase.BaselineMode;
37  import org.kuali.rice.test.BaselineTestCase.Mode;
38  import org.springframework.util.CollectionUtils;
39  
40  import java.util.ArrayList;
41  import java.util.Collection;
42  import java.util.Collections;
43  import java.util.List;
44  import java.util.Map;
45  
46  @BaselineMode(Mode.ROLLBACK)
47  public abstract class AbstractBoTest extends KRMSTestCase {
48  	
49      protected ContextBoService contextRepository;
50      protected KrmsTypeRepositoryService krmsTypeRepository;
51      protected KrmsAttributeDefinitionService krmsAttributeDefinitionService;
52  
53      @Override
54      @Before
55      public void setUp() throws Exception {
56          super.setUp();
57          contextRepository = KrmsRepositoryServiceLocator.getContextBoService();
58          krmsTypeRepository = KrmsRepositoryServiceLocator.getKrmsTypeRepositoryService();
59          krmsAttributeDefinitionService = KrmsRepositoryServiceLocator.getKrmsAttributeDefinitionService();
60      }
61  
62      protected BusinessObjectService getBoService() {
63  		return KNSServiceLocator.getBusinessObjectService();
64  	}
65  
66      protected DataObjectService getDataObjectService() {
67          return KRADServiceLocator.getDataObjectService();
68      }
69  
70      protected ContextDefinition createContextDefinition(String nameSpace, String name,
71              Map<String, String> contextAttributes) {
72          
73          List<KrmsTypeAttribute.Builder> contextAttributeBuilders = new ArrayList<KrmsTypeAttribute.Builder>();
74          int contextAttrSequenceIndex = 0;
75  
76          List<KrmsAttributeDefinition> attributeDefintions = new ArrayList<KrmsAttributeDefinition>();
77  
78          if (contextAttributes != null) for (Map.Entry<String,String> entry : contextAttributes.entrySet()) {
79              KrmsAttributeDefinition.Builder contextTypeAttributeDefnBuilder = KrmsAttributeDefinition.Builder.create(null, entry.getKey(), nameSpace);
80              contextTypeAttributeDefnBuilder.setLabel(entry.getKey() + " attribute label");
81              KrmsAttributeDefinition contextTypeAttributeDefinition = krmsAttributeDefinitionService.createAttributeDefinition(contextTypeAttributeDefnBuilder.build());
82              attributeDefintions.add(contextTypeAttributeDefinition);
83  
84              
85              contextAttributeBuilders.add(KrmsTypeAttribute.Builder.create(null, contextTypeAttributeDefinition.getId(),
86                      contextAttrSequenceIndex));
87              contextAttrSequenceIndex += 1;
88          }
89  
90          
91          KrmsTypeDefinition krmsContextTypeDefinition = krmsTypeRepository.getTypeByName(nameSpace, "KrmsTestContextType");
92  
93          if (krmsContextTypeDefinition == null) {
94              KrmsTypeDefinition.Builder krmsContextTypeDefnBuilder = KrmsTypeDefinition.Builder.create("KrmsTestContextType", nameSpace);
95              krmsContextTypeDefnBuilder.setAttributes(contextAttributeBuilders);
96              krmsContextTypeDefinition = krmsContextTypeDefnBuilder.build();
97              krmsContextTypeDefinition = krmsTypeRepository.createKrmsType(krmsContextTypeDefinition);
98          }
99  
100         
101         ContextDefinition.Builder contextBuilder = ContextDefinition.Builder.create(nameSpace, name);
102         contextBuilder.setTypeId(krmsContextTypeDefinition.getId());
103         ContextDefinition contextDefinition = contextBuilder.build();
104         contextDefinition = contextRepository.createContext(contextDefinition);
105 
106         
107         
108         for (KrmsAttributeDefinition contextTypeAttributeDefinition : attributeDefintions) {
109             ContextAttributeBo contextAttribute = new ContextAttributeBo();
110             contextAttribute.setAttributeDefinition(KrmsAttributeDefinitionBo.from(contextTypeAttributeDefinition));
111             contextAttribute.setContext(ContextBo.from(contextDefinition));
112             contextAttribute.setValue(contextAttributes.get(contextTypeAttributeDefinition.getName()));
113 
114             contextAttribute = getDataObjectService().save(contextAttribute);
115 
116 
117         }
118 
119         return contextDefinition;
120     }
121 
122     protected KrmsTypeDefinition createKrmsGenericTypeDefinition(String nameSpace, String serviceName,
123             String attributeDefinitionLabel, String attributeDefinitionName) {
124         KrmsTypeDefinition krmsGenericTypeDefinition = krmsTypeRepository.getTypeByName(nameSpace, "KrmsTestGenericType");
125 
126         if (null == krmsGenericTypeDefinition) {
127 
128             
129             KrmsAttributeDefinition.Builder genericTypeAttributeDefnBuilder = KrmsAttributeDefinition.Builder.create(null,
130                     attributeDefinitionName, nameSpace);
131             genericTypeAttributeDefnBuilder.setLabel(attributeDefinitionLabel);
132             KrmsAttributeDefinition genericTypeAttributeDefinition1 = krmsAttributeDefinitionService.createAttributeDefinition(genericTypeAttributeDefnBuilder.build());
133 
134             
135             KrmsTypeAttribute.Builder genericTypeAttrBuilder = KrmsTypeAttribute.Builder.create(null, genericTypeAttributeDefinition1.getId(), 1);
136 
137             
138             KrmsTypeDefinition.Builder krmsGenericTypeDefnBuilder = KrmsTypeDefinition.Builder.create("KrmsTestGenericType", nameSpace);
139             krmsGenericTypeDefnBuilder.setServiceName(serviceName);
140             krmsGenericTypeDefnBuilder.setAttributes(Collections.singletonList(genericTypeAttrBuilder));
141             krmsGenericTypeDefinition = krmsTypeRepository.createKrmsType(krmsGenericTypeDefnBuilder.build());
142 
143         }
144 
145         return krmsGenericTypeDefinition;
146     }
147 
148 
149     public String getNamespaceByContextName(String name) {
150         QueryByCriteria contextCrit = QueryByCriteria.Builder.forAttribute("name", name).build();
151         QueryResults<ContextBo> results = getDataObjectService().findMatching(ContextBo.class, contextCrit);
152         if (CollectionUtils.isEmpty(results.getResults())) {
153             return null;
154         }
155         if (results.getResults().size() != 1) {
156             throw new IllegalStateException(
157                     "getNamespaceByContextName can't handle a universe where multiple contexts have the same name");
158         }
159         return results.getResults().iterator().next().getNamespace();
160     }
161 
162     public ContextBoService getContextRepository() {
163         return contextRepository;
164     }
165 
166     public KrmsTypeRepositoryService getKrmsTypeRepository() {
167         return krmsTypeRepository;
168     }
169 
170     public KrmsAttributeDefinitionService getKrmsAttributeDefinitionService() {
171         return krmsAttributeDefinitionService;
172     }
173 
174 }