JCRResourceResolver.java
/*
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.ecm.resolver;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.Session;
import org.exoplatform.resolver.ResourceKey;
import org.exoplatform.resolver.ResourceResolver;
import org.exoplatform.services.cms.templates.TemplateService;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
/**
* Created by The eXo Platform SARL Author : Dang Van Minh
* minh.dang@exoplatform.com May 8, 2008 3:07:02 PM
*/
public class JCRResourceResolver extends ResourceResolver {
protected String repository ;
protected String workspace ;
protected String propertyName ;
/** The log. */
private static final Log LOG = ExoLogger.getLogger(JCRResourceResolver.class.getName());
private TemplateService templateService;
/**
* Instantiates a new jCR resource resolver to load template that stored as a
* property of node in jcr
*
* @param workspace the workspace
*/
public JCRResourceResolver(String workspace) {
this.workspace = workspace;
templateService = WCMCoreUtils.getService(TemplateService.class);
}
/* (non-Javadoc)
* @see org.exoplatform.resolver.ResourceResolver#getResource(java.lang.String)
*/
public URL getResource(String url) throws Exception {
throw new Exception("This method is not supported") ;
}
/**
* @param url URL must be like jcr:path with path is node path
* @see org.exoplatform.resolver.ResourceResolver#getInputStream(java.lang.String)
*/
public InputStream getInputStream(String url) throws Exception {
SessionProvider provider = WCMCoreUtils.getSystemSessionProvider();
Session session = provider.getSession(workspace, WCMCoreUtils.getRepository());
ByteArrayInputStream inputStream = null;
try {
Node template = (Node)session.getItem(removeScheme(url));
inputStream = new ByteArrayInputStream(templateService.getTemplate(template).getBytes());
} catch(Exception e) {
if (LOG.isErrorEnabled()) {
LOG.error("Unexpected problem happen when try to process with url");
}
} finally {
session.logout();
}
return inputStream;
}
/* (non-Javadoc)
* @see org.exoplatform.resolver.ResourceResolver#getResources(java.lang.String)
*/
public List<URL> getResources(String url) throws Exception {
throw new Exception("This method is not supported") ;
}
/* (non-Javadoc)
* @see org.exoplatform.resolver.ResourceResolver#getInputStreams(java.lang.String)
*/
public List<InputStream> getInputStreams(String url) throws Exception {
ArrayList<InputStream> inputStreams = new ArrayList<InputStream>(1) ;
inputStreams.add(getInputStream(url)) ;
return inputStreams ;
}
/* (non-Javadoc)
* @see org.exoplatform.resolver.ResourceResolver#isModified(java.lang.String, long)
*/
public boolean isModified(String url, long lastAccess) { return false ; }
/* (non-Javadoc)
* @see org.exoplatform.resolver.ResourceResolver#createResourceId(java.lang.String)
*/
public String createResourceId(String url) { return url ; }
@Override
public ResourceKey createResourceKey(String url) {
return new ResourceKey(url.hashCode(), url);
}
/* (non-Javadoc)
* @see org.exoplatform.resolver.ResourceResolver#getResourceScheme()
*/
public String getResourceScheme() { return "jcr:" ; }
}