file-transformer-docx/core/src/main/java/org/opencdmp/filetransformer/docx/service/pid/PidServiceImpl.java

51 lines
1.7 KiB
Java

package org.opencdmp.filetransformer.docx.service.pid;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.opencdmp.filetransformer.docx.service.wordfiletransformer.WordFileTransformerServiceProperties;
import org.opencdmp.filetransformer.docx.model.PidLink;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import java.io.IOException;
import java.util.List;
@Component
public class PidServiceImpl implements PidService {
private static final Logger logger = LoggerFactory.getLogger(PidServiceImpl.class);
private final WordFileTransformerServiceProperties properties;
private final ObjectMapper objectMapper = new ObjectMapper();
private List<PidLink> pidLinks = null;
public PidServiceImpl(WordFileTransformerServiceProperties properties) {
this.properties = properties;
}
@Override
public List<PidLink> loadPidLinks() {
if (pidLinks != null) return pidLinks;
try {
pidLinks = objectMapper.readValue(ResourceUtils.getFile(this.properties.getPidTemplate()), PidLinksWrapper.class).getPidLinks();
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
return pidLinks;
}
@Override
public PidLink getPid(String pidType) {
return this.loadPidLinks().stream().filter(pl -> pl.getPid().equals(pidType)).findFirst().orElse(null);
}
protected static class PidLinksWrapper {
private List<PidLink> pidLinks;
public List<PidLink> getPidLinks() {
return pidLinks;
}
public void setPidLinks(List<PidLink> pidLinks) {
this.pidLinks = pidLinks;
}
}
}