au.gov.ga.earthsci.bookmark.properties.layer.LayersProperty.java Source code

Java tutorial

Introduction

Here is the source code for au.gov.ga.earthsci.bookmark.properties.layer.LayersProperty.java

Source

/*******************************************************************************
 * Copyright 2013 Geoscience Australia
 * 
 * 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 au.gov.ga.earthsci.bookmark.properties.layer;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;

import au.gov.ga.earthsci.bookmark.Messages;
import au.gov.ga.earthsci.bookmark.model.IBookmarkProperty;

/**
 * A property that records the layer state including enabled layers, opacity.
 * 
 * @author James Navin (james.navin@ga.gov.au)
 */
public class LayersProperty implements IBookmarkProperty {

    public static final String TYPE = "au.gov.ga.earthsci.bookmark.properties.layers"; //$NON-NLS-1$

    /**
     * Map of {@code Layer ID -> opacity}. Inclusion in the map implies enabled.
     */
    private Map<String, Map<String, String>> layerStateInfo = new ConcurrentHashMap<String, Map<String, String>>();

    @Override
    public String getType() {
        return TYPE;
    }

    @Override
    public String getName() {
        return Messages.LayersProperty_Name;
    }

    //
    //   /**
    //    * Return the (unmodifiable) layer state recorded on this property.
    //    * <p/>
    //    * To add additional layer state, use {@link #addLayer}.
    //    */
    //   public Map<String, Double> getLayerState()
    //   {
    //      return Collections.unmodifiableMap(layerState);
    //   }

    /**
     * Set the layer state on this property, replacing any already stored.
     */
    public void setLayerState(Map<String, Map<String, String>> newLayerState) {
        layerStateInfo.clear();
        layerStateInfo.putAll(newLayerState);
    }

    /**
     * Add additional layer state to this property.
     * 
     * @param id
     *            The id of the layer
     * @param opacity
     *            The opacity of the layer
     */
    public void addLayer(String id, Pair<String, String>... keyandValues) {
        if (!layerStateInfo.containsKey(id)) {
            layerStateInfo.put(id, new ConcurrentHashMap<String, String>());
        }
        for (Pair<String, String> pair : keyandValues) {
            layerStateInfo.get(id).put(pair.getKey(), pair.getValue());
        }

    }

    public Map<String, Map<String, String>> getLayerStateInfo() {
        return layerStateInfo;
    }

    /**
     * Add additional layer state to this property.
     * 
     * @param id
     *            The id of the layer
     * @param opacity
     *            The opacity of the layer
     */
    public void addLayer(String id, Double opacity, String name) {
        //      layerState.put(id, opacity);
        //      layerName.put(id, name);
        List<Pair<String, String>> pairs = new ArrayList<Pair<String, String>>();
        pairs.add(new ImmutablePair<String, String>("opacity", opacity.toString()));
        pairs.add(new ImmutablePair<String, String>("name", name));
        addLayer(id, pairs.toArray(new Pair[0]));

    }

}