Author: cziegeler Date: Mon Feb 1 20:18:24 2010 New Revision: 905402 URL: http://svn.apache.org/viewvc?rev=905402&view=rev Log: CCPPProfileService might be a plain osgi service
Modified: sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/ContainerServicesImpl.java sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DefaultPortletContainer.java sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DummyCCPPProfileServiceImpl.java sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/EventProviderImpl.java Modified: sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/ContainerServicesImpl.java URL: http://svn.apache.org/viewvc/sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/ContainerServicesImpl.java?rev=905402&r1=905401&r2=905402&view=diff ============================================================================== --- sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/ContainerServicesImpl.java (original) +++ sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/ContainerServicesImpl.java Mon Feb 1 20:18:24 2010 @@ -41,6 +41,8 @@ import org.apache.sling.portal.container.internal.services.DefaultPortletPreferencesService; import org.apache.sling.portal.container.internal.services.DefaultPortletRegistryService; import org.apache.sling.portal.container.internal.services.FilterManagerServiceImpl; +import org.osgi.framework.BundleContext; +import org.osgi.util.tracker.ServiceTracker; public class ContainerServicesImpl implements SlingContainerServices { @@ -50,7 +52,7 @@ private final PortalContext context; private final EventCoordinationService eventCoordinationService; private final PortletRequestContextService portletRequestContextService; - private final CCPPProfileService ccppProfileService; + private final CCPPProfileService defaultCcppProfileService; private final FilterManagerServiceImpl filterManagerService; private final PortletURLListenerService portletURLListenerService; private final DefaultPortletPreferencesService portletPreferencesService; @@ -66,10 +68,15 @@ private final PortletRegistryService registry; private final PortletWindowManager windowManager; + private final ServiceTracker ccppProfileServiceTracker; + /** * Default Constructor. */ - public ContainerServicesImpl(PortalContext context, final ContainerInfo info, final SlingRepository repository) + public ContainerServicesImpl(final PortalContext context, + final ContainerInfo info, + final BundleContext bundleContext, + final SlingRepository repository) throws Exception { boolean noErrors = false; try { @@ -79,7 +86,9 @@ this.portletRequestContextService = new PortletRequestContextServiceImpl(); this.filterManagerService = new FilterManagerServiceImpl(this.registry); this.portletURLListenerService = new PortletURLListenerImpl(); - this.ccppProfileService = new DummyCCPPProfileServiceImpl(); + this.ccppProfileServiceTracker = new ServiceTracker(bundleContext, CCPPProfileService.class.getName(), null); + this.ccppProfileServiceTracker.open(); + this.defaultCcppProfileService = new DummyCCPPProfileServiceImpl(); this.portletPreferencesService = new DefaultPortletPreferencesService(repository, registry); this.portletInvokerService = new DefaultPortletInvokerService(registry); this.portletEnvironmentService = new PortletEnvironmentServiceImpl(); @@ -101,6 +110,9 @@ if ( this.filterManagerService != null ) { this.filterManagerService.destroy(); } + if ( this.ccppProfileServiceTracker != null ) { + this.ccppProfileServiceTracker.close(); + } } /** @@ -142,7 +154,11 @@ * @see org.apache.pluto.container.ContainerServices#getCCPPProfileService() */ public CCPPProfileService getCCPPProfileService() { - return ccppProfileService; + CCPPProfileService service = (CCPPProfileService)this.ccppProfileServiceTracker.getService(); + if ( service == null ) { + service = defaultCcppProfileService; + } + return service; } /** Modified: sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DefaultPortletContainer.java URL: http://svn.apache.org/viewvc/sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DefaultPortletContainer.java?rev=905402&r1=905401&r2=905402&view=diff ============================================================================== --- sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DefaultPortletContainer.java (original) +++ sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DefaultPortletContainer.java Mon Feb 1 20:18:24 2010 @@ -26,6 +26,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.Service; import org.apache.pluto.container.ContainerInfo; import org.apache.pluto.container.ContainerServices; import org.apache.pluto.container.PortletContainerException; @@ -36,6 +39,7 @@ import org.apache.sling.portal.container.SlingPortletContainer; import org.apache.sling.portal.container.SlingPortletWindow; import org.apache.sling.portal.container.internal.services.DefaultContainerInfo; +import org.osgi.framework.BundleContext; import org.osgi.service.component.ComponentContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,9 +49,9 @@ * This is an OSGi service which forwards all requests to the real portlet * container implementation. * - * @scr.component metatype="false" - * @scr.service interface="SlingPortletContainer" */ +...@component +...@service(value=SlingPortletContainer.class) public class DefaultPortletContainer implements SlingPortletContainer { /** Our logger. */ @@ -56,7 +60,7 @@ /** The real portlet container */ protected SlingPortletContainer portletContainer; - /** @scr.reference */ + @Reference private SlingRepository repository; protected String containerName = "sling-portal"; @@ -65,10 +69,14 @@ protected WindowState[] supportedWindowStates = new WindowState[] {WindowState.MAXIMIZED, WindowState.MINIMIZED, WindowState.NORMAL}; protected PortletMode[] supportedPortletModes = new PortletMode[] {PortletMode.VIEW, PortletMode.EDIT, PortletMode.HELP}; + /** The bundle context. */ + private BundleContext bundleContext; + /** * Deactivate and shutdown the container. */ protected void deactivate(final ComponentContext context) { + this.bundleContext = null; if (this.portletContainer != null ) { try { this.portletContainer.destroy(); @@ -84,6 +92,7 @@ */ protected void activate(final ComponentContext context) throws PortletContainerException { + this.bundleContext = context.getBundleContext(); try { this.initContainer(); } catch (PortletContainerException pce) { @@ -107,7 +116,9 @@ this.supportedWindowStates, null); try { - final ContainerServicesImpl containerServices = new ContainerServicesImpl(ctx, info, this.repository); + final ContainerServicesImpl containerServices = new ContainerServicesImpl(ctx, info, + this.bundleContext, + this.repository); this.portletContainer = new PortletContainerImpl(info, containerServices); if (!portletContainer.isInitialized()) { Modified: sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DummyCCPPProfileServiceImpl.java URL: http://svn.apache.org/viewvc/sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DummyCCPPProfileServiceImpl.java?rev=905402&r1=905401&r2=905402&view=diff ============================================================================== --- sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DummyCCPPProfileServiceImpl.java (original) +++ sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/DummyCCPPProfileServiceImpl.java Mon Feb 1 20:18:24 2010 @@ -22,11 +22,11 @@ import org.apache.pluto.container.CCPPProfileService; /** - * + * This is a dummy implementation - TODO! */ public class DummyCCPPProfileServiceImpl implements CCPPProfileService { - /* (non-Javadoc) + /** * @see org.apache.pluto.spi.CCPPProfileService#getCCPPProfile() */ public Profile getCCPPProfile(HttpServletRequest httpServletRequest) { Modified: sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/EventProviderImpl.java URL: http://svn.apache.org/viewvc/sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/EventProviderImpl.java?rev=905402&r1=905401&r2=905402&view=diff ============================================================================== --- sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/EventProviderImpl.java (original) +++ sling/whiteboard/portal/container/src/main/java/org/apache/sling/portal/container/internal/EventProviderImpl.java Mon Feb 1 20:18:24 2010 @@ -51,19 +51,15 @@ private boolean isDeclaredAsPublishingEvent(QName qname) { final List<? extends EventDefinitionReference> events = portletWindow.getPortletDefinition().getSupportedPublishingEvents(); - if (events != null) - { - String defaultNamespace = portletWindow.getPortletDefinition().getApplication() - .getDefaultNamespace(); + if (events != null) { + final String defaultNamespace = portletWindow.getPortletDefinition().getApplication().getDefaultNamespace(); for (EventDefinitionReference ref : events) { - QName name = ref.getQualifiedName(defaultNamespace); - if (name == null) - { + final QName name = ref.getQualifiedName(defaultNamespace); + if (name == null) { continue; } - if (qname.equals(name)) - { + if (qname.equals(name)) { return true; } } @@ -72,24 +68,17 @@ } private boolean isValueInstanceOfDefinedClass(QName qname, Serializable value) { - PortletApplicationDefinition app = portletWindow.getPortletDefinition().getApplication(); + final PortletApplicationDefinition app = portletWindow.getPortletDefinition().getApplication(); List<? extends EventDefinition> events = app.getEventDefinitions(); - if (events != null) - { - for (EventDefinition def : events) - { - if (def.getQName() != null) - { - if (def.getQName().equals(qname)) - { + if (events != null) { + for (EventDefinition def : events) { + if (def.getQName() != null) { + if (def.getQName().equals(qname)) { return value.getClass().getName().equals(def.getValueType()); } - } - else - { - QName tmp = new QName(app.getDefaultNamespace(), def.getName()); - if (tmp.equals(qname)) - { + } else { + final QName tmp = new QName(app.getDefaultNamespace(), def.getName()); + if (tmp.equals(qname)) { return value.getClass().getName().equals(def.getValueType()); } }