/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.rest.common;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.MetadataFieldService;
import org.dspace.core.Context;
import javax.ws.rs.WebApplicationException;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Metadata schema representation
* @author Terry Brady, Georgetown University.
*/
@XmlRootElement(name = "schema")
public class MetadataSchema {
protected MetadataFieldService metadataFieldService = ContentServiceFactory.getInstance().getMetadataFieldService();
private int schemaID;
private String prefix;
private String namespace;
@XmlElement(required = true)
private ArrayList<String> expand = new ArrayList<String>();
@XmlElement(name = "fields", required = true)
private List<MetadataField> fields = new ArrayList<MetadataField>();
public MetadataSchema(){}
public MetadataSchema(org.dspace.content.MetadataSchema schema, String expand, Context context) throws SQLException, WebApplicationException{
setup(schema, expand, context);
}
private void setup(org.dspace.content.MetadataSchema schema, String expand, Context context) throws SQLException{
List<String> expandFields = new ArrayList<String>();
if(expand != null) {
expandFields = Arrays.asList(expand.split(","));
}
this.setSchemaID(schema.getID());
this.setPrefix(schema.getName());
this.setNamespace(schema.getNamespace());
if (expandFields.contains("fields") || expandFields.contains("all")) {
List<org.dspace.content.MetadataField> fields = metadataFieldService.findAllInSchema(context, schema);
this.addExpand("fields");
for(org.dspace.content.MetadataField field: fields) {
this.fields.add(new MetadataField(schema, field, "", context));
}
}
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public void setNamespace(String namespace) {
this.namespace = namespace;
}
public String getPrefix() {
return prefix;
}
public String getNamespace() {
return namespace;
}
public int getSchemaID()
{
return this.schemaID;
}
public void setSchemaID(int schemaID)
{
this.schemaID = schemaID;
}
public List<MetadataField> getMetadataFields() {
return fields;
}
public List<String> getExpand() {
return expand;
}
public void setExpand(ArrayList<String> expand) {
this.expand = expand;
}
public void addExpand(String expandableAttribute) {
this.expand.add(expandableAttribute);
}
}