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.
autoflow-server-mgmt/src/main/java/kr/re/etri/autoflow/specification/KubeflowRunSpecification.java

147 lines
5.4 KiB

//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;
};
}
}