/*
* Copyright (C) 2010 Teleal GmbH, Switzerland
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.teleal.cling.support.model;
import org.teleal.cling.support.model.container.Album;
import org.teleal.cling.support.model.container.Container;
import org.teleal.cling.support.model.container.GenreContainer;
import org.teleal.cling.support.model.container.MovieGenre;
import org.teleal.cling.support.model.container.MusicAlbum;
import org.teleal.cling.support.model.container.MusicArtist;
import org.teleal.cling.support.model.container.MusicGenre;
import org.teleal.cling.support.model.container.PersonContainer;
import org.teleal.cling.support.model.container.PhotoAlbum;
import org.teleal.cling.support.model.container.PlaylistContainer;
import org.teleal.cling.support.model.container.StorageFolder;
import org.teleal.cling.support.model.container.StorageSystem;
import org.teleal.cling.support.model.container.StorageVolume;
import org.teleal.cling.support.model.item.AudioBook;
import org.teleal.cling.support.model.item.AudioBroadcast;
import org.teleal.cling.support.model.item.AudioItem;
import org.teleal.cling.support.model.item.ImageItem;
import org.teleal.cling.support.model.item.Item;
import org.teleal.cling.support.model.item.Movie;
import org.teleal.cling.support.model.item.MusicTrack;
import org.teleal.cling.support.model.item.MusicVideoClip;
import org.teleal.cling.support.model.item.Photo;
import org.teleal.cling.support.model.item.PlaylistItem;
import org.teleal.cling.support.model.item.TextItem;
import org.teleal.cling.support.model.item.VideoBroadcast;
import org.teleal.cling.support.model.item.VideoItem;
import java.util.ArrayList;
import java.util.List;
/**
* @author Christian Bauer
*/
public class DIDLContent {
public static final String NAMESPACE_URI = "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/";
public static final String DESC_WRAPPER_NAMESPACE_URI = "urn:teleal-org:cling:support:content-directory-desc-1-0";
protected List<Container> containers = new ArrayList();
protected List<Item> items = new ArrayList();
protected List<DescMeta> descMetadata = new ArrayList();
public Container getFirstContainer() {
return getContainers().get(0);
}
public DIDLContent addContainer(Container container) {
getContainers().add(container);
return this;
}
public List<Container> getContainers() {
return containers;
}
public void setContainers(List<Container> containers) {
this.containers = containers;
}
public DIDLContent addItem(Item item) {
getItems().add(item);
return this;
}
public List<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
public DIDLContent addDescMetadata(DescMeta descMetadata) {
getDescMetadata().add(descMetadata);
return this;
}
public List<DescMeta> getDescMetadata() {
return descMetadata;
}
public void setDescMetadata(List<DescMeta> descMetadata) {
this.descMetadata = descMetadata;
}
public void replaceGenericContainerAndItems() {
setItems(replaceGenericItems(getItems()));
setContainers(replaceGenericContainers(getContainers()));
}
protected List<Item> replaceGenericItems(List<Item> genericItems) {
List<Item> specificItems = new ArrayList();
for (Item genericItem : genericItems) {
String genericType = genericItem.getClazz().getValue();
if (AudioItem.CLASS.getValue().equals(genericType)) {
specificItems.add(new AudioItem(genericItem));
} else if (MusicTrack.CLASS.getValue().equals(genericType)) {
specificItems.add(new MusicTrack(genericItem));
} else if (AudioBook.CLASS.getValue().equals(genericType)) {
specificItems.add(new AudioBook(genericItem));
} else if (AudioBroadcast.CLASS.getValue().equals(genericType)) {
specificItems.add(new AudioBroadcast(genericItem));
} else if (VideoItem.CLASS.getValue().equals(genericType)) {
specificItems.add(new VideoItem(genericItem));
} else if (Movie.CLASS.getValue().equals(genericType)) {
specificItems.add(new Movie(genericItem));
} else if (VideoBroadcast.CLASS.getValue().equals(genericType)) {
specificItems.add(new VideoBroadcast(genericItem));
} else if (MusicVideoClip.CLASS.getValue().equals(genericType)) {
specificItems.add(new MusicVideoClip(genericItem));
} else if (ImageItem.CLASS.getValue().equals(genericType)) {
specificItems.add(new ImageItem(genericItem));
} else if (Photo.CLASS.getValue().equals(genericType)) {
specificItems.add(new Photo(genericItem));
} else if (PlaylistItem.CLASS.getValue().equals(genericType)) {
specificItems.add(new PlaylistItem(genericItem));
} else if (TextItem.CLASS.getValue().equals(genericType)) {
specificItems.add(new TextItem(genericItem));
} else {
specificItems.add(genericItem);
}
}
return specificItems;
}
protected List<Container> replaceGenericContainers(List<Container> genericContainers) {
List<Container> specificContainers = new ArrayList();
for (Container genericContainer : genericContainers) {
String genericType = genericContainer.getClazz().getValue();
Container specific;
if (Album.CLASS.getValue().equals(genericType)) {
specific = new Album(genericContainer);
} else if (MusicAlbum.CLASS.getValue().equals(genericType)) {
specific = new MusicAlbum(genericContainer);
} else if (PhotoAlbum.CLASS.getValue().equals(genericType)) {
specific = new PhotoAlbum(genericContainer);
} else if (GenreContainer.CLASS.getValue().equals(genericType)) {
specific = new GenreContainer(genericContainer);
} else if (MusicGenre.CLASS.getValue().equals(genericType)) {
specific = new MusicGenre(genericContainer);
} else if (MovieGenre.CLASS.getValue().equals(genericType)) {
specific = new MovieGenre(genericContainer);
} else if (PlaylistContainer.CLASS.getValue().equals(genericType)) {
specific = new PlaylistContainer(genericContainer);
} else if (PersonContainer.CLASS.getValue().equals(genericType)) {
specific = new PersonContainer(genericContainer);
} else if (MusicArtist.CLASS.getValue().equals(genericType)) {
specific = new MusicArtist(genericContainer);
} else if (StorageSystem.CLASS.getValue().equals(genericType)) {
specific = new StorageSystem(genericContainer);
} else if (StorageVolume.CLASS.getValue().equals(genericType)) {
specific = new StorageVolume(genericContainer);
} else if (StorageFolder.CLASS.getValue().equals(genericType)) {
specific = new StorageFolder(genericContainer);
} else {
specific = genericContainer;
}
specific.setItems(replaceGenericItems(genericContainer.getItems()));
specificContainers.add(specific);
}
return specificContainers;
}
}