package de.onyxbits.tradetrax.services; import java.text.DateFormat; import java.util.Date; import org.apache.tapestry5.hibernate.HibernateSessionSource; import org.apache.tapestry5.ioc.Messages; import org.hibernate.Session; import de.onyxbits.tradetrax.entities.LogEntry; import de.onyxbits.tradetrax.entities.Stock; public class EventLoggerImpl implements EventLogger { private Messages messages; private Session session; private MoneyRepresentation moneyRepresentation; public EventLoggerImpl(HibernateSessionSource source, Messages messages, SettingsStore settings, MoneyRepresentation moneyRepresentation) { this.messages = messages; this.session = source.create(); this.moneyRepresentation = moneyRepresentation; } public void liquidated(Stock stock) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); String profit = moneyRepresentation.databaseToUser((stock.getSellPrice() - stock.getBuyPrice()) * stock.getUnitCount(), false, true); e.setDetails(messages.format("log-event-liquidated-details", stock.getId(), profit)); e.setWhat(messages.get("log-event-liquidated")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } public void acquired(Stock stock) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); e.setDetails(messages.format("log-event-acquired-details", stock.getId())); e.setWhat(messages.get("log-event-acquired")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } public void split(Stock parent, Stock offspring) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); e.setDetails(messages.format("log-event-split-details", offspring.getUnitCount(), parent.getId(), offspring.getId())); e.setWhat(messages.get("log-event-split")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } public void merged(Stock accumulator, Stock collected) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); e.setDetails(messages.format("log-event-merged-details", collected.getUnitCount(), collected.getId(), accumulator.getId())); e.setWhat(messages.get("log-event-merged")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } public void deleted(Stock stock) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); e.setDetails(format(stock)); e.setWhat(messages.get("log-event-deleted")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } public void deleted(String name) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); e.setDetails(name); e.setWhat(messages.get("log-event-deleted")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } public void modified(Stock orig) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); e.setDetails(format(orig)); e.setWhat(messages.get("log-event-modified")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } public void rename(String orig, String now) { LogEntry e = new LogEntry(); e.setTimestamp(new Date()); e.setDetails(messages.format("log-event-rename-details", orig, now)); e.setWhat(messages.get("log-event-rename")); session.beginTransaction(); session.save(e); session.getTransaction().commit(); } private String format(Stock stock) { String name = ""; if (stock.getName() != null) { name = stock.getName().getLabel(); } String variant = ""; if (stock.getVariant() != null) { variant = stock.getVariant().getLabel(); } DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); String acquisition = ""; if (stock.getAcquired() != null) { acquisition = df.format(stock.getAcquired()); } String liquidation = ""; if (stock.getLiquidated() != null) { liquidation = df.format(stock.getLiquidated()); } String comment = stock.getComment(); if (comment == null) { comment = ""; } String location = stock.getLocation(); if (location == null) { location = ""; } return messages.format("log-stock", stock.getId(), name, variant, location, acquisition, moneyRepresentation.databaseToUser(stock.getBuyPrice(), true, true), stock.getUnitCount(), liquidation, moneyRepresentation.databaseToUser(stock.getSellPrice(), true, true), comment); } public String grep(Stock stock) { return messages.format("log-stock-id", stock.getId()); } }