|  |  | 
 |  |  | import de.uhilger.mediaz.entity.Titel; | 
 |  |  | import de.uhilger.mediaz.store.FileStorage; | 
 |  |  | import de.uhilger.mediaz.store.Storage; | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.net.HttpURLConnection; | 
 |  |  | import java.net.MalformedURLException; | 
 |  |  | import java.net.URL; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.Map; | 
 |  |  | import java.util.logging.Level; | 
 |  |  | 
 |  |  |  | 
 |  |  |   public static final String PL_CMD_PLAY = "avd/play"; | 
 |  |  |   public static final String PL_DEFAULT_PARAMS = "?titel="; | 
 |  |  |   public static final String PL_PARAM_RUECK = "&r="; | 
 |  |  |   public static final String PL_API_STRG = "/api/strg/";  | 
 |  |  |   public static final String PL_CMD_ENDE = "ende"; | 
 |  |  |   public static final String DEFAULT_HOST = "http://localhost:9090"; | 
 |  |  |  | 
 |  |  |   private final Map spielt = new HashMap(); | 
 |  |  |  | 
 |  |  | 
 |  |  |         } | 
 |  |  |         break; | 
 |  |  |       case 8: | 
 |  |  |         response = listenTitelSpielen(fs, elems[4], elems[7]); | 
 |  |  |         response = erstenListentitelSpielen(fs, elems[4], elems[7]); | 
 |  |  |         break; | 
 |  |  |       default: | 
 |  |  |         response = "Ungueltiger URL"; | 
 |  |  | 
 |  |  |         Abspielliste liste = (Abspielliste) entity; | 
 |  |  |         int titelNr = av.getTitelNr(); | 
 |  |  |         if (liste.getTitel().size() > ++titelNr) { | 
 |  |  |           response = listenTitelSpielen(s, abspielerName, liste, titelNr); | 
 |  |  |           response = listentitelSpielen(s, abspielerName, liste, titelNr); | 
 |  |  |         } else { | 
 |  |  |           response = "Liste " + liste.getName() + " ist zuende gespielt."; | 
 |  |  |         } | 
 |  |  | 
 |  |  |     return response; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   private String listenTitelSpielen(Storage s, String aName, String lName) { | 
 |  |  |   private String erstenListentitelSpielen(Storage s, String aName, String lName) { | 
 |  |  |     String response; | 
 |  |  |     Entity entity = s.read(FileStorage.ST_ABSPIELLISTE, lName); | 
 |  |  |     if (entity instanceof Abspielliste) { | 
 |  |  |       Abspielliste liste = (Abspielliste) entity; | 
 |  |  |       response = listenTitelSpielen(s, aName, liste, 0); | 
 |  |  |       response = listentitelSpielen(s, aName, liste, 0); | 
 |  |  |     } else { | 
 |  |  |       response = meldung("Abspielliste nicht gefunden.", AbstractHandler.RTC_NOT_FOUND); | 
 |  |  |     } | 
 |  |  |     return response; | 
 |  |  |   } | 
 |  |  |  | 
 |  |  |   private String listenTitelSpielen(Storage s, String aName, Abspielliste liste, int titelNr) { | 
 |  |  |   private String listentitelSpielen(Storage s, String aName, Abspielliste liste, int titelNr) { | 
 |  |  |     String response; | 
 |  |  |     Entity entity = s.read(FileStorage.ST_ABSPIELER, aName); | 
 |  |  |     if (entity instanceof Abspieler) { | 
 |  |  | 
 |  |  |       String kommando = kommandoFuerTitel(s, liste, abspieler, titelNr); | 
 |  |  |       //String kommando = kmd.toString(); | 
 |  |  |       logger.info(kommando); | 
 |  |  |       //abspielerKommandoSenden(kommando); | 
 |  |  |       response = "Abspielen der Liste " + liste.getName() + " auf Abspieler " + aName + " gestartet."; | 
 |  |  |     } else { | 
 |  |  |       response = meldung("Abspieler nicht gefunden.", AbstractHandler.RTC_NOT_FOUND); | 
 |  |  | 
 |  |  |     vorgang.setListe(liste.getName()); | 
 |  |  |     vorgang.setTitelNr(titelNr); | 
 |  |  |     spielt.put(abspieler.getName(), vorgang); | 
 |  |  |      | 
 |  |  |     String server = getEinstellung(s, App.getRs(App.RB_HOST), DEFAULT_HOST); | 
 |  |  |  | 
 |  |  |     // Kommando an den Abspieler zusammenbauen | 
 |  |  |     StringBuilder kmd = new StringBuilder(); | 
 |  |  |     kmd.append(abspieler.getUrl()); | 
 |  |  |     kmd.append(PL_CMD_PLAY); | 
 |  |  |     // Parameter fuer den Abspieler holen | 
 |  |  |     Entity entity = s.read(Einstellung.class.getSimpleName(), App.getRs(App.RB_PLAYERPARAMS)); | 
 |  |  |     if (entity instanceof Einstellung) { | 
 |  |  |       Einstellung einstellung = (Einstellung) entity; | 
 |  |  |       kmd.append(einstellung.getValue()); | 
 |  |  |     } else { | 
 |  |  |       kmd.append(PL_DEFAULT_PARAMS); | 
 |  |  |     } | 
 |  |  |     kmd.append(getEinstellung(s, App.getRs(App.RB_PLAYERPARAMS), PL_DEFAULT_PARAMS)); | 
 |  |  |     kmd.append(server); | 
 |  |  |     kmd.append(titelUrl); | 
 |  |  |     // hier noch Rueckmeldung anfuegen | 
 |  |  |     kmd.append(PL_PARAM_RUECK); | 
 |  |  |     kmd.append(server); | 
 |  |  |     kmd.append(PL_API_STRG); | 
 |  |  |     kmd.append(abspieler.getName()); | 
 |  |  |     kmd.append("/ende"); | 
 |  |  |  | 
 |  |  |     return kmd.toString(); | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   private String getEinstellung(Storage s, String key, String standardWert) { | 
 |  |  |     Entity entity = s.read(Einstellung.class.getSimpleName(), key); | 
 |  |  |     if (entity instanceof Einstellung) { | 
 |  |  |       Einstellung einstellung = (Einstellung) entity; | 
 |  |  |       Object o = einstellung.getValue(); | 
 |  |  |       if(o instanceof String) { | 
 |  |  |         return o.toString(); | 
 |  |  |       } else { | 
 |  |  |         return standardWert; | 
 |  |  |       } | 
 |  |  |     } else { | 
 |  |  |       return standardWert; | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |   private void abspielerKommandoSenden(String kommando) { | 
 |  |  |     /* | 
 |  |  |       TODO hier evtl. mit mehreren Versuchen ausgleichen,  | 
 |  |  |       dass ein einzelner Versuch nicht 'durchkommt'... | 
 |  |  |     */ | 
 |  |  |     logger.info(kommando); | 
 |  |  |     try { | 
 |  |  |       HttpURLConnection conn = (HttpURLConnection) new URL(kommando).openConnection(); | 
 |  |  |       conn.setRequestMethod("GET"); | 
 |  |  |       conn.connect(); | 
 |  |  |       int status = conn.getResponseCode(); | 
 |  |  |       String msg = conn.getResponseMessage(); | 
 |  |  |       logger.log(Level.INFO, "Kommando {0} mit Status {1} {2} gesendet.", new Object[]{kommando, status, msg}); | 
 |  |  |     } catch(IOException ex) { | 
 |  |  |       logger.log(Level.INFO, ex.getMessage(), ex); | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |    | 
 |  |  |  | 
 |  |  |   // rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&th=60&ti=60&o=local | 
 |  |  |   // aUrl http://rpi4-wz:9090/ |