    001    // This file is part of the Attempto Java Packages.
    002    // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
    003    //
    004    // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
    005    // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
    006    // either version 3 of the License, or (at your option) any later version.
    007    //
    008    // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
    009    // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    010    // PURPOSE. See the GNU Lesser General Public License for more details.
    011    //
    012    // You should have received a copy of the GNU Lesser General Public License along with the Attempto
    013    // Java Packages. If not, see http://www.gnu.org/licenses/.
    014
    015    package ch.uzh.ifi.attempto.acewiki;
    016
    017    import java.io.DataOutputStream;
    018    import java.io.File;
    019    import java.io.FileOutputStream;
    020    import java.io.IOException;
    021    import java.util.Calendar;
    022
    023    /**
    024     * This class is used to log the events on the server.
    025     *
    026     * @author Tobias Kuhn
    027     */
    028    public class Logger {
    029
    030            private final String ontologyName;
    031            private String username;
    032            private final int sessionID;
    033
    034            /**
    035             * Creates a new logger instance for the given ontology name, user name, and session id.
    036             *
    037             * @param ontologyName The ontology name.
    038             * @param username The user name.
    039             * @param sessionID The session id.
    040             */
    041            public Logger(String ontologyName, String username, int sessionID) {
    042                    this.ontologyName = ontologyName;
    043                    this.username = username;
    044                    this.sessionID = sessionID;
    045            }
    046
    047            /**
    048             * Creates a new logger instance for the given ontology name and session id. "anon" is used as user name.
    049             *
    050             * @param ontologyName The ontology name.
    051             * @param sessionID The session id.
    052             */
    053            public Logger(String ontologyName, int sessionID) {
    054                    this(ontologyName, "anon", sessionID);
    055            }
    056
    057            /**
    058             * Sets the user name.
    059             *
    060             * @param username The user name.
    061             */
    062            public void setUsername(String username) {
    063                    this.username = username;
    064            }
    065
    066            /**
    067             * Writes a log entry into the log file of the respective ontology.
    068             *
    069             * @param type The type of the log entry.
    070             * @param text The text of the log entry.
    071             */
    072            public void log(String type, String text) {
    073                    log(ontologyName, username, sessionID, type, text);
    074            }
    075
    076            /**
    077             * Writes a log entry into the specified log file.
    078             *
    079             * @param fileName The name of the log file.
    080             * @param userName The user name.
    081             * @param sessionID The session id.
    082             * @param type The type of the log entry.
    083             * @param text The text of the log entry.
    084             */
    085            public static void log(String fileName, String userName, int sessionID, String type, String text) {
    086                    Calendar c = Calendar.getInstance();
    087                    c.setTimeInMillis(System.currentTimeMillis());
    088                    String year = c.get(Calendar.YEAR) + "";
    089                    String month = makeString(c.get(Calendar.MONTH)+1, 2);
    090                    String day = makeString(c.get(Calendar.DAY_OF_MONTH), 2);
    091                    String hour = makeString(c.get(Calendar.HOUR_OF_DAY), 2);
    092                    String min = makeString(c.get(Calendar.MINUTE), 2);
    093                    String sec = makeString(c.get(Calendar.SECOND), 2);
    094                    String millis = makeString(c.get(Calendar.MILLISECOND), 3);
    095                    String timeStamp = year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec + "." + millis;
    096                    String session = userName + ":" + makeString(sessionID, 4);
    097                    try {
    098                            if (!(new File("logs")).exists()) (new File("logs")).mkdir();
    099                            DataOutputStream out = new DataOutputStream(new FileOutputStream("logs/" + fileName + ".log", true));
    100                            out.writeBytes(timeStamp + " [" + session + "] [" + type + "] " + text + "\n");
    101                            out.flush();
    102                            out.close();
    103                    } catch (IOException ex) {
    104                            ex.printStackTrace();
    105                    }
    106            }
    107
    108            private static String makeString(int value, int size) {
    109                    String s = value + "";
    110                    while (s.length() < size) {
    111                            s = "0" + s;
    112                    }
    113                    return s;
    114            }
    115
    116    }