// Path: iolsucker/src/main/java/ar/com/leak/iolsucker/view/Repository.java
// public interface Repository {
//     /**
//      * Mensaje que le avisa al repositorio que se tiene esta materia.
//      *  
//      * @param course un curso
//      */
//     void touch(Course course);
//     
//     /**
//      * Sincroniza el material del curso en el repositorio (tipicamente
//      * descarga los archivos)
//      * 
//      * @param course un curso
//      */
//     void syncMaterial(Course course);
//     
//     /**
//      * @param observer observer. El argumento que deben recibir es del tipo 
//      *                 ObservableAction 
//      */
//     void addRepositoryListener(Observer observer);
//     
//     /**
//      * @param observers list of observers to add
//      */
//     void setRepositoryListeners(List /*Observer*/ observers);
//     
//     /**
//      * Una acción observable del repositorio
//      * 
//      * @author Juan F. Codagnone
//      * @since Aug 3, 2005
//      */
//     public class ObservableAction {
//         /** un mensaje...*/
//         private final String msg;
//         /** un tipo de acción...*/
//         private final ObservableActionEnum type;
//         /** el archivo que se modificó */
//         private final File file;
// 
//         /**
//          * Argumento pasado a los observers
//          *
//          * @param msg un mensaje
//          * @param type un tipo de acción
//          * @param file archivo que cambió
//          */
//         public ObservableAction(final String msg, 
//                 final ObservableActionEnum type, 
//                 final File file) {
//             this.msg = msg;
//             this.type = type;
//             this.file = file;
//         }
// 
//         /** @return el mensaje */
//         public final String getMsg() {
//             return msg;
//         }
// 
//         /** @return un tipo de acción */
//         public final ObservableActionEnum getType() {
//             return type;
//         }
//         
//         /** @return the file */
//         public final File getFile() {
//             return file;
//         }
//     }
//     
//     /**
//      * Type safe enum con las acciones observables por el navegador
//      * 
//      * @author Juan F. Codagnone
//      * @since Aug 3, 2005
//      */
//     public static final class ObservableActionEnum {
//         /** name of the enum entry*/
//         private final String name;
//        
//         /** se creó un nuevo directorio */
//         public static final ObservableActionEnum NEW_FOLDER = 
//                              new ObservableActionEnum("nueva carpeta");
//         /** se creó un nuevo archivo */
//         public static final ObservableActionEnum NEW_FILE = 
//                              new ObservableActionEnum("nuevo archivo");
//         
//         /** se republicó un nuevo archivo */
//         public static final ObservableActionEnum REPUBLISHED_FILE = 
//                              new ObservableActionEnum("se republicó archivo");
//         
//         /**
//          * Crea el ObservableActionEnum.
//          *
//          * @param name name of the enum entry
//          */
//         private ObservableActionEnum(final String name) {
//             this.name = name;
//         }
//         
//         /** @see Object#toString() */
//         public String toString() {
//             return name;
//         }
//     }
// }
// 
// Path: iolsucker/src/main/java/ar/com/leak/iolsucker/view/Repository.java
// public class ObservableAction {
//     /** un mensaje...*/
//     private final String msg;
//     /** un tipo de acción...*/
//     private final ObservableActionEnum type;
//     /** el archivo que se modificó */
//     private final File file;
// 
//     /**
//      * Argumento pasado a los observers
//      *
//      * @param msg un mensaje
//      * @param type un tipo de acción
//      * @param file archivo que cambió
//      */
//     public ObservableAction(final String msg, 
//             final ObservableActionEnum type, 
//             final File file) {
//         this.msg = msg;
//         this.type = type;
//         this.file = file;
//     }
// 
//     /** @return el mensaje */
//     public final String getMsg() {
//         return msg;
//     }
// 
//     /** @return un tipo de acción */
//     public final ObservableActionEnum getType() {
//         return type;
//     }
//         
//     /** @return the file */
//     public final File getFile() {
//         return file;
//     }
// }


import java.io.File;
import java.io.IOException;
import java.util.Observable;
import java.util.Observer;
import org.apache.log4j.*;
import org.apache.log4j.spi.LoggingEvent;
import ar.com.leak.iolsucker.view.Repository;
import ar.com.leak.iolsucker.view.Repository.ObservableAction;
/**
 * Copyright (c) 2005-2011 Juan F. Codagnone <http://juan.zaubersoftware.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ar.com.leak.iolsucker.view.common;





/**
 * Changelog de lo que pasa en el repositorio en formato txt
 *
 * @author Juan F. Codagnone
 * @since Aug 18, 2005
 */
public class TextChangelogObserver implements Observer {
    /** an appender */
    private final Appender appender;
    
    /**
     * Creates the TextChangelogObserver.
     *
     * @param outputFile cangelog filename
     * @throws IOException on error
     */
    public TextChangelogObserver(final File outputFile) throws IOException {
        appender = new RollingFileAppender(
                new PatternLayout("%d{HH:mm:ss} - %m%n"),
                outputFile.getAbsolutePath(), true);
    }

    /** @see java.util.Observer#update(Observable, Object) */
    public final void update(final Observable o, final Object arg) {
// Path: iolsucker/src/main/java/ar/com/leak/iolsucker/view/Repository.java
// public interface Repository {
//     /**
//      * Mensaje que le avisa al repositorio que se tiene esta materia.
//      *  
//      * @param course un curso
//      */
//     void touch(Course course);
//     
//     /**
//      * Sincroniza el material del curso en el repositorio (tipicamente
//      * descarga los archivos)
//      * 
//      * @param course un curso
//      */
//     void syncMaterial(Course course);
//     
//     /**
//      * @param observer observer. El argumento que deben recibir es del tipo 
//      *                 ObservableAction 
//      */
//     void addRepositoryListener(Observer observer);
//     
//     /**
//      * @param observers list of observers to add
//      */
//     void setRepositoryListeners(List /*Observer*/ observers);
//     
//     /**
//      * Una acción observable del repositorio
//      * 
//      * @author Juan F. Codagnone
//      * @since Aug 3, 2005
//      */
//     public class ObservableAction {
//         /** un mensaje...*/
//         private final String msg;
//         /** un tipo de acción...*/
//         private final ObservableActionEnum type;
//         /** el archivo que se modificó */
//         private final File file;
// 
//         /**
//          * Argumento pasado a los observers
//          *
//          * @param msg un mensaje
//          * @param type un tipo de acción
//          * @param file archivo que cambió
//          */
//         public ObservableAction(final String msg, 
//                 final ObservableActionEnum type, 
//                 final File file) {
//             this.msg = msg;
//             this.type = type;
//             this.file = file;
//         }
// 
//         /** @return el mensaje */
//         public final String getMsg() {
//             return msg;
//         }
// 
//         /** @return un tipo de acción */
//         public final ObservableActionEnum getType() {
//             return type;
//         }
//         
//         /** @return the file */
//         public final File getFile() {
//             return file;
//         }
//     }
//     
//     /**
//      * Type safe enum con las acciones observables por el navegador
//      * 
//      * @author Juan F. Codagnone
//      * @since Aug 3, 2005
//      */
//     public static final class ObservableActionEnum {
//         /** name of the enum entry*/
//         private final String name;
//        
//         /** se creó un nuevo directorio */
//         public static final ObservableActionEnum NEW_FOLDER = 
//                              new ObservableActionEnum("nueva carpeta");
//         /** se creó un nuevo archivo */
//         public static final ObservableActionEnum NEW_FILE = 
//                              new ObservableActionEnum("nuevo archivo");
//         
//         /** se republicó un nuevo archivo */
//         public static final ObservableActionEnum REPUBLISHED_FILE = 
//                              new ObservableActionEnum("se republicó archivo");
//         
//         /**
//          * Crea el ObservableActionEnum.
//          *
//          * @param name name of the enum entry
//          */
//         private ObservableActionEnum(final String name) {
//             this.name = name;
//         }
//         
//         /** @see Object#toString() */
//         public String toString() {
//             return name;
//         }
//     }
// }
// 
// Path: iolsucker/src/main/java/ar/com/leak/iolsucker/view/Repository.java
// public class ObservableAction {
//     /** un mensaje...*/
//     private final String msg;
//     /** un tipo de acción...*/
//     private final ObservableActionEnum type;
//     /** el archivo que se modificó */
//     private final File file;
// 
//     /**
//      * Argumento pasado a los observers
//      *
//      * @param msg un mensaje
//      * @param type un tipo de acción
//      * @param file archivo que cambió
//      */
//     public ObservableAction(final String msg, 
//             final ObservableActionEnum type, 
//             final File file) {
//         this.msg = msg;
//         this.type = type;
//         this.file = file;
//     }
// 
//     /** @return el mensaje */
//     public final String getMsg() {
//         return msg;
//     }
// 
//     /** @return un tipo de acción */
//     public final ObservableActionEnum getType() {
//         return type;
//     }
//         
//     /** @return the file */
//     public final File getFile() {
//         return file;
//     }
// }


// Path: iolsucker/src/main/java/ar/com/leak/iolsucker/view/common/TextChangelogObserver.java
import java.io.File;
import java.io.IOException;
import java.util.Observable;
import java.util.Observer;
import org.apache.log4j.*;
import org.apache.log4j.spi.LoggingEvent;
import ar.com.leak.iolsucker.view.Repository;
import ar.com.leak.iolsucker.view.Repository.ObservableAction;

/**
 * Copyright (c) 2005-2011 Juan F. Codagnone <http://juan.zaubersoftware.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ar.com.leak.iolsucker.view.common;





/**
 * Changelog de lo que pasa en el repositorio en formato txt
 *
 * @author Juan F. Codagnone
 * @since Aug 18, 2005
 */
public class TextChangelogObserver implements Observer {
    /** an appender */
    private final Appender appender;
    
    /**
     * Creates the TextChangelogObserver.
     *
     * @param outputFile cangelog filename
     * @throws IOException on error
     */
    public TextChangelogObserver(final File outputFile) throws IOException {
        appender = new RollingFileAppender(
                new PatternLayout("%d{HH:mm:ss} - %m%n"),
                outputFile.getAbsolutePath(), true);
    }

    /** @see java.util.Observer#update(Observable, Object) */
    public final void update(final Observable o, final Object arg) {
        final Repository.ObservableAction action = (ObservableAction)arg;