use of org.haiku.haikudepotserver.dataobjects.Repository in project haikudepotserver by haiku.
the class PkgApiIT method testIncrementViewCounter.
@Test
public void testIncrementViewCounter() {
integrationTestSupportService.createStandardTestData();
IncrementViewCounterRequest request = new IncrementViewCounterRequest();
request.major = "1";
request.micro = "2";
request.revision = 3;
request.name = "pkg1";
request.architectureCode = "x86_64";
request.repositoryCode = "testrepo";
// ------------------------------------
IncrementViewCounterResult result = pkgApi.incrementViewCounter(request);
// ------------------------------------
Assertions.assertThat(result).isNotNull();
{
ObjectContext context = serverRuntime.newContext();
Pkg pkg1 = Pkg.getByName(context, "pkg1");
Repository repository = Repository.getByCode(context, "testrepo");
Architecture architecture = Architecture.getByCode(context, "x86_64");
PkgVersion pkgVersion = PkgVersion.getForPkg(context, pkg1, repository, architecture, new VersionCoordinates("1", null, "2", null, 3)).get();
Assertions.assertThat(pkgVersion.getViewCounter()).isEqualTo(1L);
}
}
use of org.haiku.haikudepotserver.dataobjects.Repository in project haikudepotserver by haiku.
the class PkgApiIT method updatePkgVersion_deactivate.
@Test
public void updatePkgVersion_deactivate() {
integrationTestSupportService.createStandardTestData();
setAuthenticatedUserToRoot();
UpdatePkgVersionRequest request = new UpdatePkgVersionRequest();
request.pkgName = "pkg1";
request.repositoryCode = "testrepo";
request.architectureCode = "x86_64";
request.major = "1";
request.micro = "2";
request.revision = 3;
request.filter = Collections.singletonList(UpdatePkgVersionRequest.Filter.ACTIVE);
request.active = false;
// ------------------------------------
pkgApi.updatePkgVersion(request);
// ------------------------------------
{
ObjectContext context = serverRuntime.newContext();
Pkg pkg1 = Pkg.getByName(context, "pkg1");
Repository repository = Repository.getByCode(context, "testrepo");
Architecture architecture = Architecture.getByCode(context, "x86_64");
PkgVersion pkgVersion = PkgVersion.getForPkg(context, pkg1, repository, architecture, new VersionCoordinates("1", null, "2", null, 3)).get();
Assertions.assertThat(pkgVersion.getActive()).isFalse();
}
}
use of org.haiku.haikudepotserver.dataobjects.Repository in project haikudepotserver by haiku.
the class RepositoryApiIT method testUpdateRepository_password.
@Test
public void testUpdateRepository_password() {
IntegrationTestSupportService.StandardTestData data = integrationTestSupportService.createStandardTestData();
Assertions.assertThat(data.repository.getPasswordHash()).isNull();
setAuthenticatedUserToRoot();
UpdateRepositoryRequest request = new UpdateRepositoryRequest();
request.code = "testrepo";
request.active = false;
request.passwordClear = "Quatsch";
request.filter = Collections.singletonList(UpdateRepositoryRequest.Filter.PASSWORD);
// ------------------------------------
repositoryApi.updateRepository(request);
// ------------------------------------
ObjectContext context = serverRuntime.newContext();
Repository repository = ObjectSelect.query(Repository.class).where(Repository.CODE.eq(data.repository.getCode())).selectOne(context);
Assertions.assertThat(repository.getPasswordHash()).matches("^[A-Za-z0-9]+$");
}
use of org.haiku.haikudepotserver.dataobjects.Repository in project haikudepotserver by haiku.
the class UserRatingSpreadsheetJobRunner method run.
@Override
public void run(JobService jobService, UserRatingSpreadsheetJobSpecification specification) throws IOException {
Preconditions.checkArgument(null != jobService);
Preconditions.checkArgument(null != specification);
final ObjectContext context = serverRuntime.newContext();
// this will register the outbound data against the job.
JobDataWithByteSink jobDataWithByteSink = jobService.storeGeneratedData(specification.getGuid(), "download", MediaType.CSV_UTF_8.toString());
try (OutputStream outputStream = jobDataWithByteSink.getByteSink().openBufferedStream();
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
CSVWriter writer = new CSVWriter(outputStreamWriter, ',')) {
Optional<Pkg> paramPkgOptional = Optional.empty();
Optional<User> paramUserOptional = Optional.empty();
Optional<Repository> paramRepositoryOptional = Optional.empty();
if (!Strings.isNullOrEmpty(specification.getRepositoryCode())) {
paramRepositoryOptional = Repository.tryGetByCode(context, specification.getRepositoryCode());
if (!paramRepositoryOptional.isPresent()) {
throw new IllegalStateException("unable to find the repository; " + specification.getRepositoryCode());
}
}
if (!Strings.isNullOrEmpty(specification.getUserNickname())) {
paramUserOptional = User.tryGetByNickname(context, specification.getUserNickname());
if (!paramUserOptional.isPresent()) {
throw new IllegalStateException("unable to find the user; " + specification.getUserNickname());
}
}
if (!Strings.isNullOrEmpty(specification.getPkgName())) {
paramPkgOptional = Pkg.tryGetByName(context, specification.getPkgName());
if (!paramPkgOptional.isPresent()) {
throw new IllegalStateException("unable to find the package; " + specification.getPkgName());
}
}
writer.writeNext(new String[] { "pkg-name", "repository-code", "architecture-code", "version-coordinates", "user-nickname", "create-timestamp", "modify-timestamp", "rating", "stability-code", "natural-language-code", "comment", "code" });
// stream out the packages.
long startMs = System.currentTimeMillis();
LOGGER.info("will user rating spreadsheet report");
final DateTimeFormatter dateTimeFormatter = DateTimeHelper.createStandardDateTimeFormat();
UserRatingSearchSpecification spec = new UserRatingSearchSpecification();
spec.setPkg(paramPkgOptional.orElse(null));
spec.setUser(paramUserOptional.orElse(null));
spec.setRepository(paramRepositoryOptional.orElse(null));
// TODO; provide a prefetch tree into the user, pkgversion.
int count = userRatingService.each(context, spec, userRating -> {
writer.writeNext(new String[] { userRating.getPkgVersion().getPkg().getName(), userRating.getPkgVersion().getRepositorySource().getRepository().getCode(), userRating.getPkgVersion().getArchitecture().getCode(), userRating.getPkgVersion().toVersionCoordinates().toString(), userRating.getUser().getNickname(), dateTimeFormatter.format(Instant.ofEpochMilli(userRating.getCreateTimestamp().getTime())), dateTimeFormatter.format(Instant.ofEpochMilli(userRating.getModifyTimestamp().getTime())), null != userRating.getRating() ? userRating.getRating().toString() : "", null != userRating.getUserRatingStability() ? userRating.getUserRatingStability().getCode() : "", userRating.getNaturalLanguage().getCode(), userRating.getComment(), userRating.getCode() });
return true;
});
LOGGER.info("did produce user rating spreadsheet report for {} user ratings in {}ms", count, System.currentTimeMillis() - startMs);
}
}
use of org.haiku.haikudepotserver.dataobjects.Repository in project haikudepotserver by haiku.
the class RepositoryController method importRepository.
/**
* <p>Instructs HDS to start importing data for all repository sources of
* the nominated repository</p>
*/
@RequestMapping(value = "{" + KEY_REPOSITORYCODE + "}/" + SEGMENT_IMPORT, method = RequestMethod.POST)
public ResponseEntity<String> importRepository(@PathVariable(value = KEY_REPOSITORYCODE) String repositoryCode) {
ObjectContext context = serverRuntime.newContext();
Optional<Repository> repositoryOptional = Repository.tryGetByCode(context, repositoryCode);
if (repositoryOptional.isEmpty()) {
return new ResponseEntity<>("repository not found", HttpStatus.NOT_FOUND);
}
if (!permissionEvaluator.hasPermission(SecurityContextHolder.getContext().getAuthentication(), repositoryOptional.get(), Permission.REPOSITORY_IMPORT)) {
throw new AccessDeniedException("unable to import repository [" + repositoryOptional.get() + "]");
}
jobService.submit(new RepositoryHpkrIngressJobSpecification(repositoryCode), JobSnapshot.COALESCE_STATUSES_QUEUED);
return ResponseEntity.ok("repository import submitted");
}
Aggregations