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}