group.rober.dataform.service.JsonDBTransService Maven / Gradle / Ivy
//package group.rober.dataform.service;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.fasterxml.jackson.databind.ObjectReader;
//import group.rober.base.dict.model.DictEntry;
//import group.rober.base.dict.service.DictService;
//import group.rober.dataform.autoconfigure.DataFormProperties;
//import group.rober.dataform.model.DataForm;
//import group.rober.dataform.service.impl.DataFormAdminServiceDBImpl;
//import group.rober.runtime.kit.JSONKit;
//import org.apache.commons.io.FileUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.io.*;
//import java.nio.file.*;
//import java.nio.file.attribute.BasicFileAttributes;
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.EnumSet;
//import java.util.List;
//
//@Service
//public class JsonDBTransService {
//
// private final static Logger LOGGER = LoggerFactory.getLogger(JsonDBTransService.class);
//
// @Autowired
// DataFormProperties dataFormProperties;
//
// @Autowired
// DataFormAdminServiceDBImpl dataFormAdminService;
//
// @Autowired
// DictService dictService;
//
// @Autowired
// ObjectMapper objectMapper;
//
// private volatile Dirs exportDirs;
// private volatile Dirs importDirs;
//
// private final static String DEFAULT_JSON_PATH = "src/main/resources/dbjson";
//
// private Path getExportDir(String contextPath) {
// String path = dataFormProperties.getExportDir();
// if (null != path && !path.isEmpty()) return Paths.get(path);
// return Paths.get(System.getProperty("user.dir"), contextPath, DEFAULT_JSON_PATH);
// }
//
// private Path getImportDir(String contextPath) {
// return getExportDir(contextPath);
// }
//
// public void export2Json(String contextPath) throws IOException {
// Path path = getExportDir(contextPath);
// if (null == exportDirs)
// exportDirs = prepareExportDir(path);
// else
// prepareExportDir(path);
//
// List dataForms = dataFormAdminService.getCompleteDataForms();
// if (null != dataForms && !dataForms.isEmpty()) {
// String dfDir = exportDirs.dataformDir.toString();
// dataForms.forEach(dataForm -> {
// if (null == dataForm.getId() || dataForm.getId().isEmpty())
// return;
// try {
// Path dfPath = Files.createFile(Paths.get(dfDir, dataForm.getId() + ".json"));
// writeJsonFile(dfPath, dataForm);
// } catch (IOException ex) {
// LOGGER.warn(ex.getMessage());
// }
// });
// }
//
// List dictEntries = dictService.getDictList();
// if (null != dictEntries && !dictEntries.isEmpty()) {
// String dicDir = exportDirs.dictionaryDir.toString();
// dictEntries.forEach(dictEntry -> {
// if (null == dictEntry.getCode() || dictEntry.getCode().isEmpty())
// return;
// try {
// Path dicPath = Files.createFile(Paths.get(dicDir, dictEntry.getCode() + ".json"));
// writeJsonFile(dicPath, dictEntry);
// } catch (IOException ex) {
// LOGGER.warn(ex.getMessage());
// }
// });
// }
// }
//
// private void writeJsonFile(Path file, Object obj) throws IOException{
// try(OutputStream outputStream = new BufferedOutputStream(
// Files.newOutputStream(file, StandardOpenOption.CREATE))) {
// objectMapper.writer().writeValue(outputStream, obj);
// outputStream.close();
// }
// }
//
// private Path ensureDirExist(Path path) throws IOException{
// try {
// return Files.createDirectories(path);
// } catch (FileAlreadyExistsException ex) {
// LOGGER.info(ex.getMessage());
// return path;
// }
// }
//
// private Dirs prepareExportDir(Path path) throws IOException{
// if (Files.notExists(path)) {
// path = ensureDirExist(path);
// Path dicDir = ensureDirExist(Paths.get(path.toString(), dataFormProperties.getDictionaryDir()));
// Path dataformDir = ensureDirExist(Paths.get(path.toString(), dataFormProperties.getDataformDir()));
// return new Dirs(dicDir, dataformDir);
// } else {
// Path dicDir = Paths.get(path.toString(), dataFormProperties.getDictionaryDir());
// Path dataformDir = Paths.get(path.toString(), dataFormProperties.getDataformDir());
// if (Files.notExists(dicDir))
// ensureDirExist(dicDir);
// else
// FileUtils.cleanDirectory(dicDir.toFile());
// if (Files.notExists(dataformDir))
// ensureDirExist(dataformDir);
// else
// FileUtils.cleanDirectory(dataformDir.toFile());
//
// return new Dirs(dicDir, dataformDir);
// }
// }
//
// @Transactional
// public void import2DB(String contextPath) throws IOException{
// if (null == importDirs) {
// Path path = getImportDir(contextPath);
// importDirs = new Dirs(Paths.get(path.toString(), dataFormProperties.getDictionaryDir()),
// Paths.get(path.toString(), dataFormProperties.getDataformDir()));
// }
// JsonFileVisitor dataFormJsonFileVisitor = new JsonFileVisitor<>(objectMapper.reader(),
// DataForm.class, Collections.synchronizedList(
// new ArrayList<>((int)Files.list(importDirs.dataformDir).count())));
// Files.walkFileTree(importDirs.dataformDir, EnumSet.noneOf(FileVisitOption.class), 1, dataFormJsonFileVisitor);
// if (null != dataFormJsonFileVisitor.objects && !dataFormJsonFileVisitor.objects.isEmpty()) {
// dataFormAdminService.deleteAll();
// dataFormJsonFileVisitor.objects.forEach(dataForm -> {
// try {
// dataFormAdminService.saveDataForm(dataForm, null);
// } catch (Exception ex) {
// System.err.println(JSONKit.toJsonString(dataForm));
// throw ex;
// }
// });
// }
//
// JsonFileVisitor dictEntryJsonFileVisitor = new JsonFileVisitor<>(objectMapper.reader(),
// DictEntry.class, Collections.synchronizedList(
// new ArrayList<>((int)Files.list(importDirs.dictionaryDir).count())));
// Files.walkFileTree(importDirs.dictionaryDir, EnumSet.noneOf(FileVisitOption.class), 1, dictEntryJsonFileVisitor);
// if (null != dictEntryJsonFileVisitor.objects && !dictEntryJsonFileVisitor.objects.isEmpty()) {
// dictService.deleteAll();
// dictEntryJsonFileVisitor.objects.forEach(dictEntry -> dictService.save(dictEntry));
// }
// }
//
// private static class JsonFileVisitor implements FileVisitor {
//
// protected final ObjectReader objectReader;
// protected final List objects;
//
// JsonFileVisitor(ObjectReader objectReader, Class tClass, List objects) {
// this.objectReader = objectReader.forType(tClass);
// this.objects = objects;
// }
//
// @Override
// public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
// return FileVisitResult.CONTINUE;
// }
//
// @Override
// public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
// String filePath = file.toString();
// if (!filePath.endsWith(".json")) return FileVisitResult.CONTINUE;
// try(InputStream inputStream = new BufferedInputStream(Files.newInputStream(file, StandardOpenOption.READ))) {
// objects.add(objectReader.readValue(inputStream));
// return FileVisitResult.CONTINUE;
// }
// }
//
// @Override
// public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
// LOGGER.warn(exc.getMessage());
// return FileVisitResult.CONTINUE;
// }
//
// @Override
// public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
// return FileVisitResult.CONTINUE;
// }
// }
//
//
//
// private static class Dirs {
// public final Path dictionaryDir;
// public final Path dataformDir;
//
// public Dirs(Path dictionaryDir, Path dataformDir) {
// this.dictionaryDir = dictionaryDir;
// this.dataformDir = dataformDir;
// }
// }
//
//}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy