Ignore:
Timestamp:
2008-08-13T13:46:32+02:00 (16 years ago)
Author:
stotz
Message:

new: switching between different map types is now possible

Location:
applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer
Files:
2 added
9 edited
1 moved

Legend:

Unmodified
Added
Removed
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Demo.java

    r9713 r9780  
    66import java.awt.event.ActionEvent;
    77import java.awt.event.ActionListener;
     8import java.awt.event.ItemEvent;
     9import java.awt.event.ItemListener;
    810
    911import javax.swing.JButton;
    1012import javax.swing.JCheckBox;
     13import javax.swing.JComboBox;
    1114import javax.swing.JFrame;
    1215import javax.swing.JLabel;
    1316import javax.swing.JPanel;
     17
     18import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
    1419
    1520/**
     
    2934                final JMapViewer map = new JMapViewer();
    3035                // final JMapViewer map = new JMapViewer(new MemoryTileCache(),4);
    31                 // map.setTileLoader(new OsmFileCacheTileLoader(map,
    32                 // OsmTileLoader.MAP_MAPNIK));
     36                map.setTileLoader(new OsmFileCacheTileLoader(map));
    3337                // new DefaultMapController(map);
    3438                setLayout(new BorderLayout());
     
    3640                setExtendedState(JFrame.MAXIMIZED_BOTH);
    3741                JPanel panel = new JPanel();
     42                JPanel helpPanel = new JPanel();
    3843                add(panel, BorderLayout.NORTH);
    39                 JLabel label =
     44                add(helpPanel, BorderLayout.SOUTH);
     45                JLabel helpLabel =
    4046                                new JLabel("Use right mouse button to move,\n "
    4147                                                + "left double click or mouse wheel to zoom.");
    42                 panel.add(label);
     48                helpPanel.add(helpLabel);
    4349                JButton button = new JButton("setDisplayToFitMapMarkers");
    4450                button.addActionListener(new ActionListener() {
     
    4854                        }
    4955                });
    50                 panel.add(button);
     56                JComboBox tileSourceSelector =
     57                                new JComboBox(new Object[] { new OsmTileSource.Mapnik(),
     58                                                new OsmTileSource.TilesAtHome(), new OsmTileSource.CycleMap() });
     59                tileSourceSelector.addItemListener(new ItemListener() {
     60                        public void itemStateChanged(ItemEvent e) {
     61                                map.setTileSource((TileSource) e.getItem());
     62                        }
     63                });
     64                panel.add(tileSourceSelector);
    5165                final JCheckBox showMapMarker = new JCheckBox("Map markers visible");
    5266                showMapMarker.setSelected(map.getMapMarkersVisible());
     
    7690                });
    7791                panel.add(showZoomControls);
     92                panel.add(button);
    7893                add(map, BorderLayout.CENTER);
    7994
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapController.java

    r9530 r9780  
    2121public abstract class JMapController {
    2222
    23         JMapViewer map;
     23        protected JMapViewer map;
    2424
    2525        public JMapController(JMapViewer map) {
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java

    r9713 r9780  
    2626import org.openstreetmap.gui.jmapviewer.interfaces.MapMarker;
    2727import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
     28import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
    2829import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
    2930
     
    5152        protected TileLoader tileLoader;
    5253        protected TileCache tileCache;
     54        protected TileSource tileSource;
     55
    5356        protected List<MapMarker> mapMarkerList;
    5457        protected boolean mapMarkersVisible;
     
    9194        public JMapViewer(TileCache tileCache, int downloadThreadCount) {
    9295                super();
     96                tileSource = new OsmTileSource.Mapnik();
    9397                tileLoader = new OsmTileLoader(this);
    9498                this.tileCache = tileCache;
     
    111115
    112116        protected void initializeZoomSlider() {
    113                 zoomSlider = new JSlider(MIN_ZOOM, MAX_ZOOM);
     117                zoomSlider = new JSlider(MIN_ZOOM, tileSource.getMaxZoom());
    114118                zoomSlider.setOrientation(JSlider.VERTICAL);
    115119                zoomSlider.setBounds(10, 10, 30, 150);
     
    184188         *            longitude of the specified coordinate
    185189         * @param zoom
    186          *            {@link #MIN_ZOOM} <= zoom level <= {@link #MAX_ZOOM}
     190         *            {@link #MIN_ZOOM} <= zoom level <=
     191         *            {@link TileSource#getMaxZoom()}
    187192         */
    188193        public void setDisplayPositionByLatLon(Point mapPoint, double lat, double lon, int zoom) {
     
    197202
    198203        public void setDisplayPosition(Point mapPoint, int x, int y, int zoom) {
    199                 if (zoom > MAX_ZOOM || zoom < MIN_ZOOM)
     204                if (zoom > tileSource.getMaxZoom() || zoom < MIN_ZOOM)
    200205                        return;
    201206
     
    329334                int y_max = getHeight();
    330335
     336                // paint the tiles in a spiral, starting from center of the map
    331337                boolean painted = true;
    332338                int x = 0;
    333339                while (painted) {
    334340                        painted = false;
    335                         for (int y = 0; y < 4; y++) {
    336                                 if (y % 2 == 0)
     341                        for (int i = 0; i < 4; i++) {
     342                                if (i % 2 == 0)
    337343                                        x++;
    338                                 for (int z = 0; z < x; z++) {
    339                                         if (x_min <= posx && posx <= x_max && y_min <= posy && posy <= y_max) { // tile
    340                                                 // is
    341                                                 // visible
     344                                for (int j = 0; j < x; j++) {
     345                                        if (x_min <= posx && posx <= x_max && y_min <= posy && posy <= y_max) {
     346                                                // tile is visible
    342347                                                Tile tile = getTile(tilex, tiley, zoom);
    343348                                                if (tile != null) {
     
    418423
    419424        public void setZoom(int zoom, Point mapPoint) {
    420                 if (zoom > MAX_ZOOM || zoom == this.zoom)
     425                if (zoom > tileSource.getMaxZoom() || zoom == this.zoom)
    421426                        return;
    422427                Point2D.Double zoomPos = getPosition(mapPoint);
     
    444449                if (tilex < 0 || tilex >= max || tiley < 0 || tiley >= max)
    445450                        return null;
    446                 Tile tile = tileCache.getTile(tilex, tiley, zoom);
     451                Tile tile = tileCache.getTile(tileSource, tilex, tiley, zoom);
    447452                if (tile == null) {
    448                         tile = new Tile(tilex, tiley, zoom, loadingImage);
     453                        tile = new Tile(tileSource, tilex, tiley, zoom, loadingImage);
    449454                        tileCache.addTile(tile);
    450455                        tile.loadPlaceholderFromCache(tileCache);
    451456                }
    452457                if (!tile.isLoaded()) {
    453                         jobDispatcher.addJob(tileLoader.createTileLoaderJob(tilex, tiley, zoom));
     458                        jobDispatcher.addJob(tileLoader.createTileLoaderJob(tileSource, tilex, tiley, zoom));
    454459                }
    455460                return tile;
     
    527532        }
    528533
     534        public TileSource getTileLayerSource() {
     535                return tileSource;
     536        }
     537
     538        public void setTileSource(TileSource tileSource) {
     539                this.tileSource = tileSource;
     540                zoomSlider.setMaximum(tileSource.getMaxZoom());
     541                jobDispatcher.cancelOutstandingJobs();
     542                if (zoom > tileSource.getMaxZoom())
     543                        setZoom(tileSource.getMaxZoom());
     544                repaint();
     545        }
     546
    529547}
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java

    r9494 r9780  
    77
    88import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
     9import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
    910
    1011/**
     
    4445        }
    4546
    46         public Tile getTile(int x, int y, int z) {
    47                 CacheEntry entry = hashtable.get(Tile.getTileKey(x, y, z));
     47        public Tile getTile(TileSource source, int x, int y, int z) {
     48                CacheEntry entry = hashtable.get(Tile.getTileKey(source, x, y, z));
    4849                if (entry == null)
    4950                        return null;
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java

    r9619 r9780  
    1616import org.openstreetmap.gui.jmapviewer.interfaces.Job;
    1717import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
     18import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
    1819import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
    1920
     
    3233        public static final long FILE_AGE_ONE_WEEK = FILE_AGE_ONE_DAY * 7;
    3334
    34         protected String tileCacheDir;
     35        protected String cacheDirBase;
    3536
    3637        protected long maxFileAge = FILE_AGE_ONE_WEEK;
    3738
    38         public OsmFileCacheTileLoader(JMapViewer map, String baseUrl) {
    39                 super(map, baseUrl);
     39        public OsmFileCacheTileLoader(JMapViewer map) {
     40                super(map);
    4041                String tempDir = System.getProperty("java.io.tmpdir");
    4142                try {
     
    4344                                throw new IOException();
    4445                        File cacheDir = new File(tempDir, "JMapViewerTiles");
    45                         cacheDir = new File(cacheDir, Integer.toString(baseUrl.hashCode()));
    4646                        // System.out.println(cacheDir);
    4747                        if (!cacheDir.exists() && !cacheDir.mkdirs())
    4848                                throw new IOException();
    49                         tileCacheDir = cacheDir.getAbsolutePath();
     49                        cacheDirBase = cacheDir.getAbsolutePath();
    5050                } catch (Exception e) {
    51                         tileCacheDir = "tiles";
    52                 }
    53         }
    54 
    55         public OsmFileCacheTileLoader(JMapViewer map) {
    56                 this(map, MAP_MAPNIK);
    57         }
    58 
    59         public Job createTileLoaderJob(final int tilex, final int tiley, final int zoom) {
    60                 return new FileLoadJob(tilex, tiley, zoom);
     51                        cacheDirBase = "tiles";
     52                }
     53        }
     54
     55        public Job createTileLoaderJob(final TileSource source, final int tilex, final int tiley,
     56                        final int zoom) {
     57                return new FileLoadJob(source, tilex, tiley, zoom);
    6158        }
    6259
     
    6562
    6663                int tilex, tiley, zoom;
    67 
    68                 public FileLoadJob(int tilex, int tiley, int zoom) {
     64                TileSource source;
     65                File tileCacheDir;
     66
     67                public FileLoadJob(TileSource source, int tilex, int tiley, int zoom) {
    6968                        super();
     69                        this.source = source;
    7070                        this.tilex = tilex;
    7171                        this.tiley = tiley;
     
    7777                        Tile tile;
    7878                        synchronized (cache) {
    79                                 tile = cache.getTile(tilex, tiley, zoom);
     79                                tile = cache.getTile(source, tilex, tiley, zoom);
    8080                                if (tile == null || tile.isLoaded() || tile.loading)
    8181                                        return;
    8282                                tile.loading = true;
    8383                        }
     84                        tileCacheDir = new File(cacheDirBase, source.getName());
     85                        if (!tileCacheDir.exists())
     86                                tileCacheDir.mkdirs();
    8487                        try {
    8588                                long fileAge = 0;
     
    135138                        } catch (Exception e) {
    136139                                if (input == null /* || !input.isStopped() */)
    137                                         System.err.println("failed loading " + zoom + "/" + tilex
    138                                                         + "/" + tiley + " " + e.getMessage());
     140                                        System.err.println("failed loading " + zoom + "/" + tilex + "/" + tiley + " "
     141                                                        + e.getMessage());
    139142                        } finally {
    140143                                tile.loading = false;
     
    142145                }
    143146
    144                 protected byte[] loadTileInBuffer(URLConnection urlConn)
    145                                 throws IOException {
     147                protected byte[] loadTileInBuffer(URLConnection urlConn) throws IOException {
    146148                        input = urlConn.getInputStream();
    147                         ByteArrayOutputStream bout = new ByteArrayOutputStream(input
    148                                         .available());
     149                        ByteArrayOutputStream bout = new ByteArrayOutputStream(input.available());
    149150                        byte[] buffer = new byte[2048];
    150151                        boolean finished = false;
     
    176177                 * @throws IOException
    177178                 */
    178                 protected boolean isOsmTileNewer(Tile tile, long fileAge)
    179                                 throws IOException {
     179                protected boolean isOsmTileNewer(Tile tile, long fileAge) throws IOException {
    180180                        URL url;
    181                         url = new URL(baseUrl + "/" + tile.getKey() + ".png");
    182                         HttpURLConnection urlConn = (HttpURLConnection) url
    183                                         .openConnection();
     181                        url = new URL(tile.getUrl());
     182                        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    184183                        urlConn.setRequestMethod("HEAD");
    185184                        urlConn.setReadTimeout(30000); // 30 seconds read
     
    194193
    195194                protected File getTileFile(Tile tile) throws IOException {
    196                         return new File(tileCacheDir + "/" + tile.getZoom() + "_"
    197                                         + tile.getXtile() + "_" + tile.getYtile() + FILE_EXT);
     195                        return new File(tileCacheDir + "/" + tile.getZoom() + "_" + tile.getXtile() + "_"
     196                                        + tile.getYtile() + FILE_EXT);
    198197                }
    199198
    200199                protected void saveTileToFile(Tile tile, byte[] rawData) {
    201200                        try {
    202                                 FileOutputStream f = new FileOutputStream(tileCacheDir + "/"
    203                                                 + tile.getZoom() + "_" + tile.getXtile() + "_"
    204                                                 + tile.getYtile() + FILE_EXT);
     201                                FileOutputStream f =
     202                                                new FileOutputStream(tileCacheDir + "/" + tile.getZoom() + "_"
     203                                                                + tile.getXtile() + "_" + tile.getYtile() + FILE_EXT);
    205204                                f.write(rawData);
    206205                                f.close();
    207206                                // System.out.println("Saved tile to file: " + tile);
    208207                        } catch (Exception e) {
    209                                 System.err.println("Failed to save tile content: "
    210                                                 + e.getLocalizedMessage());
     208                                System.err.println("Failed to save tile content: " + e.getLocalizedMessage());
    211209                        }
    212210                }
     
    232230        }
    233231
    234         public String getTileCacheDir() {
    235                 return tileCacheDir;
     232        public String getCacheDirBase() {
     233                return cacheDirBase;
    236234        }
    237235
     
    239237                File dir = new File(tileCacheDir);
    240238                dir.mkdirs();
    241                 this.tileCacheDir = dir.getAbsolutePath();
     239                this.cacheDirBase = dir.getAbsolutePath();
    242240        }
    243241
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java

    r9619 r9780  
    1010import org.openstreetmap.gui.jmapviewer.interfaces.Job;
    1111import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
     12import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
    1213import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
    1314
     
    1920public class OsmTileLoader implements TileLoader {
    2021
    21         public static final String MAP_MAPNIK = "http://tile.openstreetmap.org";
    22         public static final String MAP_OSMA = "http://tah.openstreetmap.org/Tiles/tile";
    23 
    24         protected String baseUrl;
    25 
    2622        protected JMapViewer map;
    2723
    2824        public OsmTileLoader(JMapViewer map) {
    29                 this(map, MAP_MAPNIK);
     25                this.map = map;
    3026        }
    3127
    32         public OsmTileLoader(JMapViewer map, String baseUrl) {
    33                 this.map = map;
    34                 this.baseUrl = baseUrl;
    35         }
    36 
    37         public Job createTileLoaderJob(final int tilex, final int tiley,
     28        public Job createTileLoaderJob(final TileSource source, final int tilex, final int tiley,
    3829                        final int zoom) {
    3930                return new Job() {
     
    4536                                Tile tile;
    4637                                synchronized (cache) {
    47                                         tile = cache.getTile(tilex, tiley, zoom);
     38                                        tile = cache.getTile(source, tilex, tiley, zoom);
    4839                                        if (tile == null || tile.isLoaded() || tile.loading)
    4940                                                return;
     
    8374        protected HttpURLConnection loadTileFromOsm(Tile tile) throws IOException {
    8475                URL url;
    85                 url = new URL(baseUrl + "/" + tile.getKey() + ".png");
     76                url = new URL(tile.getUrl());
    8677                HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    8778                urlConn.setReadTimeout(30000); // 30 seconds read
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Tile.java

    r9618 r9780  
    1313
    1414import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
     15import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
    1516
    1617/**
     
    2223public class Tile {
    2324
     25        protected TileSource source;
    2426        protected int xtile;
    2527        protected int ytile;
     
    3537         * Creates a tile with empty image.
    3638         *
     39         * @param source
    3740         * @param xtile
    3841         * @param ytile
    3942         * @param zoom
    4043         */
    41         public Tile(int xtile, int ytile, int zoom) {
     44        public Tile(TileSource source, int xtile, int ytile, int zoom) {
    4245                super();
     46                this.source = source;
    4347                this.xtile = xtile;
    4448                this.ytile = ytile;
    4549                this.zoom = zoom;
    4650                this.image = null;
    47                 this.key = getTileKey(xtile, ytile, zoom);
    48         }
    49 
    50         public Tile(int xtile, int ytile, int zoom, BufferedImage image) {
    51                 this(xtile, ytile, zoom);
     51                this.key = getTileKey(source, xtile, ytile, zoom);
     52        }
     53
     54        public Tile(TileSource source, int xtile, int ytile, int zoom, BufferedImage image) {
     55                this(source, xtile, ytile, zoom);
    5256                this.image = image;
    5357        }
     
    5963         */
    6064        public void loadPlaceholderFromCache(TileCache cache) {
    61                 BufferedImage tmpImage = new BufferedImage(WIDTH, HEIGHT,
    62                                 BufferedImage.TYPE_INT_RGB);
     65                BufferedImage tmpImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
    6366                Graphics2D g = (Graphics2D) tmpImage.getGraphics();
    6467                // g.drawImage(image, 0, 0, null);
     
    7679                                for (int x = 0; x < factor; x++) {
    7780                                        for (int y = 0; y < factor; y++) {
    78                                                 Tile tile = cache.getTile(xtile_high + x, ytile_high
    79                                                                 + y, zoom_high);
     81                                                Tile tile =
     82                                                                cache.getTile(source, xtile_high + x, ytile_high + y, zoom_high);
    8083                                                if (tile != null && tile.isLoaded()) {
    8184                                                        paintedTileCount++;
     
    101104                                at.setTransform(scale, 0, 0, scale, -translate_x, -translate_y);
    102105                                g.setTransform(at);
    103                                 Tile tile = cache.getTile(xtile_low, ytile_low, zoom_low);
     106                                Tile tile = cache.getTile(source, xtile_low, ytile_low, zoom_low);
    104107                                if (tile != null && tile.isLoaded()) {
    105108                                        tile.paint(g, 0, 0);
     
    111114        }
    112115
     116        public TileSource getSource() {
     117                return source;
     118        }
     119
    113120        /**
    114121         * @return tile number on the x axis of this tile
     
    157164        public void setLoaded(boolean loaded) {
    158165                this.loaded = loaded;
     166        }
     167
     168        public String getUrl() {
     169                return source.getTileUrl(zoom, xtile, ytile);
    159170        }
    160171
     
    177188        @Override
    178189        public String toString() {
    179                 return "Tile " + getTileKey(xtile, ytile, zoom);
     190                return "Tile " + key;
    180191        }
    181192
     
    185196                        return false;
    186197                Tile tile = (Tile) obj;
    187                 return (xtile == tile.xtile) && (ytile == tile.ytile)
    188                                 && (zoom == tile.zoom);
    189         }
    190 
    191         public static String getTileKey(int xtile, int ytile, int zoom) {
    192                 return zoom + "/" + xtile + "/" + ytile;
     198                return (xtile == tile.xtile) && (ytile == tile.ytile) && (zoom == tile.zoom);
     199        }
     200
     201        public static String getTileKey(TileSource source, int xtile, int ytile, int zoom) {
     202                return zoom + "/" + xtile + "/" + ytile + "@" + source.getName();
    193203        }
    194204
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java

    r9494 r9780  
    1818         * will be returned.
    1919         *
     20         * @param source
    2021         * @param x
    2122         *            tile number on the x axis of the tile to be retrieved
     
    2728         *         present in the cache
    2829         */
    29         public Tile getTile(int x, int y, int z);
     30        public Tile getTile(TileSource source, int x, int y, int z);
    3031
    3132        /**
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileLoader.java

    r9619 r9780  
    1616         * load action.
    1717         *
     18         * @param tileLayerSource
    1819         * @param tilex
    1920         * @param tiley
     
    2223         *          action.
    2324         */
    24         public Job createTileLoaderJob(int tilex, int tiley, int zoom);
     25        public Job createTileLoaderJob(TileSource tileLayerSource, int tilex, int tiley, int zoom);
    2526}
  • applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java

    r9712 r9780  
    11package org.openstreetmap.gui.jmapviewer.interfaces;
     2
     3import org.openstreetmap.gui.jmapviewer.JMapViewer;
    24
    35//License: GPL. Copyright 2008 by Jan Peter Stotz
     
    79 * @author Jan Peter Stotz
    810 */
    9 public interface TileLayerSource {
     11public interface TileSource {
    1012
    1113        /**
    12          * Specifies the maximum zoom value. The number of zoom levels is [0..{@link #getMaxZoom()}]
    13          * 
    14          * @return maximum zoom value
     14         * Specifies the different mechanisms for detecting updated tiles
     15         * respectively only download newer tiles than those stored locally.
     16         *
     17         * <ul>
     18         * <li>{@link #IfNoneMatch} Server provides ETag header entry for all tiles
     19         * and <b>supports</b> conditional download via <code>If-None-Match</code>
     20         * header entry.</li>
     21         * <li>{@link #ETag} Server provides ETag header entry for all tiles but
     22         * <b>does not support</b> conditional download via
     23         * <code>If-None-Match</code> header entry.</li>
     24         * <li>{@link #IfModifiedSince} Server provides Last-Modified header entry
     25         * for all tiles and <b>supports</b> conditional download via
     26         * <code>If-Modified-Since</code> header entry.</li>
     27         * <li>{@link #LastModified} Server provides Last-Modified header entry for
     28         * all tiles but <b>does not support</b> conditional download via
     29         * <code>If-Modified-Since</code> header entry.</li>
     30         * </ul>
     31         *
     32         */
     33        public enum TileUpdateDetection {
     34                IfNoneMatch, ETag, IfModifiedSince, LastModified
     35        };
     36
     37        /**
     38         * Specifies the maximum zoom value. The number of zoom levels is [0..
     39         * {@link #getMaxZoom()}].
     40         *
     41         * @return maximum zoom value that has to be smaller or equal to
     42         *         {@link JMapViewer#MAX_ZOOM}
    1543         */
    1644        public int getMaxZoom();
    17        
     45
    1846        /**
    19          * @return Name of the tile layer
     47         * A tile layer name has to be unique and has to consist only of characters
     48         * valid for filenames.
     49         *
     50         * @return Name of the tile layer
    2051         */
    2152        public String getName();
    22        
     53
    2354        /**
    2455         * @param zoom
Note: See TracChangeset for help on using the changeset viewer.