AtomLinkModuleImpl.java

/*
 *
 * 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 com.rometools.modules.atom.modules;

import com.rometools.rome.feed.CopyFrom;
import com.rometools.rome.feed.atom.Link;
import com.rometools.rome.feed.impl.EqualsBean;
import com.rometools.rome.feed.impl.ToStringBean;
import com.rometools.rome.feed.synd.SyndPerson;
import com.rometools.rome.feed.synd.SyndPersonImpl;

import java.util.LinkedList;
import java.util.List;

public class AtomLinkModuleImpl implements AtomLinkModule {

    private List<Link> links = new LinkedList<Link>();
    private List<SyndPerson> authors = new LinkedList<SyndPerson>();
    private List<SyndPerson> contributors = new LinkedList<SyndPerson>();

    @Override
    public List<Link> getLinks() {
        return links;
    }

    @Override
    public Link getLink() {
        if(links.size() > 0) {
            return links.get(0);
        }
        return null;
    }

    @Override
    public void setLinks(List<Link> links) {
        this.links = links;
    }

    @Override
    public void setLink(Link link) {
        if(links.size() > 0) {
            links.set(0, link);
        } else {
            links.add(link);
        }
    }

    @Override
    public List<SyndPerson> getAuthors() {
        return this.authors;
    }

    @Override
    public void setAuthors(List<SyndPerson> authors) {
        this.authors = authors;
    }

    @Override
    public List<SyndPerson> getContributors() {
        return this.contributors;
    }

    @Override
    public void setContributors(List<SyndPerson> contributors) {
        this.contributors = contributors;
    }

    @Override
    public String getUri() {
        return URI;
    }

    @Override
    public Class<? extends CopyFrom> getInterface() {
        return AtomLinkModule.class;
    }

    @Override
    public void copyFrom(CopyFrom obj) {
        final AtomLinkModule other = (AtomLinkModule) obj;
        copyLinks(other.getLinks(), this.links);
        copyPerson(other.getAuthors(), this.authors);
        copyPerson(other.getContributors(), this.contributors);
    }

    private void copyLinks(List<Link> from, List<Link> to) {
        for (Link link : from) {
            final Link l = new Link();
            l.setHref(link.getHref());
            l.setType(link.getType());
            l.setRel(link.getRel());
            l.setHreflang(link.getHreflang());
            l.setTitle(link.getTitle());
            l.setLength(link.getLength());
            to.add(l);
        }
    }

    private void copyPerson(List<SyndPerson> from, List<SyndPerson> to) {
        for (SyndPerson person : from) {
            final SyndPerson p = new SyndPersonImpl();
            p.setName(person.getName());
            p.setEmail(person.getEmail());
            p.setUri(person.getUri());
            to.add(p);
        }
    }

    @Override
    public Object clone() {
        final AtomLinkModuleImpl m = new AtomLinkModuleImpl();

        final List<Link> linksCopy = new LinkedList<Link>();
        copyLinks(this.getLinks(), linksCopy);
        m.setLinks(linksCopy);

        final List<SyndPerson> authorsCopy = new LinkedList<SyndPerson>();
        copyPerson(this.getAuthors(), authorsCopy);
        m.setAuthors(authorsCopy);

        final List<SyndPerson> contributorsCopy = new LinkedList<SyndPerson>();
        copyPerson(this.getContributors(), contributorsCopy);
        m.setContributors(contributorsCopy);

        return m;
    }

    @Override
    public boolean equals(final Object obj) {
        return EqualsBean.beanEquals(AtomLinkModuleImpl.class, this, obj);
    }

    @Override
    public int hashCode() {
        return EqualsBean.beanHashCode(this);
    }

    @Override
    public String toString() {
        return ToStringBean.toString(AtomLinkModuleImpl.class, this);
    }
}