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

com.lyncode.xoai.dataprovider.model.InMemoryItem Maven / Gradle / Ivy

The newest version!
package com.lyncode.xoai.dataprovider.model;

import com.google.common.base.Function;
import com.lyncode.builder.ListBuilder;
import com.lyncode.xoai.model.oaipmh.About;
import com.lyncode.xoai.model.oaipmh.Metadata;
import com.lyncode.xoai.model.xoai.Element;
import com.lyncode.xoai.model.xoai.XOAIMetadata;

import java.util.*;

import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
import static org.apache.commons.lang3.RandomStringUtils.randomNumeric;

public class InMemoryItem implements Item {
    public static InMemoryItem item () {
        return new InMemoryItem();
    }

    private Map values = new HashMap();

    public static InMemoryItem randomItem() {
        return new InMemoryItem()
                .with("identifier", randomAlphabetic(10))
                .with("datestamp", new Date())
                .with("sets", new ListBuilder().add(randomAlphabetic(3)).build())
                .with("deleted", Integer.parseInt(randomNumeric(1)) > 5);
    }

    public InMemoryItem with(String name, Object value) {
        values.put(name, value);
        return this;
    }

    public InMemoryItem withSet(String name) {
        ((List) values.get("sets")).add(name);
        return this;
    }

    @Override
    public List getAbout() {
        return new ArrayList();
    }

    @Override
    public Metadata getMetadata() {
        return new Metadata(toMetadata());
    }

    private XOAIMetadata toMetadata() {
        XOAIMetadata builder = new XOAIMetadata();
        for (String key : values.keySet()) {
            Element elementBuilder = new Element(key);
            Object value = values.get(key);
            if (value instanceof String)
                elementBuilder.withField(key, (String) value);
            else if (value instanceof Date)
                elementBuilder.withField(key, ((Date) value).toString());
            else if (value instanceof List) {
                List obj = (List) value;
                int i = 1;
                for (String e : obj)
                    elementBuilder.withField(key + (i++), e);
            }
            builder.withElement(elementBuilder);
        }
        return builder;
    }

    @Override
    public String getIdentifier() {
        return (String) values.get("identifier");
    }

    @Override
    public Date getDatestamp() {
        return (Date) values.get("datestamp");
    }

    @Override
    public List getSets() {
        List list = ((List) values.get("sets"));
        return new ListBuilder().add(list.toArray(new String[list.size()])).build(new Function() {
            @Override
            public com.lyncode.xoai.dataprovider.model.Set apply(String elem) {
                return new com.lyncode.xoai.dataprovider.model.Set(elem);
            }
        });
    }

    @Override
    public boolean isDeleted() {
        return (Boolean) values.get("deleted");
    }

    public InMemoryItem withDefaults() {
        this
                .with("identifier", randomAlphabetic(10))
                .with("datestamp", new Date())
                .with("sets", new ListBuilder().add(randomAlphabetic(3)).build())
                .with("deleted", Integer.parseInt(randomNumeric(1)) > 5);
        return this;
    }

    public InMemoryItem withIdentifier(String identifier) {
        this.with("identifier", identifier);
        return this;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy