Package org.sonatype.nexus.extender.modules

Source Code of org.sonatype.nexus.extender.modules.NexusBundleModule

/*
* Sonatype Nexus (TM) Open Source Version
* Copyright (c) 2007-2014 Sonatype, Inc.
* All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.
*
* This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,
* which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
*
* Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks
* of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the
* Eclipse Foundation. All other trademarks are the property of their respective owners.
*/
package org.sonatype.nexus.extender.modules;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.sonatype.nexus.guice.AbstractInterceptorModule;

import com.google.common.base.Strings;
import com.google.inject.Key;
import com.google.inject.Module;
import org.apache.shiro.guice.aop.ShiroAopModule;
import org.eclipse.sisu.inject.MutableBeanLocator;
import org.eclipse.sisu.launch.BundleModule;
import org.eclipse.sisu.plexus.PlexusSpaceModule;
import org.eclipse.sisu.space.BeanScanning;
import org.eclipse.sisu.space.SpaceModule;
import org.eclipse.sisu.wire.EntryListAdapter;
import org.eclipse.sisu.wire.ParameterKeys;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;

/**
* Nexus specific {@link BundleModule} that uses bundle imports to decide what to install.
*
* @since 3.0
*/
public class NexusBundleModule
    extends BundleModule
{
  private static final ShiroAopModule shiroAopModule = new ShiroAopModule();

  private static final SecurityFilterModule securityFilterModule = new SecurityFilterModule();

  private static final InstrumentationModule instrumentationModule = new InstrumentationModule();

  private static final ValidationModule validationModule = new ValidationModule();

  private static final WebResourcesModule webResourcesModule = new WebResourcesModule();

  private static final RankingModule rankingModule = new RankingModule();

  private final List<AbstractInterceptorModule> interceptorModules;

  private final String imports;

  private final boolean hasPlexus;

  public NexusBundleModule(final Bundle bundle, final MutableBeanLocator locator) {
    super(bundle, locator);

    interceptorModules = new EntryListAdapter<>(locator.locate(Key.get(AbstractInterceptorModule.class)));
    imports = Strings.nullToEmpty(bundle.getHeaders().get(Constants.IMPORT_PACKAGE));
    hasPlexus = bundle.getResource("META-INF/plexus/components.xml") != null;
  }

  @Override
  protected List<Module> modules() {
    List<Module> modules = new ArrayList<>();

    maybeAddShiroAOP(modules);
    maybeAddSecurityFilter(modules);
    maybeAddInstrumentation(modules);
    maybeAddValidation(modules);
    maybeAddWebResources(modules);
    maybeAddInterceptors(modules);
    modules.addAll(super.modules());
    modules.add(rankingModule);

    return modules;
  }

  @Override
  protected Map<?, ?> getProperties() {
    return locator.locate(ParameterKeys.PROPERTIES).iterator().next().getValue();
  }

  @Override
  protected Module spaceModule() {
    if (hasPlexus) {
      return new PlexusSpaceModule(space, BeanScanning.GLOBAL_INDEX);
    }
    return new SpaceModule(space, BeanScanning.GLOBAL_INDEX);
  }

  private void maybeAddShiroAOP(List<Module> modules) {
    if (imports.contains("org.apache.shiro.authz.annotation")) {
      modules.add(shiroAopModule);
    }
  }

  private void maybeAddSecurityFilter(List<Module> modules) {
    if (imports.contains("org.sonatype.nexus.web")) {
      modules.add(securityFilterModule);
    }
  }

  private void maybeAddInstrumentation(List<Module> modules) {
    if (imports.contains("com.codahale.metrics.annotation")) {
      modules.add(instrumentationModule);
    }
  }

  private void maybeAddValidation(List<Module> modules) {
    if (imports.contains("org.sonatype.nexus.validation")) {
      modules.add(validationModule);
    }
  }

  private void maybeAddWebResources(List<Module> modules) {
    if (space.getBundle().getEntry("static") != null) {
      modules.add(webResourcesModule);
    }
  }

  private void maybeAddInterceptors(List<Module> modules) {
    for (AbstractInterceptorModule aim : interceptorModules) {
      if (aim.appliesTo(space)) {
        modules.add(aim);
      }
    }
  }
}
TOP

Related Classes of org.sonatype.nexus.extender.modules.NexusBundleModule

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.