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