package com.constellio.model.entities.records;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import com.constellio.model.entities.Language;
public class ParsedContent {
private String parsedContent;
private String language;
private String mimeType;
private Map<String, String> normalizedPropertyNames;
private Map<String, Object> properties;
private Map<String, List<String>> styles;
private long length;
public ParsedContent(String parsedContent, String language, String mimeType, long length, Map<String, Object> properties,
Map<String, List<String>> styles) {
this.parsedContent = parsedContent;
this.language = language;
this.mimeType = mimeType;
this.length = length;
this.properties = Collections.unmodifiableMap(properties);
this.normalizedPropertyNames = normalizePropertyNames(properties);
this.styles = Collections.unmodifiableMap(styles);
}
private Map<String, String> normalizePropertyNames(Map<String, Object> properties) {
Map<String, String> normalizedProperties = new HashMap<>();
for (String property : properties.keySet()) {
normalizedProperties.put(normalize(property), property);
}
return normalizedProperties;
}
private String normalize(String property) {
return property.toLowerCase().replace("list:", "").replace("dc:", "");
}
public static ParsedContent unparsable(String mimeType, long length) {
Map<String, Object> emptyPropertiesMap = Collections.emptyMap();
Map<String, List<String>> emptyStylesMap = Collections.emptyMap();
return new ParsedContent("", Language.UNKNOWN.getCode(), mimeType, length, emptyPropertiesMap, emptyStylesMap);
}
public String getParsedContent() {
return parsedContent;
}
public String getLanguage() {
return language;
}
public String getMimeType() {
return mimeType;
}
public Map<String, Object> getProperties() {
return properties;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
public Map<String, List<String>> getStyles() {
return styles;
}
public long getLength() {
return length;
}
public void setLength(long length) {
this.length = length;
}
public Object getNormalizedProperty(String normalizedProperty) {
String property = normalizedPropertyNames.get(normalizedProperty.toLowerCase());
return property == null ? null : properties.get(property);
}
public String getMimetypeWithoutCharset() {
if (mimeType != null && mimeType.indexOf(";") != -1) {
return mimeType.substring(0, mimeType.indexOf(";"));
} else {
return mimeType;
}
}
}