/* * MapFieldDemoSite.java * * Copyright � 1998-2011 Research In Motion Limited * * 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. * * Note: For the sake of simplicity, this sample application may not leverage * resource bundles and resource strings. However, it is STRONGLY recommended * that application developers make use of the localization features available * within the BlackBerry development platform to ensure a seamless application * experience across a variety of languages and geographies. For more information * on localizing your application, please refer to the BlackBerry Java Development * Environment Development Guide associated with this release. */ package com.rim.samples.device.mapfielddemo; import java.io.IOException; import javax.microedition.location.Coordinates; import net.rim.device.api.io.LineReader; import net.rim.device.api.ui.Color; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.Graphics; import net.rim.device.api.ui.XYPoint; /** * Site defines what a site is and how it is displayed. */ public class MapFieldDemoSite { // Colors private static final int DEFAULT_COLOR = 0x00666666; private static final int HIGHLIGHT_COLOR = 0x00FF6666; private int _color = DEFAULT_COLOR; // Address Information private int _streetNumber; private String _streetName; // Includes street type eg.: Main St., Parklane // Ave. private String _city; private String _province; private String _country; // Visual Information private int _numberOfPoints; // Regarding building shape. private int _siteNumber; // Applicable only to sites with more than one // building - 'N\A' otherwise. private Coordinates _siteNumberPlacement; // Positioning of the site number // on map - 'N\A' if there's no // site number. private Coordinates[] _shape; private Coordinates[] _highlightableArea; // The area will be highlighted if // cursor is touching. // Other Information private boolean _standAloneSite; private final String _siteName; // 'N\A' if there is no name. private String _campus; // Map associated with the instance of this class. private final DemoMapField _map; /** * Initializes the given parameters. * * @param filePath * The file that contains all the site information. * @param siteName * The name of this particular site. * @param map * The map associated with the instance of this class. */ public MapFieldDemoSite(final String filePath, final String siteName, final DemoMapField map) { _siteName = siteName; _map = map; formatSite(filePath); } /** * Initializes all the elements that make up a site, determined by the * instance variables. * * @param filePath * The document that describes all the site's properties. */ private void formatSite(final String filePath) { final LineReader lineReader = new LineReader(getClass().getResourceAsStream(filePath)); byte[] line; try { for (;;) { line = lineReader.readLine(); // Check for end of file. if (MapFieldDemoTokenizer.getString(line).equals("EOF")) { break; } else { if (MapFieldDemoTokenizer.getString(line).equals( "Site Name:")) { if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals(_siteName)) { if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Is Stand-alone Site:")) { _standAloneSite = MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "true"); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Campus Display Name:")) { _campus = MapFieldDemoTokenizer .getString(lineReader .readLine()); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Default Campus Location:")) { lineReader.readLine(); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Street Number:")) { _streetNumber = MapFieldDemoTokenizer.getInt(lineReader .readLine()); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Street Name:")) { _streetName = MapFieldDemoTokenizer .getString(lineReader .readLine()); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals("City:")) { _city = MapFieldDemoTokenizer .getString(lineReader .readLine()); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals("Province:")) { _province = MapFieldDemoTokenizer .getString(lineReader .readLine()); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals("Country:")) { _country = MapFieldDemoTokenizer .getString(lineReader .readLine()); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Site Number:")) { // N\A if not applicable. line = lineReader.readLine(); if (!MapFieldDemoTokenizer.getString(line) .equals("N\\A")) { _siteNumber = MapFieldDemoTokenizer.getInt(line); } } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Site Number Placement:")) { // N\A if not applicable. line = lineReader.readLine(); if (!MapFieldDemoTokenizer.getString(line) .equals("N\\A")) { _siteNumberPlacement = MapFieldDemoTokenizer .getCoordinates(line); } } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Number of Points:")) { _numberOfPoints = MapFieldDemoTokenizer.getInt(lineReader .readLine()); } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals("Shape:")) { _shape = new Coordinates[_numberOfPoints]; for (int pointsCount = 0; pointsCount < _numberOfPoints; pointsCount++) { _shape[pointsCount] = MapFieldDemoTokenizer .getCoordinates(lineReader .readLine()); } } if (MapFieldDemoTokenizer.getString( lineReader.readLine()).equals( "Highlightable Area:")) { _highlightableArea = new Coordinates[4]; for (int pointsCount = 0; pointsCount < 4; pointsCount++) { _highlightableArea[pointsCount] = MapFieldDemoTokenizer .getCoordinates(lineReader .readLine()); } } break; } } } } } catch (final IOException e) { MapFieldDemo.errorDialog(e.toString()); } } /** * Determines how the site is to be displayed. * * @param g * A Graphics obeject. * @see Field#paint(Graphics) */ void drawSite(final Graphics g) { if (_map != null) { final XYPoint[] point = new XYPoint[_numberOfPoints]; final int[] xPts = new int[_numberOfPoints]; final int[] yPts = new int[_numberOfPoints]; // Converts the world coordinates of the map shape into pixels. for (int count = 0; count < _numberOfPoints; count++) { point[count] = new XYPoint(); _map.convertWorldToField(_shape[count], point[count]); } // For use in 'drawFilledPath' below. for (int count = 0; count < _numberOfPoints; count++) { xPts[count] = point[count].x; yPts[count] = point[count].y; } g.setColor(_color); g.drawFilledPath(xPts, yPts, null, null); // Will only attempt to display site number if the zoom is 0 or 1. if (_map.getZoom() == 0) { // Display site number if available. if (_siteNumberPlacement != null) { g.setColor(Color.WHITE); final XYPoint relativePlacement = new XYPoint(); _map.convertWorldToField(_siteNumberPlacement, relativePlacement); g.drawText("" + _siteNumber, relativePlacement.x, relativePlacement.y); } } } } /** * Returns a boolean determining whether the site is highlighted or not. * * @return True if the site is highlighted, otherwise false. */ boolean isHighlighted() { return _color == HIGHLIGHT_COLOR; } /** * Highlights or removes the highlight on the site. * * @param value * True sets the highlight and false removes it. */ void setHighlight(final boolean value) { if (value) { _color = HIGHLIGHT_COLOR; } else { _color = DEFAULT_COLOR; } } /** * Returns the site name. * * @return Site name. */ String getSiteName() { return _siteName; } /** * Returns the street number. * * @return Street number. */ int getStreetNumber() { return _streetNumber; } /** * Returns the street name. * * @return Street name. */ String getStreetName() { return _streetName; } /** * Returns the city. * * @return City. */ String getCity() { return _city; } /** * Returns the province * * @return Province */ String getProvince() { return _province; } /** * Returns the country. * * @return Country */ String getCountry() { return _country; } /** * Returns the area that would cause the site to be highlighted if hovered * over as real world coordinates in degrees. * * @return Highlightable area. */ Coordinates[] getHighlightableArea() { return _highlightableArea; } /** * Returns the campus associated with the site. * * @return Campus. */ String getCampus() { return _campus; } /** * Returns whether the site is a stand alone site or not * * @return True if the site is a stand alone site, false otherwise */ boolean isStandAloneSite() { return _standAloneSite; } }