/*******************************************************************************
* Copyright (c) 2010 Stefan A. Tzeggai.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* Stefan A. Tzeggai - initial API and implementation
******************************************************************************/
package org.geopublishing.atlasViewer.swing;
import java.util.LinkedList;
import java.util.List;
import javax.swing.ListModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import org.apache.log4j.Logger;
import org.geotools.map.MapContext;
import org.geotools.map.event.MapLayerListEvent;
import org.geotools.map.event.MapLayerListListener;
/**
* A ListModel that represents the order of a {@link MapContext}
*
* @author Stefan Alfons Tzeggai
*/
// TODO add noch nicht möglich???
public final class MapContextListModel implements ListModel {
final static Logger log = Logger.getLogger(MapContextListModel.class);
List<ListDataListener> modelListeners = new LinkedList<ListDataListener>();
private MapContext mapContext;
public MapContextListModel(MapContext mapContext) {
this.mapContext = mapContext;
// TODO BESSER
mapContext.addMapLayerListListener(new MapLayerListListener() {
@Override
public void layerAdded(MapLayerListEvent event) {
for (ListDataListener l : modelListeners) {
l.contentsChanged(new ListDataEvent(this,
ListDataEvent.CONTENTS_CHANGED, 0, getSize()));
}
}
@Override
public void layerChanged(MapLayerListEvent event) {
for (ListDataListener l : modelListeners) {
l.contentsChanged(new ListDataEvent(this,
ListDataEvent.CONTENTS_CHANGED, 0, getSize()));
}
}
@Override
public void layerMoved(MapLayerListEvent event) {
for (ListDataListener l : modelListeners) {
l.contentsChanged(new ListDataEvent(this,
ListDataEvent.CONTENTS_CHANGED, 0, getSize()));
}
}
@Override
public void layerRemoved(MapLayerListEvent event) {
for (ListDataListener l : modelListeners) {
l.contentsChanged(new ListDataEvent(this,
ListDataEvent.CONTENTS_CHANGED, 0, getSize()));
}
}
//
@Override
public void layerPreDispose(MapLayerListEvent event) {
// GT 2.7.4
}
});
}
/**
* The order has to be turned around!
*/
@Override
public final Object getElementAt(int index) {
return mapContext.getLayer(mapContext.getLayerCount() - 1 - index);
}
@Override
public final int getSize() {
return mapContext.getLayerCount();
}
@Override
public final void addListDataListener(ListDataListener l) {
modelListeners.add(l);
}
@Override
public final void removeListDataListener(ListDataListener l) {
modelListeners.remove(l);
}
public final void remove(int index) {
mapContext.removeLayer(mapContext.getLayerCount() - 1 - index);
for (ListDataListener l : modelListeners) {
l.contentsChanged(new ListDataEvent(this,
ListDataEvent.CONTENTS_CHANGED, 0, getSize()));
}
}
public final void move(int from, int to) {
for (ListDataListener l : modelListeners) {
l.contentsChanged(new ListDataEvent(this,
ListDataEvent.CONTENTS_CHANGED, 0, getSize()));
}
mapContext.moveLayer(mapContext.getLayerCount() - 1 - from, mapContext
.getLayerCount()
- 1 - to);
}
public MapContext getMapContext() {
return mapContext;
}
}