org.application.backupsync.server.Main.java Source code

Java tutorial

Introduction

Here is the source code for org.application.backupsync.server.Main.java

Source

/*
Copyright (C) 2011 Enrico Bianchi (enrico.bianchi@ymail.com)
Project       BackupSYNC
Description   A backup system
License       GPL version 2 (see GPL.txt for details)
 */

package org.application.backupsync.server;

import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
import org.apache.log4j.Appender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.ini4j.Wini;

public class Main {
    private Options opts;
    private Wini cfg;

    public static final String VERSION = "1.0";
    public static Logger logger = Logger.getLogger("BackupSYNC");

    public Main() {
        this.opts = new Options();

        this.opts.addOption("h", "help", false, "Print this help");
        this.opts.addOption(OptionBuilder.withLongOpt("cfg").withDescription("Use the specified configuration file")
                .hasArg().withArgName("CFGFILE").create("c"));
        this.opts.addOption("H", false, "Hourly backup is executed");
        this.opts.addOption("D", false, "Daily backup is executed");
        this.opts.addOption("W", false, "Weekly backup is executed");
        this.opts.addOption("M", false, "Monthly backup is executed");

    }

    /**
     * Create log via log4j
     */
    private void setLog() {
        Appender appender;

        try {
            appender = new FileAppender(new PatternLayout("%d %-5p %c - %m%n"),
                    this.cfg.get("general", "log_file"));
            Main.logger.addAppender(appender);
            Main.logger.setLevel(Level.toLevel(this.cfg.get("general", "log_level")));
        } catch (IOException | SecurityException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.FATAL, null, ex);
            System.exit(2);
        }
    }

    /**
     * Open the configuration file
     * @param cfgFile a configuration file
     */
    private void setCfg(String cfgFile) {
        try {
            this.cfg = new Wini();
            this.cfg.load(new FileInputStream(cfgFile));
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.FATAL, null, ex);
            System.exit(2);
        }
    }

    public void printHelp() {
        HelpFormatter formatter = new HelpFormatter();
        formatter.printHelp("BackupSYNC", this.opts);
        System.exit(0);
    }

    public void go(String[] args) throws ParseException {
        CommandLine cmd;
        CommandLineParser parser;
        Sync sync;

        parser = new PosixParser();
        cmd = parser.parse(this.opts, args);

        if (cmd.hasOption("h") || cmd.hasOption("help")) {
            this.printHelp();
        }

        if (!cmd.hasOption("cfg")) {
            System.out.println("No configuration file defined (see help)");
            System.exit(1);
        } else {
            this.setCfg(cmd.getOptionValue("cfg"));
        }

        sync = new Sync(this.cfg);

        if (cmd.hasOption("H")) {
            sync.setMode("hour");
        } else if (cmd.hasOption("D")) {
            sync.setMode("day");
        } else if (cmd.hasOption("W")) {
            sync.setMode("week");
        } else if (cmd.hasOption("M")) {
            sync.setMode("month");
        }

        this.setLog();
        Main.logger.info("BackupSYNC " + VERSION);

        sync.go();
    }

    public static void main(String[] args) {
        Main m;

        m = new Main();

        if (args.length == 0) {
            m.printHelp();
        }

        try {
            m.go(args);
        } catch (ParseException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.FATAL, null, ex);
            System.exit(2);
        }
    }
}