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}