From: <fg...@us...> - 2011-04-10 07:13:59
|
Revision: 3411 http://openutils.svn.sourceforge.net/openutils/?rev=3411&view=rev Author: fgiust Date: 2011-04-10 07:13:53 +0000 (Sun, 10 Apr 2011) Log Message: ----------- TAGCLOUD-11 jackrabbit 2.2.1 compatibility Modified Paths: -------------- trunk/openutils-mgnltagcloud/pom.xml trunk/openutils-mgnltagcloud/src/main/java/net/sourceforge/openutils/mgnltagcloud/util/JackrabbitUtil.java Modified: trunk/openutils-mgnltagcloud/pom.xml =================================================================== --- trunk/openutils-mgnltagcloud/pom.xml 2011-04-10 07:11:47 UTC (rev 3410) +++ trunk/openutils-mgnltagcloud/pom.xml 2011-04-10 07:13:53 UTC (rev 3411) @@ -128,7 +128,7 @@ <dependency> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-mgnlcontrols</artifactId> - <version>4.0.7</version> + <version>4.1.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> @@ -171,7 +171,7 @@ </dependency> </dependencies> <properties> - <magnolia.version>4.4.1</magnolia.version> - <jackrabbit.version>2.2.0</jackrabbit.version> + <magnolia.version>4.4.2</magnolia.version> + <jackrabbit.version>2.2.5</jackrabbit.version> </properties> </project> \ No newline at end of file Modified: trunk/openutils-mgnltagcloud/src/main/java/net/sourceforge/openutils/mgnltagcloud/util/JackrabbitUtil.java =================================================================== --- trunk/openutils-mgnltagcloud/src/main/java/net/sourceforge/openutils/mgnltagcloud/util/JackrabbitUtil.java 2011-04-10 07:11:47 UTC (rev 3410) +++ trunk/openutils-mgnltagcloud/src/main/java/net/sourceforge/openutils/mgnltagcloud/util/JackrabbitUtil.java 2011-04-10 07:13:53 UTC (rev 3411) @@ -23,12 +23,16 @@ import info.magnolia.cms.util.FactoryUtil.InstanceFactory; import info.magnolia.context.MgnlContext; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.query.InvalidQueryException; +import org.apache.commons.lang.UnhandledException; import org.apache.jackrabbit.core.RepositoryImpl; import org.apache.jackrabbit.core.SearchManager; import org.apache.jackrabbit.core.SessionImpl; @@ -147,22 +151,17 @@ LANG_SQL, (SessionImpl) session, factory); - Query queryChild = LuceneQueryBuilder.createQuery(qrn, (SessionImpl) session, si - .getContext() - .getItemStateManager(), si.getNamespaceMappings(), si.getTextAnalyzer(), si - .getContext() - .getPropertyTypeRegistry(), si.getSynonymProvider(), si.getIndexFormatVersion()); + + Query queryChild = createQuery(qrn, session, si); + QueryRootNode qrnSelf = QueryParser.parse( "SELECT * FROM nt:base WHERE jcr:path = '" + path + "'", LANG_SQL, (SessionImpl) session, factory); - Query querySelf = LuceneQueryBuilder.createQuery(qrnSelf, (SessionImpl) session, si - .getContext() - .getItemStateManager(), si.getNamespaceMappings(), si.getTextAnalyzer(), si - .getContext() - .getPropertyTypeRegistry(), si.getSynonymProvider(), si.getIndexFormatVersion()); + Query querySelf = createQuery(qrnSelf, session, si); + Query luceneQuery = new BooleanQuery(); return luceneQuery.combine(new Query[]{queryChild, querySelf }); @@ -177,4 +176,76 @@ } return null; } + + private static Query createQuery(QueryRootNode root, Session session, SearchIndex si) throws RepositoryException + { + + // LuceneQueryBuilder.createQuery() signature has changed in 2.2.1 (one more parameter added) so we are forced + // to use reflection here + + Method[] methods = LuceneQueryBuilder.class.getMethods(); + Method createQuery = null; + for (Method method : methods) + { + if (method.getName().equals("createQuery")) + { + createQuery = method; + break; + } + } + + if (createQuery == null) + { + throw new UnhandledException( + "Unsupported version of jackrabbit detected (not in the range 1.6 - 2.0.5?)", + null); + } + + Class< ? >[] params = createQuery.getParameterTypes(); + + List<Object> parameters = new ArrayList<Object>(); + parameters.add(root); + parameters.add(session); + parameters.add(si.getContext().getItemStateManager()); + parameters.add(si.getNamespaceMappings()); + parameters.add(si.getTextAnalyzer()); + parameters.add(si.getContext().getPropertyTypeRegistry()); + parameters.add(si.getSynonymProvider()); + parameters.add(si.getIndexFormatVersion()); + + if (params.length > 8) + { + parameters.add(null); + } + + try + { + return (Query) createQuery.invoke(null, parameters.toArray()); + } + catch (IllegalArgumentException e) + { + throw new RuntimeException(e); + } + catch (IllegalAccessException e) + { + throw new RuntimeException(e); + } + catch (InvocationTargetException e) + { + Throwable targetException = e.getTargetException(); + if (targetException instanceof RepositoryException) + { + throw (RepositoryException) targetException; + } + else if (targetException instanceof RuntimeException) + { + throw (RuntimeException) targetException; + } + else + { + throw new RuntimeException(e); + } + } + + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |