You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
5.4 KiB
147 lines
5.4 KiB
|
9 months ago
|
//package kr.re.etri.autoflow.specification;
|
||
|
|
//
|
||
|
|
//import jakarta.annotation.PostConstruct;
|
||
|
|
//import jakarta.persistence.EntityManager;
|
||
|
|
//import jakarta.persistence.metamodel.Attribute;
|
||
|
|
//import jakarta.persistence.metamodel.EntityType;
|
||
|
|
//import jakarta.persistence.metamodel.Metamodel;
|
||
|
|
//import kr.re.etri.autoflow.entity.KubeflowRunEntity;
|
||
|
|
//import lombok.extern.slf4j.Slf4j;
|
||
|
|
//import org.springframework.data.jpa.domain.Specification;
|
||
|
|
//import org.springframework.stereotype.Component;
|
||
|
|
//
|
||
|
|
//import jakarta.persistence.criteria.Predicate;
|
||
|
|
//import java.util.Set;
|
||
|
|
//import java.util.stream.Collectors;
|
||
|
|
//
|
||
|
|
//@Slf4j
|
||
|
|
//@Component
|
||
|
|
//public class KubeflowRunSpecification {
|
||
|
|
//
|
||
|
|
// private final EntityManager entityManager;
|
||
|
|
// private Set<String> stringFields;
|
||
|
|
//
|
||
|
|
// public KubeflowRunSpecification(EntityManager entityManager) {
|
||
|
|
// this.entityManager = entityManager;
|
||
|
|
// }
|
||
|
|
//
|
||
|
|
// @PostConstruct
|
||
|
|
// public void init() {
|
||
|
|
// Metamodel metamodel = entityManager.getMetamodel();
|
||
|
|
// EntityType<KubeflowRunEntity> entityType = metamodel.entity(KubeflowRunEntity.class);
|
||
|
|
//
|
||
|
|
// stringFields = entityType.getAttributes().stream()
|
||
|
|
// .filter(attr -> attr.getJavaType().equals(String.class))
|
||
|
|
// .map(Attribute::getName)
|
||
|
|
// .collect(Collectors.toSet());
|
||
|
|
//
|
||
|
|
// log.info("KubeflowRunEntity string fields: {}", stringFields);
|
||
|
|
// }
|
||
|
|
//
|
||
|
|
// public Specification<KubeflowRunEntity> searchByConditions(
|
||
|
|
// String experimentId, String searchType, String keyword) {
|
||
|
|
//
|
||
|
|
// return (root, query, cb) -> {
|
||
|
|
// Predicate predicate = cb.conjunction();
|
||
|
|
//
|
||
|
|
// // experimentId는 항상 조건으로 추가
|
||
|
|
// predicate = cb.and(predicate,
|
||
|
|
// cb.equal(root.get("experimentId"), experimentId));
|
||
|
|
//
|
||
|
|
// if (keyword != null && !keyword.isEmpty()) {
|
||
|
|
// if (searchType == null || searchType.isEmpty() ||
|
||
|
|
// "전체".equalsIgnoreCase(searchType) || "all".equalsIgnoreCase(searchType)) {
|
||
|
|
//
|
||
|
|
// Predicate orPredicate = cb.disjunction();
|
||
|
|
// for (String field : stringFields) {
|
||
|
|
// orPredicate = cb.or(orPredicate,
|
||
|
|
// cb.like(cb.lower(root.get(field)), "%" + keyword.toLowerCase() + "%"));
|
||
|
|
// }
|
||
|
|
// predicate = cb.and(predicate, orPredicate);
|
||
|
|
//
|
||
|
|
// } else if (stringFields.contains(searchType)) {
|
||
|
|
// predicate = cb.and(predicate,
|
||
|
|
// cb.like(cb.lower(root.get(searchType)), "%" + keyword.toLowerCase() + "%"));
|
||
|
|
// }
|
||
|
|
// }
|
||
|
|
//
|
||
|
|
// return predicate;
|
||
|
|
// };
|
||
|
|
// }
|
||
|
|
//}
|
||
|
|
|
||
|
|
|
||
|
|
package kr.re.etri.autoflow.specification;
|
||
|
|
|
||
|
|
import jakarta.annotation.PostConstruct;
|
||
|
|
import jakarta.persistence.EntityManager;
|
||
|
|
import jakarta.persistence.metamodel.Attribute;
|
||
|
|
import jakarta.persistence.metamodel.EntityType;
|
||
|
|
import jakarta.persistence.metamodel.Metamodel;
|
||
|
|
import kr.re.etri.autoflow.entity.ProjectEntity;
|
||
|
|
import kr.re.etri.autoflow.entity.KubeflowRunEntity;
|
||
|
|
import lombok.extern.slf4j.Slf4j;
|
||
|
|
import org.springframework.data.jpa.domain.Specification;
|
||
|
|
import org.springframework.stereotype.Component;
|
||
|
|
|
||
|
|
import jakarta.persistence.criteria.Predicate;
|
||
|
|
import java.time.LocalDate;
|
||
|
|
import java.util.Set;
|
||
|
|
import java.util.stream.Collectors;
|
||
|
|
|
||
|
|
@Slf4j
|
||
|
|
@Component
|
||
|
|
public class KubeflowRunSpecification {
|
||
|
|
|
||
|
|
private final EntityManager entityManager;
|
||
|
|
|
||
|
|
private Set<String> stringFields;
|
||
|
|
|
||
|
|
public KubeflowRunSpecification(EntityManager entityManager) {
|
||
|
|
this.entityManager = entityManager;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 스프링 빈 초기화 후 실행
|
||
|
|
@PostConstruct
|
||
|
|
public void init() {
|
||
|
|
Metamodel metamodel = entityManager.getMetamodel();
|
||
|
|
EntityType<KubeflowRunEntity> entityType = metamodel.entity(KubeflowRunEntity.class);
|
||
|
|
|
||
|
|
// 문자열 타입 필드명만 추출
|
||
|
|
stringFields = entityType.getAttributes().stream()
|
||
|
|
.filter(attr -> attr.getJavaType().equals(String.class))
|
||
|
|
.map(Attribute::getName)
|
||
|
|
.collect(Collectors.toSet());
|
||
|
|
|
||
|
|
log.info("KubeflowRunEntity string fields: {}", stringFields);
|
||
|
|
}
|
||
|
|
|
||
|
|
public Specification<KubeflowRunEntity> searchByConditions(
|
||
|
|
String experimentId, String searchType, String keyword) {
|
||
|
|
|
||
|
|
return (root, query, cb) -> {
|
||
|
|
Predicate predicate = cb.conjunction();
|
||
|
|
|
||
|
|
predicate = cb.and(predicate, cb.equal(root.get("experimentId"), experimentId));
|
||
|
|
|
||
|
|
if (keyword != null && !keyword.isEmpty()) {
|
||
|
|
if (searchType == null || searchType.isEmpty() ||
|
||
|
|
"전체".equalsIgnoreCase(searchType) || "all".equalsIgnoreCase(searchType)) {
|
||
|
|
Predicate orPredicate = cb.disjunction();
|
||
|
|
for (String field : stringFields) {
|
||
|
|
orPredicate = cb.or(orPredicate,
|
||
|
|
cb.like(cb.lower(root.get(field)), "%" + keyword.toLowerCase() + "%"));
|
||
|
|
}
|
||
|
|
predicate = cb.and(predicate, orPredicate);
|
||
|
|
|
||
|
|
} else if (stringFields.contains(searchType)) {
|
||
|
|
predicate = cb.and(predicate,
|
||
|
|
cb.like(cb.lower(root.get(searchType)), "%" + keyword.toLowerCase() + "%"));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return predicate;
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|