// clean
  protected RepositoryListResourceResponse listRepositories(
      Request request, boolean allReposes, boolean includeGroups) throws ResourceException {
    RepositoryListResourceResponse result = new RepositoryListResourceResponse();

    RepositoryListResource repoRes;

    Collection<Repository> repositories = getRepositoryRegistry().getRepositories();

    for (Repository repository : repositories) {
      // To save UI changes at the moment, not including groups in repo call
      if ((allReposes || repository.isUserManaged())
          && (includeGroups
              || !repository.getRepositoryKind().isFacetAvailable(GroupRepository.class))) {
        repoRes = new RepositoryListResource();

        repoRes.setResourceURI(createRepositoryReference(request, repository.getId()).toString());

        repoRes.setContentResourceURI(
            repositoryURLBuilder.getExposedRepositoryContentUrl(repository));

        repoRes.setRepoType(getRestRepoType(repository));

        repoRes.setProvider(NexusCompat.getRepositoryProviderHint(repository));

        repoRes.setProviderRole(NexusCompat.getRepositoryProviderRole(repository));

        repoRes.setFormat(repository.getRepositoryContentClass().getId());

        repoRes.setId(repository.getId());

        repoRes.setName(repository.getName());

        repoRes.setUserManaged(repository.isUserManaged());

        repoRes.setExposed(repository.isExposed());

        repoRes.setEffectiveLocalStorageUrl(repository.getLocalUrl());

        if (repository.getRepositoryKind().isFacetAvailable(MavenRepository.class)) {
          repoRes.setRepoPolicy(
              repository.adaptToFacet(MavenRepository.class).getRepositoryPolicy().toString());
        }

        if (repository.getRepositoryKind().isFacetAvailable(ProxyRepository.class)) {
          repoRes.setRemoteUri(repository.adaptToFacet(ProxyRepository.class).getRemoteUrl());
        }

        result.addData(repoRes);
      }
    }

    return result;
  }
  private void inspectForTimeline(Event<?> evt, Repository repository) {
    // we do not want RSS entries about boot and repo additions during boot
    StringBuilder sb = new StringBuilder();

    if (repository.getRepositoryKind().isFacetAvailable(GroupRepository.class)) {
      sb.append(" repository group ");
    } else {
      sb.append(" repository ");
    }

    sb.append(repository.getName());

    sb.append(" (ID=");

    sb.append(repository.getId());

    sb.append(") ");

    if (repository.getRepositoryKind().isFacetAvailable(ProxyRepository.class)) {
      sb.append(" as proxy repository for URL ");

      sb.append(repository.adaptToFacet(ProxyRepository.class).getRemoteUrl());
    } else if (repository.getRepositoryKind().isFacetAvailable(HostedRepository.class)) {
      sb.append(" as hosted repository");
    } else if (repository.getRepositoryKind().isFacetAvailable(ShadowRepository.class)) {
      sb.append(" as ");

      sb.append(repository.getClass().getName());

      sb.append(" virtual repository for ");

      sb.append(repository.adaptToFacet(ShadowRepository.class).getMasterRepository().getName());

      sb.append(" (ID=");

      sb.append(repository.adaptToFacet(ShadowRepository.class).getMasterRepository().getId());

      sb.append(") ");
    }

    sb.append(".");

    if (evt instanceof RepositoryRegistryEventAdd) {
      sb.insert(0, "Registered");
    } else if (evt instanceof RepositoryRegistryEventRemove) {
      sb.insert(0, "Unregistered");
    } else if (evt instanceof RepositoryConfigurationUpdatedEvent) {
      sb.insert(0, "Updated");
    }

    getFeedRecorder().addSystemEvent(FeedRecorder.SYSTEM_CONFIG_ACTION, sb.toString());
  }
Exemple #3
0
 public static String getRepositoryPolicy(Repository repository) {
   if (repository.getRepositoryKind().isFacetAvailable(MavenRepository.class)) {
     return repository.adaptToFacet(MavenRepository.class).getRepositoryPolicy().toString();
   } else {
     return null;
   }
 }
  protected void addRepositoryDetails(
      Request request, SearchNGResponse response, Repository repository) {
    boolean add = true;

    for (NexusNGRepositoryDetail repoDetail : response.getRepoDetails()) {
      if (repoDetail.getRepositoryId().equals(repository.getId())) {
        add = false;
        break;
      }
    }

    if (add) {
      NexusNGRepositoryDetail repoDetail = new NexusNGRepositoryDetail();

      repoDetail.setRepositoryId(repository.getId());

      repoDetail.setRepositoryName(repository.getName());

      repoDetail.setRepositoryURL(
          createRepositoryReference(request, repository.getId()).getTargetRef().toString());

      repoDetail.setRepositoryContentClass(repository.getRepositoryContentClass().getId());

      repoDetail.setRepositoryKind(extractRepositoryKind(repository));

      MavenRepository mavenRepo = repository.adaptToFacet(MavenRepository.class);

      if (mavenRepo != null) {
        repoDetail.setRepositoryPolicy(mavenRepo.getRepositoryPolicy().name());
      }

      response.addRepoDetail(repoDetail);
    }
  }
  private boolean process(
      SnapshotRemovalRequest request, SnapshotRemovalResult result, Repository repository) {
    // only from maven repositories, stay silent for others and simply skip
    if (!repository.getRepositoryContentClass().isCompatible(contentClass)) {
      getLogger().debug("Skipping '" + repository.getId() + "' is not a maven 2 repository");
      return false;
    }

    if (!repository.getLocalStatus().shouldServiceRequest()) {
      getLogger().debug("Skipping '" + repository.getId() + "' the repository is out of service");
      return false;
    }

    if (repository.getRepositoryKind().isFacetAvailable(GroupRepository.class)) {
      process(request, result, repository.adaptToFacet(GroupRepository.class));
    } else if (repository.getRepositoryKind().isFacetAvailable(MavenRepository.class)) {
      result.addResult(
          removeSnapshotsFromMavenRepository(
              repository.adaptToFacet(MavenRepository.class), request));
    }

    return true;
  }
  protected MavenRepository getMavenRepository(String id) throws ResourceException {
    try {
      Repository repository = getRepositoryRegistry().getRepository(id);

      if (!repository.getRepositoryKind().isFacetAvailable(MavenRepository.class)) {
        throw new ResourceException(
            Status.CLIENT_ERROR_BAD_REQUEST, "This is not a Maven repository!");
      }

      return repository.adaptToFacet(MavenRepository.class);
    } catch (NoSuchRepositoryException e) {
      throw new ResourceException(Status.CLIENT_ERROR_NOT_FOUND, e.getMessage());
    }
  }
  @Override
  protected YumRepository doRun() throws Exception {
    String repositoryId = getRepositoryId();

    if (!StringUtils.isEmpty(repositoryId)) {
      checkState(
          yumRegistry.isRegistered(repositoryId),
          "Metadata regeneration can only be run on repositories that have an enabled 'Yum: Generate Metadata' capability");
      Yum yum = yumRegistry.get(repositoryId);
      checkState(
          yum.getNexusRepository().getRepositoryKind().isFacetAvailable(HostedRepository.class),
          "Metadata generation can only be run on hosted repositories");
    }

    setDefaults();

    LOG.debug("Generating Yum-Repository for '{}' ...", getRpmDir());
    try {
      getRepoDir().mkdirs();

      File rpmListFile = createRpmListFile();
      commandLineExecutor.exec(buildCreateRepositoryCommand(rpmListFile));

      if (isUseAbsoluteUrls() && StringUtils.isNotBlank(getRpmUrl())) {
        replaceUrlInRepomdXml();
      }

    } catch (IOException e) {
      LOG.warn("Yum metadata generation failed", e);
      throw new IOException("Yum metadata generation failed", e);
    }
    // TODO dubious
    Thread.sleep(100);

    final Repository repository = findRepository();
    if (repository != null) {
      final MavenRepository mavenRepository = repository.adaptToFacet(MavenRepository.class);
      if (mavenRepository != null) {
        try {
          routingManager.forceUpdatePrefixFile(mavenRepository);
        } catch (Exception e) {
          logger.warn("Could not update Whitelist for repository '{}'", mavenRepository, e);
        }
      }
    }

    regenerateMetadataForGroups();
    return new YumRepositoryImpl(getRepoDir(), repositoryId, getVersion());
  }
  @Override
  public void doApplyConfiguration(
      Repository repository,
      ApplicationConfiguration configuration,
      CRepositoryCoreConfiguration coreConfiguration)
      throws ConfigurationException {
    super.doApplyConfiguration(repository, configuration, coreConfiguration);

    if (repository.getRepositoryKind().isFacetAvailable(ProxyRepository.class)) {
      ProxyRepository proxy = repository.adaptToFacet(ProxyRepository.class);

      proxy.getItemContentValidators().put("checksum", checksumValidator);
      proxy.getItemContentValidators().put("filetypevalidator", fileTypeItemContentValidator);
    }
  }
    public boolean releaseExistsForSnapshot(Gav snapshotGav, Map<String, Object> context) {
      for (Repository repository : repositoryRegistry.getRepositories()) {
        // we need to filter for:
        // repository that is MavenRepository and is hosted or proxy
        // repository that has release policy
        if (repository.getRepositoryKind().isFacetAvailable(MavenHostedRepository.class)
            || repository.getRepositoryKind().isFacetAvailable(MavenProxyRepository.class)) {
          // actually, we don't care is it proxy or hosted, we only need to filter out groups and
          // other
          // "composite" reposes like shadows
          MavenRepository mrepository = repository.adaptToFacet(MavenRepository.class);

          // look in release reposes only
          if (mrepository.isUserManaged()
              && RepositoryPolicy.RELEASE.equals(mrepository.getRepositoryPolicy())) {
            try {
              String releaseVersion = null;

              // NEXUS-3148
              if (snapshotGav.getBaseVersion().endsWith("-SNAPSHOT")) {
                // "-SNAPSHOT" :== 9 chars
                releaseVersion =
                    snapshotGav
                        .getBaseVersion()
                        .substring(0, snapshotGav.getBaseVersion().length() - 9);
              } else {
                // "SNAPSHOT" :== 8 chars
                releaseVersion =
                    snapshotGav
                        .getBaseVersion()
                        .substring(0, snapshotGav.getBaseVersion().length() - 8);
              }

              Gav releaseGav =
                  new Gav(
                      snapshotGav.getGroupId(),
                      snapshotGav.getArtifactId(),
                      releaseVersion,
                      snapshotGav.getClassifier(),
                      snapshotGav.getExtension(),
                      null,
                      null,
                      null,
                      false,
                      null,
                      false,
                      null);

              String path = mrepository.getGavCalculator().gavToPath(releaseGav);

              ResourceStoreRequest req = new ResourceStoreRequest(path, true);

              req.getRequestContext().putAll(context);

              mrepository.retrieveItem(false, req);

              return true;
            } catch (ItemNotFoundException e) {
              // nothing
            } catch (Exception e) {
              // nothing
            }
          }
        }
      }

      return false;
    }
  /** Converting App model to REST DTO. */
  public RepositoryBaseResource getRepositoryRestModel(Request request, Repository repository) {
    RepositoryResource resource = null;

    if (repository.getRepositoryKind().isFacetAvailable(ProxyRepository.class)) {
      resource = getRepositoryProxyRestModel(repository.adaptToFacet(ProxyRepository.class));
    } else if (repository.getRepositoryKind().isFacetAvailable(ShadowRepository.class)) {
      return getRepositoryShadowRestModel(request, repository.adaptToFacet(ShadowRepository.class));
    } else {
      resource = new RepositoryResource();
    }

    resource.setContentResourceURI(repositoryURLBuilder.getExposedRepositoryContentUrl(repository));

    resource.setProvider(NexusCompat.getRepositoryProviderHint(repository));

    resource.setProviderRole(NexusCompat.getRepositoryProviderRole(repository));

    resource.setFormat(repository.getRepositoryContentClass().getId());

    resource.setRepoType(getRestRepoType(repository));

    resource.setId(repository.getId());

    resource.setName(repository.getName());

    resource.setWritePolicy(repository.getWritePolicy().name());

    resource.setBrowseable(repository.isBrowseable());

    resource.setIndexable(repository.isSearchable());

    resource.setExposed(repository.isExposed());

    resource.setNotFoundCacheTTL(repository.getNotFoundCacheTimeToLive());

    // TODO: remove the default local storage, this is a work around for NEXUS-1994
    // the new 1.4 API doesn't store the default URL, well, it is part of the CRepo, but it is not
    // exposed.
    // so we can figure it out again, I think the default local Storage should be removed from the
    // REST message
    // which is part of the reason for not exposing it. The other part is it is not used anywhere
    // except to set
    // the localUrl if not already set.

    // apples to apples here, man i hate this section of code!!!!
    // always set to default (see AbstractRepositoryConfigurator)
    String defaultLocalStorageUrl =
        ((CRepositoryCoreConfiguration) repository.getCurrentCoreConfiguration())
            .getConfiguration(false)
            .defaultLocalStorageUrl;
    resource.setDefaultLocalStorageUrl(defaultLocalStorageUrl);

    // if not user set (but using default), this is null, otherwise it contains user-set value
    String overrideLocalStorageUrl =
        ((CRepositoryCoreConfiguration) repository.getCurrentCoreConfiguration())
            .getConfiguration(false)
            .getLocalStorage()
            .getUrl();
    if (StringUtils.isNotBlank(overrideLocalStorageUrl)) {
      resource.setOverrideLocalStorageUrl(overrideLocalStorageUrl);
    }

    if (repository.getRepositoryKind().isFacetAvailable(MavenRepository.class)) {
      resource.setRepoPolicy(
          repository.adaptToFacet(MavenRepository.class).getRepositoryPolicy().toString());

      if (repository.getRepositoryKind().isFacetAvailable(MavenProxyRepository.class)) {
        resource.setChecksumPolicy(
            repository.adaptToFacet(MavenProxyRepository.class).getChecksumPolicy().toString());

        resource.setDownloadRemoteIndexes(
            repository.adaptToFacet(MavenProxyRepository.class).isDownloadRemoteIndexes());
      }
    }
    // as this is a required field on ui, we need this to be set for non-maven type repos
    else {
      resource.setRepoPolicy(RepositoryPolicy.MIXED.name());
      resource.setChecksumPolicy(ChecksumPolicy.IGNORE.name());
      resource.setDownloadRemoteIndexes(false);
    }

    return resource;
  }