Search in sources :

Example 11 with RepositorySource

use of org.haiku.haikudepotserver.dataobjects.RepositorySource in project haikudepotserver by haiku.

the class UserRatingOrchestrationServiceIT method createTestUserRatingData.

private UserRatingTestData createTestUserRatingData(ObjectContext context) {
    UserRatingTestData userRatingTestData = new UserRatingTestData();
    Repository repository = Repository.tryGetByCode(context, "testrepo").get();
    RepositorySource repositorySource = RepositorySource.tryGetByCode(context, "testreposrc_xyz").get();
    Architecture x86_64 = Architecture.tryGetByCode(context, "x86_64").get();
    Architecture x86_gcc2 = Architecture.tryGetByCode(context, "x86_gcc2").get();
    userRatingTestData.pkg = integrationTestSupportService.createPkg(context, "urtestpkg");
    pkgService.ensurePkgProminence(context, userRatingTestData.pkg, repository, Prominence.ORDERING_LAST);
    userRatingTestData.user1 = integrationTestSupportService.createBasicUser(context, "urtestuser1", "password");
    userRatingTestData.user2 = integrationTestSupportService.createBasicUser(context, "urtestuser2", "password");
    userRatingTestData.user3 = integrationTestSupportService.createBasicUser(context, "urtestuser3", "password");
    userRatingTestData.user4 = integrationTestSupportService.createBasicUser(context, "urtestuser4", "password");
    userRatingTestData.user5 = integrationTestSupportService.createBasicUser(context, "urtestuser5", "password");
    userRatingTestData.pkgVersion_0_0_9__x86_gcc2 = createTestUserRatingPkgVersion(context, repositorySource, userRatingTestData.pkg, x86_64, 0, 0, 9, null, false);
    userRatingTestData.pkgVersion_1_0_0__x86_gcc2 = createTestUserRatingPkgVersion(context, repositorySource, userRatingTestData.pkg, x86_64, 1, 0, 0, null, false);
    userRatingTestData.pkgVersion_1_0_1__x86_gcc2 = createTestUserRatingPkgVersion(context, repositorySource, userRatingTestData.pkg, x86_64, 1, 0, 1, null, false);
    userRatingTestData.pkgVersion_1_0_1_1__x86_gcc2 = createTestUserRatingPkgVersion(context, repositorySource, userRatingTestData.pkg, x86_64, 1, 0, 1, 1, false);
    userRatingTestData.pkgVersion_1_0_2__x86_gcc2 = createTestUserRatingPkgVersion(context, repositorySource, userRatingTestData.pkg, x86_64, 1, 0, 2, null, false);
    userRatingTestData.pkgVersion_1_0_2__x86_64 = createTestUserRatingPkgVersion(context, repositorySource, userRatingTestData.pkg, x86_gcc2, 1, 0, 2, null, false);
    return userRatingTestData;
}
Also used : Repository(org.haiku.haikudepotserver.dataobjects.Repository) Architecture(org.haiku.haikudepotserver.dataobjects.Architecture) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource)

Example 12 with RepositorySource

use of org.haiku.haikudepotserver.dataobjects.RepositorySource in project haikudepotserver by haiku.

the class RepositoryHpkrIngressServiceIT method testImportThenCheck.

@Test
public void testImportThenCheck() throws Exception {
    File temporaryDir;
    File temporaryRepoFile = null;
    File temporaryRepoInfoFile = null;
    try {
        temporaryDir = Files.createTempDir();
        temporaryRepoFile = new File(temporaryDir, "repo");
        temporaryRepoInfoFile = new File(temporaryDir, "repo.info");
        // get the test hpkr data and copy it into a temporary file that can be used as a source
        // for a repository.
        Files.write(getResourceData("sample-repo.info"), temporaryRepoInfoFile);
        Files.write(getResourceData("sample-repo.hpkr"), temporaryRepoFile);
        // first setup a fake repository to import that points at the local test HPKR file.
        {
            ObjectContext context = serverRuntime.newContext();
            Repository repository = context.newObject(Repository.class);
            repository.setCode("test");
            repository.setName("Test Repository");
            RepositorySource repositorySource = context.newObject(RepositorySource.class);
            repositorySource.setCode("testsrc_xyz");
            repositorySource.setIdentifier("file://" + temporaryDir.getAbsolutePath());
            repository.addToManyTarget(Repository.REPOSITORY_SOURCES.getName(), repositorySource, true);
            RepositorySourceMirror repositorySourceMirror = context.newObject(RepositorySourceMirror.class);
            repositorySourceMirror.setBaseUrl("file://" + temporaryDir.getAbsolutePath());
            repositorySourceMirror.setIsPrimary(true);
            repositorySourceMirror.setCode("testsrc_xyz_mirror");
            repositorySourceMirror.setCountry(Country.getByCode(context, Country.CODE_NZ));
            repositorySource.addToManyTarget(RepositorySource.REPOSITORY_SOURCE_MIRRORS.getName(), repositorySourceMirror, true);
            context.commitChanges();
        }
        // setup another repository that is not related to the import test to check some stuff...
        {
            ObjectContext context = serverRuntime.newContext();
            Repository repository = context.newObject(Repository.class);
            repository.setCode("test2");
            repository.setName("Test 2");
            RepositorySource repositorySource = context.newObject(RepositorySource.class);
            repositorySource.setCode("testsrc2_xyz");
            // just after epoc second.
            repositorySource.setLastImportTimestamp(new java.sql.Timestamp(12345L));
            repository.addToManyTarget(Repository.REPOSITORY_SOURCES.getName(), repositorySource, true);
            RepositorySourceMirror repositorySourceMirror = context.newObject(RepositorySourceMirror.class);
            repositorySourceMirror.setBaseUrl("file://does-not-exist/path");
            repositorySourceMirror.setIsPrimary(true);
            repositorySourceMirror.setCode("testsrc2_xyz_mirror");
            repositorySourceMirror.setCountry(Country.getByCode(context, Country.CODE_NZ));
            repositorySource.addToManyTarget(RepositorySource.REPOSITORY_SOURCE_MIRRORS.getName(), repositorySourceMirror, true);
            context.commitChanges();
        }
        // add a package version from this repository that is known not to be in that example and then
        // latterly check that the package version is no longer active.
        {
            ObjectContext context = serverRuntime.newContext();
            Pkg pkg = integrationTestSupportService.createPkg(context, "taranaki");
            pkgService.ensurePkgProminence(context, pkg, Repository.tryGetByCode(context, "test").get());
            pkgService.ensurePkgProminence(context, pkg, Repository.tryGetByCode(context, "test2").get());
            // this one should get deactivated
            {
                PkgVersion pkgVersion = context.newObject(PkgVersion.class);
                pkgVersion.setPkg(pkg);
                pkgVersion.setMajor("1");
                pkgVersion.setMinor("2");
                pkgVersion.setArchitecture(Architecture.tryGetByCode(context, "x86_64").get());
                pkgVersion.setIsLatest(true);
                pkgVersion.setRepositorySource(RepositorySource.tryGetByCode(context, "testsrc_xyz").get());
            }
            // this one should remain
            {
                PkgVersion pkgVersion = context.newObject(PkgVersion.class);
                pkgVersion.setPkg(pkg);
                pkgVersion.setMajor("1");
                pkgVersion.setMinor("3");
                pkgVersion.setArchitecture(Architecture.tryGetByCode(context, "x86_64").get());
                pkgVersion.setIsLatest(true);
                pkgVersion.setRepositorySource(RepositorySource.tryGetByCode(context, "testsrc2_xyz").get());
            }
            context.commitChanges();
        }
        // add an inactive package version from this repository that is known to be in the repository.  This
        // package should be activated and re-used.
        ObjectId originalFfmpegPkgOid;
        {
            ObjectContext context = serverRuntime.newContext();
            Pkg pkg = integrationTestSupportService.createPkg(context, "ffmpeg");
            pkgService.ensurePkgProminence(context, pkg, Repository.tryGetByCode(context, "test").get());
            pkgService.ensurePkgProminence(context, pkg, Repository.tryGetByCode(context, "test2").get());
            PkgVersion pkgVersion = context.newObject(PkgVersion.class);
            pkgVersion.setPkg(pkg);
            pkgVersion.setMajor("3");
            pkgVersion.setMinor("3");
            pkgVersion.setMicro("2");
            pkgVersion.setRevision(1);
            pkgVersion.setArchitecture(Architecture.tryGetByCode(context, "x86_64").get());
            pkgVersion.setIsLatest(true);
            // to be sure!
            pkgVersion.setActive(false);
            pkgVersion.setRepositorySource(RepositorySource.tryGetByCode(context, "testsrc_xyz").get());
            PkgVersionUrl pkgVersionUrl = context.newObject(PkgVersionUrl.class);
            pkgVersionUrl.setPkgUrlType(PkgUrlType.getByCode(context, org.haiku.pkg.model.PkgUrlType.HOMEPAGE.name().toLowerCase()).get());
            pkgVersionUrl.setUrl("http://noop");
            pkgVersion.addToManyTarget(PkgVersion.PKG_VERSION_URLS.getName(), pkgVersionUrl, true);
            PkgVersionCopyright pkgVersionCopyright = context.newObject(PkgVersionCopyright.class);
            pkgVersionCopyright.setBody("Norfolk pine");
            pkgVersion.addToManyTarget(PkgVersion.PKG_VERSION_COPYRIGHTS.getName(), pkgVersionCopyright, true);
            PkgVersionLicense pkgVersionLicense = context.newObject(PkgVersionLicense.class);
            pkgVersionLicense.setBody("Punga");
            pkgVersion.addToManyTarget(PkgVersion.PKG_VERSION_LICENSES.getName(), pkgVersionLicense, true);
            context.commitChanges();
            originalFfmpegPkgOid = pkgVersion.getObjectId();
        }
        // do the import.
        String guid = jobService.submit(new RepositoryHpkrIngressJobSpecification("test"), JobSnapshot.COALESCE_STATUSES_NONE);
        // wait for it to finish.
        {
            long startMs = System.currentTimeMillis();
            while (Jobs.isQueuedOrStarted(jobService.tryGetJob(guid).get()) && (System.currentTimeMillis() - startMs) < DELAY_PROCESSSUBMITTEDTESTJOB) {
                Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
            }
            if (Jobs.isQueuedOrStarted(jobService.tryGetJob(guid).get())) {
                throw new IllegalStateException("test processing of the sample repo has taken > " + DELAY_PROCESSSUBMITTEDTESTJOB + "ms");
            }
        }
        // check that the sample url is loaded into the repository source.
        {
            ObjectContext context = serverRuntime.newContext();
            RepositorySource repositorySource = RepositorySource.tryGetByCode(context, "testsrc_xyz").get();
            Assertions.assertThat(repositorySource.getIdentifier()).isEqualTo("f0c086e5-e096-429c-b38d-57beabd764e9");
            // ^^ as defined in the repo info file.
            Assertions.assertThat(repositorySource.getArchitecture().getCode()).isEqualTo("x86_gcc2");
        // ^^ as defined in the repo info file.
        }
        // now pull out some known packages and make sure they are imported correctly.
        // TODO - this is a fairly simplistic test; do some more checks.
        {
            ObjectContext context = serverRuntime.newContext();
            verifyPackage(context, "apr");
            verifyPackage(context, "schroedinger");
            // this one is not in the import and so should be inactive afterwards.
            List<PkgVersion> pkgVersions = ObjectSelect.query(PkgVersion.class).where(PkgVersion.PKG.dot(Pkg.NAME).eq("taranaki")).select(context);
            Assertions.assertThat(pkgVersions.size()).isEqualTo(2);
            for (PkgVersion pkgVersion : pkgVersions) {
                boolean isTestRepository = pkgVersion.getRepositorySource().getRepository().getCode().equals("test");
                Assertions.assertThat(pkgVersion.getActive()).isEqualTo(!isTestRepository);
            }
            // check that the ffmpeg package was re-used and populated; as an example.
            {
                PkgVersion pkgVersion = PkgVersion.get(context, originalFfmpegPkgOid);
                Assertions.assertThat(pkgVersion.getActive()).isTrue();
                Assertions.assertThat(pkgVersion.getIsLatest()).isTrue();
                Assertions.assertThat(PkgVersion.getForPkg(context, pkgVersion.getPkg(), Repository.tryGetByCode(context, "test").get(), true).size()).isEqualTo(// include inactive
                1);
                PkgVersionLocalization localization = pkgVersion.getPkgVersionLocalization(NaturalLanguage.getByCode(context, NaturalLanguage.CODE_ENGLISH)).get();
                Assertions.assertThat(localization.getDescription().get()).startsWith("FFmpeg is a complete, cro");
                Assertions.assertThat(localization.getSummary().get()).startsWith("Audio and video rec");
                // the former rubbish copyright is removed
                List<String> copyrights = pkgVersion.getCopyrights();
                Assertions.assertThat(copyrights.size()).isEqualTo(2);
                Assertions.assertThat(ImmutableSet.copyOf(copyrights)).containsOnly("2000-2003 Fabrice Bellard", "2003-2017 the FFmpeg developers");
                // the former rubbish license is removed
                List<String> licenses = pkgVersion.getLicenses();
                Assertions.assertThat(licenses.size()).isEqualTo(2);
                Assertions.assertThat(ImmutableSet.copyOf(licenses)).containsOnly("GNU LGPL v2.1", "GNU GPL v2");
                Optional<PkgVersionUrl> pkgVersionUrlOptional = pkgVersion.getPkgVersionUrlForType(PkgUrlType.getByCode(context, org.haiku.pkg.model.PkgUrlType.HOMEPAGE.name().toLowerCase()).get());
                Assertions.assertThat(pkgVersionUrlOptional.isPresent()).isTrue();
                Assertions.assertThat(pkgVersionUrlOptional.get().getUrl()).isEqualTo("https://ffmpeg.org/");
            }
        }
    } finally {
        if (null != temporaryRepoFile) {
            if (!temporaryRepoFile.delete()) {
                LOGGER.warn("unable to delete the temporary 'repo' file");
            }
        }
        if (null != temporaryRepoInfoFile) {
            if (!temporaryRepoInfoFile.delete()) {
                LOGGER.warn("unable to delete the temporary 'repo.info' file");
            }
        }
    }
}
Also used : PkgVersionLocalization(org.haiku.haikudepotserver.dataobjects.PkgVersionLocalization) PkgVersionLicense(org.haiku.haikudepotserver.dataobjects.PkgVersionLicense) RepositoryHpkrIngressJobSpecification(org.haiku.haikudepotserver.repository.model.RepositoryHpkrIngressJobSpecification) ObjectId(org.apache.cayenne.ObjectId) Pkg(org.haiku.haikudepotserver.dataobjects.Pkg) Repository(org.haiku.haikudepotserver.dataobjects.Repository) RepositorySourceMirror(org.haiku.haikudepotserver.dataobjects.RepositorySourceMirror) PkgVersionUrl(org.haiku.haikudepotserver.dataobjects.PkgVersionUrl) PkgVersionCopyright(org.haiku.haikudepotserver.dataobjects.PkgVersionCopyright) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource) PkgVersion(org.haiku.haikudepotserver.dataobjects.PkgVersion) List(java.util.List) ObjectContext(org.apache.cayenne.ObjectContext) File(java.io.File) AbstractIntegrationTest(org.haiku.haikudepotserver.AbstractIntegrationTest) Test(org.junit.jupiter.api.Test)

Example 13 with RepositorySource

use of org.haiku.haikudepotserver.dataobjects.RepositorySource in project haikudepotserver by haiku.

the class RepositoryApiImpl method updateRepositorySource.

@Override
public UpdateRepositorySourceResult updateRepositorySource(UpdateRepositorySourceRequest request) {
    Preconditions.checkArgument(null != request);
    Preconditions.checkArgument(StringUtils.isNotBlank(request.code), "a code is required to identify the repository source to update");
    Preconditions.checkArgument(null != request.filter, "filters must be provided to specify what aspects of the repository source should be updated");
    final ObjectContext context = serverRuntime.newContext();
    RepositorySource repositorySource = getRepositorySourceOrThrow(context, request.code);
    if (!permissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(), repositorySource.getRepository(), Permission.REPOSITORY_EDIT)) {
        throw new AccessDeniedException("cannot edit the repository [" + repositorySource.getRepository() + "]");
    }
    for (UpdateRepositorySourceRequest.Filter filter : request.filter) {
        switch(filter) {
            case ACTIVE:
                if (null == request.active) {
                    throw new IllegalArgumentException("the active field must be provided if the request requires it to be updated");
                }
                repositorySource.setActive(request.active);
                LOGGER.info("did set the repository source {} active to {}", repositorySource, request.active);
                break;
            case FORCED_INTERNAL_BASE_URL:
                repositorySource.setForcedInternalBaseUrl(StringUtils.trimToNull(request.forcedInternalBaseUrl));
                LOGGER.info("did set the repository source forced internal base url");
                break;
            case EXTRA_IDENTIFIERS:
                {
                    Set<String> existing = Set.copyOf(repositorySource.getExtraIdentifiers());
                    Set<String> desired = Set.copyOf(CollectionUtils.emptyIfNull(request.extraIdentifiers));
                    SetUtils.difference(existing, desired).stream().map(repositorySource::tryGetRepositorySourceExtraIdentifierForIdentifier).map(Optional::orElseThrow).forEach(rsei -> {
                        repositorySource.removeFromRepositorySourceExtraIdentifiers(rsei);
                        context.deleteObject(rsei);
                    });
                    SetUtils.difference(desired, existing).forEach(i -> {
                        RepositorySourceExtraIdentifier rsei = context.newObject(RepositorySourceExtraIdentifier.class);
                        rsei.setRepositorySource(repositorySource);
                        rsei.setIdentifier(i);
                        repositorySource.addToRepositorySourceExtraIdentifiers(rsei);
                    });
                    break;
                }
            default:
                throw new IllegalStateException("unhandled filter; " + filter.name());
        }
    }
    if (context.hasChanges()) {
        repositorySource.getRepository().setModifyTimestamp();
        context.commitChanges();
    } else {
        LOGGER.info("update repository source {} with no changes made", repositorySource);
    }
    return new UpdateRepositorySourceResult();
}
Also used : GetRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceMirrorResult) CreateRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.CreateRepositoryResult) CreateRepositorySourceRequest(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceRequest) RemoveRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.RemoveRepositorySourceMirrorResult) LoggerFactory(org.slf4j.LoggerFactory) RepositorySourceExtraIdentifier(org.haiku.haikudepotserver.dataobjects.RepositorySourceExtraIdentifier) StringUtils(org.apache.commons.lang3.StringUtils) RepositoryService(org.haiku.haikudepotserver.repository.model.RepositoryService) SecurityContextHolder(org.springframework.security.core.context.SecurityContextHolder) UpdateRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceMirrorResult) org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror(org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror) PkgSearchSpecification(org.haiku.haikudepotserver.pkg.model.PkgSearchSpecification) SingleCollector(org.haiku.haikudepotserver.support.SingleCollector) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource) RepositorySourceMirror(org.haiku.haikudepotserver.dataobjects.RepositorySourceMirror) Set(java.util.Set) SearchRepositoriesResult(org.haiku.haikudepotserver.api1.model.repository.SearchRepositoriesResult) UUID(java.util.UUID) GetRepositoriesResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositoriesResult) UpdateRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceResult) Collectors(java.util.stream.Collectors) GetRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceMirrorRequest) List(java.util.List) GetRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositoryRequest) UpdateRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositoryRequest) Repository(org.haiku.haikudepotserver.dataobjects.Repository) Optional(java.util.Optional) Country(org.haiku.haikudepotserver.dataobjects.Country) ObjectNotFoundException(org.haiku.haikudepotserver.api1.support.ObjectNotFoundException) UpdateRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositoryResult) TriggerImportRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.TriggerImportRepositoryRequest) ObjectContext(org.apache.cayenne.ObjectContext) Permission(org.haiku.haikudepotserver.security.model.Permission) ValidationException(org.haiku.haikudepotserver.api1.support.ValidationException) JobSnapshot(org.haiku.haikudepotserver.job.model.JobSnapshot) TriggerImportRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.TriggerImportRepositoryResult) BooleanUtils(org.apache.commons.lang3.BooleanUtils) GetRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceResult) PersistentObject(org.apache.cayenne.PersistentObject) CreateRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceResult) CollectionUtils(org.apache.commons.collections4.CollectionUtils) RemoveRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.RemoveRepositorySourceMirrorRequest) GetRepositoriesRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositoriesRequest) HashSet(java.util.HashSet) Strings(com.google.common.base.Strings) SetUtils(org.apache.commons.collections4.SetUtils) SearchRepositoriesRequest(org.haiku.haikudepotserver.api1.model.repository.SearchRepositoriesRequest) JobService(org.haiku.haikudepotserver.job.model.JobService) GetRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositoryResult) Logger(org.slf4j.Logger) UpdateRepositorySourceRequest(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceRequest) AutoJsonRpcServiceImpl(com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImpl) Architecture(org.haiku.haikudepotserver.dataobjects.Architecture) AccessDeniedException(org.springframework.security.access.AccessDeniedException) PermissionEvaluator(org.springframework.security.access.PermissionEvaluator) CreateRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceMirrorRequest) RepositoryHpkrIngressJobSpecification(org.haiku.haikudepotserver.repository.model.RepositoryHpkrIngressJobSpecification) CreateRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceMirrorResult) Component(org.springframework.stereotype.Component) CreateRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.CreateRepositoryRequest) ObjectId(org.apache.cayenne.ObjectId) UpdateRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceMirrorRequest) Preconditions(com.google.common.base.Preconditions) RepositorySearchSpecification(org.haiku.haikudepotserver.repository.model.RepositorySearchSpecification) ValidationFailure(org.haiku.haikudepotserver.api1.support.ValidationFailure) ServerRuntime(org.apache.cayenne.configuration.server.ServerRuntime) Collections(java.util.Collections) GetRepositorySourceRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceRequest) AccessDeniedException(org.springframework.security.access.AccessDeniedException) Set(java.util.Set) HashSet(java.util.HashSet) Optional(java.util.Optional) UpdateRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceResult) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource) RepositorySourceExtraIdentifier(org.haiku.haikudepotserver.dataobjects.RepositorySourceExtraIdentifier) ObjectContext(org.apache.cayenne.ObjectContext) UpdateRepositorySourceRequest(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceRequest)

Example 14 with RepositorySource

use of org.haiku.haikudepotserver.dataobjects.RepositorySource in project haikudepotserver by haiku.

the class RepositoryApiImpl method triggerImportRepository.

// note; no integration test for this one.
@Override
public TriggerImportRepositoryResult triggerImportRepository(TriggerImportRepositoryRequest triggerImportRepositoryRequest) {
    Preconditions.checkNotNull(triggerImportRepositoryRequest);
    Preconditions.checkState(!Strings.isNullOrEmpty(triggerImportRepositoryRequest.repositoryCode));
    Preconditions.checkArgument(null == triggerImportRepositoryRequest.repositorySourceCodes || !triggerImportRepositoryRequest.repositorySourceCodes.isEmpty(), "bad repository sources");
    final ObjectContext context = serverRuntime.newContext();
    Optional<Repository> repositoryOptional = Repository.tryGetByCode(context, triggerImportRepositoryRequest.repositoryCode);
    if (repositoryOptional.isEmpty()) {
        throw new ObjectNotFoundException(Repository.class.getSimpleName(), triggerImportRepositoryRequest.repositoryCode);
    }
    Repository repository = repositoryOptional.get();
    if (!permissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(), repository, Permission.REPOSITORY_IMPORT)) {
        throw new AccessDeniedException("attempt to trigger repository import for [" + repository + "]");
    }
    Set<RepositorySource> repositorySources = null;
    if (null != triggerImportRepositoryRequest.repositorySourceCodes) {
        repositorySources = new HashSet<>();
        for (String repositorySourceCode : triggerImportRepositoryRequest.repositorySourceCodes) {
            repositorySources.add(repository.getRepositorySources().stream().filter(rs -> rs.getCode().equals(repositorySourceCode)).collect(SingleCollector.optional()).orElseThrow(() -> new ObjectNotFoundException(RepositorySource.class.getSimpleName(), repositorySourceCode)));
        }
    }
    jobService.submit(new RepositoryHpkrIngressJobSpecification(repository.getCode(), null == repositorySources ? null : repositorySources.stream().map(RepositorySource::getCode).collect(Collectors.toSet())), JobSnapshot.COALESCE_STATUSES_QUEUED);
    return new TriggerImportRepositoryResult();
}
Also used : GetRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceMirrorResult) CreateRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.CreateRepositoryResult) CreateRepositorySourceRequest(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceRequest) RemoveRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.RemoveRepositorySourceMirrorResult) LoggerFactory(org.slf4j.LoggerFactory) RepositorySourceExtraIdentifier(org.haiku.haikudepotserver.dataobjects.RepositorySourceExtraIdentifier) StringUtils(org.apache.commons.lang3.StringUtils) RepositoryService(org.haiku.haikudepotserver.repository.model.RepositoryService) SecurityContextHolder(org.springframework.security.core.context.SecurityContextHolder) UpdateRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceMirrorResult) org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror(org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror) PkgSearchSpecification(org.haiku.haikudepotserver.pkg.model.PkgSearchSpecification) SingleCollector(org.haiku.haikudepotserver.support.SingleCollector) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource) RepositorySourceMirror(org.haiku.haikudepotserver.dataobjects.RepositorySourceMirror) Set(java.util.Set) SearchRepositoriesResult(org.haiku.haikudepotserver.api1.model.repository.SearchRepositoriesResult) UUID(java.util.UUID) GetRepositoriesResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositoriesResult) UpdateRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceResult) Collectors(java.util.stream.Collectors) GetRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceMirrorRequest) List(java.util.List) GetRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositoryRequest) UpdateRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositoryRequest) Repository(org.haiku.haikudepotserver.dataobjects.Repository) Optional(java.util.Optional) Country(org.haiku.haikudepotserver.dataobjects.Country) ObjectNotFoundException(org.haiku.haikudepotserver.api1.support.ObjectNotFoundException) UpdateRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositoryResult) TriggerImportRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.TriggerImportRepositoryRequest) ObjectContext(org.apache.cayenne.ObjectContext) Permission(org.haiku.haikudepotserver.security.model.Permission) ValidationException(org.haiku.haikudepotserver.api1.support.ValidationException) JobSnapshot(org.haiku.haikudepotserver.job.model.JobSnapshot) TriggerImportRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.TriggerImportRepositoryResult) BooleanUtils(org.apache.commons.lang3.BooleanUtils) GetRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceResult) PersistentObject(org.apache.cayenne.PersistentObject) CreateRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceResult) CollectionUtils(org.apache.commons.collections4.CollectionUtils) RemoveRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.RemoveRepositorySourceMirrorRequest) GetRepositoriesRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositoriesRequest) HashSet(java.util.HashSet) Strings(com.google.common.base.Strings) SetUtils(org.apache.commons.collections4.SetUtils) SearchRepositoriesRequest(org.haiku.haikudepotserver.api1.model.repository.SearchRepositoriesRequest) JobService(org.haiku.haikudepotserver.job.model.JobService) GetRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositoryResult) Logger(org.slf4j.Logger) UpdateRepositorySourceRequest(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceRequest) AutoJsonRpcServiceImpl(com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImpl) Architecture(org.haiku.haikudepotserver.dataobjects.Architecture) AccessDeniedException(org.springframework.security.access.AccessDeniedException) PermissionEvaluator(org.springframework.security.access.PermissionEvaluator) CreateRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceMirrorRequest) RepositoryHpkrIngressJobSpecification(org.haiku.haikudepotserver.repository.model.RepositoryHpkrIngressJobSpecification) CreateRepositorySourceMirrorResult(org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceMirrorResult) Component(org.springframework.stereotype.Component) CreateRepositoryRequest(org.haiku.haikudepotserver.api1.model.repository.CreateRepositoryRequest) ObjectId(org.apache.cayenne.ObjectId) UpdateRepositorySourceMirrorRequest(org.haiku.haikudepotserver.api1.model.repository.UpdateRepositorySourceMirrorRequest) Preconditions(com.google.common.base.Preconditions) RepositorySearchSpecification(org.haiku.haikudepotserver.repository.model.RepositorySearchSpecification) ValidationFailure(org.haiku.haikudepotserver.api1.support.ValidationFailure) ServerRuntime(org.apache.cayenne.configuration.server.ServerRuntime) Collections(java.util.Collections) GetRepositorySourceRequest(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceRequest) Repository(org.haiku.haikudepotserver.dataobjects.Repository) AccessDeniedException(org.springframework.security.access.AccessDeniedException) RepositoryHpkrIngressJobSpecification(org.haiku.haikudepotserver.repository.model.RepositoryHpkrIngressJobSpecification) ObjectNotFoundException(org.haiku.haikudepotserver.api1.support.ObjectNotFoundException) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource) ObjectContext(org.apache.cayenne.ObjectContext) TriggerImportRepositoryResult(org.haiku.haikudepotserver.api1.model.repository.TriggerImportRepositoryResult)

Example 15 with RepositorySource

use of org.haiku.haikudepotserver.dataobjects.RepositorySource in project haikudepotserver by haiku.

the class RepositoryApiImpl method getRepositorySource.

@Override
public GetRepositorySourceResult getRepositorySource(GetRepositorySourceRequest request) {
    Preconditions.checkArgument(null != request);
    Preconditions.checkArgument(!Strings.isNullOrEmpty(request.code));
    final ObjectContext context = serverRuntime.newContext();
    Optional<RepositorySource> repositorySourceOptional = RepositorySource.tryGetByCode(context, request.code);
    if (repositorySourceOptional.isEmpty()) {
        throw new ObjectNotFoundException(RepositorySource.class.getSimpleName(), request.code);
    }
    RepositorySource repositorySource = repositorySourceOptional.get();
    GetRepositorySourceResult result = new GetRepositorySourceResult();
    result.active = repositorySource.getActive();
    result.code = repositorySource.getCode();
    result.repositoryCode = repositorySource.getRepository().getCode();
    result.identifier = repositorySource.getIdentifier();
    result.architectureCode = Optional.ofNullable(repositorySource.getArchitecture()).map(Architecture::getCode).orElse(null);
    if (null != repositorySource.getLastImportTimestamp()) {
        result.lastImportTimestamp = repositorySource.getLastImportTimestamp().getTime();
    }
    result.extraIdentifiers = repositorySource.getExtraIdentifiers();
    result.repositorySourceMirrors = repositorySource.getRepositorySourceMirrors().stream().filter(m -> m.getActive() || BooleanUtils.isTrue(request.includeInactiveRepositorySourceMirrors)).sorted().map(rsm -> {
        GetRepositorySourceResult.RepositorySourceMirror mirror = new GetRepositorySourceResult.RepositorySourceMirror();
        mirror.active = rsm.getActive();
        mirror.baseUrl = rsm.getBaseUrl();
        mirror.countryCode = rsm.getCountry().getCode();
        mirror.isPrimary = rsm.getIsPrimary();
        mirror.code = rsm.getCode();
        return mirror;
    }).collect(Collectors.toList());
    if (permissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(), repositorySource.getRepository(), Permission.REPOSITORY_EDIT)) {
        result.forcedInternalBaseUrl = repositorySourceOptional.get().getForcedInternalBaseUrl();
    }
    return result;
}
Also used : org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror(org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror) RepositorySourceMirror(org.haiku.haikudepotserver.dataobjects.RepositorySourceMirror) Architecture(org.haiku.haikudepotserver.dataobjects.Architecture) ObjectNotFoundException(org.haiku.haikudepotserver.api1.support.ObjectNotFoundException) RepositorySource(org.haiku.haikudepotserver.dataobjects.RepositorySource) ObjectContext(org.apache.cayenne.ObjectContext) GetRepositorySourceResult(org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceResult)

Aggregations

RepositorySource (org.haiku.haikudepotserver.dataobjects.RepositorySource)16 ObjectContext (org.apache.cayenne.ObjectContext)14 Repository (org.haiku.haikudepotserver.dataobjects.Repository)7 Architecture (org.haiku.haikudepotserver.dataobjects.Architecture)5 RepositorySourceMirror (org.haiku.haikudepotserver.dataobjects.RepositorySourceMirror)5 List (java.util.List)4 ObjectId (org.apache.cayenne.ObjectId)4 AbstractIntegrationTest (org.haiku.haikudepotserver.AbstractIntegrationTest)4 ObjectNotFoundException (org.haiku.haikudepotserver.api1.support.ObjectNotFoundException)4 org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror (org.haiku.haikudepotserver.dataobjects.auto._RepositorySourceMirror)4 RepositoryHpkrIngressJobSpecification (org.haiku.haikudepotserver.repository.model.RepositoryHpkrIngressJobSpecification)4 AccessDeniedException (org.springframework.security.access.AccessDeniedException)4 CreateRepositorySourceMirrorResult (org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceMirrorResult)3 CreateRepositorySourceResult (org.haiku.haikudepotserver.api1.model.repository.CreateRepositorySourceResult)3 GetRepositorySourceResult (org.haiku.haikudepotserver.api1.model.repository.GetRepositorySourceResult)3 ValidationException (org.haiku.haikudepotserver.api1.support.ValidationException)3 ValidationFailure (org.haiku.haikudepotserver.api1.support.ValidationFailure)3 Preconditions (com.google.common.base.Preconditions)2 Strings (com.google.common.base.Strings)2 AutoJsonRpcServiceImpl (com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImpl)2