1 package org.collectionspace.services.export;
3 import java.util.Iterator;
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;
20 public class RelationObjectsByQueryIterator extends RelationsByQueryIterator implements Iterator<PoxPayloadOut> {
21 private final Logger logger = LoggerFactory.getLogger(RelationObjectsByQueryIterator.class);
23 RelationObjectsByQueryIterator(
24 ServiceContext<PoxPayloadIn, PoxPayloadOut> serviceContext,
27 InvocationContext.Query query) throws Exception {
29 super(serviceContext, docType, vocabulary, query);
33 protected PoxPayloadOut getDocument(RelationListItem item) {
34 RelationsDocListItem relationObject = item.getObject();
36 String relationObjectCsid = relationObject.getCsid();
37 String relationObjectDocType = relationObject.getDocumentType();
39 TenantBindingConfigReaderImpl tenantBindingConfigReader = ServiceMain.getInstance().getTenantBindingConfigReader();
40 ServiceBindingType relationObjectServiceBinding = tenantBindingConfigReader.getServiceBindingForDocType(serviceContext.getTenantId(), relationObjectDocType);
41 String relationObjectServiceType = relationObjectServiceBinding.getType();
42 String relationObjectServiceName = relationObjectServiceBinding.getName();
44 boolean relationObjectIsAuthorityItem = ServiceBindingUtils.SERVICE_TYPE_AUTHORITY.equals(relationObjectServiceType);
47 NuxeoBasedResource relationObjectResource = relationObjectIsAuthorityItem
48 ? AuthorityResource.getResourceForItem(serviceContext.getResourceMap(), serviceContext.getTenantId(), relationObjectDocType)
49 : (NuxeoBasedResource) serviceContext.getResource(relationObjectServiceName.toLowerCase());
51 return (relationObjectIsAuthorityItem
52 ? ((AuthorityResource<?, ?>) relationObjectResource).getAuthorityItemWithExistingContext(serviceContext, AuthorityResource.PARENT_WILDCARD, relationObjectCsid)
53 : relationObjectResource.getWithParentCtx(serviceContext, relationObjectCsid));
56 logger.warn("Could not get document with csid " + relationObjectCsid, e);