15 Jul
2009
15 Jul
'09
1 p.m.
On Mon, Jul 13, 2009 at 22:44, Vincent Massol<[email protected]> wrote: > Hi Thomas, > > On Jul 13, 2009, at 3:20 PM, tmortagne (SVN) wrote: > >> Author: tmortagne >> Date: 2009-07-13 15:20:03 +0200 (Mon, 13 Jul 2009) >> New Revision: 21910 >> >> Added: >> platform/core/trunk/xwiki-component/xwiki-component- >> default/.checkstyle >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> AbstractComponentDescriptorEvent.java >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> ComponentDescriptorRemovedEvent.java >> Modified: >> platform/core/trunk/xwiki-cache/xwiki-cache-tests/src/main/java/ >> org/xwiki/cache/tests/AbstractTestCache.java >> platform/core/trunk/xwiki-component/xwiki-component-api/src/main/ >> java/org/xwiki/component/manager/ComponentEventManager.java >> platform/core/trunk/xwiki-component/xwiki-component-api/src/main/ >> java/org/xwiki/component/manager/ComponentManager.java >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/embed/EmbeddableComponentManager.java >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/internal/DefaultComponentManager.java >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/internal/ >> StackingComponentEventManager.java >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEvent.java >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> test/java/org/xwiki/component/embed/ >> EmbeddableComponentManagerTest.java >> platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> test/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEventTest.java >> platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/test/ >> AbstractBridgedXWikiComponentTestCase.java >> platform/core/trunk/xwiki-plexus/src/main/java/org/xwiki/plexus/ >> manager/PlexusComponentManager.java >> platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/test/ >> java/org/xwiki/rendering/internal/parser/XWikiLinkParserTest.java >> platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-groovy/src/test/java/org/xwiki/rendering/macro/ >> groovy/RenderingTests.java >> platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-html/src/test/java/org/xwiki/rendering/ >> HTMLMacroTest.java >> platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-include/src/test/java/org/xwiki/rendering/internal/ >> macro/IncludeMacroTest.java >> platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-rss/src/test/java/org/xwiki/rendering/ >> RenderingTests.java >> platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-script/src/test/java/org/xwiki/rendering/macro/ >> script/RenderingTests.java >> platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-velocity/src/test/java/org/xwiki/rendering/macro/ >> velocity/RenderingTests.java >> platform/core/trunk/xwiki-shared-tests/src/main/java/org/xwiki/ >> test/MockConfigurationSource.java >> platform/core/trunk/xwiki-shared-tests/src/main/java/org/xwiki/ >> test/XWikiComponentInitializer.java >> Log: >> XWIKI-4077: Component Manager should generate event when the >> component is registered instead of initialized >> XWIKI-4081: Add way to unregister component >> XWIKI-4082: Add way to directly provide the component instance when >> register it > > General comments: > - Would be great if you could separate code reformatting from code > changes. It makes it hard to read (I didn't read the commit fully as a > consequence). > - The code style has broken my styles in lots of places (see below for > some comments, I haven't commented every single place it broke > voluntary formatting). > > I'd like to vote for not applying code style blindly in the future. It > breaks styles in lots of places and I hate it when I spend a good > amount of my time to align code properly and it breaks it for > producing suboptimal styling... > >> Modified: platform/core/trunk/xwiki-cache/xwiki-cache-tests/src/main/ >> java/org/xwiki/cache/tests/AbstractTestCache.java >> =================================================================== >> --- platform/core/trunk/xwiki-cache/xwiki-cache-tests/src/main/java/ >> org/xwiki/cache/tests/AbstractTestCache.java 2009-07-13 11:47:52 UTC >> (rev 21909) >> +++ platform/core/trunk/xwiki-cache/xwiki-cache-tests/src/main/java/ >> org/xwiki/cache/tests/AbstractTestCache.java 2009-07-13 13:20:03 UTC >> (rev 21910) >> @@ -25,6 +25,7 @@ >> import org.jmock.Mock; >> import org.xwiki.cache.CacheFactory; >> import org.xwiki.cache.CacheManager; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.configuration.ConfigurationSource; >> import org.xwiki.test.AbstractXWikiComponentTestCase; >> >> @@ -81,8 +82,12 @@ >> Mock mockConfigurationSource = >> mock(ConfigurationSource.class); >> >> mockConfigurationSource >> .stubs().method("getProperty").with(eq("cache.defaultCache"), >> ANYTHING).will( >> returnValue(this.roleHint)); >> - >> getComponentManager().registerComponent(ConfigurationSource.class, >> "xwikiproperties", >> - mockConfigurationSource.proxy()); >> + >> + DefaultComponentDescriptor<ConfigurationSource> descriptor = >> + new DefaultComponentDescriptor<ConfigurationSource>(); >> + descriptor.setRole(ConfigurationSource.class); >> + descriptor.setRoleHint("xwikiproperties"); >> + getComponentManager().registerComponent(descriptor, >> (ConfigurationSource) mockConfigurationSource.proxy()); > > Maybe we'll need to find an easier way. Like creating a component > descriptor automatically (without dependencies set). I see below that > it adds a lot of code. I prefer having a clean api, i we want a helper we can add one somewhere but the api sould not contains 20 methods doing exactly the same thing. We could simply add constructors to DefaultComponentDescriptor. > > [snip] > >> } >> >> /** >> @@ -111,7 +116,7 @@ >> */ >> public CacheFactory getCacheFactory() throws Exception >> { >> - CacheManager cacheManager = (CacheManager) >> getComponentManager().lookup(CacheManager.class); >> + CacheManager cacheManager = >> getComponentManager().lookup(CacheManager.class); >> >> CacheFactory factory = cacheManager.getCacheFactory(); >> >> >> Modified: platform/core/trunk/xwiki-component/xwiki-component-api/ >> src/main/java/org/xwiki/component/manager/ComponentEventManager.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-api/src/main/ >> java/org/xwiki/component/manager/ComponentEventManager.java >> 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-component/xwiki-component-api/src/main/ >> java/org/xwiki/component/manager/ComponentEventManager.java >> 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -26,18 +26,26 @@ >> * Manages Component Events (when a component instance is created >> for example). It's recommended that implementations >> * use the Observation module to send the events. We're introducing >> this level of indirection in order to be able to >> * perform some processing before the events are fired. For example >> one implementation may want to stack the events >> - * before sending them. >> - * >> + * before sending them. >> + * >> * @version $Id$ >> * @since 2.0M1 >> */ >> public interface ComponentEventManager >> { >> /** >> - * Notify all listeners that a component with the passed >> descriptor has been instantiated. >> + * Notify all listeners that a component with the passed >> descriptor has been registered. >> * >> - * @param <T> the component role type >> * @param descriptor the descriptor for the instantiated component >> + * @since 2.0M1 >> */ >> - <T> void notify(ComponentDescriptor<T> descriptor); >> + void notifyComponentRegistered(ComponentDescriptor< ? > >> descriptor); >> + >> + /** >> + * Notify all listeners that a component with the passed >> descriptor has been unregistered. >> + * >> + * @param descriptor the descriptor for the instantiated >> component >> + * @since 2.0M1 >> + */ >> + void notifyComponentUnregistered(ComponentDescriptor< ? > >> descriptor); > > This doesn't look like it's been added in 2.0M1... ;) Fixed > > [snip] > >> Added: platform/core/trunk/xwiki-component/xwiki-component- >> default/.checkstyle >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component- >> default/.checkstyle (rev 0) >> +++ platform/core/trunk/xwiki-component/xwiki-component- >> default/.checkstyle 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -0,0 +1,10 @@ >> +<?xml version="1.0" encoding="UTF-8"?> >> + >> +<fileset-config file-format-version="1.2.0" simple-config="true"> >> + <fileset name="all" enabled="true" check-config-name="xwiki" >> local="false"> >> + <file-match-pattern match-pattern="." include-pattern="true"/> >> + </fileset> >> + <filter name="FilesFromPackage" enabled="true"> >> + <filter-data value="src/test/java"/> >> + </filter> >> +</fileset-config> > > This seems to have been added by error. Fixed > > [snip] > >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#getComponentDescriptorList(Class) >> */ >> @SuppressWarnings("unchecked") >> public <T> List<ComponentDescriptor<T>> >> getComponentDescriptorList(Class<T> role) >> { >> - synchronized(this) { >> + synchronized (this) { >> List<ComponentDescriptor<T>> results = new >> ArrayList<ComponentDescriptor<T>>(); >> for (Map.Entry<RoleHint< ? >, ComponentDescriptor< ? >> >> entry : this.descriptors.entrySet()) { >> - if >> (entry.getKey().getRole().getName().equals(role.getName())) { >> + if (entry.getKey().getRole() == role) { > > I'm not sure about this change. I don't know why you've changed it. > > I think what you've done may fail if the classes have been loaded from > a different class loader. Have you found a place in the Java spec > mentioning that equals for Class will always compare the class name > and not the class refefence? > > note: I've seen you've changed this in lots of place so it's important > to be sure about what you're doing. I had done it this way to be on > the safe side and so that it'll always work. Since the idea is that EmbededCM is supposed to be a temporary and unit test need and we don't have multiple classloader use case yet, comparing strings look very expensive compared to reference comparison. Also there was code which does not take care of that like the one testing for LogEnabled so it can't really work and whithout explicit comment or unit test I was not sure it was really a strong goal... I'm reverting the code with some comments. > > [snip] > >> - && >> List.class.isAssignableFrom(dependency.getMappingType())) >> - { >> + if ((dependency.getMappingType() != null) && >> List.class.isAssignableFrom(dependency.getMappingType())) { >> fieldValue = lookupList(dependency.getRole()); >> } else if ((dependency.getMappingType() != null) >> - && >> Map.class.isAssignableFrom(dependency.getMappingType())) >> - { >> + && >> Map.class.isAssignableFrom(dependency.getMappingType())) { >> fieldValue = lookupMap(dependency.getRole()); >> } else { >> fieldValue = lookup(dependency.getRole(), >> dependency.getRoleHint()); >> } >> - >> + >> // Set the field by introspection >> if (fieldValue != null) { >> ReflectionUtils.setFieldValue(instance, >> dependency.getName(), fieldValue); >> @@ -313,16 +344,15 @@ >> if >> (LogEnabled.class.isAssignableFrom(descriptor.getImplementation())) { >> ((LogEnabled) instance).enableLogging(new >> CommonsLoggingLogger(instance.getClass())); >> } >> - >> + >> // Composable >> // Only support Composable for classes implementing >> ComponentManager since for all other components >> // they should have ComponentManager injected. >> - if >> (ComponentManager >> .class.isAssignableFrom(descriptor.getImplementation()) >> - && >> Composable.class.isAssignableFrom(descriptor.getImplementation())) >> - { >> + if >> (ComponentManager >> .class.isAssignableFrom(descriptor.getImplementation()) >> + && >> Composable.class.isAssignableFrom(descriptor.getImplementation())) { >> ((Composable) instance).compose(this); >> } > > note that these code style changes are not respecting what we had > decided, ie that for long lines the wrapped line will be formatted as: > > > if (..... > && .....) > { > whatever > } > > > > >> - >> + >> // Initializable >> if >> (Initializable >> .class.isAssignableFrom(descriptor.getImplementation())) { >> ((Initializable) instance).initialize(); >> >> Modified: platform/core/trunk/xwiki-component/xwiki-component- >> default/src/main/java/org/xwiki/component/internal/ >> DefaultComponentManager.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/internal/DefaultComponentManager.java >> 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/internal/DefaultComponentManager.java >> 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -31,8 +31,8 @@ >> import org.xwiki.component.manager.ComponentRepositoryException; >> >> /** >> - * Wraps the Component Manager in a component so that components >> requiring the component Manager can >> - * have it injected automatically. >> + * Wraps the Component Manager in a component so that components >> requiring the component Manager can have it injected >> + * automatically. >> * >> * @version $Id$ >> * @since 2.0M1 >> @@ -47,6 +47,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see Composable#compose(ComponentManager) >> */ >> public void compose(ComponentManager componentManager) >> @@ -56,15 +57,17 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#getComponentDescriptor(Class, String) >> */ >> public <T> ComponentDescriptor<T> >> getComponentDescriptor(Class<T> role, String roleHint) >> { >> return this.componentManager.getComponentDescriptor(role, >> roleHint); >> } >> - >> + >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#getComponentDescriptorList(Class) >> */ >> public <T> List<ComponentDescriptor<T>> >> getComponentDescriptorList(Class<T> role) >> @@ -74,6 +77,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#lookup(Class, String) >> */ >> public <T> T lookup(Class<T> role, String roleHint) throws >> ComponentLookupException >> @@ -83,6 +87,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#lookup(Class) >> */ >> public <T> T lookup(Class<T> role) throws ComponentLookupException >> @@ -92,6 +97,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#lookupList(Class) >> */ >> public <T> List<T> lookupList(Class<T> role) throws >> ComponentLookupException >> @@ -101,6 +107,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#lookupMap(Class) >> */ >> public <T> Map<String, T> lookupMap(Class<T> role) throws >> ComponentLookupException >> @@ -110,6 +117,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#registerComponent(ComponentDescriptor) >> */ >> public <T> void registerComponent(ComponentDescriptor<T> >> componentDescriptor) throws ComponentRepositoryException >> @@ -119,6 +127,29 @@ >> >> /** >> * {@inheritDoc} >> + * >> + * @see >> org >> .xwiki >> .component >> .manager >> .ComponentManager >> #registerComponent(org.xwiki.component.descriptor.ComponentDescriptor, >> + * java.lang.Object) >> + */ > > Is this valid javadoc? I doubt it. Why this would not be valid ? Note that this wrapping on each dot is because of the mail, it's not like that in the real source. > >> + public <T> void registerComponent(ComponentDescriptor<T> >> componentDescriptor, T componentInstance) >> + throws ComponentRepositoryException >> + { >> + >> this.componentManager.registerComponent(componentDescriptor, >> componentInstance); >> + } >> + >> + /** >> + * {@inheritDoc} >> + * >> + * @see >> org >> .xwiki >> .component >> .manager.ComponentManager#unregisterComponent(java.lang.Class, >> java.lang.String) >> + */ >> + public void unregisterComponent(Class< ? > role, String roleHint) >> + { >> + this.componentManager.unregisterComponent(role, roleHint); >> + } >> + >> + /** >> + * {@inheritDoc} >> + * >> * @see ComponentManager#release(Object) >> */ >> public <T> void release(T component) throws >> ComponentLifecycleException >> @@ -128,6 +159,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#hasComponent(Class, String) >> */ >> public <T> boolean hasComponent(Class<T> role, String roleHint) >> @@ -137,6 +169,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#hasComponent(Class) >> */ >> public <T> boolean hasComponent(Class<T> role) >> @@ -146,6 +179,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see >> ComponentManager#setComponentEventManager(ComponentEventManager) >> */ >> public void setComponentEventManager(ComponentEventManager >> eventManager) >> >> Modified: platform/core/trunk/xwiki-component/xwiki-component- >> default/src/main/java/org/xwiki/component/internal/ >> StackingComponentEventManager.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/internal/ >> StackingComponentEventManager.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/internal/ >> StackingComponentEventManager.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -23,13 +23,15 @@ >> >> import org.xwiki.component.descriptor.ComponentDescriptor; >> import org.xwiki.component.manager.ComponentDescriptorAddedEvent; >> +import org.xwiki.component.manager.ComponentDescriptorRemovedEvent; >> import org.xwiki.component.manager.ComponentEventManager; >> import org.xwiki.observation.ObservationManager; >> +import org.xwiki.observation.event.Event; >> >> /** >> - * Allow stacking component events and flush them whenever the user >> of this class wants to. This is used for example >> - * at application initialization time when we don't want to send >> events before the Application Context has been >> - * initialized since components subscribing to these events may >> want to use the Application Context. >> + * Allow stacking component events and flush them whenever the user >> of this class wants to. This is used for example at >> + * application initialization time when we don't want to send >> events before the Application Context has been initialized >> + * since components subscribing to these events may want to use the >> Application Context. >> * >> * @version $Id$ >> * @since 2.0M1 >> @@ -37,48 +39,78 @@ >> public class StackingComponentEventManager implements >> ComponentEventManager >> { >> private ObservationManager observationManager; >> - >> - private Stack<ComponentDescriptor< ? >> events = new >> Stack<ComponentDescriptor< ? >>(); >> - >> + >> + private Stack<ComponentEventEntry> events = new >> Stack<ComponentEventEntry>(); >> + >> private boolean shouldStack = true; >> - >> + >> /** >> * {@inheritDoc} >> - * @see ComponentEventManager#notify(ComponentDescriptor) >> + * >> + * @see >> org >> .xwiki >> .component >> .manager >> .ComponentEventManager >> #notifyComponentRegistered >> (org.xwiki.component.descriptor.ComponentDescriptor) >> */ >> - public <T> void notify(ComponentDescriptor< T > descriptor) >> + public void notifyComponentRegistered(ComponentDescriptor< ? > >> descriptor) >> { >> - if (this.shouldStack) { >> - synchronized (this) { >> - this.events.push(descriptor); >> - } >> - } else { >> - notifyInternal(descriptor); >> - } >> + notifyComponentEvent(new >> ComponentDescriptorAddedEvent(descriptor.getRole(), >> descriptor.getRoleHint()), >> + descriptor); >> } >> - >> + >> + /** >> + * {@inheritDoc} >> + * >> + * @see >> org >> .xwiki >> .component >> .manager >> .ComponentEventManager >> #notifyComponentUnregistered >> (org.xwiki.component.descriptor.ComponentDescriptor) >> + */ >> + public void notifyComponentUnregistered(ComponentDescriptor< ? >> > descriptor) >> + { >> + notifyComponentEvent(new >> ComponentDescriptorRemovedEvent(descriptor.getRole(), >> descriptor.getRoleHint()), >> + descriptor); >> + } >> + >> public synchronized void flushEvents() >> { >> - while(!this.events.isEmpty()) { >> - notifyInternal(events.remove(0)); >> + for (ComponentEventEntry entry : this.events) { >> + sendEvent(entry.event, entry.descriptor); >> } >> } >> - >> + >> public void shouldStack(boolean shouldStack) >> { >> this.shouldStack = shouldStack; >> } >> - >> + >> public void setObservationManager(ObservationManager >> observationManager) >> { >> this.observationManager = observationManager; >> } >> >> - private void notifyInternal(ComponentDescriptor< ? > descriptor) >> + private void notifyComponentEvent(Event event, >> ComponentDescriptor< ? > descriptor) >> { >> + if (this.shouldStack) { >> + synchronized (this) { >> + this.events.push(new ComponentEventEntry(event, >> descriptor)); >> + } >> + } else { >> + sendEvent(event, descriptor); >> + } >> + } >> + >> + private void sendEvent(Event event, ComponentDescriptor< ? > >> descriptor) >> + { >> if (this.observationManager != null) { >> - ComponentDescriptorAddedEvent event = new >> ComponentDescriptorAddedEvent(descriptor.getRole()); >> this.observationManager.notify(event, this, descriptor); >> } >> } >> + >> + static class ComponentEventEntry >> + { >> + public Event event; >> + >> + public ComponentDescriptor< ? > descriptor; >> + >> + public ComponentEventEntry(Event event, >> ComponentDescriptor< ? > descriptor) >> + { >> + this.event = event; >> + this.descriptor = descriptor; >> + } >> + } >> } >> >> >> Property changes on: platform/core/trunk/xwiki-component/xwiki- >> component-default/src/main/java/org/xwiki/component/internal/ >> StackingComponentEventManager.java >> ___________________________________________________________________ >> Name: svn:keywords >> - Id >> >> Added: platform/core/trunk/xwiki-component/xwiki-component-default/ >> src/main/java/org/xwiki/component/manager/ >> AbstractComponentDescriptorEvent.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> AbstractComponentDescriptorEvent.java (rev 0) >> +++ platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> AbstractComponentDescriptorEvent.java 2009-07-13 13:20:03 UTC (rev >> 21910) >> @@ -0,0 +1,100 @@ >> +/* >> + * See the NOTICE file distributed with this work for additional >> + * information regarding copyright ownership. >> + * >> + * This is free software; you can redistribute it and/or modify it >> + * under the terms of the GNU Lesser General Public License as >> + * published by the Free Software Foundation; either version 2.1 of >> + * the License, or (at your option) any later version. >> + * >> + * This software 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 >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with this software; if not, write to the Free >> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA >> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. >> + */ >> +package org.xwiki.component.manager; >> + >> +import org.xwiki.observation.event.Event; >> + >> +/** >> + * Base class for events about components descriptors. >> + * >> + * @version $Id$ >> + * @since 2.0M1 > > 2.0M2? Fixed > > [snip] > > > >> + */ >> +public abstract class AbstractComponentDescriptorEvent implements >> Event >> +{ >> + private Class< ? > role; >> + >> + private String roleHint; >> + >> + /** >> + * Watches all roles (whenever a component is added it'll >> trigger this event). >> + */ >> + public AbstractComponentDescriptorEvent() >> + { >> + this.role = null; >> + } >> + >> + /** >> + * @param role the component role to watch (all components >> matching this role will trigger this event) >> + */ >> + public AbstractComponentDescriptorEvent(Class< ? > role) >> + { >> + this.role = role; >> + } >> + >> + /** >> + * @param role the component role/rolehint to watch >> + */ >> + public AbstractComponentDescriptorEvent(Class< ? > role, String >> roleHint) >> + { >> + this.role = role; >> + this.roleHint = roleHint; >> + } >> + >> + /** >> + * @return the component's role being watched or null if all >> components registrations are watched >> + */ >> + public Class< ? > getRole() >> + { >> + return this.role; >> + } >> + >> + /** >> + * @return the component's role hint being watched or null if >> all role's components registrations are watched >> + */ >> + public String getRoleHint() >> + { >> + return this.roleHint; >> + } >> + >> + /** >> + * {@inheritDoc} >> + * >> + * @see >> org.xwiki.observation.event.Event#matches(java.lang.Object) >> + */ >> + public boolean matches(Object otherEvent) >> + { >> + boolean result = false; >> + >> + if (otherEvent instanceof AbstractComponentDescriptorEvent) { >> + // If we're watching all roles return a match >> + if (getRole() == null) { >> + result = true; >> + } else { >> + AbstractComponentDescriptorEvent event = >> (AbstractComponentDescriptorEvent) otherEvent; >> + if (getRole() == event.getRole()) { >> + result = getRoleHint() == null || >> getRoleHint().equals(event.getRoleHint()); >> + } >> + } >> + } >> + >> + return result; >> + } >> +} >> >> >> Property changes on: platform/core/trunk/xwiki-component/xwiki- >> component-default/src/main/java/org/xwiki/component/manager/ >> AbstractComponentDescriptorEvent.java >> ___________________________________________________________________ >> Name: svn:mime-type >> + text/plain >> Name: svn:keywords >> + Id >> Name: svn:eol-style >> + native >> >> Modified: platform/core/trunk/xwiki-component/xwiki-component- >> default/src/main/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEvent.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEvent.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEvent.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -27,54 +27,45 @@ >> * @version $Id$ >> * @since 2.0M1 >> */ >> -public class ComponentDescriptorAddedEvent implements Event >> +public class ComponentDescriptorAddedEvent extends >> AbstractComponentDescriptorEvent >> { >> - private Class< ? > role; >> - >> /** >> * Watches all roles (whenever a component is added it'll >> trigger this event). >> */ >> public ComponentDescriptorAddedEvent() >> { >> - this.role = null; >> + >> } >> - >> + >> /** >> * @param role the component role to watch (all components >> matching this role will trigger this event) >> */ >> public ComponentDescriptorAddedEvent(Class< ? > role) >> { >> - this.role = role; >> + super(role); >> } >> - >> + >> /** >> - * @return the component's role being watched or null if all >> component registrations are watched >> + * @param role the component role/rolehint to watch >> */ >> - public Class< ? > getRole() >> + public ComponentDescriptorAddedEvent(Class< ? > role, String >> roleHint) >> { >> - return this.role; >> + super(role, roleHint); >> } >> - >> + >> /** >> * {@inheritDoc} >> + * >> * @see Event#matches(Object) >> */ >> public boolean matches(Object otherEvent) >> { >> boolean result = false; >> - >> + >> if >> (ComponentDescriptorAddedEvent >> .class.isAssignableFrom(otherEvent.getClass())) { >> - // If we're watching all roles return a match >> - if (getRole() == null) { >> - result = true; >> - } else { >> - ComponentDescriptorAddedEvent event = >> (ComponentDescriptorAddedEvent) otherEvent; >> - if >> (getRole().getName().equals(event.getRole().getName())) { >> - result = true; >> - } >> - } >> + result = super.matches(otherEvent); >> } >> - >> - return result; >> + >> + return result; >> } >> } >> >> Added: platform/core/trunk/xwiki-component/xwiki-component-default/ >> src/main/java/org/xwiki/component/manager/ >> ComponentDescriptorRemovedEvent.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> ComponentDescriptorRemovedEvent.java (rev 0) >> +++ platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> main/java/org/xwiki/component/manager/ >> ComponentDescriptorRemovedEvent.java 2009-07-13 13:20:03 UTC (rev >> 21910) >> @@ -0,0 +1,69 @@ >> +/* >> + * See the NOTICE file distributed with this work for additional >> + * information regarding copyright ownership. >> + * >> + * This is free software; you can redistribute it and/or modify it >> + * under the terms of the GNU Lesser General Public License as >> + * published by the Free Software Foundation; either version 2.1 of >> + * the License, or (at your option) any later version. >> + * >> + * This software 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 >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with this software; if not, write to the Free >> + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA >> + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. >> + */ >> +package org.xwiki.component.manager; >> + >> +/** >> + * Event sent to tell that a new Component Descriptor has been >> unregistered. >> + * >> + * @version $Id$ >> + * @since 2.0M2 >> + */ >> +public class ComponentDescriptorRemovedEvent extends >> AbstractComponentDescriptorEvent >> +{ >> + /** >> + * Watches all roles (whenever a component is added it'll >> trigger this event). >> + */ >> + public ComponentDescriptorRemovedEvent() >> + { >> + >> + } > > This needs a comment to explain why it's empty since empty blocks > trigger a checkstyle exception. It's empty because there is nothing to do here and no it's not a checkstyle error in empty constructors according to the mvn checkstyle:check. > > [snip] > > > >> + >> + /** >> + * @param role the component role to watch (all components >> matching this role will trigger this event) >> + */ >> + public ComponentDescriptorRemovedEvent(Class< ? > role) >> + { >> + super(role); >> + } >> + >> + /** >> + * @param role the component role/rolehint to watch >> + */ >> + public ComponentDescriptorRemovedEvent(Class< ? > role, String >> roleHint) >> + { >> + super(role, roleHint); >> + } >> + >> + /** >> + * {@inheritDoc} >> + * >> + * @see >> org >> .xwiki >> .component >> .manager.AbstractComponentDescriptorEvent#matches(java.lang.Object) >> + */ >> + public boolean matches(Object otherEvent) >> + { >> + boolean result = false; >> + >> + if >> (ComponentDescriptorRemovedEvent >> .class.isAssignableFrom(otherEvent.getClass())) { >> + result = super.matches(otherEvent); >> + } >> + >> + return result; >> + } >> +} >> >> >> Property changes on: platform/core/trunk/xwiki-component/xwiki- >> component-default/src/main/java/org/xwiki/component/manager/ >> ComponentDescriptorRemovedEvent.java >> ___________________________________________________________________ >> Name: svn:mime-type >> + text/plain >> Name: svn:keywords >> + Id >> Name: svn:eol-style >> + native >> >> Modified: platform/core/trunk/xwiki-component/xwiki-component- >> default/src/test/java/org/xwiki/component/embed/ >> EmbeddableComponentManagerTest.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> test/java/org/xwiki/component/embed/ >> EmbeddableComponentManagerTest.java 2009-07-13 11:47:52 UTC (rev >> 21909) >> +++ platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> test/java/org/xwiki/component/embed/ >> EmbeddableComponentManagerTest.java 2009-07-13 13:20:03 UTC (rev >> 21910) >> @@ -26,6 +26,7 @@ >> import org.junit.Test; >> import org.xwiki.component.descriptor.ComponentDescriptor; >> import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> +import org.xwiki.component.manager.ComponentLookupException; >> >> /** >> * Unit tests for {@link EmbeddableComponentManager}. >> @@ -38,20 +39,20 @@ >> public static interface Role >> { >> } >> - >> + >> public static class RoleImpl implements Role >> { >> } >> - >> + >> public static class OtherRoleImpl implements Role >> { >> } >> - >> + >> @Test >> public void testGetComponentDescriptorList() throws Exception >> { >> EmbeddableComponentManager ecm = new >> EmbeddableComponentManager(); >> - >> + >> DefaultComponentDescriptor<Role> d1 = new >> DefaultComponentDescriptor<Role>(); >> d1.setRole(Role.class); >> d1.setRoleHint("hint1"); >> @@ -61,13 +62,13 @@ >> d2.setRole(Role.class); >> d2.setRoleHint("hint2"); >> ecm.registerComponent(d2); >> - >> + >> List<ComponentDescriptor<Role>> cds = >> ecm.getComponentDescriptorList(Role.class); >> Assert.assertEquals(2, cds.size()); >> Assert.assertTrue(cds.contains(d1)); >> Assert.assertTrue(cds.contains(d2)); >> } >> - >> + >> @Test >> public void testRegisterComponentOverExistingOne() throws >> Exception >> { >> @@ -79,14 +80,50 @@ >> ecm.registerComponent(d1); >> >> Object instance = ecm.lookup(Role.class); >> - Assert.assertEquals(RoleImpl.class.getName(), >> instance.getClass().getName()); >> - >> + Assert.assertSame(RoleImpl.class, instance.getClass()); >> + >> DefaultComponentDescriptor<Role> d2 = new >> DefaultComponentDescriptor<Role>(); >> d2.setRole(Role.class); >> d2.setImplementation(OtherRoleImpl.class); >> ecm.registerComponent(d2); >> >> instance = ecm.lookup(Role.class); >> - Assert.assertEquals(OtherRoleImpl.class.getName(), >> instance.getClass().getName()); >> + Assert.assertSame(OtherRoleImpl.class, instance.getClass()); >> } >> + >> + @Test >> + public void testRegisterComponentInstance() throws Exception >> + { >> + EmbeddableComponentManager ecm = new >> EmbeddableComponentManager(); >> + >> + DefaultComponentDescriptor<Role> d1 = new >> DefaultComponentDescriptor<Role>(); >> + d1.setRole(Role.class); >> + d1.setImplementation(RoleImpl.class); >> + Role instance = new RoleImpl(); >> + ecm.registerComponent(d1, instance); >> + >> + Assert.assertSame(instance, ecm.lookup(Role.class)); >> + } >> + >> + @Test >> + public void testUnregisterComponent() throws Exception >> + { >> + EmbeddableComponentManager ecm = new >> EmbeddableComponentManager(); >> + >> + DefaultComponentDescriptor<Role> d1 = new >> DefaultComponentDescriptor<Role>(); >> + d1.setRole(Role.class); >> + d1.setImplementation(RoleImpl.class); >> + ecm.registerComponent(d1); >> + >> + Assert.assertSame(RoleImpl.class, >> ecm.lookup(Role.class).getClass()); >> + >> + ecm.unregisterComponent(d1.getRole(), d1.getRoleHint()); >> + >> + try { >> + ecm.lookup(d1.getRole()); >> + Assert.fail("Should have thrown a >> ComponentLookupException"); >> + } catch (ComponentLookupException e) { >> + // expected >> + } >> + } >> } >> >> Modified: platform/core/trunk/xwiki-component/xwiki-component- >> default/src/test/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEventTest.java >> =================================================================== >> --- platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> test/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEventTest.java 2009-07-13 11:47:52 UTC (rev >> 21909) >> +++ platform/core/trunk/xwiki-component/xwiki-component-default/src/ >> test/java/org/xwiki/component/manager/ >> ComponentDescriptorAddedEventTest.java 2009-07-13 13:20:03 UTC (rev >> 21910) >> @@ -38,34 +38,36 @@ >> private static class Dummy >> { >> } >> - >> + >> @Test >> public void testMatchesAllComponentRoles() >> { >> ComponentDescriptorAddedEvent event = new >> ComponentDescriptorAddedEvent(); >> // Note: We use any class for the test but it's supposed to >> be a component role class. >> - Assert.assertTrue(event.matches(new >> ComponentDescriptorAddedEvent(Dummy.class))); >> + Assert.assertTrue(event.matches(new >> ComponentDescriptorAddedEvent(Dummy.class, "rolehint"))); >> } >> >> @Test >> public void testMatchesWhenDifferentEvent() >> { >> ComponentDescriptorAddedEvent event = new >> ComponentDescriptorAddedEvent(); >> - Assert.assertFalse(event.matches(new Event() { >> + Assert.assertFalse(event.matches(new Event() >> + { >> public boolean matches(Object otherEvent) >> { >> return false; >> } >> })); >> } >> - >> + >> @Test >> public void testMatchesWhenSpecificRoleSpecified() >> { >> // Note: We use any class for the test but it's supposed to >> be a component role class. >> ComponentDescriptorAddedEvent event = new >> ComponentDescriptorAddedEvent(Dummy.class); >> - Assert.assertTrue(event.matches(new >> ComponentDescriptorAddedEvent(Dummy.class))); >> + Assert.assertTrue(event.matches(new >> ComponentDescriptorAddedEvent(Dummy.class, "rolehint"))); >> // Use a different class so that it doesn't match >> - Assert.assertFalse(event.matches(new >> ComponentDescriptorAddedEvent(ComponentDescriptorAddedEvent.class))); >> + Assert.assertFalse(event.matches(new >> ComponentDescriptorAddedEvent(ComponentDescriptorAddedEvent.class, >> + "rolehint"))); >> } >> } >> >> Modified: platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/ >> test/AbstractBridgedXWikiComponentTestCase.java >> =================================================================== >> --- platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/test/ >> AbstractBridgedXWikiComponentTestCase.java 2009-07-13 11:47:52 UTC >> (rev 21909) >> +++ platform/core/trunk/xwiki-core/src/test/java/com/xpn/xwiki/test/ >> AbstractBridgedXWikiComponentTestCase.java 2009-07-13 13:20:03 UTC >> (rev 21910) >> @@ -20,6 +20,7 @@ >> package com.xpn.xwiki.test; >> >> import org.jmock.Mock; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.component.manager.ComponentManager; >> import org.xwiki.container.Container; >> import org.xwiki.context.Execution; >> @@ -67,7 +68,9 @@ >> >> Mock mockCoreConfiguration = mock(CoreConfiguration.class); >> >> mockCoreConfiguration >> .stubs().method("getDefaultDocumentSyntax").will(returnValue("xwiki/ >> 1.0")); >> - >> getComponentManager().registerComponent(CoreConfiguration.class, >> mockCoreConfiguration.proxy()); >> + DefaultComponentDescriptor<CoreConfiguration> descriptor = >> new DefaultComponentDescriptor<CoreConfiguration>(); >> + descriptor.setRole(CoreConfiguration.class); >> + getComponentManager().registerComponent(descriptor, >> (CoreConfiguration) mockCoreConfiguration.proxy()); >> } >> >> @Override >> >> Modified: platform/core/trunk/xwiki-plexus/src/main/java/org/xwiki/ >> plexus/manager/PlexusComponentManager.java >> =================================================================== >> --- platform/core/trunk/xwiki-plexus/src/main/java/org/xwiki/plexus/ >> manager/PlexusComponentManager.java 2009-07-13 11:47:52 UTC (rev >> 21909) >> +++ platform/core/trunk/xwiki-plexus/src/main/java/org/xwiki/plexus/ >> manager/PlexusComponentManager.java 2009-07-13 13:20:03 UTC (rev >> 21910) >> @@ -52,6 +52,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#hasComponent(Class, String) >> */ >> public <T> boolean hasComponent(Class<T> role, String roleHint) >> @@ -61,6 +62,7 @@ >> >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#hasComponent(Class) >> */ >> public <T> boolean hasComponent(Class<T> role) >> @@ -73,7 +75,8 @@ >> * >> * @see org.xwiki.component.manager.ComponentManager#lookup(Class) >> */ >> - public <T> T lookup(Class< T > role) throws >> ComponentLookupException >> + @SuppressWarnings("unchecked") >> + public <T> T lookup(Class<T> role) throws >> ComponentLookupException >> { >> T result; >> try { >> @@ -90,7 +93,8 @@ >> * >> * @see >> org.xwiki.component.manager.ComponentManager#lookup(Class, String) >> */ >> - public <T> T lookup(Class< T > role, String roleHint) throws >> ComponentLookupException >> + @SuppressWarnings("unchecked") >> + public <T> T lookup(Class<T> role, String roleHint) throws >> ComponentLookupException >> { >> T result; >> try { >> @@ -108,7 +112,8 @@ >> * >> * @see >> org.xwiki.component.manager.ComponentManager#lookupMap(Class) >> */ >> - public <T> Map<String, T> lookupMap(Class< T > role) throws >> ComponentLookupException >> + @SuppressWarnings("unchecked") >> + public <T> Map<String, T> lookupMap(Class<T> role) throws >> ComponentLookupException >> { >> Map<String, T> result; >> try { >> @@ -125,7 +130,8 @@ >> * >> * @see >> org.xwiki.component.manager.ComponentManager#lookupList(Class) >> */ >> - public <T> List< T > lookupList(Class< T > role) throws >> ComponentLookupException >> + @SuppressWarnings("unchecked") >> + public <T> List<T> lookupList(Class<T> role) throws >> ComponentLookupException >> { >> List<T> result; >> try { >> @@ -156,8 +162,7 @@ >> * >> * @see >> org >> .xwiki >> .component >> .manager >> .ComponentManager >> #registerComponent(org.xwiki.component.descriptor.ComponentDescriptor) >> */ >> - public <T> void registerComponent(ComponentDescriptor<T> >> componentDescriptor) >> - throws ComponentRepositoryException >> + public <T> void registerComponent(ComponentDescriptor<T> >> componentDescriptor) throws ComponentRepositoryException >> { >> org.codehaus.plexus.component.repository.ComponentDescriptor >> pcd = >> createPlexusComponentDescriptor(componentDescriptor); >> @@ -169,22 +174,37 @@ >> } >> } >> >> + public <T> void registerComponent(ComponentDescriptor<T> >> componentDescriptor, T componentInstance) >> + throws ComponentRepositoryException >> + { >> + // TODO: find what to do here >> + throw new RuntimeException("Not implemented"); >> + } >> + >> + public void unregisterComponent(Class< ? > role, String roleHint) >> + { >> + // TODO: find what to do here >> + throw new RuntimeException("Not implemented"); >> + } >> + >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#getComponentDescriptor(Class, String) >> * @since 2.0M1 >> */ >> - public <T> ComponentDescriptor<T> getComponentDescriptor(Class< >> T > role, String roleHint) >> + public <T> ComponentDescriptor<T> >> getComponentDescriptor(Class<T> role, String roleHint) >> { >> - return createXWikiComponentDescriptor( >> - >> this.plexusContainer.getComponentDescriptor(role.getName(), >> roleHint)); >> + return >> createXWikiComponentDescriptor >> (this.plexusContainer.getComponentDescriptor(role.getName(), >> roleHint)); >> } >> - >> + >> /** >> * {@inheritDoc} >> + * >> * @see ComponentManager#getComponentDescriptorList(Class) >> * @since 2.0M1 >> */ >> + @SuppressWarnings("unchecked") >> public <T> List<ComponentDescriptor<T>> >> getComponentDescriptorList(Class<T> role) >> { >> >> List<org.codehaus.plexus.component.repository.ComponentDescriptor> >> pcds = >> @@ -194,11 +214,13 @@ >> for >> (org.codehaus.plexus.component.repository.ComponentDescriptor pcd : >> pcds) { >> results.add((ComponentDescriptor<T>) >> createXWikiComponentDescriptor(pcd)); >> } >> + >> return results; >> } >> >> /** >> * {@inheritDoc} >> + * >> * @see >> ComponentManager#setComponentEventManager(ComponentEventManager) >> */ >> public void setComponentEventManager(ComponentEventManager >> eventManager) >> @@ -206,23 +228,24 @@ >> // Do nothing since there's no hook to get Plexus Events. >> } >> >> + @SuppressWarnings("unchecked") >> private <T> ComponentDescriptor<T> createXWikiComponentDescriptor( >> org.codehaus.plexus.component.repository.ComponentDescriptor >> pcd) >> { >> DefaultComponentDescriptor<T> descriptor = null; >> - >> + >> if (pcd != null) { >> descriptor = new DefaultComponentDescriptor<T>(); >> descriptor.setImplementation((Class< ? extends T>) >> loadClass(pcd.getImplementation())); >> descriptor.setRoleHint(pcd.getRoleHint()); >> descriptor.setRole((Class<T>) loadClass(pcd.getRole())); >> - >> + >> if ("per-lookup".equals(pcd.getInstantiationStrategy())) { >> >> descriptor >> .setInstantiationStrategy(ComponentInstantiationStrategy.PER_LOOKUP); >> } else { >> >> descriptor >> .setInstantiationStrategy(ComponentInstantiationStrategy.SINGLETON); >> } >> - >> + >> // Copy dependencies >> for (ComponentRequirement requirement : >> (List<ComponentRequirement>) pcd.getRequirements()) { >> DefaultComponentDependency dependency = new >> DefaultComponentDependency(); >> @@ -230,18 +253,18 @@ >> dependency.setRoleHint(requirement.getRoleHint()); >> >> dependency >> .setMappingType(loadClass(requirement.getFieldMappingType())); >> dependency.setName(requirement.getFieldName()); >> - >> + >> // TODO: Handle specific hints when we move to a >> more recent Plexus version. >> // See createPlexusComponentDescriptor >> descriptor.addComponentDependency(dependency); >> } >> } >> - >> - return descriptor; >> + >> + return descriptor; >> } >> - >> + >> private >> org.codehaus.plexus.component.repository.ComponentDescriptor >> createPlexusComponentDescriptor( >> - ComponentDescriptor<?> componentDescriptor) >> + ComponentDescriptor< ? > componentDescriptor) >> { >> org.codehaus.plexus.component.repository.ComponentDescriptor >> pcd = >> new >> org.codehaus.plexus.component.repository.ComponentDescriptor(); >> @@ -249,7 +272,7 @@ >> pcd.setRole(componentDescriptor.getRole().getName()); >> pcd.setRoleHint(componentDescriptor.getRoleHint()); >> >> pcd >> .setImplementation(componentDescriptor.getImplementation().getName()); >> - >> + >> switch (componentDescriptor.getInstantiationStrategy()) { >> case PER_LOOKUP: >> pcd.setInstantiationStrategy("per-lookup"); >> @@ -258,22 +281,19 @@ >> pcd.setInstantiationStrategy("singleton"); >> } >> >> - Collection<ComponentDependency<?>> componentDependencies = >> componentDescriptor.getComponentDependencies(); >> - for (ComponentDependency<?> dependency : >> componentDependencies) { >> + Collection<ComponentDependency< ? >> componentDependencies >> = componentDescriptor.getComponentDependencies(); >> + for (ComponentDependency< ? > dependency : >> componentDependencies) { >> ComponentRequirement requirement; >> - >> + >> // Handles several hints in case of lists (collections >> or maps) >> if >> (Collection.class.isAssignableFrom(dependency.getMappingType()) >> - || >> Map.class.isAssignableFrom(dependency.getMappingType())) >> - { >> + || >> Map.class.isAssignableFrom(dependency.getMappingType())) { >> // TODO: Uncomment when we move to a more recent >> Plexus version which implements >> // ComponentRequirementList. >> /* >> - String[] hints = dependency.getHints(); >> - if (hints != null && hints.length > 0) { >> - >> ((ComponentRequirementList >> )requirement).setRoleHints(Arrays.asList(hints)); >> - } >> - */ >> + * String[] hints = dependency.getHints(); if >> (hints != null && hints.length > 0) { >> + * >> ((ComponentRequirementList >> )requirement).setRoleHints(Arrays.asList(hints)); } >> + */ >> requirement = new ComponentRequirement(); >> } else { >> requirement = new ComponentRequirement(); >> @@ -283,7 +303,7 @@ >> requirement.setRoleHint(dependency.getRoleHint()); >> >> requirement >> .setFieldMappingType(dependency.getMappingType().getName()); >> requirement.setFieldName(dependency.getName()); >> - >> + >> pcd.addRequirement(requirement); >> } >> >> >> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-api/ >> src/test/java/org/xwiki/rendering/internal/parser/ >> XWikiLinkParserTest.java >> =================================================================== >> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/test/ >> java/org/xwiki/rendering/internal/parser/XWikiLinkParserTest.java >> 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-api/src/test/ >> java/org/xwiki/rendering/internal/parser/XWikiLinkParserTest.java >> 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -20,6 +20,8 @@ >> package org.xwiki.rendering.internal.parser; >> >> import org.jmock.Mock; >> +import org.xwiki.component.descriptor.ComponentInstantiationStrategy; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.rendering.listener.Link; >> import org.xwiki.rendering.listener.LinkType; >> import org.xwiki.rendering.parser.LinkParser; >> @@ -36,9 +38,15 @@ >> { >> // Create a Mock WikiModel implementation so that the link >> parser works in wiki mode >> Mock mockWikiModel = mock(WikiModel.class); >> - getComponentManager().registerComponent(WikiModel.class, >> mockWikiModel.proxy()); >> - LinkParser parser = >> getComponentManager().lookup(LinkParser.class, "xwiki/2.0"); >> >> + DefaultComponentDescriptor<WikiModel> componentDescriptor = >> new DefaultComponentDescriptor<WikiModel>(); >> + componentDescriptor.setRole(WikiModel.class); >> + >> componentDescriptor >> .setInstantiationStrategy(ComponentInstantiationStrategy.SINGLETON); >> + componentDescriptor.setImplementation(null); >> + >> + >> getComponentManager().registerComponent(componentDescriptor, >> (WikiModel) mockWikiModel.proxy()); >> + LinkParser parser = >> getComponentManager().lookup(LinkParser.class, "xwiki/2.0"); >> + >> Link link = parser.parse(""); >> assertEquals("", link.getReference()); >> assertEquals("Reference = []", link.toString()); >> @@ -85,7 +93,7 @@ >> assertEquals("mailto:[email protected]", link.getReference()); >> assertEquals(LinkType.URI, link.getType()); >> assertEquals("Reference = [mailto:[email protected]]", >> link.toString()); >> - >> + >> // Verify image: URI is recognized >> link = parser.parse("image:some:content"); >> assertEquals("image:some:content", link.getReference()); >> @@ -97,13 +105,13 @@ >> assertEquals("attach:some:content", link.getReference()); >> assertEquals(LinkType.URI, link.getType()); >> assertEquals("Reference = [attach:some:content]", >> link.toString()); >> - >> + >> // Verify that unknown URIs are ignored >> // Note: We consider that myxwiki is the wiki name and http://xwiki.org >> is the page name >> link = parser.parse("mywiki:http://xwiki.org"); >> assertEquals("mywiki:http://xwiki.org", link.getReference()); >> assertEquals(LinkType.DOCUMENT, link.getType()); >> assertEquals("Reference = [mywiki:http://xwiki.org]", >> link.toString()); >> - >> + >> + } >> } >> -} >> >> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/ >> xwiki-rendering-macro-groovy/src/test/java/org/xwiki/rendering/macro/ >> groovy/RenderingTests.java >> =================================================================== >> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-groovy/src/test/java/org/xwiki/rendering/macro/ >> groovy/RenderingTests.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-groovy/src/test/java/org/xwiki/rendering/macro/ >> groovy/RenderingTests.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -28,6 +28,7 @@ >> import org.jmock.Expectations; >> import org.jmock.Mockery; >> import org.xwiki.bridge.DocumentAccessBridge; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.component.embed.EmbeddableComponentManager; >> import org.xwiki.rendering.scaffolding.RenderingTestSuite; >> import org.xwiki.script.ScriptContextManager; >> @@ -61,18 +62,32 @@ >> >> // Document Access Bridge Mock >> final DocumentAccessBridge mockDocumentAccessBridge = >> context.mock(DocumentAccessBridge.class); >> - context.checking(new Expectations() {{ >> - >> allowing(mockDocumentAccessBridge).hasProgrammingRights(); >> will(returnValue(true)); >> - }}); >> - >> componentManager.registerComponent(DocumentAccessBridge.class, >> mockDocumentAccessBridge); >> - >> + context.checking(new Expectations() >> + { >> + { >> + >> allowing(mockDocumentAccessBridge).hasProgrammingRights(); >> + will(returnValue(true)); >> + } >> + }); > > hmmm this is not following the recommended code style for > expectations. See jmock.org` > > Can you please revert all these style changes? > > side note: This why I never apply code style blindly. It'll always > break stuff you've done voluntarily. > > > >> + DefaultComponentDescriptor<DocumentAccessBridge> >> descriptorDAB = >> + new DefaultComponentDescriptor<DocumentAccessBridge>(); >> + descriptorDAB.setRole(DocumentAccessBridge.class); >> + componentManager.registerComponent(descriptorDAB, >> mockDocumentAccessBridge); >> + >> // Script Context Mock >> final ScriptContextManager mockScriptContextManager = >> context.mock(ScriptContextManager.class); >> final SimpleScriptContext scriptContext = new >> SimpleScriptContext(); >> scriptContext.setAttribute("var", "value", >> ScriptContext.ENGINE_SCOPE); >> - context.checking(new Expectations() {{ >> - allowing(mockScriptContextManager).getScriptContext(); >> will(returnValue(scriptContext)); >> - }}); >> - >> componentManager.registerComponent(ScriptContextManager.class, >> mockScriptContextManager); >> + context.checking(new Expectations() >> + { >> + { >> + >> allowing(mockScriptContextManager).getScriptContext(); >> + will(returnValue(scriptContext)); >> + } >> + }); >> + DefaultComponentDescriptor<ScriptContextManager> >> descriptorSCM = >> + new DefaultComponentDescriptor<ScriptContextManager>(); >> + descriptorSCM.setRole(ScriptContextManager.class); >> + componentManager.registerComponent(descriptorSCM, >> mockScriptContextManager); >> } >> } >> >> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/ >> xwiki-rendering-macro-html/src/test/java/org/xwiki/rendering/ >> HTMLMacroTest.java >> =================================================================== >> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-html/src/test/java/org/xwiki/rendering/ >> HTMLMacroTest.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-html/src/test/java/org/xwiki/rendering/ >> HTMLMacroTest.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -24,7 +24,7 @@ >> import org.junit.Test; >> import org.xwiki.bridge.DocumentAccessBridge; >> import org.xwiki.bridge.DocumentNameSerializer; >> -import org.xwiki.component.embed.EmbeddableComponentManager; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.rendering.internal.macro.html.HTMLMacro; >> import org.xwiki.rendering.macro.Macro; >> import org.xwiki.rendering.macro.MacroExecutionException; >> @@ -52,13 +52,19 @@ >> { >> super.setUp(); >> >> - DocumentAccessBridge dab = >> this.context.mock(DocumentAccessBridge.class); >> - ((EmbeddableComponentManager) >> getComponentManager()).registerComponent(DocumentAccessBridge.class, >> dab); >> - >> - DocumentNameSerializer dns = >> this.context.mock(DocumentNameSerializer.class); >> - ((EmbeddableComponentManager) >> getComponentManager >> ()).registerComponent(DocumentNameSerializer.class, dns); >> + DocumentAccessBridge mockDocumentAccessBridge = >> this.context.mock(DocumentAccessBridge.class); >> + DefaultComponentDescriptor<DocumentAccessBridge> >> descriptorDAB = >> + new DefaultComponentDescriptor<DocumentAccessBridge>(); >> + descriptorDAB.setRole(DocumentAccessBridge.class); >> + getComponentManager().registerComponent(descriptorDAB, >> mockDocumentAccessBridge); >> + >> + DocumentNameSerializer mockDocumentNameSerializer = >> this.context.mock(DocumentNameSerializer.class); >> + DefaultComponentDescriptor<DocumentNameSerializer> >> descriptorDNS = >> + new DefaultComponentDescriptor<DocumentNameSerializer>(); >> + descriptorDNS.setRole(DocumentNameSerializer.class); >> + getComponentManager().registerComponent(descriptorDNS, >> mockDocumentNameSerializer); >> } >> - >> + >> /** >> * Verify that inline HTML macros with non inline content >> generate an exception. >> */ >> >> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/ >> xwiki-rendering-macro-include/src/test/java/org/xwiki/rendering/ >> internal/macro/IncludeMacroTest.java >> =================================================================== >> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-include/src/test/java/org/xwiki/rendering/internal/ >> macro/IncludeMacroTest.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-include/src/test/java/org/xwiki/rendering/internal/ >> macro/IncludeMacroTest.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -24,6 +24,7 @@ >> >> import org.jmock.Mock; >> import org.xwiki.bridge.DocumentAccessBridge; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.rendering.block.Block; >> import org.xwiki.rendering.internal.macro.include.IncludeMacro; >> import >> org.xwiki.rendering.internal.transformation.MacroTransformation; >> @@ -47,23 +48,25 @@ >> public class IncludeMacroTest extends AbstractRenderingTestCase >> { >> private Mock mockDocumentAccessBridge; >> - >> + >> @Override >> protected void registerComponents() throws Exception >> { >> this.mockDocumentAccessBridge = >> mock(DocumentAccessBridge.class); >> - >> getComponentManager().registerComponent(DocumentAccessBridge.class, >> this.mockDocumentAccessBridge.proxy()); >> + >> + DefaultComponentDescriptor<DocumentAccessBridge> descriptor = >> + new DefaultComponentDescriptor<DocumentAccessBridge>(); >> + descriptor.setRole(DocumentAccessBridge.class); >> + getComponentManager().registerComponent(descriptor, >> + (DocumentAccessBridge) >> this.mockDocumentAccessBridge.proxy()); >> } >> >> public void testIncludeMacroWithNewContext() throws Exception >> { >> - String expected = "beginDocument\n" >> - + "beginMacroMarkerStandalone [velocity] [] [$myvar]\n" >> - + "beginParagraph\n" >> - + "onWord [hello]\n" >> - + "endParagraph\n" >> - + "endMacroMarkerStandalone [velocity] [] [$myvar]\n" >> - + "endDocument"; >> + String expected = >> + "beginDocument\n" + "beginMacroMarkerStandalone >> [velocity] [] [$myvar]\n" + "beginParagraph\n" >> + + "onWord [hello]\n" + "endParagraph\n" + >> "endMacroMarkerStandalone [velocity] [] [$myvar]\n" >> + + "endDocument"; > > I much prefer my version. Can you please rollback? Again an example > why applying code style automatically sucks :) > >> >> // Since it's not in the same context, we verify that a >> Velocity variable set in the including page is not >> // seen in the included page. >> @@ -88,21 +91,19 @@ >> >> // Create a Macro transformation context with the Macro >> transformation object defined so that the include >> // macro can transform included page which is using a new >> context. >> - MacroTransformation macroTransformation = >> + MacroTransformation macroTransformation = >> (MacroTransformation) >> getComponentManager().lookup(Transformation.class, "macro"); >> MacroTransformationContext context = new >> MacroTransformationContext(); >> context.setMacroTransformation(macroTransformation); >> - >> + >> List<Block> blocks = macro.execute(parameters, null, context); >> >> assertBlocks(expected, blocks); >> } >> - >> + >> public void testIncludeMacroWithCurrentContext() throws Exception >> { >> - String expected = "beginDocument\n" >> - + "onMacroStandalone [someMacro] []\n" >> - + "endDocument"; >> + String expected = "beginDocument\n" + "onMacroStandalone >> [someMacro] []\n" + "endDocument"; > > again > >> >> IncludeMacro macro = (IncludeMacro) >> getComponentManager().lookup(Macro.class, "include"); >> >> mockDocumentAccessBridge >> .expects(once()).method("isDocumentViewable").will(returnValue(true)); >> @@ -119,7 +120,7 @@ >> >> assertBlocks(expected, blocks); >> } >> - >> + >> public void testIncludeMacroWithNoDocumentSpecified() throws >> Exception >> { >> IncludeMacro macro = (IncludeMacro) >> getComponentManager().lookup(Macro.class, "include"); >> @@ -129,8 +130,8 @@ >> macro.execute(parameters, null, new >> MacroTransformationContext()); >> fail("An exception should have been thrown"); >> } catch (MacroExecutionException expected) { >> - assertEquals("You must specify a 'document' parameter >> pointing to the document to include.", >> - expected.getMessage()); >> + assertEquals("You must specify a 'document' parameter >> pointing to the document to include.", expected >> + .getMessage()); > > again a brilliant example why it sucks... :( > > My version is much nicer. > >> } >> } >> } >> >> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/ >> xwiki-rendering-macro-rss/src/test/java/org/xwiki/rendering/ >> RenderingTests.java >> =================================================================== >> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-rss/src/test/java/org/xwiki/rendering/ >> RenderingTests.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-rss/src/test/java/org/xwiki/rendering/ >> RenderingTests.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -22,11 +22,12 @@ >> import junit.framework.Test; >> import junit.framework.TestCase; >> >> +import org.jmock.Expectations; >> +import org.jmock.Mockery; >> +import org.xwiki.bridge.SkinAccessBridge; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.rendering.scaffolding.RenderingTestSuite; >> import org.xwiki.test.ComponentManagerTestSetup; >> -import org.xwiki.bridge.SkinAccessBridge; >> -import org.jmock.Mockery; >> -import org.jmock.Expectations; >> >> /** >> * All Rendering integration tests defined in text files using a >> special format. >> @@ -39,21 +40,27 @@ >> public static Test suite() throws Exception >> { >> RenderingTestSuite suite = new RenderingTestSuite("Test RSS >> Macro"); >> - >> + >> suite.addTestsFromResource("macrorss1", true); >> suite.addTestsFromResource("macrorss2", true); >> >> ComponentManagerTestSetup setup = new >> ComponentManagerTestSetup(suite); >> >> Mockery context = new Mockery(); >> - final SkinAccessBridge mockSkinBridge = >> context.mock(SkinAccessBridge.class); >> - >> setup >> .getComponentManager().registerComponent(SkinAccessBridge.class, >> mockSkinBridge); >> >> - context.checking(new Expectations() {{ >> - >> allowing(mockSkinBridge).getSkinFile(with(any(String.class))); >> - will(returnValue("/xwiki/skins/albatross/icons/black- >> rss.png")); >> - }}); >> - >> + final SkinAccessBridge mockSkinAccessBridge = >> context.mock(SkinAccessBridge.class); >> + DefaultComponentDescriptor<SkinAccessBridge> descriptorSAB >> = new DefaultComponentDescriptor<SkinAccessBridge>(); >> + descriptorSAB.setRole(SkinAccessBridge.class); >> + >> setup.getComponentManager().registerComponent(descriptorSAB, >> mockSkinAccessBridge); >> + >> + context.checking(new Expectations() >> + { >> + { >> + >> allowing(mockSkinAccessBridge).getSkinFile(with(any(String.class))); >> + will(returnValue("/xwiki/skins/albatross/icons/ >> black-rss.png")); >> + } >> + }); >> + >> return setup; >> } >> } >> >> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/ >> xwiki-rendering-macro-script/src/test/java/org/xwiki/rendering/macro/ >> script/RenderingTests.java >> =================================================================== >> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-script/src/test/java/org/xwiki/rendering/macro/ >> script/RenderingTests.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-script/src/test/java/org/xwiki/rendering/macro/ >> script/RenderingTests.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -25,6 +25,7 @@ >> import org.jmock.Expectations; >> import org.jmock.Mockery; >> import org.xwiki.bridge.DocumentAccessBridge; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.component.embed.EmbeddableComponentManager; >> import org.xwiki.rendering.scaffolding.RenderingTestSuite; >> import org.xwiki.test.ComponentManagerTestSetup; >> @@ -45,22 +46,30 @@ >> suite.addTestsFromResource("macroscript2", true); >> suite.addTestsFromResource("macroscript3", true); >> suite.addTestsFromResource("macroscript4", true); >> - >> + >> ComponentManagerTestSetup testSetup = new >> ComponentManagerTestSetup(suite); >> setUpMocks(testSetup.getComponentManager()); >> >> return testSetup; >> } >> - >> + >> public static void setUpMocks(EmbeddableComponentManager >> componentManager) >> { >> Mockery context = new Mockery(); >> >> // Document Access Bridge Mock setup >> final DocumentAccessBridge mockDocumentAccessBridge = >> context.mock(DocumentAccessBridge.class); >> - context.checking(new Expectations() {{ >> - >> allowing(mockDocumentAccessBridge).hasProgrammingRights(); >> will(returnValue(true)); >> - }}); >> - >> componentManager.registerComponent(DocumentAccessBridge.class, >> mockDocumentAccessBridge); >> + context.checking(new Expectations() >> + { >> + { >> + >> allowing(mockDocumentAccessBridge).hasProgrammingRights(); >> + will(returnValue(true)); >> + } >> + }); >> + >> + DefaultComponentDescriptor<DocumentAccessBridge> >> descriptorDAB = >> + new DefaultComponentDescriptor<DocumentAccessBridge>(); >> + descriptorDAB.setRole(DocumentAccessBridge.class); >> + componentManager.registerComponent(descriptorDAB, >> mockDocumentAccessBridge); >> } >> } >> >> Modified: platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/ >> xwiki-rendering-macro-velocity/src/test/java/org/xwiki/rendering/ >> macro/velocity/RenderingTests.java >> =================================================================== >> --- platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-velocity/src/test/java/org/xwiki/rendering/macro/ >> velocity/RenderingTests.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-rendering/xwiki-rendering-macros/xwiki- >> rendering-macro-velocity/src/test/java/org/xwiki/rendering/macro/ >> velocity/RenderingTests.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -24,6 +24,7 @@ >> >> import org.jmock.Mockery; >> import org.xwiki.bridge.DocumentAccessBridge; >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.component.embed.EmbeddableComponentManager; >> import org.xwiki.rendering.scaffolding.RenderingTestSuite; >> import org.xwiki.test.ComponentManagerTestSetup; >> @@ -64,6 +65,9 @@ >> >> // Document Access Bridge Mock >> final DocumentAccessBridge mockDocumentAccessBridge = >> context.mock(DocumentAccessBridge.class); >> - >> componentManager.registerComponent(DocumentAccessBridge.class, >> mockDocumentAccessBridge); >> + DefaultComponentDescriptor<DocumentAccessBridge> >> descriptorDAB = >> + new DefaultComponentDescriptor<DocumentAccessBridge>(); >> + descriptorDAB.setRole(DocumentAccessBridge.class); >> + componentManager.registerComponent(descriptorDAB, >> mockDocumentAccessBridge); >> } >> } >> >> Modified: platform/core/trunk/xwiki-shared-tests/src/main/java/org/ >> xwiki/test/MockConfigurationSource.java >> =================================================================== >> --- platform/core/trunk/xwiki-shared-tests/src/main/java/org/xwiki/ >> test/MockConfigurationSource.java 2009-07-13 11:47:52 UTC (rev 21909) >> +++ platform/core/trunk/xwiki-shared-tests/src/main/java/org/xwiki/ >> test/MockConfigurationSource.java 2009-07-13 13:20:03 UTC (rev 21910) >> @@ -23,8 +23,6 @@ >> import java.util.List; >> import java.util.Properties; >> >> -import org.xwiki.component.descriptor.ComponentDescriptor; >> -import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.configuration.ConfigurationSource; >> >> /** >> >> Modified: platform/core/trunk/xwiki-shared-tests/src/main/java/org/ >> xwiki/test/XWikiComponentInitializer.java >> =================================================================== >> --- platform/core/trunk/xwiki-shared-tests/src/main/java/org/xwiki/ >> test/XWikiComponentInitializer.java 2009-07-13 11:47:52 UTC (rev >> 21909) >> +++ platform/core/trunk/xwiki-shared-tests/src/main/java/org/xwiki/ >> test/XWikiComponentInitializer.java 2009-07-13 13:20:03 UTC (rev >> 21910) >> @@ -24,6 +24,7 @@ >> import java.net.MalformedURLException; >> import java.net.URL; >> >> +import org.xwiki.component.descriptor.DefaultComponentDescriptor; >> import org.xwiki.component.embed.EmbeddableComponentManager; >> import org.xwiki.configuration.ConfigurationSource; >> import org.xwiki.container.ApplicationContext; >> @@ -32,13 +33,18 @@ >> import org.xwiki.context.ExecutionContext; >> import org.xwiki.context.ExecutionContextManager; >> >> +/** >> + * Initialize a component manager used in unit tests. >> + * >> + * @version $Id$ >> + */ >> public class XWikiComponentInitializer >> { >> private EmbeddableComponentManager componentManager; >> >> /** >> - * This method should be called before {@link >> #initializeExecution()} since some components will require the >> Container >> - * component to be set up (for example to access resource such >> as the XWikiconfiguration file). >> + * This method should be called before {@link >> #initializeExecution()} since some components will require the >> + * Container component to be set up (for example to access >> resource such as the XWikiconfiguration file). >> */ >> public void initializeContainer() throws Exception >> { >> @@ -67,15 +73,24 @@ >> } >> }); >> } >> - >> + >> public void initializeConfigurationSource() throws Exception >> { >> // Register the mock configuration source for different >> roles so that tests always use the mock >> ConfigurationSource mockSource = new >> MockConfigurationSource(); >> - >> getComponentManager().registerComponent(ConfigurationSource.class, >> mockSource); >> - >> getComponentManager().registerComponent(ConfigurationSource.class, >> "xwikiproperties", mockSource); >> + >> + DefaultComponentDescriptor<ConfigurationSource> descriptor; >> + >> + descriptor = new >> DefaultComponentDescriptor<ConfigurationSource>(); >> + descriptor.setRole(ConfigurationSource.class); >> + getComponentManager().registerComponent(descriptor, >> mockSource); >> + >> + descriptor = new >> DefaultComponentDescriptor<ConfigurationSource>(); >> + descriptor.setRole(ConfigurationSource.class); >> + descriptor.setRoleHint("xwikiproperties"); >> + getComponentManager().registerComponent(descriptor, >> mockSource); >> } >> - >> + >> public void initializeExecution() throws Exception >> { >> // Initialize the Execution Context >> @@ -85,11 +100,11 @@ >> ExecutionContext ec = new ExecutionContext(); >> >> // Make sure we push this empty context in the Execution >> component before we call the initialization >> - // so that we don't get any NPE if some initializer code >> asks to get the Execution Context. This >> + // so that we don't get any NPE if some initializer code >> asks to get the Execution Context. This >> // happens for example with the Velocity Execution Context >> initializer which in turns calls the Velocity >> // Context initializers and some of them look inside the >> Execution Context. >> execution.setContext(ec); >> - >> + >> ecm.initialize(ec); >> } > > Thanks > -Vincent > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > -- Thomas Mortagne