package org.easysoa.registry.inheritance; import java.util.Map; import org.easysoa.registry.DocumentService; import org.easysoa.registry.SoaMetamodelService; import org.nuxeo.ecm.core.api.CoreSession; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.DocumentModelList; import org.nuxeo.ecm.core.api.impl.DocumentModelListImpl; import org.nuxeo.runtime.api.Framework; public class ChildrenModelSelector implements InheritedFacetModelSelector { public static final String NAME = "children"; public DocumentModelList findTargets(CoreSession documentManager, DocumentModel model, String targetDoctype, Map<String, String> parameters) throws Exception { DocumentService documentService = Framework.getService(DocumentService.class); DocumentModelList children = documentService.getChildren(documentManager, model.getRef(), targetDoctype); DocumentModelList childrenWithExpectedFacet = new DocumentModelListImpl(); for (DocumentModel child : children) { if (child.getType().equals(targetDoctype)) { childrenWithExpectedFacet.add(child); } } return childrenWithExpectedFacet; } public DocumentModel findSource(CoreSession documentManager, DocumentModel model, String sourceDoctype, Map<String, String> parameters) throws Exception { DocumentService documentService = Framework.getService(DocumentService.class); SoaMetamodelService soaMetamodelService = Framework.getService(SoaMetamodelService.class); DocumentModelList parents = documentService.findAllParents(documentManager, model); for (DocumentModel parent : parents) { if (soaMetamodelService.isAssignable(parent.getType(), sourceDoctype)) { // ex. isAssignable("JavaServiceImplementation", "ServiceImplementation") // XXX What if several parents have the same inherited facet? return parent; } } return null; } }