SiLeBAT/FSK-Lab

View on GitHub
org.hsh.bfr.db/src/org/hsh/bfr/db/BackupMyDBI.java

Summary

Maintainability
D
2 days
Test Coverage
/*******************************************************************************
* Copyright (c) 2015 Federal Institute for Risk Assessment (BfR), Germany
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Department Biological Safety - BfR
*******************************************************************************/
package org.hsh.bfr.db;
 
import java.io.File;
import java.sql.Connection;
import java.text.SimpleDateFormat;
import java.util.Calendar;
 
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
 
import org.hsh.bfr.db.gui.dbtable.MyDBTable;
import org.hsh.bfr.db.gui.dbtable.header.GuiMessages;
 
/**
* @author Armin
*
*/
public class BackupMyDBI extends FileFilter {
 
public static boolean dbBackup() {
return dbBackup(DBKernel.mainFrame);
}
 
Method `dbBackup` has a Cognitive Complexity of 15 (exceeds 5 allowed). Consider refactoring.
Method `dbBackup` has 32 lines of code (exceeds 25 allowed). Consider refactoring.
public static boolean dbBackup(final JFrame frame) {
Define a constant instead of duplicating this literal "LAST_OUTPUT_DIR" 4 times.
String lastOutDir = DBKernel.prefs.get("LAST_OUTPUT_DIR", "");
JFileChooser fc = new JFileChooser(lastOutDir);
BackupMyDBI bkp = new BackupMyDBI();
fc.setFileFilter(bkp);
fc.setAcceptAllFileFilterUsed(false);
fc.setMultiSelectionEnabled(false);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Calendar c1 = Calendar.getInstance();
Define a constant instead of duplicating this literal ".tar.gz" 3 times.
fc.setSelectedFile(new File(DBKernel.myDBi.getDbUsername() + "_" + DBKernel.softwareVersion + "_" + sdf.format(c1.getTime()) + ".tar.gz"));
Define a constant instead of duplicating this literal "Backup" 3 times.
fc.setDialogTitle("Backup");
int returnVal = fc.showSaveDialog(frame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File selectedFile = fc.getSelectedFile();
if (selectedFile != null) {
DBKernel.prefs.put("LAST_OUTPUT_DIR", selectedFile.getParent());
DBKernel.prefs.prefsFlush();
Identical blocks of code found in 2 locations. Consider refactoring.
if (selectedFile.exists()) {
returnVal = JOptionPane.showConfirmDialog(frame, GuiMessages.getString("Soll die Datei ersetzt werden?"), GuiMessages.getString("Backup Datei bereits vorhanden"), JOptionPane.YES_NO_CANCEL_OPTION);
if (returnVal == JOptionPane.NO_OPTION) {
return dbBackup(frame);
} else if (returnVal == JOptionPane.YES_OPTION) {
;
} else {
return false;
}
}
dbBackup(frame, selectedFile, false);
}
} else if (returnVal == JFileChooser.CANCEL_OPTION) {
return false;
}
return true;
}
 
Method `dbBackup` has a Cognitive Complexity of 25 (exceeds 5 allowed). Consider refactoring.
Method `dbBackup` has 32 lines of code (exceeds 25 allowed). Consider refactoring.
Refactor this method to reduce its Cognitive Complexity from 24 to the 15 allowed.
private static void dbBackup(final JFrame frame, final File backupFile, final boolean silent) {
if (backupFile != null && backupFile.getParentFile().exists()) {
try {
if (backupFile.exists()) backupFile.delete();
Don't try to be smarter than the JVM, remove this call to run the garbage collector.
System.gc();
String filename = backupFile.getAbsolutePath();
if (!filename.endsWith(".tar.gz")) filename += ".tar.gz";
 
MyDBTable myDB = (DBKernel.mainFrame.getMyList() == null ? null : DBKernel.mainFrame.getMyList().getMyDBTable());
if (myDB != null) myDB.checkUnsavedStuff();
String answerErr = DBKernel.myDBi.dbBackup(filename);
Identical blocks of code found in 2 locations. Consider refactoring.
if (!silent) {
if (answerErr.length() == 0) {
JOptionPane.showMessageDialog(frame, "In '" + filename + "' " + GuiMessages.getString("wurde erfolgreich ein Backup der Datenbank erstellt!"), "Backup", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(frame, GuiMessages.getString("Das Backup der Datenbank ist fehlgeschlagen!") + "\n" + GuiMessages.getString("Die Fehlermeldung lautet") + ":\n" + answerErr, "Backup", JOptionPane.ERROR_MESSAGE);
}
}
Don't try to be smarter than the JVM, remove this call to run the garbage collector.
System.gc();
 
if (myDB != null) {
myDB.initConn(DBKernel.myDBi.getConn());
if (myDB.getActualTable() != null) {
myDB.getActualTable().restoreProperties(myDB);
}
myDB.syncTableRowHeights();
}
 
} catch (Exception e) {
MyLogger.handleException(e);
}
}
if (DBKernel.isKNIME) {
DBKernel.mainFrame.dispose();
DBKernel.openDBGUI();
}
}
 
public static void doRestore(final MyDBTable myDB) {
String lastOutDir = DBKernel.prefs.get("LAST_OUTPUT_DIR", "");
JFileChooser fc = new JFileChooser(lastOutDir);
BackupMyDBI bkp = new BackupMyDBI();
fc.setFileFilter(bkp);
fc.setAcceptAllFileFilterUsed(false);
fc.setMultiSelectionEnabled(false);
Define a constant instead of duplicating this literal "Restore" 3 times.
fc.setDialogTitle("Restore");
int returnVal = fc.showOpenDialog(DBKernel.mainFrame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File selectedFile = fc.getSelectedFile();
if (selectedFile != null) {
DBKernel.prefs.put("LAST_OUTPUT_DIR", selectedFile.getParent());
DBKernel.prefs.prefsFlush();
}
doRestore(myDB, selectedFile, false, true);
}
}
 
Method `doRestore` has a Cognitive Complexity of 37 (exceeds 5 allowed). Consider refactoring.
Method `doRestore` has 46 lines of code (exceeds 25 allowed). Consider refactoring.
Refactor this method to reduce its Cognitive Complexity from 37 to the 15 allowed.
public static boolean doRestore(final MyDBTable myDB, final File scriptFile, final boolean silent, boolean doReconnect) {
boolean result = true;
if (scriptFile != null && scriptFile.exists()) {
if (!silent) {
Identical blocks of code found in 2 locations. Consider refactoring.
int returnVal = JOptionPane.showConfirmDialog(DBKernel.mainFrame,
GuiMessages.getString("Die Datenbank wird gelöscht!") + "\n" + GuiMessages.getString("Vielleicht sollten Sie vorher nochmal ein Backup machen...") + "\n"
+ GuiMessages.getString("Soll das Backup wirklich eingespielt werden?"), GuiMessages.getString("Datenbank löschen"), JOptionPane.YES_NO_OPTION);
if (returnVal != JOptionPane.YES_OPTION) return result;
}
 
// Also los!
if (myDB != null) myDB.checkUnsavedStuff();
String answerErr = DBKernel.myDBi.dbRestore(scriptFile.getAbsolutePath());
try {
if (doReconnect && !DBKernel.isKNIME) {
Connection conn = DBKernel.myDBi.getConn();
Identical blocks of code found in 2 locations. Consider refactoring.
if (conn != null) {
if (myDB != null) {
myDB.initConn(conn);
myDB.setTable();
}
} else {
result = false;
}
}
Identical blocks of code found in 2 locations. Consider refactoring.
if (!silent && answerErr.length() == 0) {
JOptionPane.showMessageDialog(DBKernel.mainFrame, GuiMessages.getString("Fertig!"), "Restore", JOptionPane.INFORMATION_MESSAGE);
if (myDB != null && !DBKernel.isKNIME) {
myDB.myRefresh();
}
}
Identical blocks of code found in 2 locations. Consider refactoring.
} catch (Exception e) {
if (answerErr.length() > 0) {
answerErr += "\n";
}
answerErr += e.getMessage();
MyLogger.handleException(e);
}
Identical blocks of code found in 2 locations. Consider refactoring.
if (!silent && answerErr.length() > 0) {
JOptionPane.showMessageDialog(DBKernel.mainFrame, GuiMessages.getString("Das Wiederherstellen der Datenbank ist fehlgeschlagen!") + "\n" + GuiMessages.getString("Die Fehlermeldung lautet") + ":\n" + answerErr, "Restore",
JOptionPane.ERROR_MESSAGE);
}
Don't try to be smarter than the JVM, remove this call to run the garbage collector.
System.gc();
}
if (doReconnect && DBKernel.isKNIME) {
DBKernel.mainFrame.dispose();
DBKernel.openDBGUI();
}
return result;
}
 
@Override
public boolean accept(final File f) {
if (f.isDirectory()) {
return true;
}
 
String extension = getExtension(f);
if (extension.equals("tar.gz") || extension.equals("gz.zip")) {
return true;
}
return false;
}
 
@Override
public String getDescription() {
return GuiMessages.getString("Backup Datei") + " (*.tar.gz;*.zip)";
}
 
Identical blocks of code found in 2 locations. Consider refactoring.
private String getExtension(final File f) {
String s = f.getName();
int i = s.lastIndexOf('.');
int j = s.lastIndexOf('.', i - 1);
if (j > 0 && j < s.length() - 1) {
return s.substring(j + 1).toLowerCase();
} else if (i > 0 && i < s.length() - 1) {
return s.substring(i + 1).toLowerCase();
}
return "";
}
 
}