001/* 002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * bstefanescu 011 */ 012package org.nuxeo.ecm.automation.core.operations.document; 013 014import org.nuxeo.ecm.automation.core.Constants; 015import org.nuxeo.ecm.automation.core.annotations.Context; 016import org.nuxeo.ecm.automation.core.annotations.Operation; 017import org.nuxeo.ecm.automation.core.annotations.OperationMethod; 018import org.nuxeo.ecm.automation.core.annotations.Param; 019import org.nuxeo.ecm.automation.core.collectors.DocumentModelCollector; 020import org.nuxeo.ecm.core.api.CoreSession; 021import org.nuxeo.ecm.core.api.DocumentModel; 022import org.nuxeo.ecm.core.api.DocumentRef; 023 024/** 025 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 026 */ 027@Operation(id = GetDocumentParent.ID, category = Constants.CAT_DOCUMENT, label = "Get Parent", description = "Get the parent document of the input document. The parent document will become the input for the next operation. You can use the 'type' parameter to specify which parent to select from the document ancestors") 028public class GetDocumentParent { 029 030 public static final String ID = "Document.GetParent"; 031 032 @Context 033 protected CoreSession session; 034 035 @Param(name = "type", required = false) 036 protected String type; 037 038 @OperationMethod(collector = DocumentModelCollector.class) 039 public DocumentModel run(DocumentRef doc) { 040 if (type == null) { 041 return session.getParentDocument(doc); 042 } 043 type = type.trim(); 044 if (type.length() == 0) { 045 return session.getParentDocument(doc); 046 } 047 DocumentModel parent = session.getParentDocument(doc); 048 while (parent != null && !type.equals(parent.getType())) { 049 parent = session.getParentDocument(parent.getRef()); 050 } 051 return parent; 052 } 053 054}