You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/04/08 06:10:59 UTC
svn commit: r762780 - in
/jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet:
FilterRepositoryFactory.java ServletRepository.java
Author: jukka
Date: Tue Apr 7 14:01:02 2009
New Revision: 762780
URL: http://svn.apache.org/viewvc?rev=762780&view=rev
Log:
JCR-2043: Login filters in jackrabbit-servlet
Make it easier to use the ServletRepository class also in Filter classes.
Added:
jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java
Modified:
jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java
Added: jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java?rev=762780&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java (added)
+++ jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/FilterRepositoryFactory.java Tue Apr 7 14:01:02 2009
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.servlet;
+
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+
+import org.apache.jackrabbit.commons.repository.RepositoryFactory;
+
+/**
+ * Factory that looks up a repository from the context of a given filter.
+ * <p>
+ * The default name of the repository attribute is
+ * "<code>javax.jcr.Repository</code>", but it can be changed by specifying
+ * an init parameter with the same name:
+ * <pre>
+ * <filter>
+ * <init-param>
+ * <param-name>javax.jcr.Repository</param-name>
+ * <param-value>my.repository.attribute</param-value>
+ * <description>
+ * This init parameter causes the repository to be looked up from
+ * the "my.repository.attribute" attribute instead of the default
+ * "javax.jcr.Repository".
+ * </description>
+ * </init-param>
+ * </filter>
+ * </pre>
+ *
+ * @since Apache Jackrabbit 1.6
+ */
+public class FilterRepositoryFactory implements RepositoryFactory {
+
+ /**
+ * Configuration of the filter whose context contains the repository.
+ */
+ private final FilterConfig config;
+
+ /**
+ * Creates a factory for looking up a repository from the context
+ * associated with the given filter configuration.
+ *
+ * @param config filter configuration
+ */
+ public FilterRepositoryFactory(FilterConfig config) {
+ this.config = config;
+ }
+
+ /**
+ * Looks up and returns a repository bound in the servlet context of
+ * the given filter.
+ *
+ * @return repository from servlet context
+ * @throws RepositoryException if the repository is not available
+ */
+ public Repository getRepository() throws RepositoryException {
+ String name = config.getInitParameter(Repository.class.getName());
+ if (name == null) {
+ name = Repository.class.getName();
+ }
+
+ ServletContext context = config.getServletContext();
+ Object repository = context.getAttribute(name);
+ if (repository instanceof Repository) {
+ return (Repository) repository;
+ } else if (repository != null) {
+ throw new RepositoryException(
+ "Invalid repository: Attribute " + name
+ + " in servlet context " + context.getServletContextName()
+ + " is an instance of " + repository.getClass().getName());
+ } else {
+ throw new RepositoryException(
+ "Repository not found: Attribute " + name
+ + " does not exist in servlet context "
+ + context.getServletContextName());
+ }
+ }
+
+}
Modified: jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java?rev=762780&r1=762779&r2=762780&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-servlet/src/main/java/org/apache/jackrabbit/servlet/ServletRepository.java Tue Apr 7 14:01:02 2009
@@ -16,7 +16,9 @@
*/
package org.apache.jackrabbit.servlet;
+import javax.servlet.FilterConfig;
import javax.servlet.GenericServlet;
+import javax.servlet.ServletException;
import org.apache.jackrabbit.commons.repository.ProxyRepository;
@@ -50,9 +52,26 @@
*
* }
* </pre>
+ * <p>
+ * Starting with version 1.6 this class can also be used by a servlet filter:
+ * <pre>
+ * public class MyFilter implements Filter {
+ *
+ * private Repository repository;
+ *
+ * public void init(FilterConfig config) {
+ * repository = new ServletRepository(config);
+ * }
+ *
+ * // ...
+ *
+ * }
+ * </pre>
+
*
* @since 1.4
* @see ServletRepositoryFactory
+ * @see FilterRepositoryFactory
*/
public class ServletRepository extends ProxyRepository {
@@ -66,4 +85,15 @@
super(new ServletRepositoryFactory(servlet));
}
+ /**
+ * Creates a proxy for a repository found in the servlet context
+ * associated with the given filter configuration.
+ *
+ * @since Apache Jackrabbit 1.6
+ * @param config filter configuration
+ */
+ public ServletRepository(FilterConfig config) {
+ super(new FilterRepositoryFactory(config));
+ }
+
}