001/* 002 * (C) Copyright 2006-2007 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 - initial API and implementation 018 * 019 * $Id: JOOoConvertPluginImpl.java 18651 2007-05-13 20:28:53Z sfermigier $ 020 */ 021 022package org.nuxeo.ecm.platform.ui.web.restAPI; 023 024import java.io.Serializable; 025 026import org.dom4j.dom.DOMDocument; 027import org.dom4j.dom.DOMDocumentFactory; 028import org.nuxeo.ecm.core.api.DocumentModel; 029import org.nuxeo.ecm.core.api.DocumentModelList; 030import org.nuxeo.ecm.core.api.IdRef; 031import org.nuxeo.ecm.core.api.NuxeoException; 032import org.nuxeo.ecm.core.api.repository.RepositoryManager; 033import org.nuxeo.runtime.api.Framework; 034import org.restlet.data.CharacterSet; 035import org.restlet.data.MediaType; 036import org.restlet.data.Request; 037import org.restlet.data.Response; 038import org.w3c.dom.DOMException; 039import org.w3c.dom.Element; 040 041public class BrowseRestlet extends BaseStatelessNuxeoRestlet implements Serializable { 042 043 private static final long serialVersionUID = -4518256101431979971L; 044 045 @Override 046 protected void doHandleStatelessRequest(Request req, Response res) { 047 String repo = (String) req.getAttributes().get("repo"); 048 String docid = (String) req.getAttributes().get("docid"); 049 050 DOMDocumentFactory domFactory = new DOMDocumentFactory(); 051 052 DOMDocument result = (DOMDocument) domFactory.createDocument(); 053 054 if (repo == null || repo.equals("*")) { 055 try { 056 Element serversNode = result.createElement("avalaibleServers"); 057 result.setRootElement((org.dom4j.Element) serversNode); 058 059 RepositoryManager repositoryManager = Framework.getLocalService(RepositoryManager.class); 060 for (String repositoryName : repositoryManager.getRepositoryNames()) { 061 Element server = result.createElement("server"); 062 server.setAttribute("title", repositoryName); 063 server.setAttribute("url", getRelURL(repositoryName, "*")); 064 serversNode.appendChild(server); 065 } 066 res.setEntity(result.asXML(), MediaType.TEXT_XML); 067 res.getEntity().setCharacterSet(CharacterSet.UTF_8); 068 return; 069 } catch (DOMException e) { 070 handleError(result, res, e); 071 return; 072 } 073 } else { 074 DocumentModel dm; 075 076 boolean init = initRepository(res, repo); 077 boolean isRoot = false; 078 try { 079 if (init) { 080 if (docid == null || docid.equals("*")) { 081 dm = session.getRootDocument(); 082 isRoot = true; 083 } else { 084 dm = session.getDocument(new IdRef(docid)); 085 } 086 } else { 087 handleError(res, "Unable to init repository"); 088 return; 089 } 090 } catch (NuxeoException e) { 091 handleError(res, e); 092 return; 093 } 094 095 Element current = result.createElement("document"); 096 try { 097 current.setAttribute("title", dm.getTitle()); 098 } catch (DOMException | NuxeoException e) { 099 handleError(res, e); 100 } 101 current.setAttribute("type", dm.getType()); 102 current.setAttribute("id", dm.getId()); 103 current.setAttribute("name", dm.getName()); 104 if (isRoot) { 105 current.setAttribute("url", getRelURL(repo, "")); 106 } else { 107 current.setAttribute("url", getRelURL(repo, dm.getRef().toString())); 108 } 109 result.setRootElement((org.dom4j.Element) current); 110 111 if (dm.isFolder()) { 112 // Element childrenElem = result.createElement("children"); 113 // root.appendChild(childrenElem); 114 115 DocumentModelList children; 116 try { 117 children = session.getChildren(dm.getRef()); 118 } catch (NuxeoException e) { 119 handleError(result, res, e); 120 return; 121 } 122 123 for (DocumentModel child : children) { 124 Element el = result.createElement("document"); 125 try { 126 el.setAttribute("title", child.getTitle()); 127 } catch (DOMException e) { 128 handleError(res, e); 129 } catch (NuxeoException e) { 130 handleError(res, e); 131 } 132 el.setAttribute("type", child.getType()); 133 el.setAttribute("id", child.getId()); 134 el.setAttribute("name", child.getName()); 135 el.setAttribute("url", getRelURL(repo, child.getRef().toString())); 136 current.appendChild(el); 137 } 138 } 139 140 res.setEntity(result.asXML(), MediaType.TEXT_XML); 141 res.getEntity().setCharacterSet(CharacterSet.UTF_8); 142 } 143 } 144 145 private static String getRelURL(String repo, String uuid) { 146 return '/' + repo + '/' + uuid; 147 } 148 149}