package io.lumify.dbpedia.mapreduce.model; import io.lumify.core.exception.LumifyException; import java.util.regex.Matcher; import java.util.regex.Pattern; public abstract class Value { private static final Pattern STRING_VALUE_PATTERN = Pattern.compile("^\"(.*?)\"@(.*)$"); private static final Pattern LINK_VALUE_PATTERN = Pattern.compile("^<(.*?)>$"); private static final Pattern OTHER_VALUE_PATTERN = Pattern.compile("^\"(.*?)\"\\^\\^<(.*)>$"); public abstract Object getValue(); public abstract String getValueString(); public static Value parse(String valueRaw) { Matcher m = STRING_VALUE_PATTERN.matcher(valueRaw); if (m.matches()) { return new StringValue(m.group(1), m.group(2)); } m = LINK_VALUE_PATTERN.matcher(valueRaw); if (m.matches()) { return new LinkValue(m.group(1)); } m = OTHER_VALUE_PATTERN.matcher(valueRaw); if (m.matches()) { return new OtherValue(m.group(1), m.group(2)); } throw new LumifyException("Could not parse value: " + valueRaw); } }