
com.hp.autonomy.searchcomponents.idol.search.fields.FieldsParserImpl Maven / Gradle / Ivy
/*
* Copyright 2015 Hewlett-Packard Development Company, L.P.
* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
*/
package com.hp.autonomy.searchcomponents.idol.search.fields;
import com.hp.autonomy.frontend.configuration.ConfigService;
import com.hp.autonomy.searchcomponents.core.config.FieldInfo;
import com.hp.autonomy.searchcomponents.core.config.FieldType;
import com.hp.autonomy.searchcomponents.core.config.FieldsInfo;
import com.hp.autonomy.searchcomponents.core.search.PromotionCategory;
import com.hp.autonomy.searchcomponents.idol.configuration.IdolSearchCapable;
import com.hp.autonomy.searchcomponents.idol.search.IdolSearchResult;
import com.hp.autonomy.types.idol.DocContent;
import com.hp.autonomy.types.idol.Hit;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class FieldsParserImpl implements FieldsParser {
private final ConfigService extends IdolSearchCapable> configService;
@Autowired
public FieldsParserImpl(final ConfigService extends IdolSearchCapable> configService) {
this.configService = configService;
}
@Override
public void parseDocumentFields(final Hit hit, final IdolSearchResult.Builder searchResultBuilder) {
final FieldsInfo fieldsInfo = configService.getConfig().getFieldsInfo();
final Map> fieldConfig = fieldsInfo.getFieldConfigByName();
final DocContent content = hit.getContent();
Map> fieldMap = Collections.emptyMap();
String qmsId = null;
PromotionCategory promotionCategory = PromotionCategory.NONE;
if (content != null) {
final Element docContent = (Element) content.getContent().get(0);
if (docContent.hasChildNodes()) {
final NodeList childNodes = docContent.getChildNodes();
fieldMap = new HashMap<>(childNodes.getLength());
parseAllFields(fieldConfig, childNodes, fieldMap, docContent.getNodeName());
for (final FieldInfo> fieldInfo : fieldMap.values()) {
//noinspection SuspiciousMethodCalls
fieldInfo.getNames().removeAll(Collections.singleton(null));
//noinspection SuspiciousMethodCalls
fieldInfo.getValues().removeAll(Collections.singleton(null));
}
qmsId = parseField(docContent, IdolDocumentFieldsService.QMS_ID_FIELD_INFO, String.class);
promotionCategory = determinePromotionCategory(docContent, hit.getPromotionname(), hit.getDatabase());
}
}
searchResultBuilder
.setFieldMap(fieldMap)
.setQmsId(qmsId)
.setPromotionCategory(promotionCategory);
}
private void parseAllFields(final Map> fieldConfig, final NodeList childNodes, final Map> fieldMap, final String name) {
for (int i = 0; i < childNodes.getLength(); i++) {
final Node node = childNodes.item(i);
if (node instanceof Text) {
final String stringValue = node.getNodeValue();
if (StringUtils.isNotBlank(stringValue)) {
final FieldInfo> fieldInfo = getFieldInfo(fieldConfig, name);
final String id = fieldInfo.getId();
final FieldType fieldType = fieldInfo.getType();
final Object value = fieldType.parseValue(fieldType.getType(), stringValue);
if (fieldMap.containsKey(id)) {
final List names = fieldInfo.getNames();
//noinspection unchecked
final FieldInfo
© 2015 - 2025 Weber Informatics LLC | Privacy Policy