All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.lyncode.xoai.services.impl.MetadataSearchImpl Maven / Gradle / Ivy

/**
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.lyncode.xoai.services.impl;

import com.lyncode.xoai.model.xoai.Element;
import com.lyncode.xoai.model.xoai.Field;
import com.lyncode.xoai.model.xoai.XOAIMetadata;
import com.lyncode.xoai.services.api.MetadataSearch;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.apache.commons.lang3.StringUtils.join;

public class MetadataSearchImpl implements MetadataSearch {
    private static final String DEFAULT_FIELD = "value";
    private Map> index = new HashMap>();

    public MetadataSearchImpl (XOAIMetadata metadata) {
        for (Element element : metadata.getElements()) {
            consume(new ArrayList(), element);
        }
    }

    private void consume(List newNames, Element element) {
        List names = new ArrayList(newNames);
        names.add(element.getName());

        if (!element.getFields().isEmpty()) {
            if (element.getFields().size() == 1) {
                Field field = element.getFields().get(0);
                if (field.getName() != null)
                    add(join(names, ".")+":"+ field.getName(), field.getValue());
                add(join(names, "."), field.getValue());
            } else {
                for (Field field : element.getFields()) {
                    if (field.getName() != null) {
                        if (field.getName().equals(DEFAULT_FIELD))
                            add(join(names, "."), field.getValue());

                        add(join(names, ".") + ":" + field.getName(), field.getValue());
                    } else {
                        add(join(names, "."), field.getValue());
                    }
                }
            }
        }

        if (!element.getElements().isEmpty()) {
            for (Element subElement : element.getElements()) {
                consume(names, subElement);
            }
        }
    }

    private void add(String name, String value) {
        if (!index.containsKey(name))
            index.put(name, new ArrayList());

        index.get(name).add(value);
    }

    @Override
    public String findOne(String xoaiPath) {
        List strings = index.get(xoaiPath);
        if (strings != null && !strings.isEmpty())
            return strings.get(0);
        return null;
    }

    @Override
    public List findAll(String xoaiPath) {
        return index.get(xoaiPath);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy