|
|
@@ -0,0 +1,71 @@
|
|
|
+package nju.seec.helper.logic.convert;
|
|
|
+
|
|
|
+import com.google.common.collect.ImmutableMap;
|
|
|
+import lombok.experimental.UtilityClass;
|
|
|
+import nju.seec.helper.data.entity.Item;
|
|
|
+import nju.seec.helper.data.entity.Page;
|
|
|
+import nju.seec.helper.data.entity.Quiz;
|
|
|
+import nju.seec.helper.data.entity.Slide;
|
|
|
+import nju.seec.helper.logic.vo.*;
|
|
|
+
|
|
|
+import java.util.Comparator;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author cst
|
|
|
+ */
|
|
|
+@UtilityClass
|
|
|
+public class EntityConvertFactory {
|
|
|
+ @SuppressWarnings("rawtypes")
|
|
|
+ private final static Map<Pair, EntityConverter> MAP = new ImmutableMap.Builder<Pair, EntityConverter>()
|
|
|
+ .put(Pair.of(Slide.class, SlideVO.class), (EntityConverter<Slide, SlideVO>) slide -> SlideVO.builder()
|
|
|
+ .id(slide.getId())
|
|
|
+ .courseId(slide.getCourseId())
|
|
|
+ .frontendId(slide.getFrontendId())
|
|
|
+ .name(slide.getName())
|
|
|
+ .state(slide.getState())
|
|
|
+ .createTime(slide.getCreateTime())
|
|
|
+ .updateTime(slide.getUpdateTime())
|
|
|
+ .pages(slide.getPages().stream()
|
|
|
+ .sorted(Comparator.comparingInt(Page::getNumber))
|
|
|
+ .map(page -> PageVO.builder()
|
|
|
+ .id(page.getId())
|
|
|
+ .frontendId(page.getFrontendId())
|
|
|
+ .items(page.getItems().stream()
|
|
|
+ .sorted(Comparator.comparingInt(Item::getNumber))
|
|
|
+ .map(item -> ItemVO.builder()
|
|
|
+ .id(item.getId())
|
|
|
+ .frontendId(item.getFrontendId())
|
|
|
+ .content(item.getContent())
|
|
|
+ .build())
|
|
|
+ .collect(Collectors.toList()))
|
|
|
+ .quizzes(page.getQuizzes().stream()
|
|
|
+ .sorted(Comparator.comparingInt(Quiz::getNumber))
|
|
|
+ .map(quiz -> QuizVO.builder()
|
|
|
+ .id(quiz.getId())
|
|
|
+ .systemId(quiz.getSystemId())
|
|
|
+ .quizType(quiz.getType())
|
|
|
+ .content(quiz.getContent())
|
|
|
+ .build())
|
|
|
+ .collect(Collectors.toList()))
|
|
|
+ .build())
|
|
|
+ .collect(Collectors.toList()))
|
|
|
+ .build())
|
|
|
+ .put(Pair.of(Slide.class, SlideOutlineVO.class), (EntityConverter<Slide, SlideOutlineVO>) slide -> SlideOutlineVO.builder()
|
|
|
+ .id(slide.getId())
|
|
|
+ .courseId(slide.getCourseId())
|
|
|
+ .frontendId(slide.getFrontendId())
|
|
|
+ .name(slide.getName())
|
|
|
+ .state(slide.getState())
|
|
|
+ .createTime(slide.getCreateTime())
|
|
|
+ .updateTime(slide.getUpdateTime())
|
|
|
+ .build())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ public <Entity, VO> VO convert(Entity entity, Class<VO> voClass) {
|
|
|
+ return (VO) MAP.get(Pair.of(entity.getClass(), voClass))
|
|
|
+ .convert(entity);
|
|
|
+ }
|
|
|
+}
|