diff --git a/src/main/java/net/geant/nmaas/portal/api/domain/ApplicationBaseS.java b/src/main/java/net/geant/nmaas/portal/api/domain/ApplicationBaseS.java new file mode 100644 index 0000000000000000000000000000000000000000..8239b7a5dcc4142663c1f35c01b92fcf393ef23c --- /dev/null +++ b/src/main/java/net/geant/nmaas/portal/api/domain/ApplicationBaseS.java @@ -0,0 +1,17 @@ +package net.geant.nmaas.portal.api.domain; + +import net.geant.nmaas.portal.persistent.entity.AppDescription; +import net.geant.nmaas.portal.persistent.entity.Tag; + +import java.util.List; +import java.util.Set; + +public interface ApplicationBaseS { + Long getId(); + String getName(); + + List<AppDescription> getDescriptions(); + + Set<Tag> getTags(); +} + diff --git a/src/main/java/net/geant/nmaas/portal/api/domain/ApplicationBaseViewS.java b/src/main/java/net/geant/nmaas/portal/api/domain/ApplicationBaseViewS.java index 5f42d1d06e19b49108cf78fc16dd1c0dab126916..85eefdc940e0b9f0d7b6155586159763513c4f41 100644 --- a/src/main/java/net/geant/nmaas/portal/api/domain/ApplicationBaseViewS.java +++ b/src/main/java/net/geant/nmaas/portal/api/domain/ApplicationBaseViewS.java @@ -2,6 +2,8 @@ package net.geant.nmaas.portal.api.domain; import lombok.*; import lombok.experimental.SuperBuilder; +import net.geant.nmaas.portal.persistent.entity.AppDescription; +import net.geant.nmaas.portal.persistent.entity.Tag; import javax.validation.constraints.NotEmpty; import java.util.ArrayList; diff --git a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java index 95c5d9fe160b71e658b316ab3970cd1ed4ff5947..75dd1449095a3ade806646aff1ba8c823dfe0a5b 100644 --- a/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java +++ b/src/main/java/net/geant/nmaas/portal/api/market/ApplicationController.java @@ -90,7 +90,7 @@ public class ApplicationController extends AppBaseController { @GetMapping("/base") @Transactional public List<ApplicationBaseViewS> getAllActiveApplicationBase() { - return appBaseService.findAllActiveApps().stream() + return appBaseService.findAllActiveAppsSmall().stream() .map(app -> modelMapper.map(app, ApplicationBaseViewS.class)) .map(this::setAppRating) .collect(Collectors.toList()); diff --git a/src/main/java/net/geant/nmaas/portal/persistent/entity/ApplicationBase.java b/src/main/java/net/geant/nmaas/portal/persistent/entity/ApplicationBase.java index be0f31d721f58a922331acb5427eda9971e905fc..98d7dc7f9935cd5f0415f091febe3edb2c618e41 100644 --- a/src/main/java/net/geant/nmaas/portal/persistent/entity/ApplicationBase.java +++ b/src/main/java/net/geant/nmaas/portal/persistent/entity/ApplicationBase.java @@ -5,9 +5,21 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import javax.persistence.*; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; import java.io.Serializable; import java.util.ArrayList; import java.util.HashSet; @@ -63,16 +75,23 @@ public class ApplicationBase implements Serializable { @OneToMany(orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Set<ApplicationVersion> versions = new HashSet<>(); - public ApplicationBase(String name){ + public ApplicationBase(String name) { this.name = name; } - public ApplicationBase(Long id, String name){ + public ApplicationBase(Long id, String name) { this(name); this.id = id; } - public void validate(){ + public ApplicationBase(long id, String name, Set<Tag> tags, List<AppDescription> descriptions) { + this(name); + this.id = id; + this.tags = tags; + this.descriptions = descriptions; + } + + public void validate() { checkArgument(StringUtils.isNotEmpty(name), "App must have name"); checkArgument(name.matches("^[a-zA-Z0-9- ]+$"), "Name contains illegal characters"); checkArgument(descriptions != null && !descriptions.isEmpty(), "Descriptions cannot be null or empty"); diff --git a/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java b/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java index 144f78c2175371dc7b62a285bc3427133c21f585..f14232e7fc6caa5920598c147ed8a6f231a228fb 100644 --- a/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java +++ b/src/main/java/net/geant/nmaas/portal/persistent/repositories/ApplicationBaseRepository.java @@ -1,12 +1,14 @@ package net.geant.nmaas.portal.persistent.repositories; -import java.util.List; -import java.util.Optional; +import net.geant.nmaas.portal.api.domain.ApplicationBaseS; import net.geant.nmaas.portal.persistent.entity.ApplicationBase; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Optional; + @Repository public interface ApplicationBaseRepository extends JpaRepository<ApplicationBase, Long> { @@ -20,4 +22,11 @@ public interface ApplicationBaseRepository extends JpaRepository<ApplicationBase @Query("select count(distinct ab.name) FROM ApplicationBase ab JOIN Application a on a.name = ab.name WHERE a.state = 'ACTIVE'") long countAllActive(); +// @Query(value = "select new net.geant.nmaas.portal.api.domain.ApplicationBaseSTest(ab.id, ab.name, ab.tags) from ApplicationBase ab JOIN Application a ON a.name = ab.name " + +// " WHERE a.state = 'ACTIVE' ", nativeQuery = true) +// List<ApplicationBaseSTest> findAllSmallQuery(); + + @Query("Select ab from ApplicationBase ab JOIN ApplicationVersion av on av.appVersionId = ab.id WHERE av.state = 'ACTIVE'") + List<ApplicationBaseS> findAllSmall(); + } \ No newline at end of file diff --git a/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java b/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java index 77871894fdc297e27b3e6fe3a5868b975bd1a695..8df8c76cb250247843dedac345bc410ca32eb3ac 100644 --- a/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java +++ b/src/main/java/net/geant/nmaas/portal/service/ApplicationBaseService.java @@ -1,5 +1,7 @@ package net.geant.nmaas.portal.service; +import net.geant.nmaas.portal.api.domain.ApplicationBaseS; +import net.geant.nmaas.portal.api.domain.ApplicationBaseViewS; import net.geant.nmaas.portal.persistent.entity.ApplicationBase; import net.geant.nmaas.portal.persistent.entity.ApplicationState; @@ -17,6 +19,8 @@ public interface ApplicationBaseService { List<ApplicationBase> findAll(); List<ApplicationBase> findAllActiveApps(); + List<ApplicationBaseS> findAllActiveAppsSmall(); + ApplicationBase getBaseApp(Long id); ApplicationBase findByName(String name); diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java index 1ccf46895e78ff1f19b49a620aa3c471b493c0b1..93447679015cb39b50ee17287adf1915a9ff5e2c 100644 --- a/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java +++ b/src/main/java/net/geant/nmaas/portal/service/impl/ApplicationBaseServiceImpl.java @@ -2,6 +2,7 @@ package net.geant.nmaas.portal.service.impl; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; +import net.geant.nmaas.portal.api.domain.ApplicationBaseS; import net.geant.nmaas.portal.api.exception.MissingElementException; import net.geant.nmaas.portal.api.exception.ProcessingException; import net.geant.nmaas.portal.events.ApplicationActivatedEvent; @@ -81,7 +82,7 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService { throw new ProcessingException("Updated entity id must not be null"); } Optional<ApplicationBase> fromDb = appBaseRepository.findById(id); - if(fromDb.isPresent()) { + if (fromDb.isPresent()) { ApplicationBase base = fromDb.get(); base.setOwner(owner); base.validate(); @@ -99,7 +100,7 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService { .findAny() .ifPresent(appVersion -> appVersion.setState(state)); appBase.validate(); - appBaseRepository.save(appBase); + appBaseRepository.save(appBase); if (state.equals(ApplicationState.ACTIVE)) { eventPublisher.publishEvent(new ApplicationActivatedEvent(this, name, version)); } @@ -120,6 +121,10 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService { .collect(Collectors.toList()); } + public List<ApplicationBaseS> findAllActiveAppsSmall() { + return appBaseRepository.findAllSmall(); + } + @Override public ApplicationBase getBaseApp(Long id) { return appBaseRepository.findById(id) @@ -154,12 +159,12 @@ public class ApplicationBaseServiceImpl implements ApplicationBaseService { .filter(description -> description.getLanguage().equals("en")) .findFirst().orElseThrow(() -> new IllegalStateException("English description is missing")); app.getDescriptions().forEach(description -> { - if (StringUtils.isEmpty(description.getBriefDescription())) { - description.setBriefDescription(appDescription.getBriefDescription()); - } - if (StringUtils.isEmpty(description.getFullDescription())) { - description.setFullDescription(appDescription.getFullDescription()); - } - }); + if (StringUtils.isEmpty(description.getBriefDescription())) { + description.setBriefDescription(appDescription.getBriefDescription()); + } + if (StringUtils.isEmpty(description.getFullDescription())) { + description.setFullDescription(appDescription.getFullDescription()); + } + }); } }