Package org.sonatype.nexus.plugins.p2.repository

Source Code of org.sonatype.nexus.plugins.p2.repository.MockRemoteStorage$MockRequestRecord

/*
* 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.plugins.p2.repository;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import javax.inject.Singleton;

import org.sonatype.nexus.SystemStatus;
import org.sonatype.nexus.mime.MimeSupport;
import org.sonatype.nexus.proxy.ItemNotFoundException;
import org.sonatype.nexus.proxy.RemoteAccessException;
import org.sonatype.nexus.proxy.RemoteStorageException;
import org.sonatype.nexus.proxy.ResourceStoreRequest;
import org.sonatype.nexus.proxy.item.AbstractStorageItem;
import org.sonatype.nexus.proxy.item.ByteArrayContentLocator;
import org.sonatype.nexus.proxy.item.DefaultStorageFileItem;
import org.sonatype.nexus.proxy.item.StorageItem;
import org.sonatype.nexus.proxy.repository.ProxyRepository;
import org.sonatype.nexus.proxy.storage.UnsupportedStorageOperationException;
import org.sonatype.nexus.proxy.storage.remote.AbstractRemoteRepositoryStorage;
import org.sonatype.nexus.proxy.storage.remote.RemoteStorageContext;

@Named("mock")
@Singleton
public class MockRemoteStorage
    extends AbstractRemoteRepositoryStorage
{

  private Set<String> validUrls = new HashSet<String>();

  private Set<String> downUrls = new HashSet<String>();

  private final List<MockRequestRecord> requests = new LinkedList<MockRequestRecord>();

  @Inject
  protected MockRemoteStorage(final Provider<SystemStatus> systemStatusProvider, final MimeSupport mimeSupport) {
    super(systemStatusProvider, mimeSupport);
  }

  @Override
  protected void updateContext(final ProxyRepository repository, final RemoteStorageContext context)
      throws RemoteStorageException
  {
  }

  @Override
  public boolean containsItem(final long newerThen, final ProxyRepository repository,
                              final ResourceStoreRequest request)
      throws RemoteAccessException, RemoteStorageException
  {
    // TODO: not sure what to do here.
    return false;
  }

  @Override
  public void deleteItem(final ProxyRepository repository, final ResourceStoreRequest request)
      throws ItemNotFoundException, UnsupportedStorageOperationException, RemoteAccessException,
             RemoteStorageException
  {
    throw new UnsupportedStorageOperationException("This is a mock, no deleting!");
  }

  @Override
  public String getProviderId() {
    return "mock";
  }

  @Override
  public boolean isReachable(final ProxyRepository repository, final ResourceStoreRequest request)
      throws RemoteAccessException, RemoteStorageException
  {
    // TODO: not sure what to do here, this must be for the status check
    return false;
  }

  @Override
  public AbstractStorageItem retrieveItem(final ProxyRepository repository, final ResourceStoreRequest request,
                                          final String baseUrl)
      throws ItemNotFoundException, RemoteAccessException, RemoteStorageException
  {
    requests.add(new MockRequestRecord(repository, request, baseUrl));

    final String requestUrl = baseUrl.substring(0, baseUrl.length() - 1) + request.getRequestPath();

    if (downUrls.contains(baseUrl)) {
      throw new RemoteStorageException("Mock " + baseUrl + " is expected to be down.");
    }

    if (validUrls.contains(requestUrl)) {
      return new DefaultStorageFileItem(repository, request, true, false, new ByteArrayContentLocator(
          "Mock".getBytes(), "plain/text"));
    }

    // else
    throw new ItemNotFoundException(request);
  }

  @Override
  public void storeItem(final ProxyRepository repository, final StorageItem item)
      throws UnsupportedStorageOperationException, RemoteAccessException, RemoteStorageException
  {
    throw new UnsupportedStorageOperationException("This is a mock, no writing!");
  }

  @Override
  public void validateStorageUrl(final String url)
      throws RemoteStorageException
  {
    // do nothing
  }

  public List<MockRequestRecord> getRequests() {
    return requests;
  }

  public Set<String> getValidUrls() {
    return validUrls;
  }

  public Set<String> getDownUrls() {
    return downUrls;
  }

  static class MockRequestRecord
  {
    ProxyRepository repository;

    ResourceStoreRequest request;

    String baseUrl;

    public MockRequestRecord(final ProxyRepository repository, final ResourceStoreRequest request,
                             final String baseUrl)
    {
      this.repository = repository;
      this.request = request;
      this.baseUrl = baseUrl;
    }

    @Override
    public int hashCode() {
      final int prime = 31;
      int result = 1;
      result = prime * result + ((baseUrl == null) ? 0 : baseUrl.hashCode());
      result = prime * result + ((repository == null) ? 0 : repository.hashCode());
      result = prime * result + ((request == null) ? 0 : request.hashCode());
      return result;
    }

    @Override
    public boolean equals(final Object obj) {
      if (this == obj) {
        return true;
      }
      if (obj == null) {
        return false;
      }
      if (getClass() != obj.getClass()) {
        return false;
      }
      final MockRequestRecord other = (MockRequestRecord) obj;
      if (baseUrl == null) {
        if (other.baseUrl != null) {
          return false;
        }
      }
      else if (!baseUrl.equals(other.baseUrl)) {
        return false;
      }
      if (repository == null) {
        if (other.repository != null) {
          return false;
        }
      }
      else if (!repository.equals(other.repository)) {
        return false;
      }
      if (request == null) {
        if (other.request != null) {
          return false;
        }
      }
      else if (!request.equals(other.request)) {
        return false;
      }
      return true;
    }

  }

}
TOP

Related Classes of org.sonatype.nexus.plugins.p2.repository.MockRemoteStorage$MockRequestRecord

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.