/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.services.jcr.webdav.utils; import org.exoplatform.common.http.client.HTTPConnection; import org.exoplatform.services.jcr.webdav.WebDavConst; import org.exoplatform.services.jcr.webdav.WebDavConstants.WebDav; import org.exoplatform.services.jcr.webdav.command.propfind.PropFindResponseEntity; import org.exoplatform.services.jcr.webdav.util.TextUtil; import org.exoplatform.services.rest.impl.ContainerResponse; import org.w3c.dom.Document; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringWriter; import java.util.Calendar; import java.util.UUID; import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.lock.Lock; import javax.jcr.nodetype.NodeType; import javax.jcr.query.InvalidQueryException; import javax.jcr.query.Query; import javax.jcr.query.QueryResult; import javax.xml.parsers.DocumentBuilderFactory; /** * Created by The eXo Platform SAS Author : Dmytro Katayev * work.visor.ck@gmail.com Aug 14, 2008 */ public class TestUtils { public static final String HOST = "localhost"; public static final String SERVLET_PATH = "/rest/jcr/repository"; public static final String WORKSPACE = "/ws"; public static final String INAVLID_WORKSPACE = "/invalid"; public static final String REALM = "eXo REST services"; public static final String ROOTID = "root"; public static final String ROOTPASS = "exo"; public static HTTPConnection GetAuthConnection() { HTTPConnection connection = new HTTPConnection(HOST, WebDav.PORT_INT); connection.addBasicAuthorization(REALM, ROOTID, ROOTPASS); return connection; } public static String getFullPath() { return "http://" + HOST + ":" + WebDav.PORT_INT + SERVLET_PATH + WORKSPACE; } public static String getFullWorkSpacePath() { return SERVLET_PATH + WORKSPACE; } public static String getFullUri() { return "http://" + HOST + ":" + WebDav.PORT_INT + getFullWorkSpacePath(); } public static String getFolderName() { return "/test-folder-" + System.nanoTime(); } public static String getFileName() { return "/test-file-" + System.nanoTime() + ".txt"; } public static Document getXmlFromString(String string) throws Exception { DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); InputStream inputStream = new ByteArrayInputStream(string.getBytes()); return builderFactory.newDocumentBuilder().parse(inputStream); } public static String getFileContent() { String content = new String(); for (int i = 0; i < 10; i++) { content += UUID.randomUUID().toString(); } return content; } public static Node addContent(Session session, String path, InputStream inputStream, String nodeType, String mimeType) throws RepositoryException { return addContent(session, path, inputStream, nodeType, "nt:resource", mimeType); } public static Node addContent(Session session, String path, InputStream inputStream, String nodeType, String contentType, String mimeType) throws RepositoryException { Node node = session.getRootNode().addNode(TextUtil.relativizePath(path), nodeType); node.addNode("jcr:content", contentType); Node content = node.getNode("jcr:content"); content.setProperty("jcr:mimeType", mimeType); content.setProperty("jcr:lastModified", Calendar.getInstance()); content.setProperty("jcr:data", inputStream); session.save(); return node; } public static void addFolder(Session session, String path, String nodeType, String mimeType) throws RepositoryException { session.getRootNode().addNode(TextUtil.relativizePath(path), nodeType); session.save(); } public static String stream2string(InputStream stream, String charset) throws IOException { Reader r; if (charset != null) r = new InputStreamReader(stream, charset); else r = new InputStreamReader(stream); StringWriter sw = new StringWriter(); char[] buffer = new char[1024]; for (int n; (n = r.read(buffer)) != -1;) sw.write(buffer, 0, n); String str = sw.toString(); return str; } public static Property getNodeProperty(Session session, String path, String property) throws PathNotFoundException, RepositoryException { Node node = session.getRootNode().getNode(TextUtil.relativizePath(path)); if (node.hasProperty(property)) return node.getProperty(property); else return null; } public static void addNodeProperty(Session session, String path, String propName, String propValue) throws PathNotFoundException, RepositoryException { Node node = session.getRootNode().getNode(TextUtil.relativizePath(path)); node.setProperty(propName, propValue); session.save(); } public static String lockNode(Session session, String path, Boolean depth) throws PathNotFoundException, RepositoryException { Node node = session.getRootNode().getNode(TextUtil.relativizePath(path)); if (!node.isNodeType("mix:lockable")) { if (node.canAddMixin("mix:lockable")) { node.addMixin("mix:lockable"); session.save(); } } Lock lock = node.lock(depth, true); session.save(); String tok = lock.getLockToken(); // System.out.println("TestUtils.lockNode()" + tok); return "<" + WebDavConst.Lock.OPAQUE_LOCK_TOKEN + ":" + tok + ">"; } public static void find(Session session, String queryString) throws InvalidQueryException, RepositoryException { Query query = session.getWorkspace().getQueryManager().createQuery(queryString, "sql"); QueryResult queryResult = query.execute(); } public static String getFileNodeType(Session session, String path) throws PathNotFoundException, RepositoryException { Node node = session.getRootNode().getNode(TextUtil.relativizePath(path)); return node.getPrimaryNodeType().getName(); } public static String getContentNodeType(Session session, String path) throws PathNotFoundException, RepositoryException { Node node = session.getRootNode().getNode(TextUtil.relativizePath(path)); Node content = node.getNode("jcr:content"); return content.getPrimaryNodeType().getName(); } public static Node getContentNode(Session session, String path) throws PathNotFoundException, RepositoryException { Node node = session.getRootNode().getNode(TextUtil.relativizePath(path)); return node.getNode("jcr:content"); } public static NodeType[] getContentMixins(Session session, String path) throws PathNotFoundException, RepositoryException { Node node = session.getRootNode().getNode(TextUtil.relativizePath(path)); Node content = node.getNode("jcr:content"); return content.getMixinNodeTypes(); } public static InputStream getResponseAsStream(ContainerResponse response) throws IOException { if (response.getEntity() instanceof PropFindResponseEntity) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ((PropFindResponseEntity)response.getEntity()).write(outputStream); return new ByteArrayInputStream(outputStream.toByteArray()); } return null; } }