]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
857bb2426ecf61f5c6978da7c4cc089f227bd245
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.export;
2
3 import java.util.Iterator;
4
5 import org.collectionspace.services.client.PoxPayloadIn;
6 import org.collectionspace.services.client.PoxPayloadOut;
7 import org.collectionspace.services.common.NuxeoBasedResource;
8 import org.collectionspace.services.common.ServiceMain;
9 import org.collectionspace.services.common.config.TenantBindingConfigReaderImpl;
10 import org.collectionspace.services.common.context.ServiceBindingUtils;
11 import org.collectionspace.services.common.context.ServiceContext;
12 import org.collectionspace.services.common.invocable.InvocationContext;
13 import org.collectionspace.services.common.vocabulary.AuthorityResource;
14 import org.collectionspace.services.config.service.ServiceBindingType;
15 import org.collectionspace.services.relation.RelationsCommonList.RelationListItem;
16 import org.collectionspace.services.relation.RelationsDocListItem;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19
20 public class RelationObjectsByQueryIterator extends RelationsByQueryIterator implements Iterator<PoxPayloadOut> {
21         private final Logger logger = LoggerFactory.getLogger(RelationObjectsByQueryIterator.class);
22
23   RelationObjectsByQueryIterator(
24     ServiceContext<PoxPayloadIn, PoxPayloadOut> serviceContext,
25     String docType,
26     String vocabulary,
27     InvocationContext.Query query) throws Exception {
28
29     super(serviceContext, docType, vocabulary, query);
30   }
31
32   @Override
33   protected PoxPayloadOut getDocument(RelationListItem item) {
34     RelationsDocListItem relationObject = item.getObject();
35
36     String relationObjectCsid = relationObject.getCsid();
37     String relationObjectDocType = relationObject.getDocumentType();
38
39                 TenantBindingConfigReaderImpl tenantBindingConfigReader = ServiceMain.getInstance().getTenantBindingConfigReader();
40     ServiceBindingType relationObjectServiceBinding = tenantBindingConfigReader.getServiceBindingForDocType(serviceContext.getTenantId(), relationObjectDocType);
41     String relationObjectServiceType = relationObjectServiceBinding.getType();
42     String relationObjectServiceName = relationObjectServiceBinding.getName();
43
44     boolean relationObjectIsAuthorityItem = ServiceBindingUtils.SERVICE_TYPE_AUTHORITY.equals(relationObjectServiceType);
45
46     try {
47       NuxeoBasedResource relationObjectResource = relationObjectIsAuthorityItem
48         ? AuthorityResource.getResourceForItem(serviceContext.getResourceMap(), serviceContext.getTenantId(), relationObjectDocType)
49         : (NuxeoBasedResource) serviceContext.getResource(relationObjectServiceName.toLowerCase());
50
51       return (relationObjectIsAuthorityItem
52         ? ((AuthorityResource<?, ?>) relationObjectResource).getAuthorityItemWithExistingContext(serviceContext, AuthorityResource.PARENT_WILDCARD, relationObjectCsid)
53         : relationObjectResource.getWithParentCtx(serviceContext, relationObjectCsid));
54     }
55     catch (Exception e) {
56       logger.warn("Could not get document with csid " + relationObjectCsid, e);
57
58       return null;
59     }
60   }
61 }