Rev 2162 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright (C) 2011.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 or
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
package uk.me.parabola.imgfmt.app.mdr;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import uk.me.parabola.imgfmt.app.ImgFileWriter;
import uk.me.parabola.imgfmt.app.srt.Sort;
import uk.me.parabola.imgfmt.app.srt.SortKey;
/**
* Cities sorted by country.
*
* @author Steve Ratcliffe
*/
public class Mdr25
extends MdrSection
{
private final List<Mdr5Record
> cities =
new ArrayList<Mdr5Record
>();
public Mdr25
(MdrConfig config
) {
setConfig
(config
);
}
/**
* Cities are sorted by country and then by the mdr5 city record number.
* @param list The complete list of cities from mdr5.
*/
public void sortCities
(List<Mdr5Record
> list
) {
Sort sort = getConfig
().
getSort();
List<SortKey<Mdr5Record
>> keys =
new ArrayList<SortKey<Mdr5Record
>>();
for (Mdr5Record c : list
) {
SortKey<Mdr5Record
> key = sort.
createSortKey(c, c.
getMdrCountry().
getName(), c.
getGlobalCityIndex());
keys.
add(key
);
}
Collections.
sort(keys
);
String lastName =
null;
Mdr5Record lastCity =
null;
int record =
0;
for (SortKey<Mdr5Record
> key : keys
) {
Mdr5Record city = key.
getObject();
if (lastCity ==
null ||
(!city.
getName().
equals(lastCity.
getName()) ||
!(city.
getRegionName().
equals(lastCity.
getRegionName()))))
{
record++
;
// Record in the 29 index if there is one for this record
Mdr14Record mdrCountry = city.
getMdrCountry();
Mdr29Record mdr29 = mdrCountry.
getMdr29();
String name = mdr29.
getName();
assert mdrCountry.
getName().
equals(name
);
if (!name.
equals(lastName
)) {
mdr29.
setMdr25(record
);
lastName = name
;
}
cities.
add(city
);
lastCity = city
;
}
}
}
/**
* Write out the contents of this section.
*
* @param writer Where to write it.
*/
public void writeSectData
(ImgFileWriter writer
) {
int size = getItemSize
();
for (Mdr5Record city : cities
) {
putN
(writer, size, city.
getGlobalCityIndex());
}
}
/**
* One field pointing to a city. Not flagged.
*/
public int getItemSize
() {
return getSizes
().
getCitySize();
}
/**
* The number of records in this section.
*
* @return The number of items in the section.
*/
protected int numberOfItems
() {
return cities.
size();
}
}