001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community 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.opensource.org/licenses/ecl2.php
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 package org.kuali.ole;
017
018 import org.apache.commons.io.IOUtils;
019 import org.apache.jackrabbit.commons.cnd.CndImporter;
020 import org.apache.jackrabbit.commons.cnd.ParseException;
021 import org.kuali.ole.pojo.OleException;
022
023 import javax.jcr.RepositoryException;
024 import javax.jcr.Session;
025 import javax.jcr.nodetype.NodeType;
026 import java.io.*;
027
028 /**
029 * Created by IntelliJ IDEA.
030 * User: peris
031 * Date: 5/1/11
032 * Time: 12:57 PM
033 * To change this template use File | Settings | File Templates.
034 */
035 public class CustomNodeRegistrar {
036 private String CUSTOM_NODES_FILE_NAME = "customFileNode.cnd";
037
038 public NodeType[] registerCustomNodeTypes(Session session) throws OleException {
039
040 NodeType[] nodeTypes = new NodeType[0];
041 try {
042 File tempDir = new File(System.getProperty("java.io.tmpdir"));
043 File temporaryFile = new File(tempDir, CUSTOM_NODES_FILE_NAME);
044 InputStream templateStream = getClass().getResourceAsStream(CUSTOM_NODES_FILE_NAME);
045 IOUtils.copy(templateStream, new FileOutputStream(temporaryFile));
046 String absolutePath = temporaryFile.getAbsolutePath();
047 Session newSession = null;
048 if (session == null) {
049 newSession = getSession();
050 session = newSession;
051 }
052 nodeTypes = CndImporter.registerNodeTypes(new FileReader(new File(absolutePath)), session);
053 if (newSession != null) {
054 RepositoryManager.getRepositoryManager().logout(newSession);
055 }
056 }
057 catch (ParseException e) {
058 throw new OleException(e.getMessage());
059 }
060 catch (RepositoryException e) {
061 throw new OleException(e.getMessage());
062 }
063 catch (IOException e) {
064 throw new OleException(e.getMessage());
065 }
066 return nodeTypes;
067 }
068
069 public Session getSession() throws OleException {
070 RepositoryManager repositoryManager = RepositoryManager.getRepositoryManager();
071 Session session = repositoryManager.getSession("CustomNodeRegistrar", "getSession");
072 return session;
073 }
074 }