view flys-client/src/main/java/de/intevation/flys/client/shared/model/DefaultCollection.java @ 840:18fc7afe0251

Ensure list of recommendations is non-null after construction of DefaultCollection. flys-client/trunk@2560 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 24 Aug 2011 13:17:22 +0000
parents e9337488bac3
children ec5c75da5c7a
line wrap: on
line source
package de.intevation.flys.client.shared.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * The default implementation of a {@link Collection}.
 *
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public class DefaultCollection implements Collection {

    /** The uuid of the collection. */
    protected String uuid;

    /** The name of the collection.*/
    protected String name;

    /** The creation time of this collection.*/
    protected Date creation;

    /** The time to live of the collection. If this value is 0, it will never
     * die.*/
    protected long ttl;

    /** The list of artifacts that are managed by this Collection.*/
    protected List<CollectionItem> items;

    protected List<Recommendation> recommendations;

    protected Map<String, ThemeList> themeLists;


    /**
     * Constructor without arguments is necessary for GWT.
     */
    public DefaultCollection() {
    }


    public DefaultCollection(String uuid, long ttl) {
        this.uuid       = uuid;
        this.ttl        = ttl;
        this.items      = new ArrayList<CollectionItem>();
        this.themeLists = new HashMap<String, ThemeList>();
        this.recommendations = new ArrayList<Recommendation>();
    }


    /**
     * Creates a new DefaultCollection with a UUID.
     *
     * @param uuid The UUID.
     */
    public DefaultCollection(String uuid, long ttl, List<Recommendation> recs) {
        this(uuid, ttl);

        this.recommendations = recs;
    }


    public DefaultCollection(
        String uuid,
        long   ttl,
        List<Recommendation> recommendations,
        Map<String, ThemeList> themeLists)
    {
        this(uuid, ttl, recommendations);
        this.themeLists = themeLists;
    }


    /**
     * Creates a new DefaultCollection with uuid and name.
     *
     * @param uuid The identifier of this collection.
     * @param name The name of this collection.
     */
    public DefaultCollection(String uuid, long ttl, String name) {
        this(uuid, ttl, new ArrayList<Recommendation>());

        this.name = name;
    }


    /**
     * Creates a new DefaultCollection with uuid and name.
     *
     * @param uuid The identifier of this collection.
     * @param name The name of this collection.
     * @param creation The creation time.
     */
    public DefaultCollection(String uuid, long ttl, String name, Date creation){
        this(uuid, ttl, name);

        this.creation = creation;
    }


    public String identifier() {
        return uuid;
    }


    public Date getCreationTime() {
        return creation;
    }


    public Date getLastAccess() {
        return new Date();
    }


    public long getTTL() {
        return ttl;
    }


    public void setTTL(long ttl) {
        this.ttl = ttl;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


    public void addItem(CollectionItem item) {
        if (item != null) {
            items.add(item);
        }
    }


    public int getItemLength() {
        return items.size();
    }


    public CollectionItem getItem(int idx) {
        if (idx >= getItemLength()) {
            return null;
        }

        return items.get(idx);
    }


    public Map<String, OutputMode> getOutputModes() {
        Map<String, OutputMode> modes = new HashMap<String, OutputMode>();

        for (CollectionItem item: items) {
            List<OutputMode> itemModes = item.getOutputModes();

            if (itemModes != null) {
                for (OutputMode itemMode: itemModes) {
                    String name = itemMode.getName();
                    if (!modes.containsKey(name)) {
                        // we dont want duplicated OutputModes in our result.
                        modes.put(name, itemMode);
                    }
                }
            }
        }

        return modes;
    }


    public ThemeList getThemeList(String outName) {
        if (themeLists != null) {
            return themeLists.get(outName);
        }

        return null;
    }


    public List<Recommendation> getRecommendations() {
        return recommendations;
    }


    public void addRecommendation(Recommendation recommendation) {
        recommendations.add(recommendation);
    }


    public void addRecommendations(List<Recommendation> recommendations) {
        this.recommendations.addAll(recommendations);
    }


    public boolean loadedRecommendation(Recommendation recommendation) {
        String factory = recommendation.getFactory();
        String dbids   = recommendation.getIDs();

        for (Recommendation in: recommendations) {
            String inFactory = in.getFactory();
            String inDbids   = in.getIDs();

            if (factory.equals(inFactory) && dbids.equals(inDbids)) {
                return true;
            }
        }

        return false;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org