All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dynamicextensionsalfresco.actions.ApiCompatibilityUtil Maven / Gradle / Ivy

Go to download

Adds an OSGi container to alfresco repository supporting dynamic code reloading, classpath isolation and a bunch of other useful features

There is a newer version: 3.1.0
Show newest version
package com.github.dynamicextensionsalfresco.actions;

import org.alfresco.repo.action.ActionDefinitionImpl;
import org.alfresco.service.namespace.QName;
import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;

import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Contains utility methods for dealing with API compatibility issues across different versions of the Alfresco API.
 * 
 * @author Laurens Fridael
 * 
 */
class ApiCompatibilityUtil {

	/**
	 * Provides a workaround breaking API change in {@link ActionDefinitionImpl#setApplicableTypes(List)}. The
	 * {@link List} argument was changed into a {@link Set} in version 4.2 of the Alfresco Community API.
	 * 

* See: Issue on Github. * * @param actionDefinition * @throws IllegalStateException * If the 'setApplicableTypes' method could not be invoked. */ public static void setApplicableTypes(final ActionDefinitionImpl actionDefinition, final List applicableTypes) { Assert.notNull(actionDefinition, "ActionDefinition cannot be null."); Assert.notNull(applicableTypes, "Applicable types cannot ben null."); final Class clazz = actionDefinition.getClass(); // Alfresco 4.0 API, with List argument. try { final Method method = clazz.getMethod("setApplicableTypes", List.class); ReflectionUtils.invokeMethod(method, actionDefinition, applicableTypes); return; } catch (final NoSuchMethodException e) { // Not handled } catch (final SecurityException e) { throw new RuntimeException(e); } // Alfresco 4.2 API, with Set argument. try { final Method method = clazz.getMethod("setApplicableTypes", Set.class); ReflectionUtils.invokeMethod(method, actionDefinition, new HashSet(applicableTypes)); return; } catch (final NoSuchMethodException e) { // Not handled } catch (final SecurityException e) { throw new RuntimeException(e); } throw new IllegalStateException("Could not invoke method 'setApplicableTypes' on '" + clazz + "' instance."); } private ApiCompatibilityUtil() { } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy