Refactor TargetIdName, DistributionSetIdName, SoftwareModuleIdName entities (#407)

* - Move TargetIdName, DistributionSetIdName, SoftwareModuleIdName to ui
entity package

- Refactor tables. Use the entity id instead of the *idname entity

- Remove expensive getEntity() calls from remote events

- Fix some NPE, if entity is deleted from another session

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Add TagretFilter Query client resource

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* Fix methode signature for feign

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* fix sonar issue after merge

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>

* remove ds set id name after merging from rollout view

Signed-off-by: SirWayne <dennis.melzer@bosch-si.com>
This commit is contained in:
Dennis Melzer
2017-01-31 09:19:59 +01:00
committed by Kai Zimmermann
parent 59f218e841
commit 9980fd5619
62 changed files with 876 additions and 1139 deletions

View File

@@ -131,4 +131,9 @@ public interface DistributionSetRepository
* @return number of found {@link DistributionSet}s
*/
long countByNameAndVersion(String name, String version);
@Override
// Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477
@Query("SELECT d FROM JpaDistributionSet d WHERE d.id IN ?1")
List<JpaDistributionSet> findAll(Iterable<Long> ids);
}

View File

@@ -896,4 +896,9 @@ public class JpaDistributionSetManagement implements DistributionSetManagement {
return distributionSetRepository.countByTypeId(typeId);
}
@Override
public List<DistributionSet> findDistributionSetAllById(final Collection<Long> ids) {
return Collections.unmodifiableList(distributionSetRepository.findAll(ids));
}
}

View File

@@ -22,7 +22,6 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Order;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.validation.constraints.NotNull;
@@ -51,7 +50,6 @@ import org.eclipse.hawkbit.repository.jpa.specifications.SpecificationsBuilder;
import org.eclipse.hawkbit.repository.jpa.specifications.TargetSpecifications;
import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetFilterQuery;
import org.eclipse.hawkbit.repository.model.TargetIdName;
import org.eclipse.hawkbit.repository.model.TargetTag;
import org.eclipse.hawkbit.repository.model.TargetTagAssignmentResult;
import org.eclipse.hawkbit.repository.model.TargetUpdateStatus;
@@ -65,8 +63,6 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.SliceImpl;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.transaction.annotation.Isolation;
@@ -508,70 +504,6 @@ public class JpaTargetManagement implements TargetManagement {
return targetRepository.countByTargetInfoInstalledDistributionSetId(distId);
}
@Override
public List<TargetIdName> findAllTargetIdsByFilters(final Pageable pageRequest,
final Collection<TargetUpdateStatus> filterByStatus, final Boolean overdueState,
final String filterBySearchText, final Long installedOrAssignedDistributionSetId,
final Boolean selectTargetWithNoTag, final String... filterByTagNames) {
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
final CriteriaQuery<Object[]> query = cb.createQuery(Object[].class);
final Root<JpaTarget> targetRoot = query.from(JpaTarget.class);
List<Object[]> resultList;
String sortProperty = JpaTarget_.id.getName();
if (pageRequest.getSort() != null && pageRequest.getSort().iterator().hasNext()) {
sortProperty = pageRequest.getSort().iterator().next().getProperty();
}
final CriteriaQuery<Object[]> multiselect = query.multiselect(targetRoot.get(JpaTarget_.id),
targetRoot.get(JpaTarget_.controllerId), targetRoot.get(JpaTarget_.name), targetRoot.get(sortProperty));
final Predicate[] specificationsForMultiSelect = specificationsToPredicate(
buildSpecificationList(new FilterParams(installedOrAssignedDistributionSetId, filterByStatus,
overdueState, filterBySearchText, selectTargetWithNoTag, filterByTagNames), false),
targetRoot, multiselect, cb);
// if we have some predicates then add it to the where clause of the
// multiselect
if (specificationsForMultiSelect.length > 0) {
multiselect.where(specificationsForMultiSelect);
}
resultList = getTargetIdNameResultSet(pageRequest, cb, targetRoot, multiselect);
return resultList.parallelStream().map(o -> new TargetIdName((long) o[0], o[1].toString(), o[2].toString()))
.collect(Collectors.toList());
}
@Override
public List<TargetIdName> findAllTargetIdsByTargetFilterQuery(final Pageable pageRequest,
final String targetFilterQuery) {
final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
final CriteriaQuery<Object[]> query = cb.createQuery(Object[].class);
final Root<JpaTarget> targetRoot = query.from(JpaTarget.class);
String sortProperty = JpaTarget_.id.getName();
if (pageRequest.getSort() != null && pageRequest.getSort().iterator().hasNext()) {
sortProperty = pageRequest.getSort().iterator().next().getProperty();
}
final CriteriaQuery<Object[]> multiselect = query.multiselect(targetRoot.get(JpaTarget_.id),
targetRoot.get(JpaTarget_.controllerId), targetRoot.get(JpaTarget_.name), targetRoot.get(sortProperty));
final Specification<JpaTarget> spec = RSQLUtility.parse(targetFilterQuery, TargetFields.class,
virtualPropertyReplacer);
final Predicate[] specificationsForMultiSelect = specificationsToPredicate(Lists.newArrayList(spec), targetRoot,
multiselect, cb);
// if we have some predicates then add it to the where clause of the
// multiselect
if (specificationsForMultiSelect.length > 0) {
multiselect.where(specificationsForMultiSelect);
}
final List<Object[]> resultList = getTargetIdNameResultSet(pageRequest, cb, targetRoot, multiselect);
return resultList.parallelStream().map(o -> new TargetIdName((long) o[0], o[1].toString(), o[2].toString()))
.collect(Collectors.toList());
}
@Override
public Page<Target> findAllTargetsByTargetFilterQueryAndNonDS(@NotNull final Pageable pageRequest,
final Long distributionSetId, @NotNull final String targetFilterQuery) {
@@ -686,26 +618,14 @@ public class JpaTargetManagement implements TargetManagement {
});
}
private List<Object[]> getTargetIdNameResultSet(final Pageable pageRequest, final CriteriaBuilder cb,
final Root<JpaTarget> targetRoot, final CriteriaQuery<Object[]> multiselect) {
List<Object[]> resultList;
if (pageRequest.getSort() != null) {
final List<Order> orders = new ArrayList<>();
final Sort sort = pageRequest.getSort();
for (final Sort.Order sortOrder : sort) {
if (sortOrder.getDirection() == Direction.ASC) {
orders.add(cb.asc(targetRoot.get(sortOrder.getProperty())));
} else {
orders.add(cb.desc(targetRoot.get(sortOrder.getProperty())));
}
}
multiselect.orderBy(orders);
resultList = entityManager.createQuery(multiselect).setFirstResult(pageRequest.getOffset())
.setMaxResults(pageRequest.getPageSize()).getResultList();
} else {
resultList = entityManager.createQuery(multiselect).getResultList();
}
return resultList;
@Override
public Target findTargetById(final Long id) {
return targetRepository.findOne(id);
}
@Override
public List<Target> findTargetAllById(final Collection<Long> ids) {
return Collections.unmodifiableList(targetRepository.findAll(ids));
}
}