[LIB-4] Add hespiff source files
[hespiff.git] / src / main / java / org / hedgecode / xml / xspf / bind / AbstractRNGBinder.java
diff --git a/src/main/java/org/hedgecode/xml/xspf/bind/AbstractRNGBinder.java b/src/main/java/org/hedgecode/xml/xspf/bind/AbstractRNGBinder.java
new file mode 100644 (file)
index 0000000..3ffa956
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ * 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);
+        }
+    }
+
+}