From: Patrick Schmitz Date: Tue, 15 Nov 2011 00:22:26 +0000 (+0000) Subject: CSPACE-1927 Update to displayName for an authority item will update all the reference... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=e35abcb663f201ce13a72ae0ea46638c5bcc1e70;p=tmp%2Fjakarta-migration.git CSPACE-1927 Update to displayName for an authority item will update all the references to that item. Loops through found referring objects in sets of 100, updates the fields that match, and saves en bulk (does not invoke normal validation, etc.). Fixed some minor bugs in Person Validation handlers that would produce gratuitous errors. --- diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/authrefs/authrefs.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/authrefs/authrefs.xml index c319a4c1e..97102274c 100644 --- a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/authrefs/authrefs.xml +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/authrefs/authrefs.xml @@ -1,57 +1,217 @@ - - - - POST - /cspace-services/personauthorities/ - authrefs/newPersonAuthority.xml - - - POST - /cspace-services/personauthorities/${PersonAuth1.CSID}/items/ - authrefs/newPerson1.xml - - - POST - /cspace-services/personauthorities/${PersonAuth1.CSID}/items/ - authrefs/newPerson2.xml - - - - POST - /cspace-services/loansout/ - authrefs/loanout.xml - - 42 - ${Person1.CSID} - - - - - POST - /cspace-services/loansout/ - authrefs/loanout.xml - - 69 - ${Person2.CSID} - - - - - PUT - /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person1.CSID} - authrefs/updatePerson1.xml - - - - PUT - /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person2.CSID} - authrefs/updatePerson2.xml - - + + + + POST + /cspace-services/personauthorities/ + authrefs/newPersonAuthority.xml + + + POST + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/ + authrefs/newPerson1.xml + + + POST + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/ + authrefs/newPerson2.xml + + + GET + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person1.CSID} + + + + GET + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person2.CSID} + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 42 + ${GetPerson1.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 102 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 103 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 104 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 105 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 106 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 107 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 108 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 109 + ${GetPerson2.got("//refName")} + + + + + POST + /cspace-services/loansout/ + authrefs/loanout.xml + + 110 + ${GetPerson2.got("//refName")} + + + + + PUT + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person1.CSID} + authrefs/updatePerson1.xml + + + + PUT + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person2.CSID} + authrefs/updatePerson2.xml + + + + GET + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person1.CSID} + + + authrefs/updatePerson1.xml + + + + + GET + /cspace-services/personauthorities/${PersonAuth1.CSID}/items/${Person2.CSID} + + + authrefs/updatePerson2.xml + + + + + GET + /cspace-services/loansout/${loanout1.CSID} + + + + authrefs/res/loanout.res.xml + + ${GetFirstUpdatedPerson.got("//refName")} + + + + + + GET + /cspace-services/loansout/${loanout2.CSID} + + + + authrefs/res/loanout.res.xml + + ${GetSecondUpdatedPerson.got("//refName")} + + + + + GET + /cspace-services/loansout/${loanout5.CSID} + + + + authrefs/res/loanout.res.xml + + ${GetSecondUpdatedPerson.got("//refName")} + + + + + + GET + /cspace-services/loansout/${loanout9.CSID} + + + + authrefs/res/loanout.res.xml + + ${GetSecondUpdatedPerson.got("//refName")} + + + + + + diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/authrefs/res/loanout.res.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/authrefs/res/loanout.res.xml new file mode 100644 index 000000000..ee63091ca --- /dev/null +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/authrefs/res/loanout.res.xml @@ -0,0 +1,7 @@ + + + + ${person} + + + diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml index e78cd5c63..686cb68e3 100755 --- a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/xml-replay-master.xml @@ -53,6 +53,8 @@ + + diff --git a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java index 2764731c5..0ada88dd6 100644 --- a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java +++ b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/AuthorityResource.java @@ -740,9 +740,13 @@ public abstract class AuthorityResource DocumentModel docModel = docWrapper.getWrappedObject(); String refName = (String) docModel.getPropertyValue(AuthorityItemJAXBSchema.REF_NAME); + // Could be smarter about using the list from above, and/or allowing multiple + ArrayList serviceTypes = new ArrayList(1); + serviceTypes.add(serviceType); + authRefDocList = RefNameServiceUtils.getAuthorityRefDocs(ctx, repoClient, - serviceType, + serviceTypes, refName, getRefPropName(), myFilter.getPageSize(), myFilter.getStartPage(), true /*computeTotal*/); diff --git a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/RefNameServiceUtils.java b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/RefNameServiceUtils.java index 56fb51779..eedc243c7 100644 --- a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/RefNameServiceUtils.java +++ b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/RefNameServiceUtils.java @@ -33,11 +33,15 @@ import java.util.Map; import org.nuxeo.ecm.core.api.ClientException; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.DocumentModelList; +import org.nuxeo.ecm.core.api.model.Property; +import org.nuxeo.ecm.core.api.model.PropertyException; +import org.nuxeo.ecm.core.api.model.impl.primitives.StringProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.collectionspace.services.common.ServiceMain; import org.collectionspace.services.common.context.ServiceContext; +import org.collectionspace.services.common.api.Tools; import org.collectionspace.services.common.authorityref.AuthorityRefDocList; import org.collectionspace.services.common.authorityref.AuthorityRefList; import org.collectionspace.services.common.config.TenantBindingConfigReaderImpl; @@ -47,6 +51,7 @@ import org.collectionspace.services.common.document.DocumentNotFoundException; import org.collectionspace.services.common.document.DocumentUtils; import org.collectionspace.services.common.document.DocumentWrapper; import org.collectionspace.services.common.repository.RepositoryClient; +import org.collectionspace.services.nuxeo.client.java.RepositoryJavaClientImpl; import org.collectionspace.services.common.service.ServiceBindingType; import org.collectionspace.services.jaxb.AbstractCommonList; import org.collectionspace.services.nuxeo.util.NuxeoUtils; @@ -60,10 +65,12 @@ import org.collectionspace.services.nuxeo.util.NuxeoUtils; public class RefNameServiceUtils { private static final Logger logger = LoggerFactory.getLogger(RefNameServiceUtils.class); + + private static ArrayList refNameServiceTypes = null; public static AuthorityRefDocList getAuthorityRefDocs(ServiceContext ctx, RepositoryClient repoClient, - String serviceType, + List serviceTypes, String refName, String refPropName, int pageSize, int pageNum, boolean computeTotal) throws DocumentException, DocumentNotFoundException { @@ -73,11 +80,96 @@ public class RefNameServiceUtils { commonList.setPageSize(pageSize); List list = wrapperList.getAuthorityRefDocItem(); + + Map queriedServiceBindings = new HashMap(); + Map> authRefFieldsByService = new HashMap>(); + + DocumentModelList docList = findAuthorityRefDocs(ctx, repoClient, serviceTypes, refName, refPropName, + queriedServiceBindings, authRefFieldsByService, pageSize, pageNum, computeTotal); + + if (docList == null) { // found no authRef fields - nothing to process + return wrapperList; + } + // Set num of items in list. this is useful to our testing framework. + commonList.setItemsInPage(docList.size()); + // set the total result size + commonList.setTotalItems(docList.totalSize()); + + int nRefsFound = processRefObjsDocList(docList, refName, queriedServiceBindings, authRefFieldsByService, + list, null); + if(logger.isDebugEnabled() && (nRefsFound < docList.size())) { + logger.debug("Internal curiosity: got fewer matches of refs than # docs matched..."); + } + return wrapperList; + } + + private static ArrayList getRefNameServiceTypes() { + if(refNameServiceTypes == null) { + refNameServiceTypes = new ArrayList(); + refNameServiceTypes.add(ServiceBindingUtils.SERVICE_TYPE_AUTHORITY); + refNameServiceTypes.add(ServiceBindingUtils.SERVICE_TYPE_OBJECT); + refNameServiceTypes.add(ServiceBindingUtils.SERVICE_TYPE_PROCEDURE); + } + return refNameServiceTypes; + } + + public static int updateAuthorityRefDocs(ServiceContext ctx, + RepositoryClient repoClient, + String oldRefName, + String newRefName, + String refPropName ) { + Map queriedServiceBindings = new HashMap(); + Map> authRefFieldsByService = new HashMap>(); + int nRefsFound = 0; + if(!(repoClient instanceof RepositoryJavaClientImpl)) { + throw new InternalError("updateAuthorityRefDocs() called with unknown repoClient type!"); + } + try { + final int pageSize = 100; // Seems like a good value - no real data to set this well. + int pageNumProcessed = 1; + while(true) { // Keep looping until we find all the refs. + logger.debug("updateAuthorityRefDocs working on page: "+pageNumProcessed); + // Note that we always ask the Repo for the first page, since each page we process + // should not be found in successive searches. + DocumentModelList docList = findAuthorityRefDocs(ctx, repoClient, getRefNameServiceTypes(), oldRefName, refPropName, + queriedServiceBindings, authRefFieldsByService, pageSize, 0, false); + + if((docList == null) // found no authRef fields - nothing to do + || (docList.size() == 0)) { // No more to handle + logger.debug("updateAuthorityRefDocs no more results"); + break; + } + logger.debug("updateAuthorityRefDocs curr page result list size: "+docList.size()); + int nRefsFoundThisPage = processRefObjsDocList(docList, oldRefName, queriedServiceBindings, authRefFieldsByService, + null, newRefName); + if(nRefsFoundThisPage>0) { + ((RepositoryJavaClientImpl)repoClient).saveDocListWithoutHandlerProcessing(ctx, docList, true); + nRefsFound += nRefsFoundThisPage; + } + pageNumProcessed++; + } + } catch(Exception e) { + logger.error("Internal error updating the AuthorityRefDocs: " + e.getLocalizedMessage()); + logger.debug(Tools.errorToString(e, true)); + } + logger.debug("updateAuthorityRefDocs replaced a total of: "+nRefsFound); + return nRefsFound; + } + + private static DocumentModelList findAuthorityRefDocs(ServiceContext ctx, + RepositoryClient repoClient, + List serviceTypes, + String refName, + String refPropName, + Map queriedServiceBindings, + Map> authRefFieldsByService, + int pageSize, int pageNum, boolean computeTotal) throws DocumentException, DocumentNotFoundException { // Get the service bindings for this tenant TenantBindingConfigReaderImpl tReader = ServiceMain.getInstance().getTenantBindingConfigReader(); - List servicebindings = tReader.getServiceBindingsByType(ctx.getTenantId(), serviceType); + // We need to get all the procedures, authorities, and objects. + List servicebindings = tReader.getServiceBindingsByType(ctx.getTenantId(), serviceTypes); if (servicebindings == null || servicebindings.isEmpty()) { logger.error("RefNameServiceUtils.getAuthorityRefDocs: No services bindings found, cannot proceed!"); return null; @@ -87,28 +179,18 @@ public class RefNameServiceUtils { // TODO What if they are already escaped? String escapedRefName = refName.replaceAll("'", "\\\\'"); ArrayList docTypes = new ArrayList(); - Map queriedServiceBindings = new HashMap(); - Map> authRefFieldsByService = new HashMap>(); String query = computeWhereClauseForAuthorityRefDocs(escapedRefName, refPropName, docTypes, servicebindings, queriedServiceBindings, authRefFieldsByService ); if (query == null) { // found no authRef fields - nothing to query - return wrapperList; + return null; } // Now we have to issue the search DocumentWrapper docListWrapper = repoClient.findDocs(ctx, docTypes, query, pageSize, pageNum, computeTotal); // Now we gather the info for each document into the list and return DocumentModelList docList = docListWrapper.getWrappedObject(); - // Set num of items in list. this is useful to our testing framework. - commonList.setItemsInPage(docList.size()); - // set the total result size - commonList.setTotalItems(docList.totalSize()); - - processRefObjsDocList(docList, refName, servicebindings, - queriedServiceBindings, authRefFieldsByService, - list, null); - return wrapperList; + return docList; } private static String computeWhereClauseForAuthorityRefDocs( @@ -173,16 +255,28 @@ public class RefNameServiceUtils { /* * Runs through the list of found docs, processing them. * If list is non-null, then processing means gather the info for items. - * If list is null, and newRefName is non-null, then processing means replacing and updating. + * If list is null, and newRefName is non-null, then processing means replacing and updating. + * If processing/updating, this must be called in teh context of an open session, and caller + * must release Session after calling this. + * */ - private static void processRefObjsDocList(DocumentModelList docList, + private static int processRefObjsDocList( + DocumentModelList docList, String refName, - List servicebindings, Map queriedServiceBindings, Map> authRefFieldsByService, List list, String newAuthorityRefName) { + if(newAuthorityRefName==null) { + if(list==null) { + throw new InternalError("processRefObjsDocList() called with neither an itemList nor a new RefName!"); + } + } else if(list!=null) { + throw new InternalError("processRefObjsDocList() called with both an itemList and a new RefName!"); + } + Iterator iter = docList.iterator(); + int nRefsFoundTotal = 0; while (iter.hasNext()) { DocumentModel docModel = iter.next(); AuthorityRefDocList.AuthorityRefDocItem ilistItem; @@ -210,7 +304,7 @@ public class RefNameServiceUtils { ServiceBindingUtils.getMappedFieldInDoc(sb, ServiceBindingUtils.OBJ_NAME_PROP, docModel)); } // Now, we have to loop over the authRefFieldsByService to figure - // out which field matched this. Ignore multiple matches. + // out which field(s) matched this. Map matchingAuthRefFields = authRefFieldsByService.get(docType); if (matchingAuthRefFields == null || matchingAuthRefFields.isEmpty()) { throw new RuntimeException( @@ -219,20 +313,21 @@ public class RefNameServiceUtils { String authRefAncestorField = ""; String authRefDescendantField = ""; String sourceField = ""; - boolean fRefFound = false; + int nRefsFoundInDoc = 0; // Use this if we go to qualified field names for (String path : matchingAuthRefFields.keySet()) { try { // This is the field name we show in the return info + // Returned as a schema-qualified property path authRefAncestorField = (String) matchingAuthRefFields.get(path); // This is the qualified field we have to get from the doc model authRefDescendantField = DocumentUtils.getDescendantOrAncestor(path); // The ancestor field is part-schema (tablename) qualified - String[] strings = authRefAncestorField.split(":"); - if (strings.length != 2) { - throw new RuntimeException( - "getAuthorityRefDocs: Bad configuration of path to authority reference field."); - } + //String[] strings = authRefAncestorField.split(":"); + //if (strings.length != 2) { + // throw new RuntimeException( + // "getAuthorityRefDocs: Bad configuration of path to authority reference field."); + //} // strings[0] holds a schema name, such as "intakes_common" // // strings[1] holds: @@ -243,13 +338,19 @@ public class RefNameServiceUtils { // field, such as "fieldCollector". // TODO - if the value is not simple, or repeating scalar, need a more // sophisticated fetch. - Object fieldValue = docModel.getProperty(strings[0], strings[1]); - // We cannot be sure why we have this doc, so look for matches - boolean fRefMatches = refNameFoundInField(refName, fieldValue); - if (fRefMatches) { + // Change this to an XPath model + //Object fieldValue = docModel.getProperty(strings[0], strings[1]); + // This will have to handle repeating complex fields by iterating over the possibilities + // and finding the one that matches. + Property fieldValue = docModel.getProperty(authRefAncestorField); + // We know this doc should have a match somewhere, but it may not be in this field + // If we are just building up the refItems, then it is enough to know we found a match. + // If we are patching refName values, then we have to replace each match. + int nRefsMatchedInField = refNameFoundInField(refName, fieldValue, newAuthorityRefName); + if (nRefsMatchedInField > 0) { sourceField = authRefDescendantField; // Handle multiple fields matching in one Doc. See CSPACE-2863. - if(fRefFound) { + if(nRefsFoundInDoc > 0) { // We already added ilistItem, so we need to clone that and add again if(ilistItem != null) { ilistItem = cloneAuthRefDocItem(ilistItem, sourceField); @@ -258,11 +359,11 @@ public class RefNameServiceUtils { if(ilistItem != null) { ilistItem.setSourceField(sourceField); } - fRefFound = true; } if(ilistItem != null) { list.add(ilistItem); } + nRefsFoundInDoc += nRefsMatchedInField; } } catch (ClientException ce) { @@ -270,13 +371,14 @@ public class RefNameServiceUtils { "getAuthorityRefDocs: Problem fetching: " + sourceField, ce); } } - if (!fRefFound) { + if (nRefsFoundInDoc == 0) { throw new RuntimeException( "getAuthorityRefDocs: Could not find refname in object:" + docType + ":" + NuxeoUtils.getCsid(docModel)); } + nRefsFoundTotal += nRefsFoundInDoc; } - + return nRefsFoundTotal; } private static AuthorityRefDocList.AuthorityRefDocItem cloneAuthRefDocItem( @@ -293,6 +395,7 @@ public class RefNameServiceUtils { /* * Identifies whether the refName was found in the supplied field. + * If passed a new RefName, will set that into fields in which the old one was found. * * Only works for: * * Scalar fields @@ -302,24 +405,37 @@ public class RefNameServiceUtils { * * Structured fields (complexTypes) * * Repeatable structured fields (repeatable complexTypes) */ - private static boolean refNameFoundInField(String refName, Object fieldValue) { - - boolean result = false; - if (fieldValue instanceof List) { - List fieldValueList = (List) fieldValue; - for (String listItemValue : fieldValueList) { - if (refName.equalsIgnoreCase(listItemValue)) { - result = true; - break; - } - - } - } else if (fieldValue instanceof String){ - if (refName.equalsIgnoreCase((String)fieldValue)) { - result = true; - } - } - return result; + private static int refNameFoundInField(String oldRefName, Property fieldValue, String newRefName) { + int nFound = 0; + if (fieldValue instanceof List) { + List fieldValueList = (List) fieldValue; + for (Property listItemValue : fieldValueList) { + try { + if ((listItemValue instanceof StringProperty) + && oldRefName.equalsIgnoreCase((String)listItemValue.getValue())) { + nFound++; + if(newRefName!=null) { + fieldValue.setValue(newRefName); + } else { + // We cannot quit after the first, if we are replacing values. + // If we are just looking (not replacing), finding one is enough. + break; + } + } + } catch( PropertyException pe ) {} + } + } else { + try { + if ((fieldValue instanceof StringProperty) + && oldRefName.equalsIgnoreCase((String)fieldValue.getValue())) { + nFound++; + if(newRefName!=null) { + fieldValue.setValue(newRefName); + } + } + } catch( PropertyException pe ) {} + } + return nFound; } } diff --git a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityItemDocumentModelHandler.java b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityItemDocumentModelHandler.java index 29dbd50c2..090e77aa4 100644 --- a/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityItemDocumentModelHandler.java +++ b/services/authority/service/src/main/java/org/collectionspace/services/common/vocabulary/nuxeo/AuthorityItemDocumentModelHandler.java @@ -33,6 +33,7 @@ import org.collectionspace.services.common.api.CommonAPI; import org.collectionspace.services.common.api.RefName; import org.collectionspace.services.common.api.Tools; import org.collectionspace.services.common.context.MultipartServiceContext; +import org.collectionspace.services.common.context.ServiceBindingUtils; import org.collectionspace.services.common.context.ServiceContext; import org.collectionspace.services.common.document.DocumentWrapper; import org.collectionspace.services.common.document.DocumentWrapperImpl; @@ -205,9 +206,23 @@ public abstract class AuthorityItemDocumentModelHandler protected void handleItemRefNameReferenceUpdate() { if(newRefNameOnUpdate != null && oldRefNameOnUpdate!= null) { // We have work to do. - logger.debug("Need to find and update references to Item."); - logger.debug("Old refName" + oldRefNameOnUpdate); - logger.debug("New refName" + newRefNameOnUpdate); + if(logger.isDebugEnabled()) { + String eol = System.getProperty("line.separator"); + logger.debug("Need to find and update references to Item."+eol + +" Old refName" + oldRefNameOnUpdate + eol + +" New refName" + newRefNameOnUpdate); + } + ServiceContext ctx = getServiceContext(); + RepositoryClient repoClient = getRepositoryClient(ctx); + // HACK - this should be defined for each handler, as with + // AuthorityResource.getRefPropName() + String refNameProp = ServiceBindingUtils.AUTH_REF_PROP; + + int nUpdated = RefNameServiceUtils.updateAuthorityRefDocs(ctx, repoClient, + oldRefNameOnUpdate, newRefNameOnUpdate, refNameProp ); + if(logger.isDebugEnabled()) { + logger.debug("Updated "+nUpdated+" instances of oldRefName to newRefName"); + } } } @@ -278,7 +293,7 @@ public abstract class AuthorityItemDocumentModelHandler throws Exception { Map unQObjectProperties = super.extractPart(docModel, schema, partMeta); - // Add the CSID to the common part + // Add the CSID to the common part, since they may have fetched via the shortId. if (partMeta.getLabel().equalsIgnoreCase(authorityItemCommonSchemaName)) { String csid = getCsid(docModel);//NuxeoUtils.extractId(docModel.getPathAsString()); unQObjectProperties.put("csid", csid); diff --git a/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto.xml b/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto.xml index 1dd48b19a..70f6bd4f3 100644 --- a/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto.xml +++ b/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto.xml @@ -30,12 +30,12 @@ - + - + + /blobs/*/workflow/ default-domain @@ -1171,7 +1172,8 @@ - + + /media/*/workflow/ default-domain org.collectionspace.services.media.nuxeo.MediaDocumentModelHandler @@ -1429,7 +1431,7 @@ - + /vocabularies/*/workflow/ /vocabularies/*/items/*/workflow/ @@ -1494,7 +1496,7 @@ Note there is no Vocabularyitem service, but there is a Repository workspace so we have to configure that. --> - + /vocabularyitems/*/workflow/ - + /orgauthorities/*/workflow/ /orgauthorities/*/items/*/workflow/ @@ -1635,7 +1637,7 @@ Note there is no Organization service, but there is a Repository workspace so we have to configure that. --> - + - + /personauthorities/*/workflow/ /personauthorities/*/items/*/workflow/ @@ -1821,7 +1823,7 @@ Note there is no Person service, but there is a Repository workspace so we have to configure that. --> - + @@ -1951,14 +1961,6 @@ --> - - - - - - - - @@ -1969,7 +1971,7 @@ - + /locationauthorities/*/workflow/ /locationauthorities/*/items/*/workflow/ @@ -2036,7 +2038,7 @@ Note there is no Location service, but there is a Repository workspace so we have to configure that. --> - + default-domain org.collectionspace.services.location.nuxeo.LocationDocumentModelHandler @@ -2117,7 +2119,7 @@ - + /taxonomyauthority/*/workflow/ /taxonomyauthority/*/items/*/workflow/ @@ -2184,7 +2186,7 @@ Note there is no Taxon service, but there is a Repository workspace so we have to configure that. --> - + default-domain org.collectionspace.services.taxonomy.nuxeo.TaxonDocumentModelHandler @@ -2394,7 +2396,7 @@ - + /relations/*/workflow/ default-domain @@ -2494,7 +2496,7 @@ - + org.collectionspace.services.account.storage.AccountDocumentHandler @@ -2540,7 +2542,7 @@ - + /dimensions/*/workflow/ default-domain @@ -2565,7 +2567,7 @@ - + - + default-domain org.collectionspace.services.note.nuxeo.NoteDocumentModelHandler @@ -2674,7 +2676,7 @@ - + org.collectionspace.services.authorization.storage.RoleDocumentHandler org.collectionspace.services.authorization.storage.RoleValidatorHandler @@ -2693,7 +2695,7 @@ - + org.collectionspace.services.authorization.storage.PermissionDocumentHandler org.collectionspace.services.authorization.storage.PermissionValidatorHandler @@ -2714,7 +2716,7 @@ - + - + - + - +