Files
CS480-Personal-Navigation-S…/PA5/src/feature/Street.java
T

142 lines
2.8 KiB
Java

package feature;
import geography.GeographicShape;
import geography.PiecewiseLinearCurve;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Represents a street containing one or more segments.
*/
public class Street extends AbstractFeature
{
private static final String SPACE = " ";
private PiecewiseLinearCurve shape;
@SuppressWarnings("unused")
private String category;
@SuppressWarnings("unused")
private String code;
@SuppressWarnings("unused")
private String name;
@SuppressWarnings("unused")
private String prefix;
@SuppressWarnings("unused")
private String suffix;
private List<StreetSegment> segments;
/**
* @param prefix
* @param name
* @param category
* @param suffix
* @param code
*/
public Street(final String prefix, final String name, final String category, final String suffix,
final String code)
{
super(code);
this.shape = new PiecewiseLinearCurve(code);
this.prefix = prefix;
this.name = name;
this.category = category;
this.suffix = suffix;
this.code = code;
this.segments = new ArrayList<>();
}
/**
* @param segment
*/
public void addSegment(final StreetSegment segment)
{
segments.add(segment);
}
/**
* Create a canonical name from street components.
*
* @param prefix
* The street prefix (e.g., "N", "E")
* @param name
* The street name
* @param category
* The street category (e.g., "St", "Ave")
* @param suffix
* The street suffix (e.g., "NW", "SE")
* @return The canonical street name
*/
public static String createCanonicalName(final String prefix, final String name,
final String category, final String suffix)
{
StringBuilder sb = new StringBuilder();
if (prefix != null)
{
sb.append(prefix).append(SPACE);
}
if (name != null)
{
sb.append(name).append(SPACE);
}
if (category != null)
{
sb.append(category).append(SPACE);
}
if (suffix != null)
{
sb.append(suffix);
}
return sb.toString().trim();
}
/**
* Get the segments of this street.
*
* @param number
* @return The list of segments
*/
public List<StreetSegment> getSegments(final int number)
{
List<StreetSegment> numSegments = new ArrayList<>();
for (StreetSegment segment : this.segments)
{
if (segment.getLowAddress() <= number && segment.getHighAddress() >= number)
{
numSegments.add(segment);
}
}
return numSegments;
}
/**
* @return The segments
*/
public Iterator<StreetSegment> getSegments()
{
return segments.iterator();
}
@Override
public GeographicShape getGeographicShape()
{
return shape;
}
/**
* @return The size
*/
public int getSize()
{
return segments.size();
}
}