Package org.ebayopensource.nexus.plugins.artifactusage.event

Source Code of org.ebayopensource.nexus.plugins.artifactusage.event.ArtifactUsageEventInspector

package org.ebayopensource.nexus.plugins.artifactusage.event;

import java.io.IOException;

import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.ebayopensource.nexus.plugins.artifactusage.task.ArtifactUsageCalculator;
import org.sonatype.aether.resolution.ArtifactDescriptorException;
import org.sonatype.nexus.proxy.events.AbstractEventInspector;
import org.sonatype.nexus.proxy.events.EventInspector;
import org.sonatype.nexus.proxy.events.RepositoryItemEventCache;
import org.sonatype.nexus.proxy.events.RepositoryItemEventDelete;
import org.sonatype.nexus.proxy.events.RepositoryItemEventStore;
import org.sonatype.nexus.proxy.item.StorageFileItem;
import org.sonatype.nexus.proxy.item.StorageItem;
import org.sonatype.plexus.appevents.Event;

/**
* Event handler that updates the artifact usage data whenever an artifact is
* added or deleted from the repository.
*
* @author Saleem Shafi
*
*/
@Component(role = EventInspector.class, hint = "ArtifactEventInspector")
public class ArtifactUsageEventInspector extends AbstractEventInspector {

  @Requirement
  private ArtifactUsageCalculator calculator;

  // Only handle cases where a repository is added, updated or deleted
  public boolean accepts(Event<?> evt) {
    return evt instanceof RepositoryItemEventStore
        || evt instanceof RepositoryItemEventDelete
        || evt instanceof RepositoryItemEventCache;
  }

  public void inspect(Event<?> evt) {
    try {
      // add or update
      if (evt instanceof RepositoryItemEventStore) {
        onItemStore((RepositoryItemEventStore) evt);
        // downloaded and cached
      } else if (evt instanceof RepositoryItemEventCache) {
        onItemCache((RepositoryItemEventCache) evt);
        // delete
      } else if (evt instanceof RepositoryItemEventDelete) {
        onItemDelete((RepositoryItemEventDelete) evt);
      }
      // just log the errors
    } catch (IOException e) {
      getLogger()
          .error("Error processing artifact usage during event", e);
    } catch (ArtifactDescriptorException e) {
      getLogger()
          .error("Error processing artifact usage during event", e);
    }
  }

  private void onItemDelete(RepositoryItemEventDelete evt) throws IOException {
    // we only care about POM files
    StorageItem item = evt.getItem();
    if (item instanceof StorageFileItem && item.getPath().endsWith(".pom")) {
      calculator.removeArtifactUsage((StorageFileItem) item);
    }
  }

  private void onItemCache(RepositoryItemEventCache evt) throws IOException,
      ArtifactDescriptorException {
    StorageItem item = evt.getItem();
    if (item instanceof StorageFileItem && item.getPath().endsWith(".pom")) {
      calculator.calculateArtifactUsage((StorageFileItem) item);
    }
  }

  private void onItemStore(RepositoryItemEventStore evt) throws IOException,
      ArtifactDescriptorException {
    // we only care about POM files
    StorageItem item = evt.getItem();
    if (item instanceof StorageFileItem && item.getPath().endsWith(".pom")) {
      calculator.calculateArtifactUsage((StorageFileItem) item);
    }
  }

  void setArtifactUsageCalculator(ArtifactUsageCalculator calculator) {
    this.calculator = calculator;
  }
}
TOP

Related Classes of org.ebayopensource.nexus.plugins.artifactusage.event.ArtifactUsageEventInspector

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.