use of org.camunda.bpm.engine.rest.hal.HalResource in project camunda-bpm-platform by camunda.
the class HalResourceCacheTest method testEntityCaching.
@Test
public void testEntityCaching() {
String[] userIds = new String[] { "test" };
// mock user and query
User user = mock(User.class);
when(user.getId()).thenReturn(userIds[0]);
when(user.getFirstName()).thenReturn("kermit");
UserQuery userQuery = mock(UserQuery.class);
when(userQuery.userIdIn(Matchers.<String[]>anyVararg())).thenReturn(userQuery);
when(userQuery.listPage(anyInt(), anyInt())).thenReturn(Arrays.asList(user));
when(processEngine.getIdentityService().createUserQuery()).thenReturn(userQuery);
// configure cache
HalRelationCacheConfiguration configuration = new HalRelationCacheConfiguration();
configuration.setCacheImplementationClass(DefaultHalResourceCache.class);
Map<String, Object> halUserConfig = new HashMap<String, Object>();
halUserConfig.put("capacity", 100);
halUserConfig.put("secondsToLive", 10000);
configuration.addCacheConfiguration(HalUser.class, halUserConfig);
contextListener.configureCaches(configuration);
// cache exists and is empty
DefaultHalResourceCache cache = (DefaultHalResourceCache) Hal.getInstance().getHalRelationCache(HalUser.class);
assertNotNull(cache);
assertEquals(0, cache.size());
// get link resolver and resolve user
HalLinkResolver linkResolver = Hal.getInstance().getLinkResolver(UserRestService.class);
List<HalResource<?>> halUsers = linkResolver.resolveLinks(userIds, processEngine);
// mocked user was resolved
assertNotNull(halUsers);
assertEquals(1, halUsers.size());
HalUser halUser = (HalUser) halUsers.get(0);
assertEquals("kermit", halUser.getFirstName());
// cache contains user
assertEquals(1, cache.size());
// change user mock
when(user.getFirstName()).thenReturn("fritz");
// resolve users again
halUsers = linkResolver.resolveLinks(userIds, processEngine);
// cached mocked user was resolved with old name
assertNotNull(halUsers);
assertEquals(1, halUsers.size());
halUser = (HalUser) halUsers.get(0);
assertEquals("kermit", halUser.getFirstName());
forwardTime(cache.getSecondsToLive() * 3);
// resolve users again
halUsers = linkResolver.resolveLinks(userIds, processEngine);
// new mocked user was resolved with old name
assertNotNull(halUsers);
assertEquals(1, halUsers.size());
halUser = (HalUser) halUsers.get(0);
assertEquals("fritz", halUser.getFirstName());
}
use of org.camunda.bpm.engine.rest.hal.HalResource in project camunda-bpm-platform by camunda.
the class HalCachingLinkResolver method resolveLinks.
/**
* Resolve resources for linked ids, if configured uses a cache.
*/
public List<HalResource<?>> resolveLinks(String[] linkedIds, ProcessEngine processEngine) {
Cache cache = getCache();
if (cache == null) {
return resolveNotCachedLinks(linkedIds, processEngine);
} else {
ArrayList<String> notCachedLinkedIds = new ArrayList<String>();
List<HalResource<?>> resolvedResources = resolveCachedLinks(linkedIds, cache, notCachedLinkedIds);
if (!notCachedLinkedIds.isEmpty()) {
List<HalResource<?>> notCachedResources = resolveNotCachedLinks(notCachedLinkedIds.toArray(new String[notCachedLinkedIds.size()]), processEngine);
resolvedResources.addAll(notCachedResources);
putIntoCache(notCachedResources);
}
sortResolvedResources(resolvedResources);
return resolvedResources;
}
}
use of org.camunda.bpm.engine.rest.hal.HalResource in project camunda-bpm-platform by camunda.
the class HalCaseDefinitionResolver method resolveNotCachedLinks.
protected List<HalResource<?>> resolveNotCachedLinks(String[] linkedIds, ProcessEngine processEngine) {
RepositoryService repositoryService = processEngine.getRepositoryService();
List<CaseDefinition> caseDefinitions = repositoryService.createCaseDefinitionQuery().caseDefinitionIdIn(linkedIds).listPage(0, linkedIds.length);
List<HalResource<?>> resolved = new ArrayList<HalResource<?>>();
for (CaseDefinition caseDefinition : caseDefinitions) {
resolved.add(HalCaseDefinition.fromCaseDefinition(caseDefinition, processEngine));
}
return resolved;
}
use of org.camunda.bpm.engine.rest.hal.HalResource in project camunda-bpm-platform by camunda.
the class HalGroupResolver method resolveNotCachedLinks.
protected List<HalResource<?>> resolveNotCachedLinks(String[] linkedIds, ProcessEngine processEngine) {
IdentityService identityService = processEngine.getIdentityService();
List<Group> groups = identityService.createGroupQuery().groupIdIn(linkedIds).listPage(0, linkedIds.length);
List<HalResource<?>> resolvedGroups = new ArrayList<HalResource<?>>();
for (Group group : groups) {
resolvedGroups.add(HalGroup.fromGroup(group));
}
return resolvedGroups;
}
use of org.camunda.bpm.engine.rest.hal.HalResource in project camunda-bpm-platform by camunda.
the class HalProcessDefinitionResolver method resolveNotCachedLinks.
protected List<HalResource<?>> resolveNotCachedLinks(String[] linkedIds, ProcessEngine processEngine) {
RepositoryService repositoryService = processEngine.getRepositoryService();
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().processDefinitionIdIn(linkedIds).listPage(0, linkedIds.length);
List<HalResource<?>> resolved = new ArrayList<HalResource<?>>();
for (ProcessDefinition procDef : processDefinitions) {
resolved.add(HalProcessDefinition.fromProcessDefinition(procDef, processEngine));
}
return resolved;
}
Aggregations