001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/branches/2.2_testing/src/org/deegree/portal/context/LayerList.java $ 002 /*---------------- FILE HEADER ------------------------------------------ 003 004 This file is part of deegree. 005 Copyright (C) 2001-2008 by: 006 EXSE, Department of Geography, University of Bonn 007 http://www.giub.uni-bonn.de/deegree/ 008 lat/lon GmbH 009 http://www.lat-lon.de 010 011 This library is free software; you can redistribute it and/or 012 modify it under the terms of the GNU Lesser General Public 013 License as published by the Free Software Foundation; either 014 version 2.1 of the License, or (at your option) any later version. 015 016 This library is distributed in the hope that it will be useful, 017 but WITHOUT ANY WARRANTY; without even the implied warranty of 018 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 019 Lesser General Public License for more details. 020 021 You should have received a copy of the GNU Lesser General Public 022 License along with this library; if not, write to the Free Software 023 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 024 025 Contact: 026 027 Andreas Poth 028 lat/lon GmbH 029 Aennchenstr. 19 030 53115 Bonn 031 Germany 032 E-Mail: poth@lat-lon.de 033 034 Prof. Dr. Klaus Greve 035 Department of Geography 036 University of Bonn 037 Meckenheimer Allee 166 038 53115 Bonn 039 Germany 040 E-Mail: greve@giub.uni-bonn.de 041 042 043 ---------------------------------------------------------------------------*/ 044 package org.deegree.portal.context; 045 046 import java.util.ArrayList; 047 import java.util.List; 048 049 import org.deegree.portal.PortalException; 050 051 /** 052 * 053 * 054 * 055 * @version $Revision: 9346 $ 056 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 057 * @author last edited by: $Author: apoth $ 058 * 059 * @version 1.0. $Revision: 9346 $, $Date: 2007-12-27 17:39:07 +0100 (Do, 27 Dez 2007) $ 060 * 061 * @since 2.0 062 */ 063 public class LayerList { 064 065 private List<Layer> list = new ArrayList<Layer>( 50 ); 066 067 private List<Layer> treeList = new ArrayList<Layer>( 50 ); 068 069 /** 070 * Creates a new LayerList object. 071 * 072 * @param layers 073 */ 074 public LayerList( Layer[] layers ) { 075 setLayers( layers ); 076 } 077 078 /** 079 * returns a layer identifies by its name 080 * 081 * @param name name ofthe layer 082 * 083 * @return names layer 084 * @deprecated use @see #getLayer(String, String) instead 085 */ 086 public Layer getLayer( String name ) { 087 for ( Layer layer : list ) { 088 if ( layer.getName().equals( name ) ) { 089 return layer; 090 } 091 } 092 return null; 093 } 094 095 /** 096 * returns a layer identifies by its name and service address 097 * 098 * @param name name ofthe layer 099 * @param serverAddress address of the server which servers the layer 100 * 101 * @return named layer 102 */ 103 public Layer getLayer( String name, String serverAddress ) { 104 105 if ( serverAddress != null ) { 106 for ( Layer layer : list ) { 107 String s = layer.getServer().getOnlineResource().toExternalForm(); 108 if ( layer.getName().equals( name ) && s.equals( serverAddress ) ) { 109 return layer; 110 } 111 } 112 } else { 113 for ( Layer layer : list ) { 114 if ( layer.getName().equals( name ) ) { 115 return layer; 116 } 117 } 118 } 119 return null; 120 } 121 122 /** 123 * returns all layers of the web map context 124 * 125 * @return array of layers 126 */ 127 public Layer[] getLayers() { 128 Layer[] cl = new Layer[list.size()]; 129 return list.toArray( cl ); 130 } 131 132 /** 133 * sets all layers of the web map context 134 * 135 * @param layers 136 */ 137 public void setLayers( Layer[] layers ) { 138 this.list.clear(); 139 140 if ( layers != null ) { 141 for ( int i = 0; i < layers.length; i++ ) { 142 list.add( layers[i] ); 143 } 144 } 145 } 146 147 /** 148 * returns the layers of a node of the tree of the web map context 149 * 150 * @return array of layers 151 */ 152 public Layer[] getLayersByNodeId( int id ) { 153 List<Layer> nodeLayerList = new ArrayList<Layer>( list.size() ); 154 int parentNodeId; 155 for ( int k = 0; k < list.size(); k++ ) { 156 parentNodeId = ( list.get( k ) ).getExtension().getParentNodeId(); 157 if ( parentNodeId == id ) { 158 nodeLayerList.add( list.get( k ) ); 159 } 160 } 161 Layer[] nodeLayers = new Layer[nodeLayerList.size()]; 162 return nodeLayerList.toArray( nodeLayers ); 163 } 164 165 /** 166 * TODO: review this changed; it has been introduced as of TreeLayerView Portlet 167 * @param root 168 */ 169 public void orderLayerListByLayerTree( Node root ) { 170 treeList.clear(); 171 Node[] rootNode = new Node[1]; 172 rootNode[0] = root; 173 treeList = getLayerListByNode( rootNode ); 174 setLayers( treeList.toArray( new Layer[treeList.size()] ) ); 175 } 176 177 /** 178 * 179 * @param nodes 180 * @return list of layers 181 */ 182 private List<Layer> getLayerListByNode( Node[] nodes ) { 183 for ( int i = 0; i < nodes.length; i++ ) { 184 getLayerListByNode( nodes[i].getNodes() ); 185 Layer[] nl = getLayersByNodeId( nodes[i].getId() ); 186 for ( int j = 0; j < nl.length; j++ ) { 187 treeList.add( nl[j] ); 188 } 189 190 } 191 return treeList; 192 } 193 194 /** 195 * adds one layer to the the web map context. If a layer with the same 196 * name as the passed layer already exits it will be overwritten 197 * 198 * @param layer 199 */ 200 public void addLayer( Layer layer ) { 201 list.add( layer ); 202 } 203 204 /** 205 * adds one layer to the top of the web map context. If a layer with the same 206 * name as the passed layer already exits it will be overwritten 207 * 208 * @param layer 209 */ 210 public void addLayerToTop( Layer layer ) { 211 list.add( 0, layer ); 212 } 213 214 /** 215 * removes a layer identified by its name from the web map context 216 * 217 * @param name name of the layer to be removed 218 * 219 * @return removed layer 220 * @deprecated use @see #removeLayer(String, String) instead 221 */ 222 public Layer removeLayer( String name ) { 223 Layer layer = getLayer( name ); 224 list.remove( layer ); 225 return layer; 226 } 227 228 /** 229 * removes a layer identified by its name from the web map context 230 * 231 * @param name name of the layer to be removed 232 * @param serverAddress 233 * 234 * @return removed layer 235 */ 236 public Layer removeLayer( String name, String serverAddress ) { 237 Layer layer = getLayer( name, serverAddress ); 238 list.remove( layer ); 239 return layer; 240 } 241 242 /** 243 * moves a layer within the layer list up or down 244 * @param layer layer to be moved 245 * @param up if true the layer will be moved up otherwise 246 * it will be moved down 247 * @throws PortalException will be thrown if the layer is not known 248 * by the layer list. 249 */ 250 public void move( Layer layer, boolean up ) { 251 int i = 0; 252 Layer target = null; 253 while ( i < list.size() && target == null ) { 254 Layer tmp = list.get( i ); 255 if ( tmp.getName().equals( layer.getName() ) 256 && tmp.getServer().getOnlineResource().equals( 257 layer.getServer().getOnlineResource() ) ) { 258 target = tmp; 259 } 260 i++; 261 } 262 i--; 263 if ( i > 0 && up ) { 264 Layer o = list.get( i ); 265 list.set( i, list.get( i - 1 ) ); 266 list.set( i - 1, o ); 267 } else if ( i < list.size() - 1 && !up ) { 268 Layer o = list.get( i ); 269 list.set( i, list.get( i + 1 ) ); 270 list.set( i + 1, o ); 271 } 272 } 273 274 /** 275 * moves a layer within the layer list before the beforeLayer 276 * @param layer layer to be moved 277 * @param beforeLayer 278 * 279 */ 280 public void move( Layer layer, Layer beforeLayer ) { 281 int i = 0; 282 ArrayList<Layer> newList = new ArrayList<Layer>( list.size() ); 283 284 while ( i < list.size() ) { 285 Layer tmp = list.get( i ); 286 if ( tmp.getName().equals( beforeLayer.getName() ) 287 && tmp.getServer().getOnlineResource().equals( 288 beforeLayer.getServer().getOnlineResource() ) ) { 289 newList.add( layer ); 290 newList.add( beforeLayer ); 291 } else if ( tmp.getName().equals( layer.getName() ) 292 && tmp.getServer().getOnlineResource().equals( 293 layer.getServer().getOnlineResource() ) ) { 294 //do nothing 295 } else { 296 newList.add( tmp ); 297 } 298 i++; 299 } 300 list.clear(); 301 list = newList; 302 } 303 304 /** 305 * removes all layers from the web map context 306 */ 307 public void clear() { 308 list.clear(); 309 } 310 311 }