/*******************************************************************************
* Copyright (c) MOBAC developers
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package mobac.program.model;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Vector;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import mobac.program.annotations.AtlasCreatorName;
import mobac.program.atlascreators.AFTrack;
import mobac.program.atlascreators.AlpineQuestMap;
import mobac.program.atlascreators.AndNav;
import mobac.program.atlascreators.AtlasCreator;
import mobac.program.atlascreators.BackCountryNavigator;
import mobac.program.atlascreators.BigPlanetTracks;
import mobac.program.atlascreators.CacheBox;
import mobac.program.atlascreators.CacheWolf;
import mobac.program.atlascreators.GCLive;
import mobac.program.atlascreators.Galileo;
import mobac.program.atlascreators.GarminCustom;
import mobac.program.atlascreators.Glopus;
import mobac.program.atlascreators.GlopusMapFile;
import mobac.program.atlascreators.GoogleEarthOverlay;
import mobac.program.atlascreators.GpsSportsTracker;
import mobac.program.atlascreators.IPhone3MapTiles5;
import mobac.program.atlascreators.MBTiles;
import mobac.program.atlascreators.MGMaps;
import mobac.program.atlascreators.MagellanRmp;
import mobac.program.atlascreators.Maplorer;
import mobac.program.atlascreators.Maverick;
import mobac.program.atlascreators.MobileTrailExplorer;
import mobac.program.atlascreators.MobileTrailExplorerCache;
import mobac.program.atlascreators.NFComPass;
import mobac.program.atlascreators.NaviComputer;
import mobac.program.atlascreators.OSMAND;
import mobac.program.atlascreators.OSMAND_SQlite;
import mobac.program.atlascreators.OSMTracker;
import mobac.program.atlascreators.OruxMaps;
import mobac.program.atlascreators.OruxMapsSqlite;
import mobac.program.atlascreators.Osmdroid;
import mobac.program.atlascreators.OsmdroidGEMF;
import mobac.program.atlascreators.OsmdroidSQLite;
import mobac.program.atlascreators.Ozi;
import mobac.program.atlascreators.PNGWorldfile;
import mobac.program.atlascreators.PaperAtlasPdf;
import mobac.program.atlascreators.PaperAtlasPng;
import mobac.program.atlascreators.PathAway;
import mobac.program.atlascreators.RMapsSQLite;
import mobac.program.atlascreators.RunGPSAtlas;
import mobac.program.atlascreators.SportsTracker;
import mobac.program.atlascreators.TTQV;
import mobac.program.atlascreators.TileStoreDownload;
import mobac.program.atlascreators.TomTomRaster;
import mobac.program.atlascreators.TrekBuddy;
import mobac.program.atlascreators.TrekBuddyTared;
import mobac.program.atlascreators.TwoNavRMAP;
import mobac.program.atlascreators.Ublox;
import mobac.program.atlascreators.Viewranger;
import mobac.program.jaxb.AtlasOutputFormatAdapter;
@XmlRootElement
@XmlJavaTypeAdapter(AtlasOutputFormatAdapter.class)
public class AtlasOutputFormat implements Comparable<AtlasOutputFormat> {
public static List<AtlasOutputFormat> FORMATS;
public static final AtlasOutputFormat TILESTORE = createByClass(TileStoreDownload.class);
static {
FORMATS = new ArrayList<AtlasOutputFormat>(40);
FORMATS.add(createByClass(AFTrack.class));
FORMATS.add(createByClass(AlpineQuestMap.class));
FORMATS.add(createByClass(AndNav.class));
FORMATS.add(createByClass(BackCountryNavigator.class));
FORMATS.add(createByClass(BigPlanetTracks.class));
FORMATS.add(createByClass(CacheBox.class));
FORMATS.add(createByClass(CacheWolf.class));
FORMATS.add(createByClass(Galileo.class));
FORMATS.add(createByClass(GarminCustom.class));
FORMATS.add(createByClass(GCLive.class));
FORMATS.add(createByClass(Glopus.class));
FORMATS.add(createByClass(GlopusMapFile.class));
FORMATS.add(createByClass(GoogleEarthOverlay.class));
FORMATS.add(createByClass(GpsSportsTracker.class));
FORMATS.add(createByClass(IPhone3MapTiles5.class));
FORMATS.add(createByClass(MagellanRmp.class));
FORMATS.add(createByClass(Maplorer.class));
FORMATS.add(createByClass(Maverick.class));
FORMATS.add(createByClass(MBTiles.class));
FORMATS.add(createByClass(MGMaps.class));
FORMATS.add(createByClass(MobileTrailExplorer.class));
FORMATS.add(createByClass(MobileTrailExplorerCache.class));
FORMATS.add(createByClass(NaviComputer.class));
FORMATS.add(createByClass(NFComPass.class));
FORMATS.add(createByClass(OruxMaps.class));
FORMATS.add(createByClass(OruxMapsSqlite.class));
FORMATS.add(createByClass(OSMAND.class));
FORMATS.add(createByClass(OSMAND_SQlite.class));
FORMATS.add(createByClass(Osmdroid.class));
FORMATS.add(createByClass(OsmdroidGEMF.class));
FORMATS.add(createByClass(OsmdroidSQLite.class));
FORMATS.add(createByClass(OSMTracker.class));
FORMATS.add(createByClass(Ozi.class));
FORMATS.add(createByClass(PaperAtlasPdf.class));
FORMATS.add(createByClass(PaperAtlasPng.class));
FORMATS.add(createByClass(PathAway.class));
FORMATS.add(createByClass(PNGWorldfile.class));
FORMATS.add(createByClass(RMapsSQLite.class));
FORMATS.add(createByClass(RunGPSAtlas.class));
FORMATS.add(createByClass(SportsTracker.class));
FORMATS.add(createByClass(TomTomRaster.class));
FORMATS.add(createByClass(TTQV.class));
FORMATS.add(createByClass(TrekBuddyTared.class));
FORMATS.add(createByClass(TrekBuddy.class));
FORMATS.add(createByClass(TwoNavRMAP.class));
FORMATS.add(createByClass(Ublox.class));
FORMATS.add(createByClass(Viewranger.class));
FORMATS.add(TILESTORE);
}
public static Vector<AtlasOutputFormat> getFormatsAsVector() {
return new Vector<AtlasOutputFormat>(FORMATS);
}
public static AtlasOutputFormat getFormatByName(String Name) {
for (AtlasOutputFormat af : FORMATS) {
if (af.getTypeName().equals(Name))
return af;
}
throw new NoSuchElementException("Unknown atlas format: \"" + Name + "\"");
}
private Class<? extends AtlasCreator> atlasCreatorClass;
private String typeName;
private String name;
private static AtlasOutputFormat createByClass(Class<? extends AtlasCreator> atlasCreatorClass) {
AtlasCreatorName acName = atlasCreatorClass.getAnnotation(AtlasCreatorName.class);
if (acName == null)
throw new RuntimeException("AtlasCreator " + atlasCreatorClass.getName() + " has no name");
String typeName = acName.type();
if (typeName == null || typeName.length() == 0)
typeName = atlasCreatorClass.getSimpleName();
String name = acName.value();
return new AtlasOutputFormat(atlasCreatorClass, typeName, name);
}
private AtlasOutputFormat(Class<? extends AtlasCreator> atlasCreatorClass, String typeName, String name) {
this.atlasCreatorClass = atlasCreatorClass;
this.typeName = typeName;
this.name = name;
}
public String toString() {
return name;
}
public Class<? extends AtlasCreator> getMapCreatorClass() {
return atlasCreatorClass;
}
public String getTypeName() {
return typeName;
}
public AtlasCreator createAtlasCreatorInstance() {
if (atlasCreatorClass == null)
return null;
try {
return atlasCreatorClass.newInstance();
} catch (Throwable t) {
throw new RuntimeException(t);
}
}
public int compareTo(AtlasOutputFormat o) {
return getTypeName().compareTo(o.toString());
}
}