/* * 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.frameworks.jcr.command; import java.io.InputStream; import java.util.Calendar; import javax.jcr.Item; import javax.jcr.ItemNotFoundException; import javax.jcr.Node; import javax.jcr.RepositoryException; /** * Created by The eXo Platform SAS. * * @author Gennady Azarenkov * @version $Id: JCRCommandHelper.java 9857 2006-10-28 20:49:03Z geaz $ */ public class JCRCommandHelper { /** * creates nt:file node and fills it with incoming data * * @param parentNode * @param relPath * @param data * @param mimeType * @return * @throws Exception */ public static Node createResourceFile(Node parentNode, String relPath, Object data, String mimeType) throws Exception { Node file = parentNode.addNode(relPath, "nt:file"); Node contentNode = file.addNode("jcr:content", "nt:resource"); if (data instanceof InputStream) contentNode.setProperty("jcr:data", (InputStream)data); else if (data instanceof String) contentNode.setProperty("jcr:data", (String)data); // else if(data instanceof BinaryValue) // contentNode.setProperty("jcr:data", (BinaryValue)data); else throw new Exception("Invalid object for jcr:data " + data); contentNode.setProperty("jcr:mimeType", mimeType); contentNode.setProperty("jcr:lastModified", Calendar.getInstance()); return file; } /** * traverses incoming node trying to find primary nt:resource node * * @param node * @return nt:resource node * @throws ItemNotFoundException * if no such node found * @throws RepositoryException */ public static Node getNtResourceRecursively(Node node) throws ItemNotFoundException, RepositoryException { if (node.isNodeType("nt:resource")) return node; Item pi = node.getPrimaryItem(); if (pi.isNode()) { return getNtResourceRecursively((Node)pi); } throw new ItemNotFoundException("No nt:resource node found for " + node.getPath()); } }