package org.gcube.data.access.storagehub.services.admin; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.api.JackrabbitWorkspace; import org.apache.jackrabbit.api.security.authorization.PrivilegeManager; import org.apache.jackrabbit.commons.cnd.CndImporter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class InitScript { private static Logger log = LoggerFactory.getLogger(InitScript.class); public void init(JackrabbitSession ses) throws Exception{ log.info("init started"); try { initNodeTypes(ses); ses.getRootNode().addNode("Home"); ses.getRootNode().addNode("Share"); PrivilegeManager pm = ((JackrabbitWorkspace) ses.getWorkspace()).getPrivilegeManager(); pm.registerPrivilege("hl:writeAll", false, new String[0]); ses.save(); }catch (Exception e) { log.error("init error", e); throw e; } log.info("init finished"); } void initNodeTypes(Session ses) throws Exception{ InputStream stream = InitScript.class.getResourceAsStream("/init/NodeType.cnd"); if (stream == null) throw new Exception("NodeType.cnd inputStream is null"); InputStreamReader inputstream = new InputStreamReader(stream, Charset.forName("UTF-8")); // Register the custom node types defined in the CND file, using JCR Commons CndImporter log.info("start to register the custom node types defined in the CND file..."); NodeType[] nodeTypes = CndImporter.registerNodeTypes(inputstream, ses, true); for (NodeType nt : nodeTypes) log.info("Registered: {} ", nt.getName()); log.info("custom node types registered"); } }