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}