| | |
| | | package de.uhilger.mediaz; |
| | | |
| | | import com.sun.net.httpserver.HttpServer; |
| | | import de.uhilger.mediaz.api.AblageTestHandler; |
| | | import de.uhilger.mediaz.api.FileHandler; |
| | | import de.uhilger.mediaz.api.ListFileHandler; |
| | | import de.uhilger.mediaz.api.ListHandler; |
| | | import de.uhilger.mediaz.api.StopServerHandler; |
| | | import de.uhilger.mediaz.api.StoreHandler; |
| | | import de.uhilger.mediaz.api.StoreTestHandler; |
| | | import de.uhilger.mediaz.conf.Store; |
| | | import de.uhilger.mediaz.api.StorageHandler; |
| | | import de.uhilger.mediaz.store.FileStorage; |
| | | import de.uhilger.mediaz.entity.Ablageort; |
| | | import de.uhilger.mediaz.entity.ConfigurationElement; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.util.logging.Logger; |
| | | import java.net.InetSocketAddress; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.logging.Level; |
| | | import de.uhilger.mediaz.entity.Entity; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Die Klasse Server stellt Methoden zur Ausführung eines HTTP-Servers |
| | |
| | | public static final String RB_SERVER_START_MSG = "msgServerStart"; |
| | | public static final String RB_WEBROOT = "webroot"; |
| | | public static final String RB_STORE = "store"; |
| | | public static final String RB_ALIST= "alist"; |
| | | //public static final String RB_UI_ROOT = "uiroot"; |
| | | public static final String RB_STOP_SERVER = "stopServer"; |
| | | public static final String RB_ABLAGE_TEST = "testAblage"; |
| | | public static final String RB_STORE_TEST = "testStore"; |
| | | //public static final String RB_ABLAGE_TEST = "testAblage"; |
| | | //public static final String RB_STORE_TEST = "testStore"; |
| | | public static final String RB_SLASH = "slash"; |
| | | |
| | | private int port; |
| | |
| | | } |
| | | |
| | | /** |
| | | * Die Endpunkte ('Context'e) einrichten, unter denen die Dienste dieses |
| | | * Die Endpunkte einrichten, unter denen die Dienste dieses |
| | | * Servers erreichbar sein sollen und den Server starten |
| | | * |
| | | * @throws IOException wenn etwas schief geht, finden sich Angaben in diesem |
| | |
| | | |
| | | String wwwData = App.getInitParameter(App.getRs(App.RB_AP_WWW_DATA)); |
| | | File wwwDir = new File(wwwData); |
| | | //String ui = App.getInitParameter(App.getRs(App.RB_AP_UI)); |
| | | //File uiDir = new File(ui); |
| | | |
| | | HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); |
| | | server.createContext(ctx + App.getRs(RB_WEBROOT), |
| | | new FileHandler(wwwDir.getAbsolutePath())); |
| | | server.createContext(ctx + App.getRs(RB_WEBROOT), new FileHandler(wwwDir.getAbsolutePath())); |
| | | ablageorteEinklinken(server); |
| | | server.createContext(ctx + App.getRs(RB_STORE), new StoreHandler()); |
| | | //server.createContext(ctx + App.getRs(RB_UI_ROOT), new FileHandler(uiDir.getAbsolutePath())); |
| | | server.createContext(ctx + App.getRs(RB_STORE), new StorageHandler()); |
| | | server.createContext(ctx + App.getRs(RB_ALIST), new ListHandler()); |
| | | server.createContext(ctx + App.getRs(RB_STOP_SERVER), new StopServerHandler()); |
| | | server.createContext(ctx + App.getRs(RB_ABLAGE_TEST), new AblageTestHandler()); |
| | | server.createContext(ctx + App.getRs(RB_STORE_TEST), new StoreTestHandler()); |
| | | server.setExecutor(Executors.newFixedThreadPool(20)); |
| | | server.start(); |
| | | } |
| | | |
| | | private void ablageorteEinklinken(HttpServer server) throws ClassNotFoundException, IOException { |
| | | Store store = new Store(); |
| | | String conf = App.getInitParameter(App.getRs(App.RB_AP_CONF)); |
| | | File ablageortDir = new File(conf, Ablageort.class.getSimpleName()); |
| | | File[] orte = ablageortDir.listFiles(); |
| | | if (orte != null) { |
| | | for (File ort : orte) { |
| | | ConfigurationElement elem = store.readFromFile(ort); |
| | | if (elem instanceof Ablageort) { |
| | | Ablageort ablageort = (Ablageort) elem; |
| | | server.createContext(ctx + ablageort.getUrl(), |
| | | new FileHandler(new File(ablageort.getOrt()).getAbsolutePath())); |
| | | } |
| | | private void ablageorteEinklinken(HttpServer server) |
| | | throws ClassNotFoundException, IOException { |
| | | String typ = Ablageort.class.getSimpleName(); |
| | | FileStorage store = new FileStorage(App.getInitParameter(App.getRs(App.RB_AP_CONF))); |
| | | List<String> orte = store.list(typ); |
| | | Iterator<String> i = orte.iterator(); |
| | | while(i.hasNext()) { |
| | | String ortName = i.next(); |
| | | Entity e = store.read(typ, ortName); |
| | | if(e instanceof Ablageort) { |
| | | Ablageort ablageort = (Ablageort) e; |
| | | logger.log(Level.FINE, "{0}{1}", new Object[]{ctx, ablageort.getUrl()}); |
| | | logger.fine(ablageort.getOrt()); |
| | | server.createContext(ctx + ablageort.getUrl(), |
| | | new ListFileHandler(new File(ablageort.getOrt()).getAbsolutePath())); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |