Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package de.tuttas.restful; import de.tuttas.config.Config; import de.tuttas.entities.Klasse; import de.tuttas.entities.Lehrer; import de.tuttas.entities.Verlauf; import de.tuttas.entities.Vertretung; import de.tuttas.restful.Data.AnwesenheitEintrag; import de.tuttas.restful.Data.VertretungsObject; import de.tuttas.restful.Data.Vetretungseintrag; import de.tuttas.servlets.MailFormatException; import de.tuttas.servlets.MailObject; import de.tuttas.servlets.MailSender; import de.tuttas.util.Log; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Date; import java.sql.Timestamp; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.Stateless; import javax.mail.internet.AddressException; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.persistence.TypedQuery; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; /** * Verwaltung der Vertertunghsmeldungen * @author Jrg */ @Path("vertretung") @Stateless public class VertretungsManager { private final Map<String, String> klassenlehrerStorage = new HashMap(); private final Map<String, String> vertertungslehrerStorage = new HashMap(); /** * Injection des EntityManagers */ @PersistenceContext(unitName = "DiklabuPU") EntityManager em; /** * Abfrage der Absenzmeldungen von bis * @param from von Datum * @param to bis Datum * @return Liste der Vertertungsobjekte */ @GET @Path("/{from}/{to}") public List<Vertretung> getVertretung(@PathParam("from") Date from, @PathParam("to") Date to) { Log.d("Webservice Vertretung GET from=" + from + " to=" + to); Query qb = em.createNamedQuery("findVertretungbyDate"); qb.setParameter("paramFromDate", from); qb.setParameter("paramToDate", to); List<Vertretung> v = qb.getResultList(); return v; } /** * Absenz Meldung abgeben * @param vo Vetretungsobjekt * @return Vertertungsobjekt mit ID oder NULL bei Fehlern */ @POST public VertretungsObject addVertretung(VertretungsObject vo) { Log.d("POST Vertretungsmanager"); Vertretung v = new Vertretung(vo.getEingereichtVon(), null, vo.getAbsenzLehrer(), new Timestamp(vo.getAbsenzAm().getTime()), ""); v.setKommentar(vo.getKommentar()); v.setEingereichtAm(new Timestamp(System.currentTimeMillis())); Log.d("setVertertung " + v.toString()); JSONArray ja = new JSONArray(); if (vo.getEintraege() != null) { String vorschlag = ""; klassenlehrerStorage.clear(); vertertungslehrerStorage.clear(); String content = loadTemplate(); Lehrer absender = em.find(Lehrer.class, vo.getEingereichtVon()); if (absender == null) { vo.setSuccess(false); vo.setMsg("Kann Absender Lehrer mit Krzel " + vo.getEingereichtVon() + " nicht finden!"); return vo; } if (absender.getEMAIL() == null) { vo.setSuccess(false); vo.setMsg("Absender keine EMail Adresse hinterlegt!"); return vo; } MailObject mo; try { mo = new MailObject(absender.getEMAIL(), null, null); } catch (MailFormatException ex) { vo.setSuccess(false); vo.setMsg(ex.getMessage()); return vo; } Lehrer absentLehrer = em.find(Lehrer.class, vo.getAbsenzLehrer()); if (absentLehrer == null) { vo.setSuccess(false); vo.setMsg("Kann Lehrer mit Krzel " + vo.getAbsenzLehrer() + " nicht finden!"); return vo; } if (absentLehrer.getEMAIL() == null) { vo.setWarning(true); vo.getWarningMsg().add("Fr absenten Lehrer mit ID " + absentLehrer.getId() + " ist keine EMail Adresse hinterlegt!"); } else { try { mo.addCC(absentLehrer.getEMAIL()); } catch (AddressException ex) { vo.setWarning(true); vo.getWarningMsg().add(ex.getMessage()); } catch (MailFormatException ex) { vo.setWarning(true); vo.getWarningMsg().add(ex.getMessage()); } } String subject = "Vertretungsvorschlag fr " + absentLehrer.getVNAME() + " " + absentLehrer.getNNAME() + "(" + absentLehrer.getId() + ") am " + vo.getAbsenzAm().toString(); mo.setSubject(subject); content = content.replace("[[ABSENZ]]", absentLehrer.getVNAME() + " " + absentLehrer.getNNAME()); content = content.replace("[[DATUM]]", vo.getAbsenzAm().toString()); content = content.replace("[[ABS]]", absender.getVNAME() + " " + absender.getNNAME()); if (vo.getKommentar() != null) { content = content.replace("[[KOMMENTAR]]", vo.getKommentar()); } else { content = content.replace("[[KOMMENTAR]]", ""); } for (Vetretungseintrag e : vo.getEintraege()) { ja.add(e.toJson()); Klasse klasse = em.find(Klasse.class, e.getIdKlasse()); if (klasse == null) { vo.setWarning(true); vo.getWarningMsg().add("Kann Klasse mit ID " + e.getIdKlasse() + " nicht finden!"); } else { String bem = "Vetretungsregelung fr " + vo.getAbsenzLehrer() + ":"; String von = ""; if (e.getAktion().equals("entfllt")) { bem += e.getAktion() + " " + e.getKommentar(); von = vo.getEingereichtVon(); } else { bem += e.getAktion() + " durch " + e.getVertreter() + " " + e.getKommentar(); von = e.getVertreter(); } String std = ""; if (e.getStunde() <= 9) { std += "0" + e.getStunde(); } else { std += "" + e.getStunde(); } Verlauf ver = new Verlauf(e.getIdKlasse(), new Timestamp(vo.getAbsenzAm().getTime()), std, von, "LF19", "N.N", bem, ""); em.merge(ver); em.flush(); if (klasse.getID_LEHRER() == null) { vo.setWarning(true); vo.getWarningMsg() .add("Der Klasse " + e.getKlasse() + " ist kein Klassenlehrer zugeordnet!"); } else { Lehrer klassenlehrer = em.find(Lehrer.class, klasse.getID_LEHRER()); if (klassenlehrer == null) { vo.setWarning(true); vo.getWarningMsg().add("Kann Klassenlehrer der Klasse " + klasse.getKNAME() + " mit Krzel " + klasse.getID_LEHRER() + " nicht finden!"); } else { if (klassenlehrer.getEMAIL() == null) { vo.setWarning(true); vo.getWarningMsg().add("Dem Klassenlehrer der Klasse " + klasse.getKNAME() + " mit Krzel " + klasse.getID_LEHRER() + " ist keine EMail zugeordnet!"); } else { if (!klassenlehrerStorage.containsKey(klassenlehrer.getId())) { klassenlehrerStorage.put(klassenlehrer.getId(), klassenlehrer.getEMAIL()); try { mo.addCC(klassenlehrer.getEMAIL()); } catch (AddressException ex) { vo.setSuccess(false); vo.setMsg(ex.getMessage()); return vo; } catch (MailFormatException ex) { vo.setWarning(true); vo.getWarningMsg().add(ex.getMessage()); } } } } } } if (e.getVertreter() != null && !e.getVertreter().equals("")) { Lehrer vertreter = em.find(Lehrer.class, e.getVertreter()); if (vertreter == null) { vo.setWarning(true); vo.getWarningMsg() .add("Kann Vertretungslehrer mit Krzel " + e.getVertreter() + " nicht finden!"); } else { vorschlag += " Stunde:" + e.getStunde() + " Klasse:" + e.getKlasse() + " (" + klasse.getID_LEHRER() + ") [" + e.getAktion() + "] " + vertreter.getVNAME() + " " + vertreter.getNNAME() + " (" + vertreter.getId() + ") " + e.getKommentar() + "\n"; if (vertreter.getEMAIL() == null) { vo.setWarning(true); vo.getWarningMsg().add("Dem Vertretungslehrer mit Krzel " + vertreter.getId() + " ist keine EMail zugeordnet!"); } else { if (!vertertungslehrerStorage.containsKey(vertreter.getEMAIL())) { vertertungslehrerStorage.put(vertreter.getId(), vertreter.getEMAIL()); } try { mo.addCC(vertreter.getEMAIL()); } catch (AddressException ex) { Logger.getLogger(VertretungsManager.class.getName()).log(Level.SEVERE, null, ex); } catch (MailFormatException ex) { vo.setWarning(true); vo.getWarningMsg().add(ex.getMessage()); } } } } else { vorschlag += " Stunde:" + e.getStunde() + " Klasse:" + e.getKlasse() + " (" + klasse.getID_LEHRER() + ") [" + e.getAktion() + "] " + e.getKommentar() + "\n"; } } content = content.replace("[[VOSCHLAEGE]]", vorschlag); mo.setContent(content); v.setJsonString(ja.toJSONString()); em.merge(v); em.flush(); try { mo.addRecipient("stundenplan@mmbbs.de"); } catch (AddressException ex) { Logger.getLogger(VertretungsManager.class.getName()).log(Level.SEVERE, null, ex); } catch (MailFormatException ex) { Logger.getLogger(VertretungsManager.class.getName()).log(Level.SEVERE, null, ex); } MailSender.getInstance().sendMail(mo); vo.setSuccess(true); vo.setMsg( "Vertretung eingereicht! EMail vesrendet an stundenplan@mmbbs.de und Kollegen und Kolleginnen benachtichtig!"); } else { vo.setSuccess(false); vo.setMsg("Keine Vertretungseintrge"); } return vo; } private String loadTemplate() { String pathTemplate = Config.class.getProtectionDomain().getCodeSource().getLocation().getPath(); pathTemplate = pathTemplate.substring(0, pathTemplate.indexOf("Config.class")); pathTemplate = pathTemplate + File.separator + "templateVertretung.txt"; Log.d("Path=" + pathTemplate); BufferedReader br; StringBuilder sb = new StringBuilder(); try { br = new BufferedReader(new InputStreamReader(new FileInputStream(pathTemplate), "UTF8")); String line = br.readLine(); while (line != null) { sb.append(line); sb.append(System.lineSeparator()); line = br.readLine(); } Log.d("Habe gelesen:" + sb); } catch (FileNotFoundException ex) { Logger.getLogger(UmfagenManager.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(UmfagenManager.class.getName()).log(Level.SEVERE, null, ex); } return sb.toString(); } }