001/*
002 * (C) Copyright 2006-2009 Nuxeo SA (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Nuxeo
016 */
017
018package org.nuxeo.ecm.platform.publisher.remoting.restProxies;
019
020import java.util.ArrayList;
021import java.util.List;
022import java.util.Map;
023
024import org.apache.commons.logging.Log;
025import org.apache.commons.logging.LogFactory;
026import org.nuxeo.ecm.core.api.DocumentLocation;
027import org.nuxeo.ecm.core.api.DocumentModel;
028import org.nuxeo.ecm.platform.publisher.api.PublicationNode;
029import org.nuxeo.ecm.platform.publisher.api.PublishedDocument;
030import org.nuxeo.ecm.platform.publisher.api.RemotePublicationTreeManager;
031import org.nuxeo.ecm.platform.publisher.remoting.invoker.DefaultRemotePublicationInvoker;
032import org.nuxeo.ecm.platform.publisher.remoting.invoker.RemotePublicationInvoker;
033import org.nuxeo.ecm.platform.publisher.remoting.marshaling.interfaces.RemotePublisherMarshaler;
034
035/**
036 * HTTP facade for the {@link RemotePublicationTreeManager} service. This facade uses a invoker to do the actual calls
037 * to the remote back-end.
038 *
039 * @author tiry
040 */
041public class RemotePublicationTreeManagerRestProxy implements RemotePublicationTreeManager {
042
043    private static final Log log = LogFactory.getLog(RemotePublicationTreeManagerRestProxy.class);
044
045    protected String baseURL;
046
047    protected String userName;
048
049    protected String password;
050
051    protected RemotePublisherMarshaler marshaler;
052
053    protected RemotePublicationInvoker invoker;
054
055    public RemotePublicationTreeManagerRestProxy(String baseURL, String userName, String password,
056            RemotePublisherMarshaler marshaler) {
057        this.baseURL = baseURL;
058        this.userName = userName;
059        this.password = password;
060        this.marshaler = marshaler;
061
062        invoker = new DefaultRemotePublicationInvoker();
063        invoker.init(baseURL, userName, password, marshaler);
064    }
065
066    public List<PublishedDocument> getChildrenDocuments(PublicationNode node) {
067
068        List<Object> params = new ArrayList<Object>();
069        params.add(node);
070        return (List<PublishedDocument>) invoker.invoke("getChildrenDocuments", params);
071    }
072
073    public List<PublicationNode> getChildrenNodes(PublicationNode node) {
074
075        List<Object> params = new ArrayList<Object>();
076        params.add(node);
077        return (List<PublicationNode>) invoker.invoke("getChildrenNodes", params);
078    }
079
080    public List<PublishedDocument> getExistingPublishedDocument(String sid, DocumentLocation docLoc)
081            {
082        List<Object> params = new ArrayList<Object>();
083        params.add(sid);
084        params.add(docLoc);
085        return (List<PublishedDocument>) invoker.invoke("getExistingPublishedDocument", params);
086    }
087
088    public PublicationNode getNodeByPath(String sid, String path) {
089
090        List<Object> params = new ArrayList<Object>();
091        params.add(sid);
092        params.add(path);
093        return (PublicationNode) invoker.invoke("getNodeByPath", params);
094    }
095
096    public PublicationNode getParent(PublicationNode node) {
097        List<Object> params = new ArrayList<Object>();
098        params.add(node);
099        return (PublicationNode) invoker.invoke("getParent", params);
100    }
101
102    public List<PublishedDocument> getPublishedDocumentInNode(PublicationNode node) {
103
104        List<Object> params = new ArrayList<Object>();
105        params.add(node);
106        return (List<PublishedDocument>) invoker.invoke("getPublishedDocumentInNode", params);
107    }
108
109    public PublishedDocument publish(DocumentModel doc, PublicationNode targetNode) {
110
111        List<Object> params = new ArrayList<Object>();
112        params.add(doc);
113        params.add(targetNode);
114
115        return (PublishedDocument) invoker.invoke("publish", params);
116
117    }
118
119    public PublishedDocument publish(DocumentModel doc, PublicationNode targetNode, Map<String, String> params)
120            {
121
122        List<Object> cparams = new ArrayList<Object>();
123        cparams.add(doc);
124        cparams.add(targetNode);
125        cparams.add(params);
126
127        return (PublishedDocument) invoker.invoke("publish", cparams);
128    }
129
130    public void unpublish(DocumentModel doc, PublicationNode targetNode) {
131
132        List<Object> params = new ArrayList<Object>();
133        params.add(doc);
134        params.add(targetNode);
135
136        invoker.invoke("unpublish", params);
137    }
138
139    public void unpublish(String sid, PublishedDocument publishedDocument) {
140        List<Object> params = new ArrayList<Object>();
141        params.add(sid);
142        params.add(publishedDocument);
143
144        invoker.invoke("unpublish", params);
145    }
146
147    public Map<String, String> initRemoteSession(String treeConfigName, Map<String, String> params)
148            {
149
150        List<Object> cparams = new ArrayList<Object>();
151        cparams.add(treeConfigName);
152        cparams.add(params);
153
154        return (Map<String, String>) invoker.invoke("initRemoteSession", cparams);
155    }
156
157    public void setCurrentDocument(String sid, DocumentModel currentDocument) {
158        // The current document is useless on a remote tree
159    }
160
161    public void validatorPublishDocument(String sid, PublishedDocument publishedDocument, String comment) {
162        throw new UnsupportedOperationException();
163    }
164
165    public void validatorRejectPublication(String sid, PublishedDocument publishedDocument, String comment) {
166        throw new UnsupportedOperationException();
167    }
168
169    public boolean canPublishTo(String sid, PublicationNode publicationNode) {
170        if (publicationNode == null || publicationNode.getParent() == null) {
171            return false;
172        }
173        return true;
174    }
175
176    public boolean canUnpublish(String sid, PublishedDocument publishedDocument) {
177        return true;
178    }
179
180    public boolean canManagePublishing(String sid, PublishedDocument publishedDocument) {
181        return true;
182    }
183
184    public boolean hasValidationTask(String sid, PublishedDocument publishedDocument) {
185        return false;
186    }
187
188    public PublishedDocument wrapToPublishedDocument(String sid, DocumentModel documentModel) {
189        throw new UnsupportedOperationException();
190    }
191
192    public boolean isPublicationNode(String sid, DocumentModel documentModel) {
193        throw new UnsupportedOperationException();
194    }
195
196    public PublicationNode wrapToPublicationNode(String sid, DocumentModel documentModel) {
197        throw new UnsupportedOperationException();
198    }
199
200    public void release(String sid) {
201        List<Object> params = new ArrayList<Object>();
202        params.add(sid);
203        invoker.invoke("release", params);
204    }
205
206}