package dk.daoas.adressevedligehold; import java.util.HashMap; import java.util.List; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import dk.daoas.adressevedligehold.beans.Address; import dk.daoas.adressevedligehold.beans.Address.AddressState; import dk.daoas.adressevedligehold.util.TimingHelper; public class AddressReport { class NumEntry { int open = 0; int closed = 0; int modified = 0; int created = 0; public void updateFromState(AddressState st) { if (st == AddressState.OPENED) open++; if (st == AddressState.MODIFIED) modified++; if (st == AddressState.CLOSED) closed++; } public void updateFromOther(NumEntry other) { this.open += other.open; this.modified += other.modified; this.closed += other.closed; this.created += other.created; } } class WeekEntry { NumEntry man = new NumEntry(); NumEntry tir = new NumEntry(); NumEntry ons = new NumEntry(); NumEntry tor = new NumEntry(); NumEntry fre = new NumEntry(); NumEntry lor = new NumEntry(); NumEntry son = new NumEntry(); public void incrementFromOther(WeekEntry other) { man.updateFromOther(other.man); tir.updateFromOther(other.tir); ons.updateFromOther(other.ons); tor.updateFromOther(other.tor); fre.updateFromOther(other.fre); lor.updateFromOther(other.lor); son.updateFromOther(other.son); } public void incrementCreated() { man.created++; tir.created++; ons.created++; tor.created++; fre.created++; lor.created++; son.created++; } } AddressManager addrManager; List
addressList; int entryCount; EntryUgedage ugedage; AddressSource source; TimingHelper timer; boolean writeBack; //TODO: Afviste adresser public AddressReport(AddressManager addrManager, int entryCount, EntryUgedage ugedage, AddressSource source, TimingHelper timer, boolean writeBack ) { this.addrManager = addrManager; addressList = addrManager.getAddressList(); this.entryCount = entryCount; this.ugedage = ugedage; this.source = source; this.timer = timer; this.writeBack = writeBack; } public void sendRapport() { System.out.println("Sending mail"); String reportData = getReportData(); String subject = "Indlæsnings rapport for " + source.getDistributor(); Properties props = new Properties(); props.put("mail.smtp.host", "10.30.1.28"); //props.put("mail.smtp.host", "192.168.12.10"); try { // create some properties and get the default Session Session session = Session.getDefaultInstance(props, null); session.setDebug(false); MimeMessage msg = new MimeMessage(session); msg.setFrom( new InternetAddress("no-reply@daoas.dk") ); msg.setRecipient(Message.RecipientType.TO, new InternetAddress("thn@daoas.dk") );//TODO: mulighed for at ændre modtager mail msg.setSubject( subject ); msg.setContent(reportData, "text/html; charset=utf-8"); Transport.send(msg); } catch (MessagingException e) { System.out.println("Unable to send report mail " + e.getMessage() ); } } public String getReportData() { WeekEntry total = new WeekEntry(); HashMap postnrEntries = new HashMap(); int antalUdenKommunekode = 0; int antalUdenLatitude = 0; int antalUdenDBKBane = 0; // first gather the intel for (Address a : addressList) { if (a.kommunekode == 0 || a.vejkode == 0) { antalUdenKommunekode++; } if (a.latitude == 0 || a.longitude == 0) { antalUdenLatitude++; } if (a.state == AddressState.NOT_CHANGED) { continue; } if (a.dbkBane == 0) { antalUdenDBKBane++; } WeekEntry weekEntry = postnrEntries.get(a.postnr); if (weekEntry == null) { weekEntry = new WeekEntry(); postnrEntries.put(a.postnr, weekEntry); } if (a.state == AddressState.CREATED) { weekEntry.incrementCreated(); } else { weekEntry.man.updateFromState(a.stateMan); weekEntry.tir.updateFromState(a.stateTir); weekEntry.ons.updateFromState(a.stateOns); weekEntry.tor.updateFromState(a.stateTor); weekEntry.fre.updateFromState(a.stateFre); weekEntry.lor.updateFromState(a.stateLor); weekEntry.son.updateFromState(a.stateSon); } } for (WeekEntry w : postnrEntries.values()) { total.incrementFromOther(w); } StringBuilder sb = new StringBuilder(); sb.append("

Indlæsnings rapport for " + source.getDistributor() + "

"); sb.append("Filnavn: ").append( source.getFilename() ).append("
"); sb.append("Tidsforbrug: ").append( timer.getElapsed() ).append("ms.
"); sb.append("Skriv til DB: ").append( writeBack ).append("
"); sb.append("Antal entries: " ).append( entryCount ).append("
"); sb.append("Antal afviste: " ).append( addrManager.getAfvistAntal() ).append("
"); sb.append("

Data Mangler

\n"); sb.append("
");
		sb.append("Mangler kommune/vejkode: ").append(antalUdenKommunekode).append("\n");
		sb.append("Mangler DBK bane: ").append(antalUdenDBKBane).append("\n");
		sb.append("Mangler latitude/longitude: ").append(antalUdenLatitude).append("\n");
		sb.append("
"); sb.append("

Ændrings oversigt

\n"); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append("
 MandagTirsdagOnsdagTorsdagFredagLørdagSøndag
Oprettet:").append(total.man.created).append("").append(total.tir.created).append("").append(total.ons.created).append("").append(total.tor.created).append("").append(total.fre.created).append("").append(total.lor.created).append("").append(total.son.created).append("
Åbnet:").append(total.man.open).append("").append(total.tir.open).append("").append(total.ons.open).append("").append(total.tor.open).append("").append(total.fre.open).append("").append(total.lor.open).append("").append(total.son.open).append("
Ændret:").append(total.man.modified).append("").append(total.tir.modified).append("").append(total.ons.modified).append("").append(total.tor.modified).append("").append(total.fre.modified).append("").append(total.lor.modified).append("").append(total.son.modified).append("
Lukket:").append(total.man.closed).append("").append(total.tir.closed).append("").append(total.ons.closed).append("").append(total.tor.closed).append("").append(total.fre.closed).append("").append(total.lor.closed).append("").append(total.son.closed).append("

\n"); return sb.toString(); } }