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;
}
}