/**
 * 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.sword2;

import org.dspace.content.DCValue;
import org.dspace.content.Item;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.swordapp.server.AtomStatement;
import org.swordapp.server.Statement;
import org.swordapp.server.SwordError;
import org.swordapp.server.SwordServerException;

public class AtomStatementDisseminator extends GenericStatementDisseminator implements SwordStatementDisseminator
{
	public Statement disseminate(Context context, Item item) throws DSpaceSwordException, SwordError, SwordServerException
	{
		SwordUrlManager urlManager = new SwordUrlManager(new SwordConfigurationDSpace(), context);
		String feedUri = urlManager.getAtomStatementUri(item);

		String authorField = ConfigurationManager.getProperty("swordv2-server", "author.field");
		String titleField = ConfigurationManager.getProperty("swordv2-server", "title.field");
		String updatedField = ConfigurationManager.getProperty("swordv2-server", "updated.field");

		String author = this.stringMetadata(item, authorField);
		String title = this.stringMetadata(item, titleField);
		String updated = this.stringMetadata(item, updatedField);

		Statement s = new AtomStatement(feedUri, author, title, updated);
		this.populateStatement(context, item, s);
		return s;
	}

	private String stringMetadata(Item item, String field)
	{
		if (field == null)
		{
			return null;
		}

		DCValue[] dcvs = item.getMetadata(field);
		if (dcvs == null)
		{
			return null;
		}

		StringBuilder md = new StringBuilder();
		for (DCValue dcv : dcvs)
		{
			if (md.length() > 0)
			{
				md.append(", ");
			}
			md.append(dcv.value);
		}
		return md.toString();
	}
}
