package eu.kielczewski.akanke.common.service.document; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @Component class DocumentPropertyExtractor { private static final Pattern PATTERN_PROPERTY_BLOCK = Pattern.compile("[^\\s]*<!--(.*?)-->", Pattern.DOTALL); private static final Pattern PATTERN_PROPERTY = Pattern.compile("\\s*([a-zA-Z0-9_]+)\\s*[=|:]\\s*(.+)\\s*"); private static final Logger LOGGER = LoggerFactory.getLogger(DocumentPropertyExtractor.class); public Map<String, String> fromContents(String content) { Matcher m = PATTERN_PROPERTY_BLOCK.matcher(content); Map<String, String> props = new HashMap<>(); while (m.find()) { String commentBlock = m.group(1); LOGGER.trace("Extracting properties from comment block: {}", commentBlock); props.putAll(extract(commentBlock)); } LOGGER.debug("Extracted properties={}", props); return props; } private Map<String, String> extract(String src) { Matcher m = PATTERN_PROPERTY.matcher(src); Map<String, String> props = new HashMap<>(); while (m.find()) { props.put(m.group(1), m.group(2)); } return props; } }