package com.revolsys.gis.grid;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.revolsys.logging.Logs;
import com.revolsys.util.Property;
public class RectangularMapGridFactory {
public static final Map<String, String> gridClassNamesByName = new LinkedHashMap<>();
public static final List<String> gridNames;
static {
addGrid("NTS 1:1 000 000", Nts1000000RectangularMapGrid.class);
addGrid("NTS 1:500 000", Nts500000RectangularMapGrid.class);
addGrid("NTS 1:250 000", Nts250000RectangularMapGrid.class);
addGrid("NTS 1:125 000", Nts125000RectangularMapGrid.class);
addGrid("NTS 1:50 000", Nts50000RectangularMapGrid.class);
addGrid("NTS 1:25 000", Nts25000RectangularMapGrid.class);
addGrid("BCGS 1:20 000", Bcgs20000RectangularMapGrid.class);
addGrid("BCGS 1:10 000", Bcgs10000RectangularMapGrid.class);
addGrid("BCGS 1:5 000", Bcgs5000RectangularMapGrid.class);
addGrid("BCGS 1:2 500", Bcgs2500RectangularMapGrid.class);
addGrid("BCGS 1:2 000", Bcgs2000RectangularMapGrid.class);
addGrid("BCGS 1:1 250", Bcgs1250RectangularMapGrid.class);
addGrid("BCGS 1:1 000", Bcgs1000RectangularMapGrid.class);
addGrid("BCGS 1:500", Bcgs500RectangularMapGrid.class);
addGrid("MTO", MtoRectangularMapGrid.class);
gridNames = Collections.unmodifiableList(new ArrayList<>(gridClassNamesByName.keySet()));
}
private static void addGrid(final String name,
final Class<? extends RectangularMapGrid> gridClass) {
final String className = gridClass.getName();
gridClassNamesByName.put(name, className);
}
public static RectangularMapGrid getGrid(final String name) {
try {
final String className = gridClassNamesByName.get(name);
if (Property.hasValue(className)) {
return (RectangularMapGrid)Class.forName(className).newInstance();
}
} catch (final Throwable e) {
Logs.error(RectangularMapGridFactory.class, "Unable to create grid for " + name, e);
}
return null;
}
public static RectangularMapGrid getGrid(final String name, final int inverseScale) {
if (name.equals("NTS")) {
switch (inverseScale) {
case 1000000:
return new Nts1000000RectangularMapGrid();
case 500000:
return new Nts500000RectangularMapGrid();
case 250000:
return new Nts250000RectangularMapGrid();
case 125000:
return new Nts125000RectangularMapGrid();
case 50000:
return new Nts50000RectangularMapGrid();
case 25000:
return new Nts25000RectangularMapGrid();
default:
return null;
}
} else if (name.equals("BCGS")) {
switch (inverseScale) {
case 20000:
return new Bcgs20000RectangularMapGrid();
case 10000:
return new Bcgs10000RectangularMapGrid();
case 5000:
return new Bcgs5000RectangularMapGrid();
case 2500:
return new Bcgs2500RectangularMapGrid();
case 2000:
return new Bcgs2000RectangularMapGrid();
case 1250:
return new Bcgs1250RectangularMapGrid();
case 1000:
return new Bcgs1000RectangularMapGrid();
case 500:
return new Bcgs500RectangularMapGrid();
default:
return null;
}
} else if (name.equals("MTO")) {
switch (inverseScale) {
case 0:
return new MtoRectangularMapGrid();
default:
return null;
}
}
return null;
}
public static Collection<String> getGridNames() {
return gridNames;
}
}