/* * Copyright (C) 2016 Didier Clermonté * Copyright (C) 2016 Christian Pierre Momon * * This file is part of Siba. * * Siba is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package org.dclermonte.siba.cli; import java.io.File; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.ResourceBundle; import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.lang3.StringUtils; import org.dclermonte.siba.SibaException; import org.dclermonte.siba.model.SibaManager; /** * This class CLI is for use from Command Line Interface. * * */ public class SibaCLI { private static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.dclermonte.siba.cli.messages"); //$NON-NLS-1$ /** * * This method is called for Backup from CLI. * * @param directoryToSave * @param targetDirectory * @throws ArchiveException * @throws IOException * @throws SibaException */ public static void backup(final File directoryToSave, final File targetDirectory) throws ArchiveException, IOException, SibaException { File result; result = SibaManager.backup(directoryToSave, targetDirectory); System.out.println(BUNDLE.getString("confirmDialog.text") + result.getName()); //$NON-NLS-1$ return; } /** * * This method is called for Check from CLI. * * @param fileToCheck * @throws NoSuchAlgorithmException * @throws IOException */ public static void check(final File fileToCheck) throws NoSuchAlgorithmException, IOException { boolean result; result = SibaManager.check(fileToCheck); String yourFile = BUNDLE.getString("confirmDialogYourString.text"); //$NON-NLS-1$ String good = BUNDLE.getString("confirmDialogGood.text"); //$NON-NLS-1$ String bad = BUNDLE.getString("confirmDialogBad.text"); //$NON-NLS-1$ if (result) { System.out.println(yourFile + fileToCheck.getName() + good); } else { System.out.println(yourFile + fileToCheck.getName() + bad); } return; } /** * * This method send help response. * */ public static void help() { System.out.println("usage :"); System.out.println("Siba :"); System.out.println("Siba [-h |-help| --help]"); System.out.println("siba backup directoryToSave [target]"); System.out.println("siba check [filename | filename.tgz | filename.tgz.md5]"); } /** * * This method launch CLI. * * @param args * @throws ArchiveException * @throws IOException * @throws NoSuchAlgorithmException */ public static void run(final String[] args) throws ArchiveException, IOException, NoSuchAlgorithmException, SibaException { try { // This part implements an automate. int parameterCount = args.length; if (parameterCount == 0) { help(); } else { if (StringUtils.equals(args[0], "-h") || StringUtils.equals(args[0], "-help") || StringUtils.equals(args[0], "--help")) { help(); } else if (StringUtils.equals(args[0], "backup")) { if (parameterCount == 1) { System.out.println(BUNDLE.getString("missingDirectoryToSave.text")); help(); } else if (parameterCount == 2) { File directoryToSave = new File(args[1]); if (directoryToSave.exists()) { backup(directoryToSave, new File(System.getProperty("user.dir"))); } else { System.out.println(BUNDLE.getString("directoryToSaveNotExist.text")); help(); } } else if (parameterCount == 3) { File directoryToSave = new File(args[1]); File targetDirectory = new File(args[2]); if (directoryToSave.exists() && targetDirectory.exists()) { backup(directoryToSave, targetDirectory); } else { System.out.println(BUNDLE.getString("directoryNotExist.text")); help(); } } else { System.out.println(BUNDLE.getString("badUsage.text")); help(); } } else if (StringUtils.equals(args[0], "check")) { if (parameterCount == 1) { System.out.println(BUNDLE.getString("missingFileToCheck.text")); help(); } else { String fileToCheckName; if (!args[1].endsWith("tgz") && !args[1].endsWith("md5")) { fileToCheckName = args[1].concat(".tgz.md5"); } else if (args[1].endsWith("tgz")) { fileToCheckName = args[1].concat(".md5"); } else { fileToCheckName = args[1]; } File fileToCheck = new File(fileToCheckName); File fileToCheckFinal; if (!fileToCheck.isAbsolute()) { fileToCheckFinal = new File(System.getProperty("user.dir") + "/" + fileToCheckName); } else { fileToCheckFinal = new File(fileToCheckName); } if (fileToCheckFinal.exists()) { check(fileToCheckFinal); } else { System.out.println(BUNDLE.getString("missingFileToCheck.text")); help(); } } } else { System.out.println(BUNDLE.getString("badUsage.text")); help(); } } } catch (SibaException nullException) { System.out.println("SibaException = " + nullException.getMessage()); } } }