Skip to content

Commit

Permalink
Support Metadata On All DSpaceObjects
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinVdV committed Sep 24, 2014
1 parent ca090a8 commit 87cd714
Show file tree
Hide file tree
Showing 63 changed files with 2,721 additions and 1,683 deletions.
Expand Up @@ -38,7 +38,7 @@ public void execute(Context context, ItemArchive itarch, boolean isTest,
for (String f : targetFields)
{
DtoMetadata dummy = DtoMetadata.create(f, Item.ANY, "");
DCValue[] ardcv = item.getMetadata(f);
DCValue[] ardcv = item.getMetadataByMetadataString(f);

ItemUpdate.pr("Metadata to be deleted: ");
for (DCValue dcv : ardcv)
Expand Down
Expand Up @@ -35,14 +35,14 @@ public RequestItemAuthor getRequestItemAuthor(Context context, Item item)
throws SQLException {
if (emailMetadata != null)
{
DCValue[] vals = item.getMetadata(emailMetadata);
DCValue[] vals = item.getMetadataByMetadataString(emailMetadata);
if (vals.length > 0)
{
String email = vals[0].value;
String fullname = null;
if (fullNameMatadata != null)
{
DCValue[] nameVals = item.getMetadata(fullNameMatadata);
DCValue[] nameVals = item.getMetadataByMetadataString(fullNameMatadata);
if (nameVals.length > 0)
{
fullname = nameVals[0].value;
Expand Down
Expand Up @@ -29,7 +29,7 @@ public List<String> getISSNs(Context context, Item item)
List<String> values = new ArrayList<String>();
for (String metadata : metadataList)
{
DCValue[] dcvalues = item.getMetadata(metadata);
DCValue[] dcvalues = item.getMetadataByMetadataString(metadata);
for (DCValue dcvalue : dcvalues)
{
values.add(dcvalue.authority);
Expand Down
Expand Up @@ -29,7 +29,7 @@ public List<String> getISSNs(Context context, Item item)
List<String> values = new ArrayList<String>();
for (String metadata : metadataList)
{
DCValue[] dcvalues = item.getMetadata(metadata);
DCValue[] dcvalues = item.getMetadataByMetadataString(metadata);
for (DCValue dcvalue : dcvalues)
{
values.add(dcvalue.value);
Expand Down
Expand Up @@ -265,7 +265,7 @@ else if (dso.getType() == Constants.COMMUNITY)
df = df.replaceAll("\\(date\\)", "");
}

DCValue dcv[] = item.getMetadata(df);
DCValue dcv[] = item.getMetadataByMetadataString(df);
if (dcv.length > 0)
{
String fieldLabel = labels.get(MSG_METADATA + df);
Expand Down Expand Up @@ -298,7 +298,7 @@ else if (dso.getType() == Constants.COMMUNITY)
}

// This gets the authors into an ATOM feed
DCValue authors[] = item.getMetadata(authorField);
DCValue authors[] = item.getMetadataByMetadataString(authorField);
if (authors.length > 0)
{
List<SyndPerson> creators = new ArrayList<SyndPerson>();
Expand All @@ -318,7 +318,7 @@ else if (dso.getType() == Constants.COMMUNITY)
DCModule dc = new DCModuleImpl();
if (dcCreatorField != null)
{
DCValue dcAuthors[] = item.getMetadata(dcCreatorField);
DCValue dcAuthors[] = item.getMetadataByMetadataString(dcCreatorField);
if (dcAuthors.length > 0)
{
List<String> creators = new ArrayList<String>();
Expand All @@ -331,15 +331,15 @@ else if (dso.getType() == Constants.COMMUNITY)
}
if (dcDateField != null && !hasDate)
{
DCValue v[] = item.getMetadata(dcDateField);
DCValue v[] = item.getMetadataByMetadataString(dcDateField);
if (v.length > 0)
{
dc.setDate((new DCDate(v[0].value)).toDate());
}
}
if (dcDescriptionField != null)
{
DCValue v[] = item.getMetadata(dcDescriptionField);
DCValue v[] = item.getMetadataByMetadataString(dcDescriptionField);
if (v.length > 0)
{
StringBuffer descs = new StringBuffer();
Expand Down Expand Up @@ -381,7 +381,7 @@ else if (dso.getType() == Constants.COMMUNITY)
}
//Also try to add an external value from dc.identifier.other
// We are assuming that if this is set, then it is a media file
DCValue[] externalMedia = item.getMetadata(externalSourceField);
DCValue[] externalMedia = item.getMetadataByMetadataString(externalSourceField);
if(externalMedia.length > 0)
{
for(int i = 0; i< externalMedia.length; i++)
Expand Down Expand Up @@ -567,7 +567,7 @@ private String localize(Map<String, String> labels, String s)
// spoonful of syntactic sugar when we only need first value
private String getOneDC(Item item, String field)
{
DCValue dcv[] = item.getMetadata(field);
DCValue dcv[] = item.getMetadataByMetadataString(field);
return (dcv.length > 0) ? dcv[0].value : null;
}
}
Expand Down
59 changes: 28 additions & 31 deletions dspace-api/src/main/java/org/dspace/browse/BrowseItem.java
Expand Up @@ -40,9 +40,6 @@ public class BrowseItem extends DSpaceObject
/** Logger */
private static Logger log = Logger.getLogger(BrowseItem.class);

/** DSpace context */
private Context context;

/** a List of all the metadata */
private List<DCValue> metadata = new ArrayList<DCValue>();

Expand All @@ -62,16 +59,15 @@ public class BrowseItem extends DSpaceObject
private String handle = null;

/**
* Construct a new browse item with the given context and the database id
* Construct a new browse item with the given ourContext and the database id
*
* @param context the DSpace context
* @param context the DSpace ourContext
* @param id the database id of the item
* @param in_archive
* @param withdrawn
*/
public BrowseItem(Context context, int id, boolean in_archive, boolean withdrawn, boolean discoverable)
{
this.context = context;
public BrowseItem(Context context, int id, boolean in_archive, boolean withdrawn, boolean discoverable) {
super(context);
this.id = id;
this.in_archive = in_archive;
this.withdrawn = withdrawn;
Expand All @@ -88,18 +84,20 @@ public BrowseItem(Context context, int id, boolean in_archive, boolean withdrawn
* @return array of matching values
* @throws SQLException
*/
public DCValue[] getMetadata(String schema, String element, String qualifier, String lang)
throws SQLException
{
public DCValue[] getMetadata(String schema, String element, String qualifier, String lang) {
try
{
BrowseItemDAO dao = BrowseDAOFactory.getItemInstance(context);
BrowseItemDAO dao = BrowseDAOFactory.getItemInstance(ourContext);

// if the qualifier is a wildcard, we have to get it out of the
// database
if (Item.ANY.equals(qualifier))
{
return dao.queryMetadata(id, schema, element, qualifier, lang);
try {
return dao.queryMetadata(id, schema, element, qualifier, lang);
} catch (SQLException e) {
log.error("caught exception: ", e);
}
}

if (!metadata.isEmpty())
Expand All @@ -119,7 +117,12 @@ public DCValue[] getMetadata(String schema, String element, String qualifier, St

if (values.isEmpty())
{
DCValue[] dcvs = dao.queryMetadata(id, schema, element, qualifier, lang);
DCValue[] dcvs = new DCValue[0];
try {
dcvs = dao.queryMetadata(id, schema, element, qualifier, lang);
} catch (SQLException e) {
log.error("caught exception: ", e);
}
if (dcvs != null)
{
Collections.addAll(metadata, dcvs);
Expand All @@ -135,7 +138,12 @@ public DCValue[] getMetadata(String schema, String element, String qualifier, St
}
else
{
DCValue[] dcvs = dao.queryMetadata(id, schema, element, qualifier, lang);
DCValue[] dcvs = new DCValue[0];
try {
dcvs = dao.queryMetadata(id, schema, element, qualifier, lang);
} catch (SQLException e) {
log.error("caught exception: ", e);
}
if (dcvs != null)
{
Collections.addAll(metadata, dcvs);
Expand Down Expand Up @@ -286,7 +294,7 @@ public String getHandle()
{
try
{
this.handle = HandleManager.findHandle(context, this);
this.handle = HandleManager.findHandle(ourContext, this);
}
catch (SQLException e)
{
Expand All @@ -310,7 +318,7 @@ public Thumbnail getThumbnail()
throws SQLException
{
// instantiate an item for this one. Not nice.
Item item = Item.find(context, id);
Item item = Item.find(ourContext, id);

if (item == null)
{
Expand Down Expand Up @@ -353,7 +361,7 @@ public Thumbnail getThumbnail()

if ((original[0].getBitstreams().length > 1) && (original[0].getPrimaryBitstreamID() > -1))
{
originalBitstream = Bitstream.find(context, original[0].getPrimaryBitstreamID());
originalBitstream = Bitstream.find(ourContext, original[0].getPrimaryBitstreamID());
thumbnailBitstream = thumbs[0].getBitstreamByName(originalBitstream.getName() + ".jpg");
}
else
Expand All @@ -363,7 +371,7 @@ public Thumbnail getThumbnail()
}

if ((thumbnailBitstream != null)
&& (AuthorizeManager.authorizeActionBoolean(context, thumbnailBitstream, Constants.READ)))
&& (AuthorizeManager.authorizeActionBoolean(ourContext, thumbnailBitstream, Constants.READ)))
{
return new Thumbnail(thumbnailBitstream, originalBitstream);
}
Expand All @@ -374,23 +382,12 @@ public Thumbnail getThumbnail()

public String getName()
{
// FIXME: there is an exception handling problem here
try
{
DCValue t[] = getMetadata("dc", "title", null, Item.ANY);
return (t.length >= 1) ? t[0].value : null;
}
catch (SQLException sqle)
{
log.error("caught exception: ", sqle);
return null;
}
return getMetadataFirstValue(MetadataSchema.DC_SCHEMA, "title", null, Item.ANY);
}

@Override
public void update() throws SQLException, AuthorizeException
{

}

@Override
Expand Down
Expand Up @@ -7,6 +7,7 @@
*/
package org.dspace.browse;

import org.dspace.core.Constants;
import org.dspace.storage.rdbms.TableRowIterator;
import org.dspace.storage.rdbms.DatabaseManager;
import org.dspace.storage.rdbms.TableRow;
Expand All @@ -26,31 +27,34 @@ public class BrowseItemDAOOracle implements BrowseItemDAO
/** query to get the text value of a metadata element only (qualifier is NULL) */
private String getByMetadataElement = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +

"WHERE metadatavalue.item_id = ? " +
"WHERE metadatavalue.resource_id = ? " +
" AND metadatavalue.metadata_field_id = metadatafieldregistry.metadata_field_id " +
" AND metadatafieldregistry.element = ? " +
" AND metadatafieldregistry.qualifier IS NULL " +
" AND metadatafieldregistry.metadata_schema_id=metadataschemaregistry.metadata_schema_id " +
" AND metadataschemaregistry.short_id = ? " +
" AND metadatavalue.resource_type_id = ? " +
" ORDER BY metadatavalue.metadata_field_id, metadatavalue.place";

/** query to get the text value of a metadata element and qualifier */
private String getByMetadata = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +
"WHERE metadatavalue.item_id = ? " +
"WHERE metadatavalue.resource_id = ? " +
" AND metadatavalue.metadata_field_id = metadatafieldregistry.metadata_field_id " +
" AND metadatafieldregistry.element = ? " +
" AND metadatafieldregistry.qualifier = ? " +
" AND metadatafieldregistry.metadata_schema_id=metadataschemaregistry.metadata_schema_id " +
" AND metadataschemaregistry.short_id = ? " +
" AND metadatavalue.resource_type_id = ? " +
" ORDER BY metadatavalue.metadata_field_id, metadatavalue.place";

/** query to get the text value of a metadata element with the wildcard qualifier (*) */
private String getByMetadataAnyQualifier = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +
"WHERE metadatavalue.item_id = ? " +
"WHERE metadatavalue.resource_id = ? " +
" AND metadatavalue.metadata_field_id = metadatafieldregistry.metadata_field_id " +
" AND metadatafieldregistry.element = ? " +
" AND metadatafieldregistry.metadata_schema_id=metadataschemaregistry.metadata_schema_id " +
" AND metadataschemaregistry.short_id = ? " +
" AND metadatavalue.resource_type_id = ? " +
" ORDER BY metadatavalue.metadata_field_id, metadatavalue.place";

/** DSpace context */
Expand Down Expand Up @@ -101,17 +105,17 @@ public DCValue[] queryMetadata(int itemId, String schema, String element, String
{
if (qualifier == null)
{
Object[] params = { Integer.valueOf(itemId), element, schema };
Object[] params = { Integer.valueOf(itemId), element, schema, Constants.ITEM };
tri = DatabaseManager.query(context, getByMetadataElement, params);
}
else if (Item.ANY.equals(qualifier))
{
Object[] params = { Integer.valueOf(itemId), element, schema };
Object[] params = { Integer.valueOf(itemId), element, schema, Constants.ITEM };
tri = DatabaseManager.query(context, getByMetadataAnyQualifier, params);
}
else
{
Object[] params = { Integer.valueOf(itemId), element, qualifier, schema };
Object[] params = { Integer.valueOf(itemId), element, qualifier, schema, Constants.ITEM };
tri = DatabaseManager.query(context, getByMetadata, params);
}

Expand Down
Expand Up @@ -7,6 +7,7 @@
*/
package org.dspace.browse;

import org.dspace.core.Constants;
import org.dspace.storage.rdbms.TableRowIterator;
import org.dspace.storage.rdbms.DatabaseManager;
import org.dspace.storage.rdbms.TableRow;
Expand All @@ -25,31 +26,34 @@ public class BrowseItemDAOPostgres implements BrowseItemDAO

/** query to get the text value of a metadata element only (qualifier is NULL) */
private String getByMetadataElement = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +
"WHERE metadatavalue.item_id = ? " +
"WHERE metadatavalue.resource_id = ? " +
" AND metadatavalue.metadata_field_id = metadatafieldregistry.metadata_field_id " +
" AND metadatafieldregistry.element = ? " +
" AND metadatafieldregistry.qualifier IS NULL " +
" AND metadatafieldregistry.metadata_schema_id=metadataschemaregistry.metadata_schema_id " +
" AND metadataschemaregistry.short_id = ? " +
" AND metadatavalue.resource_type_id = ? " +
" ORDER BY metadatavalue.metadata_field_id, metadatavalue.place";

/** query to get the text value of a metadata element and qualifier */
private String getByMetadata = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +
"WHERE metadatavalue.item_id = ? " +
"WHERE metadatavalue.resource_id = ? " +
" AND metadatavalue.metadata_field_id = metadatafieldregistry.metadata_field_id " +
" AND metadatafieldregistry.element = ? " +
" AND metadatafieldregistry.qualifier = ? " +
" AND metadatafieldregistry.metadata_schema_id=metadataschemaregistry.metadata_schema_id " +
" AND metadataschemaregistry.short_id = ? " +
" AND metadatavalue.resource_type_id = ? " +
" ORDER BY metadatavalue.metadata_field_id, metadatavalue.place";

/** query to get the text value of a metadata element with the wildcard qualifier (*) */
private String getByMetadataAnyQualifier = "SELECT authority, confidence, text_value,text_lang,element,qualifier FROM metadatavalue, metadatafieldregistry, metadataschemaregistry " +
"WHERE metadatavalue.item_id = ? " +
"WHERE metadatavalue.resource_id = ? " +
" AND metadatavalue.metadata_field_id = metadatafieldregistry.metadata_field_id " +
" AND metadatafieldregistry.element = ? " +
" AND metadatafieldregistry.metadata_schema_id=metadataschemaregistry.metadata_schema_id " +
" AND metadataschemaregistry.short_id = ? " +
" AND metadatavalue.resource_type_id = ? " +
" ORDER BY metadatavalue.metadata_field_id, metadatavalue.place";

/** DSpace context */
Expand Down Expand Up @@ -101,16 +105,16 @@ public DCValue[] queryMetadata(int itemId, String schema, String element, String
if (qualifier == null)
{
Object[] params = { Integer.valueOf(itemId), element, schema };
tri = DatabaseManager.query(context, getByMetadataElement, params);
tri = DatabaseManager.query(context, getByMetadataElement, params, Constants.ITEM);
}
else if (Item.ANY.equals(qualifier))
{
Object[] params = { Integer.valueOf(itemId), element, schema };
tri = DatabaseManager.query(context, getByMetadataAnyQualifier, params);
tri = DatabaseManager.query(context, getByMetadataAnyQualifier, params, Constants.ITEM);
}
else
{
Object[] params = { Integer.valueOf(itemId), element, qualifier, schema };
Object[] params = { Integer.valueOf(itemId), element, qualifier, schema, Constants.ITEM };
tri = DatabaseManager.query(context, getByMetadata, params);
}

Expand Down

0 comments on commit 87cd714

Please sign in to comment.