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.client;
019
020import org.nuxeo.ecm.platform.publisher.api.PublicationNode;
021import org.nuxeo.ecm.platform.publisher.api.RemotePublicationTreeManager;
022import org.nuxeo.ecm.platform.publisher.impl.service.AbstractRemotableNode;
023import org.nuxeo.ecm.platform.publisher.impl.service.ProxyNode;
024import org.nuxeo.ecm.platform.publisher.remoting.marshaling.basic.BasicPublicationNode;
025
026/**
027 * {@link PublicationNode} implementation that points to a remote tree on a remote server.
028 *
029 * @author tiry
030 */
031public class ClientRemotePublicationNode extends AbstractRemotableNode {
032
033    private static final long serialVersionUID = 1L;
034
035    protected String targetTreeName;
036
037    protected String name;
038
039    protected String serverSessionId;
040
041    protected String path;
042
043    protected String nodeType;
044
045    protected String nodeTitle;
046
047    protected String treeName;
048
049    public ClientRemotePublicationNode(String treeConfigName, String sid, PublicationNode node, String serverSessionId,
050            RemotePublicationTreeManager service, String targetTreeName) {
051        this.serverSessionId = serverSessionId;
052        this.sessionId = sid;
053        this.service = service;
054        this.path = node.getPath();
055        this.nodeType = node.getNodeType();
056        this.nodeTitle = node.getTitle();
057        this.treeName = treeConfigName;
058        this.targetTreeName = targetTreeName;
059        this.name = node.getName();
060    }
061
062    @Override
063    protected PublicationNode switchToServerNode(PublicationNode node) {
064
065        if (node instanceof ClientRemotePublicationNode) {
066            ClientRemotePublicationNode cNode = (ClientRemotePublicationNode) node;
067            return new BasicPublicationNode(cNode.getNodeType(), cNode.getPath(), cNode.getTitle(),
068                    cNode.getUnwrappedTreeName(), serverSessionId);
069        }
070        if (node instanceof ProxyNode) {
071            ProxyNode rNode = (ProxyNode) node;
072            return new BasicPublicationNode(rNode.getNodeType(), rNode.getPath(), rNode.getTitle(),
073                    getTargetTreeName(), serverSessionId);
074        } else {
075            return node;
076        }
077
078        // return new ClientRemotePublicationNode(treeName, sessionId,node,
079        // serverSessionId,
080        // service, getTargetTreeName());
081    }
082
083    @Override
084    protected PublicationNode switchToClientNode(PublicationNode node) {
085        return new ClientRemotePublicationNode(treeName, sessionId, node, serverSessionId, service, getTargetTreeName());
086    }
087
088    @Override
089    protected String getServerTreeSessionId() {
090        return serverSessionId;
091    }
092
093    @Override
094    protected RemotePublicationTreeManager getPublisher() {
095        return service;
096    }
097
098    public String getNodeType() {
099        return nodeType;
100    }
101
102    public String getType() {
103        return this.getClass().getSimpleName();
104    }
105
106    public String getPath() {
107        return path;
108    }
109
110    public String getTitle() {
111        return nodeTitle;
112    }
113
114    public String getName() {
115        return name;
116    }
117
118    public String getTreeConfigName() {
119        return treeName;
120    }
121
122    @Override
123    protected String getTargetTreeName() {
124        return targetTreeName;
125    }
126
127    public String getUnwrappedTreeName() {
128        return getTargetTreeName();
129    }
130
131    public String getSessionId() {
132        return sessionId;
133    }
134
135    public String getRemoteSessionId() {
136        return serverSessionId;
137    }
138}