+/*
+ * Copyright (c) 2015. 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<Object> getElements(Class elementClass);
+
+ protected abstract List<Object> 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<org.hedgecode.xml.xspf.Link> getLinks() {
+ List<org.hedgecode.xml.xspf.Link> 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<org.hedgecode.xml.xspf.Meta> getMetas() {
+ List<org.hedgecode.xml.xspf.Meta> 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<org.hedgecode.xml.xspf.Extension> getExtensions() {
+ List<org.hedgecode.xml.xspf.Extension> 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);
+ }
+ }
+
+}