001    package com.khubla.pragmatach.plugin.jcr;
002    
003    import javax.jcr.Repository;
004    import javax.jcr.Session;
005    import javax.jcr.SimpleCredentials;
006    
007    import org.apache.jackrabbit.commons.JcrUtils;
008    import org.apache.log4j.Logger;
009    
010    import com.khubla.pragmatach.framework.api.PragmatachException;
011    import com.khubla.pragmatach.framework.application.Application;
012    
013    /**
014     * @author tome
015     */
016    public class JCRSessionFactory {
017       /**
018        * logger
019        */
020       private final Logger logger = Logger.getLogger(this.getClass());
021    
022       /**
023        * get password
024        */
025       private char[] getPassword() throws PragmatachException {
026          try {
027             final String pwd = Application.getConfiguration().getParameter("jcr.password");
028             if (null != pwd) {
029                return pwd.toCharArray();
030             }
031             return null;
032          } catch (final Exception e) {
033             throw new PragmatachException("Exception in getPassword", e);
034          }
035       }
036    
037       /**
038        * get a repository Session
039        */
040       public Session getSession() throws PragmatachException {
041          try {
042             /*
043              * connect to repo
044              */
045             final String repositoryURL = getURL();
046             if ((null != repositoryURL) && (repositoryURL.length() > 0)) {
047                final Repository repository = JcrUtils.getRepository(repositoryURL);
048                if (null != repository) {
049                   /*
050                    * log
051                    */
052                   logger.info("Found repository '" + repositoryURL + "'");
053                   /*
054                    * login to workspace
055                    */
056                   final SimpleCredentials credentials = new SimpleCredentials(getUsername(), getPassword());
057                   final String workspace = getWorkspace();
058                   final Session session = repository.login(credentials, workspace);
059                   /*
060                    * log
061                    */
062                   logger.info("Logged into workspace '" + workspace + "'");
063                   /*
064                    * done
065                    */
066                   return session;
067                } else {
068                   throw new PragmatachException("Unable to connect to repository '" + repositoryURL + "'");
069                }
070             } else {
071                throw new PragmatachException("Please suppy a repository URL");
072             }
073          } catch (final Exception e) {
074             throw new PragmatachException("Exception in getRepository", e);
075          }
076       }
077    
078       /**
079        * get url
080        */
081       private String getURL() throws PragmatachException {
082          try {
083             return Application.getConfiguration().getParameter("jcr.url");
084          } catch (final Exception e) {
085             throw new PragmatachException("Exception in getUsername", e);
086          }
087       }
088    
089       /**
090        * get username
091        */
092       private String getUsername() throws PragmatachException {
093          try {
094             return Application.getConfiguration().getParameter("jcr.username");
095          } catch (final Exception e) {
096             throw new PragmatachException("Exception in getUsername", e);
097          }
098       }
099    
100       /**
101        * get workspace
102        */
103       private String getWorkspace() throws PragmatachException {
104          try {
105             return Application.getConfiguration().getParameter("jcr.workspace");
106          } catch (final Exception e) {
107             throw new PragmatachException("Exception in getUsername", e);
108          }
109       }
110    }