Skip to content

Commit

Permalink
Merge pull request #92 from atmire/dspace3-lyncode-fix
Browse files Browse the repository at this point in the history
XOAI (Moved configs and bug fix)
  • Loading branch information
mdiggory committed Oct 6, 2012
2 parents 0bd31c0 + 5152a9e commit ef165a6
Show file tree
Hide file tree
Showing 33 changed files with 171 additions and 175 deletions.
7 changes: 6 additions & 1 deletion dspace-oai/pom.xml
Expand Up @@ -75,7 +75,7 @@
<dependency>
<groupId>com.lyncode</groupId>
<artifactId>xoai</artifactId>
<version>2.2.0</version>
<version>2.2.5</version>
</dependency>
<dependency>
<groupId>org.dspace</groupId>
Expand All @@ -101,6 +101,11 @@
<artifactId>slf4j-api</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>13.0</version>
</dependency>
</dependencies>


Expand Down
Expand Up @@ -60,12 +60,15 @@ public void init()
}
catch (com.lyncode.xoai.dataprovider.exceptions.ConfigurationException e)
{
System.out.println("Unable to configure XOAI (OAI 2.0 Core)");
System.out.println("Unable to configure XOAI (XOAI 2.0 Core)");
e.printStackTrace();
}
catch (SolrServerException e)
{
System.out.println("Unable to configure XOAI (OAI 2.0 Core)");
System.out.println("Unable to connect to Solr Server");
e.printStackTrace();
} catch (Exception e) {
System.out.println("Unable to initialize XOAI.");
e.printStackTrace();
}
}
Expand Down
Expand Up @@ -9,7 +9,6 @@

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
Expand All @@ -19,14 +18,18 @@
import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.Item;
import org.dspace.xoai.util.MetadataNamePredicate;
import org.dspace.xoai.util.XOAICacheManager;
import org.dspace.xoai.util.XOAIDatabaseManager;

import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.lyncode.xoai.dataprovider.core.ItemMetadata;
import com.lyncode.xoai.dataprovider.core.ReferenceSet;
import com.lyncode.xoai.dataprovider.data.AbstractAbout;
import com.lyncode.xoai.dataprovider.exceptions.MetadataBindException;
import com.lyncode.xoai.dataprovider.xml.xoai.Element;
import com.lyncode.xoai.dataprovider.xml.xoai.Element.Field;

/**
*
Expand All @@ -35,7 +38,9 @@
public class DSpaceDatabaseItem extends DSpaceItem
{
private static Logger log = LogManager.getLogger(DSpaceDatabaseItem.class);




private static List<ReferenceSet> getSets(Item item)
{
List<ReferenceSet> sets = new ArrayList<ReferenceSet>();
Expand Down Expand Up @@ -127,80 +132,6 @@ public ItemMetadata getMetadata()
return metadata;
}

private List<String> getMetadata(List<Element> elems, String[] parts)
{
List<String> list = new ArrayList<String>();
if (parts.length > 1)
{
if (parts[0].equals("*"))
{
for (Element e : elems)
{
if (e.getElement() != null)
list.addAll(this.getMetadata(e.getElement(),
Arrays.copyOfRange(parts, 1, parts.length)));
}
}
else
{
Element e = getElement(elems, parts[0]);
if (e != null)
list.addAll(this.getMetadata(e.getElement(),
Arrays.copyOfRange(parts, 1, parts.length)));
}
}
else if (parts.length == 1)
{
// Here we could have reached our target (named fields)
for (Element e : elems)
{
for (Element.Field f : e.getField())
{
if (parts[0].equals("*"))
list.add(f.getValue());
else if (parts[0].equals(f.getName()))
list.add(f.getValue());
}
}

if (parts[0].equals("*"))
{
for (Element e : elems)
{
if (e.getElement() != null)
list.addAll(this.getMetadata(e.getElement(),
Arrays.copyOfRange(parts, 1, parts.length)));
}
}
else
{
Element e = getElement(elems, parts[0]);
if (e != null)
list.addAll(this.getMetadata(e.getElement(),
Arrays.copyOfRange(parts, 1, parts.length)));
}
}
else
{
// Here we have reached our target (unnamed fields)
for (Element e : elems)
{
for (Element.Field f : e.getField())
{
if (f.getName() == null || f.getName().equals(""))
list.add(f.getValue());
}
}
}
return list;
}

public List<String> getMetadata(String field)
{
String[] parts = field.split(Pattern.quote("."));
return getMetadata(this.getMetadata().getMetadata().getElement(), parts);
}

public Item getItem()
{
return item;
Expand Down
73 changes: 65 additions & 8 deletions dspace-oai/src/main/java/org/dspace/xoai/data/DSpaceItem.java
Expand Up @@ -9,37 +9,94 @@

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import org.dspace.core.ConfigurationManager;
import org.dspace.xoai.util.MetadataNamePredicate;

import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import com.lyncode.xoai.dataprovider.data.AbstractAbout;
import com.lyncode.xoai.dataprovider.data.AbstractItem;
import com.lyncode.xoai.dataprovider.xml.xoai.Element;
import com.lyncode.xoai.dataprovider.xml.xoai.Element.Field;

/**
*
* @author Lyncode Development Team <dspace@lyncode.com>
*/
public abstract class DSpaceItem extends AbstractItem
{
private static List<Element> filter (List<Element> input, String name) {
return Lists.newArrayList(Collections2.filter(input, new MetadataNamePredicate(name)));
}

private static List<Element> flat (List<Element> input) {
List<Element> elems = new ArrayList<Element>();
for (Element e : input) {
if (e.getElement() != null) {
elems.addAll(e.getElement());
}
}
return elems;
}

private static List<String> values (List<Element> input) {
List<String> elems = new ArrayList<String>();
for (Element e : input)
if (e.getElement() != null && !e.getElement().isEmpty() && e.getElement().get(0).getField() != null)
for (Field f : e.getElement().get(0).getField())
if (f.getName() != null && f.getName().equals("value"))
elems.add(f.getValue());
return elems;
}


private List<String> getMetadata (String schema, String element) {
List<Element> metadata = this.getMetadata().getMetadata().getElement();
return values(filter(flat(filter(metadata, schema)), element));
}

private List<String> getMetadata (String schema, String element, String qualifier) {
List<Element> metadata = this.getMetadata().getMetadata().getElement();
return values(filter(flat(filter(flat(filter(metadata, schema)), element)), qualifier));
}


private static String _prefix = null;
public static String buildIdentifier (String handle) {
if (_prefix == null)
{
_prefix = ConfigurationManager.getProperty("oai",
"identifier.prefix");
}
return "oai:" + _prefix + ":" + handle;
}
public static String parseHandle (String oaiIdentifier) {
String[] parts = oaiIdentifier.split(Pattern.quote(":"));
if (parts.length > 0) return parts[parts.length - 1];
else return null; // Contract
}

public List<String> getMetadata(String field)
{
String[] parts = field.split(Pattern.quote("."));
if (parts.length == 2) return this.getMetadata(parts[0], parts[1]);
else if (parts.length == 3) return this.getMetadata(parts[0], parts[1], parts[2]);
else return new ArrayList<String>();
}

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

protected abstract String getHandle ();

private String _prefix = null;

@Override
public String getIdentifier()
{
if (_prefix == null)
{
_prefix = ConfigurationManager.getProperty("oai",
"identifier.prefix");
}
return "oai:" + _prefix + ":" + this.getHandle();
return buildIdentifier(getHandle());
}
}
Expand Up @@ -153,7 +153,7 @@ private ListItemsResults getResult(String query, String countQuery, List<Object>
}

@Override
protected ListItemsResults getItems(List<Filter> filters, int offset,
public ListItemsResults getItems(List<Filter> filters, int offset,
int length)
{
List<Object> parameters = new ArrayList<Object>();
Expand Down Expand Up @@ -207,7 +207,7 @@ protected ListItemsResults getItems(List<Filter> filters, int offset,
}

@Override
protected ListItemIdentifiersResult getItemIdentifiers(
public ListItemIdentifiersResult getItemIdentifiers(
List<Filter> filters, int offset, int length)
{
List<Object> parameters = new ArrayList<Object>();
Expand Down

0 comments on commit ef165a6

Please sign in to comment.