/* * Copyright (c) 2015-2019. Developed by Hedgecode. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.hedgecode.xml.xspf.bind; import java.util.ArrayList; import java.util.List; import org.hedgecode.xml.xspf.PlaylistFactory; import org.hedgecode.xml.xspf.rng.Annotation; import org.hedgecode.xml.xspf.rng.Creator; import org.hedgecode.xml.xspf.rng.Extension; import org.hedgecode.xml.xspf.rng.Image; import org.hedgecode.xml.xspf.rng.Info; import org.hedgecode.xml.xspf.rng.Link; import org.hedgecode.xml.xspf.rng.Meta; import org.hedgecode.xml.xspf.rng.ObjectFactory; import org.hedgecode.xml.xspf.rng.Title; /** * * * @author Dmitry Samoshin aka gotty */ public abstract class AbstractRNGBinder implements Binder { protected static final ObjectFactory RNG_FACTORY = new ObjectFactory(); protected abstract Object getElement(Class elementClass); protected abstract List getElements(Class elementClass); protected abstract List getAllElements(); @Override public String getTitle() { Title titleElement = (Title) getElement(Title.class); return titleElement != null ? titleElement.getContent() : null; } @Override public void setTitle(String title) { Title titleElement = (Title) getElement(Title.class); if (titleElement != null) getAllElements().remove(titleElement); if (title != null) { titleElement = RNG_FACTORY.createTitle(); titleElement.setContent(title); getAllElements().add(titleElement); } } @Override public String getCreator() { Creator creatorElement = (Creator) getElement(Creator.class); return creatorElement != null ? creatorElement.getContent() : null; } @Override public void setCreator(String creator) { Creator creatorElement = (Creator) getElement(Creator.class); if (creatorElement != null) getAllElements().remove(creatorElement); if (creator != null) { creatorElement = RNG_FACTORY.createCreator(); creatorElement.setContent(creator); getAllElements().add(creatorElement); } } @Override public String getAnnotation() { Annotation annotationElement = (Annotation) getElement(Annotation.class); return annotationElement != null ? annotationElement.getContent() : null; } @Override public void setAnnotation(String annotation) { Annotation annotationElement = (Annotation) getElement(Annotation.class); if (annotationElement != null) getAllElements().remove(annotationElement); if (annotation != null) { annotationElement = RNG_FACTORY.createAnnotation(); annotationElement.setContent(annotation); getAllElements().add(annotationElement); } } @Override public String getInfo() { Info infoElement = (Info) getElement(Info.class); return infoElement != null ? infoElement.getValue() : null; } @Override public void setInfo(String info) { Info infoElement = (Info) getElement(Info.class); if (infoElement != null) getAllElements().remove(infoElement); if (info != null) { infoElement = RNG_FACTORY.createInfo(); infoElement.setValue(info); getAllElements().add(infoElement); } } @Override public String getImage() { Image imageElement = (Image) getElement(Image.class); return imageElement != null ? imageElement.getValue() : null; } @Override public void setImage(String image) { Image imageElement = (Image) getElement(Image.class); if (imageElement != null) getAllElements().remove(imageElement); if (image != null) { imageElement = RNG_FACTORY.createImage(); imageElement.setValue(image); getAllElements().add(imageElement); } } @Override public List getLinks() { List links = new ArrayList<>(); for (Object element : getElements(Link.class)) { Link linkElement = (Link) element; links.add( PlaylistFactory.createLink( linkElement.getRel(), linkElement.getValue() ) ); } return links; } @Override public void addLink(org.hedgecode.xml.xspf.Link link) { if (link != null) { Link linkElement = RNG_FACTORY.createLink(); linkElement.setRel(link.getRel()); linkElement.setValue(link.getContent()); getAllElements().add(linkElement); } } @Override public List getMetas() { List metas = new ArrayList<>(); for (Object element : getElements(Meta.class)) { Meta metaElement = (Meta) element; metas.add( PlaylistFactory.createMeta( metaElement.getRel(), metaElement.getContent() ) ); } return metas; } @Override public void addMeta(org.hedgecode.xml.xspf.Meta meta) { if (meta != null) { Meta metaElement = RNG_FACTORY.createMeta(); metaElement.setRel(meta.getRel()); metaElement.setContent(meta.getContent()); getAllElements().add(metaElement); } } @Override public List getExtensions() { List extensions = new ArrayList<>(); for (Object element : getElements(Extension.class)) { Extension extensionElement = (Extension) element; extensions.add( PlaylistFactory.createExtension( extensionElement.getApplication(), extensionElement.getContent() ) ); } return extensions; } @Override public void addExtension(org.hedgecode.xml.xspf.Extension extension) { if (extension != null) { Extension extensionElement = RNG_FACTORY.createExtension(); extensionElement.setApplication(extension.getApplication()); extensionElement.getContent().addAll(extension.getContent()); getAllElements().add(extensionElement); } } }