{
continue;
}
Item item = (Item)itemDSO;
boolean hasDate = false;
SyndEntry entry = new SyndEntryImpl();
entries.add(entry);
String entryURL = resolveURL(request, item);
entry.setLink(entryURL);
entry.setUri(entryURL);
String title = getOneDC(item, titleField);
entry.setTitle(title == null ? localize(labels, MSG_UNTITLED) : title);
// "published" date -- should be dc.date.issued
String pubDate = getOneDC(item, dateField);
if (pubDate != null)
{
entry.setPublishedDate((new DCDate(pubDate)).toDate());
hasDate = true;
}
// date of last change to Item
entry.setUpdatedDate(item.getLastModified());
StringBuffer db = new StringBuffer();
for (String df : descriptionFields)
{
// Special Case: "(date)" in field name means render as date
boolean isDate = df.indexOf("(date)") > 0;
if (isDate)
{
df = df.replaceAll("\\(date\\)", "");
}
Metadatum dcv[] = item.getMetadataByMetadataString(df);
if (dcv.length > 0)
{
String fieldLabel = labels.get(MSG_METADATA + df);
if (fieldLabel != null && fieldLabel.length()>0)
{
db.append(fieldLabel).append(": ");
}
boolean first = true;
for (Metadatum v : dcv)
{
if (first)
{
first = false;
}
else
{
db.append("; ");
}
db.append(isDate ? new DCDate(v.value).toString() : v.value);
}
db.append("\n");
}
}
if (db.length() > 0)
{
SyndContent desc = new SyndContentImpl();
desc.setType("text/plain");
desc.setValue(db.toString());
entry.setDescription(desc);
}
// This gets the authors into an ATOM feed
Metadatum authors[] = item.getMetadataByMetadataString(authorField);
if (authors.length > 0)
{
List<SyndPerson> creators = new ArrayList<SyndPerson>();
for (Metadatum author : authors)
{
SyndPerson sp = new SyndPersonImpl();
sp.setName(author.value);
creators.add(sp);
}
entry.setAuthors(creators);
}
// only add DC module if any DC fields are configured
if (dcCreatorField != null || dcDateField != null ||
dcDescriptionField != null)
{
DCModule dc = new DCModuleImpl();
if (dcCreatorField != null)
{
Metadatum dcAuthors[] = item.getMetadataByMetadataString(dcCreatorField);
if (dcAuthors.length > 0)
{
List<String> creators = new ArrayList<String>();
for (Metadatum author : dcAuthors)
{
creators.add(author.value);
}
dc.setCreators(creators);
}
}
if (dcDateField != null && !hasDate)
{
Metadatum v[] = item.getMetadataByMetadataString(dcDateField);
if (v.length > 0)
{
dc.setDate((new DCDate(v[0].value)).toDate());
}
}
if (dcDescriptionField != null)
{
Metadatum v[] = item.getMetadataByMetadataString(dcDescriptionField);
if (v.length > 0)
{
StringBuffer descs = new StringBuffer();
for (Metadatum d : v)
{
if (descs.length() > 0)
{
descs.append("\n\n");
}
descs.append(d.value);
}
dc.setDescription(descs.toString());
}
}
entry.getModules().add(dc);
}
//iTunes Podcast Support - START
if (podcastFeed)
{
// Add enclosure(s)
List<SyndEnclosure> enclosures = new ArrayList();
try {
Bundle[] bunds = item.getBundles("ORIGINAL");
if (bunds[0] != null) {
Bitstream[] bits = bunds[0].getBitstreams();
for (int i = 0; (i < bits.length); i++) {
String mime = bits[i].getFormat().getMIMEType();
if(podcastableMIMETypes.contains(mime)) {
SyndEnclosure enc = new SyndEnclosureImpl();
enc.setType(bits[i].getFormat().getMIMEType());
enc.setLength(bits[i].getSize());
enc.setUrl(urlOfBitstream(request, bits[i]));
enclosures.add(enc);
} else {
continue;
}
}
}
//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
Metadatum[] externalMedia = item.getMetadataByMetadataString(externalSourceField);
if(externalMedia.length > 0)
{
for(int i = 0; i< externalMedia.length; i++)
{
SyndEnclosure enc = new SyndEnclosureImpl();
enc.setType("audio/x-mpeg"); //We can't determine MIME of external file, so just picking one.
enc.setLength(1);
enc.setUrl(externalMedia[i].value);
enclosures.add(enc);
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
entry.setEnclosures(enclosures);
// Get iTunes specific fields: author, subtitle, summary, duration, keywords
EntryInformation itunes = new EntryInformationImpl();
String author = getOneDC(item, authorField);
if (author != null && author.length() > 0) {
itunes.setAuthor(author); // <itunes:author>
}
itunes.setSubtitle(title == null ? localize(labels, MSG_UNTITLED) : title); // <itunes:subtitle>
if (db.length() > 0) {
itunes.setSummary(db.toString()); // <itunes:summary>
}
String extent = getOneDC(item, "dc.format.extent"); // assumed that user will enter this field with length of song in seconds
if (extent != null && extent.length() > 0) {
extent = extent.split(" ")[0];
Integer duration = Integer.parseInt(extent);
itunes.setDuration(new Duration(duration)); // <itunes:duration>
}
String subject = getOneDC(item, "dc.subject");
if (subject != null && subject.length() > 0) {
String[] subjects = new String[1];
subjects[0] = subject;
itunes.setKeywords(subjects); // <itunes:keywords>
}
entry.getModules().add(itunes);
}
}
feed.setEntries(entries);
}
}