package com.kapti.pointsmanager; import com.kapti.client.user.PointsTransaction; import com.kapti.client.user.PointsTransactionFactory; import com.kapti.client.user.User; import com.kapti.client.user.UserFactory; import com.kapti.exceptions.StockPlayException; import com.kapti.pointsmanager.pointevents.IndividualEvents.IIndividualEvent; import com.kapti.pointsmanager.pointevents.RankingEvents.ARankingEvent; import com.kapti.pointsmanager.pointevents.RankingEvents.ProfitRanking; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Date; import java.util.Iterator; import org.apache.log4j.Logger; /** * * @author Dieter */ public class Main { //Login-informatie voor de backend private static String username = "stefaan"; private static String password = "eetlieverfrietjes"; private static Logger logger = Logger.getLogger(ProfitRanking.class); private static String section = null; //Houdt huidige sectie van config bij public static void main(String[] args) { try { //Valideren UserFactory.getInstance().verifyLogin(username, password); //Users opvragen Collection<User> users = UserFactory.getInstance().getAllUsers(); //Config bestand inlezen BufferedReader input = new BufferedReader(new FileReader(args[0])); String line = input.readLine(); while(line != null) { if(line.trim().equals("[RankingEvents]")) { section = "com.kapti.pointsmanager.pointevents.RankingEvents"; } else if(line.trim().equals("[IndividualEvents]")) { section = "com.kapti.pointsmanager.pointevents.IndividualEvents"; } else { if(section.equals("com.kapti.pointsmanager.pointevents.IndividualEvents")) loadIndividualEvent(section + "." + line, users); else loadRankingEvent(section + "." + line, users); } line = input.readLine(); } logger.info("Succesfully completed points calculation"); System.out.println("Succesfully completed points calculation"); } catch(FileNotFoundException ex) { logger.error("Error when trying to open configuration file", ex); } catch(Exception ex) { logger.error("Error while executing pointsmanager", ex); } } private static void loadIndividualEvent(String className, Collection<User> users) throws ClassNotFoundException, InstantiationException, IllegalAccessException, StockPlayException { //Klasse laden adhv naam Class loadedClass = Class.forName(className); //Instantie aanmaken (deze klassen hebben een lege constructor en hierdoor kan je gewoon newInstance aanroepen) IIndividualEvent individualEvent = (IIndividualEvent) loadedClass.newInstance(); Date startDate = new Date(); Iterator<User> iterator = users.iterator(); while(iterator.hasNext()) { User user = iterator.next(); if(individualEvent.getPoints(user) != 0) { PointsTransaction points = PointsTransactionFactory.getInstance().createTransaction(user, individualEvent.getType(), startDate); points.setDelta(individualEvent.getPoints(user)); points.setComment(individualEvent.getDescription()); PointsTransactionFactory.getInstance().makePersistent(points); logger.info(individualEvent.getType().toString() + " " + user.getNickname() + " " + individualEvent.getDescription() + " " + individualEvent.getPoints(user)); System.out.println(user.getNickname()); System.out.println(individualEvent.getDescription()); System.out.println(individualEvent.getPoints(user)); } } } private static void loadRankingEvent(String className, Collection<User> users) throws ClassNotFoundException, NoSuchMethodException, StockPlayException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { //Klasse laden adhv naam Class loadedClass = Class.forName(className); //Parameters van de gewenste constructor opgeven Class[] params = { Collection.class }; //Constructor ophalen die aan parameters voldoet Constructor cons = loadedClass.getConstructor(params); //Argumenten voor constructor Object[] args = { users }; //Object maken ARankingEvent rankingEvent = (ARankingEvent) cons.newInstance(args); Date startDate = new Date(); Iterator<User> iterator = users.iterator(); while(iterator.hasNext()) { User user = iterator.next(); if(rankingEvent.getDescription(user) != null) { PointsTransaction points = PointsTransactionFactory.getInstance().createTransaction(user, rankingEvent.getType(), startDate); points.setDelta(rankingEvent.getPoints(user)); points.setComment(rankingEvent.getDescription(user)); PointsTransactionFactory.getInstance().makePersistent(points); logger.info(rankingEvent.getType().toString() + " " + user.getNickname() + " " + rankingEvent.getDescription(user) + " " + rankingEvent.getPoints(user)); System.out.println(user.getNickname()); System.out.println(rankingEvent.getPoints(user)); System.out.println(rankingEvent.getDescription(user)); } } } }