package controllers;
import java.awt.Point;
import java.util.LinkedList;
import java.util.concurrent.Callable;
import javax.swing.Action;
import models.Databases;
import models.Locations;
import models.StarDatabase;
import models.StarStorage;
import models.Stars;
import models.coordinates.LocationCoordinates;
import views.Star;
import controllers.Front.LocationAction;
/**
* Tools for controllers
*
* @author francois
*
*/
public class Helper {
protected static Iterable<Action> userLocationsToMenuActions() {
LinkedList<Action> lac = new LinkedList<Action>();
for (LocationCoordinates lc : Locations.getLocations())
lac.add(new LocationAction(lc));
return lac;
}
protected static void loadAllStars() {
for (StarDatabase db : Databases.getDatabases())
Stars.loadAndRegisterDatabaseFromFile(db);
}
protected static void loadStars(StarDatabase db) {
Stars.loadAndRegisterDatabaseFromFile(db);
}
protected static void loadDefaultStars() {
loadStars(Databases.getDefaultDb());
}
protected static void unloadStars(StarDatabase db) {
Stars.unloadStarsFromDatabase(db);
}
protected static Star getNearestStarFromPosition(Point position) {
// Algorithme ultra naif
StarStorage st = Stars.getStars();
double dist;
double min = Double.MAX_VALUE;
Star nearestStar = null;
for (Star currentStar : st)
if (currentStar.getPoint() != null) { // l'étoile est visible
dist = position.distance(currentStar.getPoint());
if(min > dist){
min = dist;
nearestStar = currentStar;
}
}
return nearestStar;
}
private static LinkedList<Callable<Integer>> stopActions = new LinkedList<>();
public static void registerStopAction(Callable<Integer> stopAction) {
stopActions.add(stopAction);
}
public static int stop() {
int ret = 0;
int reta = 0;
for (Callable<Integer> stopAction : stopActions) {
try {
reta = stopAction.call();
if (reta > ret)
ret = reta;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.exit(0);
return ret;
}
}