Skip to content

Commit

Permalink
Agregada utilidad para backups diarios cuando cerras el programa.
Browse files Browse the repository at this point in the history
  • Loading branch information
lleps committed Dec 24, 2016
1 parent 21c122a commit 2e2b8fe
Show file tree
Hide file tree
Showing 34 changed files with 612 additions and 285 deletions.
15 changes: 1 addition & 14 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

634 changes: 378 additions & 256 deletions .idea/workspace.xml

Large diffs are not rendered by default.

148 changes: 148 additions & 0 deletions exceptions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,151 @@ Stack trace: java.io.FileNotFoundException: C:\Users\Leandro\.monthly-fee-manage
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Error cargando categoria C:\Users\leand\.monthly-fee-management\categories\Maquinas


Stack trace: java.io.InvalidClassException: com.lleps.mfm.model.Payment; local class incompatible: stream classdesc serialVersionUID = -8759592827989754222, local class serialVersionUID = 71823917239812
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at java.util.ArrayList.readObject(ArrayList.java:791)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at com.lleps.mfm.Storage.loadCategoryFromFolder(Storage.java:125)
at com.lleps.mfm.Storage.loadAllCategories(Storage.java:94)
at com.lleps.mfm.Main.lambda$main$0(Main.java:19)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Error cargando categoria C:\Users\leand\.monthly-fee-management\categories\MMA


Stack trace: java.io.InvalidClassException: com.lleps.mfm.model.Payment; local class incompatible: stream classdesc serialVersionUID = -8759592827989754222, local class serialVersionUID = 71823917239812
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at java.util.ArrayList.readObject(ArrayList.java:791)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at com.lleps.mfm.Storage.loadCategoryFromFolder(Storage.java:125)
at com.lleps.mfm.Storage.loadAllCategories(Storage.java:94)
at com.lleps.mfm.Main.lambda$main$0(Main.java:19)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Error cargando categoria C:\Users\leand\.monthly-fee-management\categories\M�quinas


Stack trace: java.io.InvalidClassException: com.lleps.mfm.model.Payment; local class incompatible: stream classdesc serialVersionUID = -8759592827989754222, local class serialVersionUID = 71823917239812
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at java.util.ArrayList.readObject(ArrayList.java:791)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at com.lleps.mfm.Storage.loadCategoryFromFolder(Storage.java:125)
at com.lleps.mfm.Storage.loadAllCategories(Storage.java:94)
at com.lleps.mfm.Main.lambda$main$0(Main.java:19)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Error cargando categoria C:\Users\leand\.monthly-fee-management\categories\Yoga


Stack trace: java.io.InvalidClassException: com.lleps.mfm.model.Payment; local class incompatible: stream classdesc serialVersionUID = -8759592827989754222, local class serialVersionUID = 71823917239812
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1781)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at java.util.ArrayList.readObject(ArrayList.java:791)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1909)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at com.lleps.mfm.Storage.loadCategoryFromFolder(Storage.java:125)
at com.lleps.mfm.Storage.loadAllCategories(Storage.java:94)
at com.lleps.mfm.Main.lambda$main$0(Main.java:19)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified out/production/monthly-fee-management/com/lleps/mfm/Utils.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
8 changes: 4 additions & 4 deletions src/com/lleps/mfm/CategoryController.java
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ private void showPaymentsDialog(Client client) {
.filter(month -> month.isAfter(lastPaymentDate))
.collect(Collectors.toList());
preselectedDate = lastPaymentDate.plusMonths(1);
if (selectableMonths.isEmpty()) { // Empty only if clients payed all possible months
if (selectableMonths.isEmpty()) { // Empty only if clients paid all possible months
selectableMonths.add(preselectedDate);
}
}
Expand Down Expand Up @@ -240,7 +240,7 @@ private void addPayment(Payment payment) {
}

private void updateTable() {
FloatingMessageView.show("Actualizando..");
FloatingMessageView.show("Actualizando...");
view.getTable().update(category.getClients(), category.getPayments());
FloatingMessageView.hide();
}
Expand All @@ -254,7 +254,7 @@ public Category getCategory() {
}

private void saveClients() {
FloatingMessageView.show("Guardando..");
FloatingMessageView.show("Guardando...");
try {
Storage.getInstance().saveCategoryClients(category);
} catch (Exception e) {
Expand All @@ -272,7 +272,7 @@ private void saveSettings() {
}

private void savePayments() {
FloatingMessageView.show("Guardando..");
FloatingMessageView.show("Guardando...");
try {
Storage.getInstance().saveCategoryPayments(category);
} catch (Exception e) {
Expand Down
2 changes: 1 addition & 1 deletion src/com/lleps/mfm/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
WebLookAndFeel.install();

FloatingMessageView.show("Cargando categorias..");
FloatingMessageView.show("Cargando categorias...");
List<Category> categories = Storage.getInstance().loadAllCategories();
FloatingMessageView.hide();

Expand Down
19 changes: 18 additions & 1 deletion src/com/lleps/mfm/MainController.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package com.lleps.mfm;

import com.lleps.mfm.view.FloatingMessageView;
import com.lleps.mfm.view.MainView;
import com.lleps.mfm.model.Category;
import org.apache.commons.lang3.StringUtils;

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.*;
import java.util.List;
Expand All @@ -19,7 +22,21 @@ public class MainController {
MainController(List<Category> categories) {
view = new MainView();
view.setTitle("Gestión de cuotas de clientes");
view.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
view.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
view.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
view.setVisible(false);
FloatingMessageView.show("Haciendo backup de los datos...");
try {
Storage.getInstance().doBackup();
} catch (IOException exception) {
Utils.reportException(exception, "Error haciendo backup.");
}
FloatingMessageView.hide();
System.exit(0);
}
});
view.setExtendedState(view.getExtendedState() | JFrame.MAXIMIZED_BOTH);
view.setVisible(true);

Expand Down
62 changes: 56 additions & 6 deletions src/com/lleps/mfm/Storage.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,16 @@
import javafx.collections.ObservableList;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
* @author Leandro B. on 03/11/2015.
Expand All @@ -24,20 +29,56 @@ public static Storage getInstance() {
return instance;
}

private final static String DATA_FOLDERNAME = ".monthly-fee-management";
private final static String CONFIG_FILENAME = "config.properties";
private final static String CLIENTS_FILENAME = "clients.list";
private final static String PAYMENTS_FILENAME = "payments.list";

private final File userFolder;
private final File mainFolder;
private final File categoriesFolder;

private Storage() {
mainFolder = new File(System.getProperty("user.home") + "/" + ".monthly-fee-management");
userFolder = new File(System.getProperty("user.home"));
mainFolder = new File(userFolder, DATA_FOLDERNAME);
mainFolder.mkdirs();

categoriesFolder = new File(mainFolder + "/" + "categories");
}

public void doBackup() throws IOException {
String tmpBackupFolderName = DATA_FOLDERNAME + "-" + LocalDate.now();
File tmpBackupFolderDir = new File(userFolder, tmpBackupFolderName);
File backupZipFile = new File(userFolder, tmpBackupFolderName + ".zip");

FileUtils.copyDirectory(mainFolder, tmpBackupFolderDir);
if (backupZipFile.exists()) backupZipFile.delete();
pack(tmpBackupFolderDir.toPath(), backupZipFile.toPath());
deleteDirectory(tmpBackupFolderDir);
}

private static void pack(final Path folder, final Path zipFilePath) throws IOException {
try (
FileOutputStream fos = new FileOutputStream(zipFilePath.toFile());
ZipOutputStream zos = new ZipOutputStream(fos)
) {
Files.walkFileTree(folder, new SimpleFileVisitor<Path>() {
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
zos.putNextEntry(new ZipEntry(folder.relativize(file).toString()));
Files.copy(file, zos);
zos.closeEntry();
return FileVisitResult.CONTINUE;
}

public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
zos.putNextEntry(new ZipEntry(folder.relativize(dir).toString() + "/"));
zos.closeEntry();
return FileVisitResult.CONTINUE;
}
});
}
}

public List<Category> loadAllCategories() {
List<Category> result = new ArrayList<>();
File[] categoryFolders = categoriesFolder.listFiles();
Expand Down Expand Up @@ -88,7 +129,10 @@ public void saveCategory(Category category) throws IOException {
}

public void saveCategoryConfig(Category category) throws IOException {
File file = getCategoryFile(category, CONFIG_FILENAME);
saveCategoryConfig(category, getCategoryFile(category, CONFIG_FILENAME));
}

public void saveCategoryConfig(Category category, File file) throws IOException {
try (FileOutputStream output = new FileOutputStream(file)) {
Properties properties = new Properties();
properties.setProperty("monthPrice", Integer.toString(category.getMonthPrice()));
Expand All @@ -97,14 +141,20 @@ public void saveCategoryConfig(Category category) throws IOException {
}

public void saveCategoryClients(Category category) throws IOException {
File file = getCategoryFile(category, CLIENTS_FILENAME);
saveCategoryClients(category, getCategoryFile(category, CLIENTS_FILENAME));
}

public void saveCategoryClients(Category category, File file) throws IOException {
try (ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(file))) {
output.writeObject(category.getClients());
}
}

public void saveCategoryPayments(Category category) throws IOException {
File file = getCategoryFile(category, PAYMENTS_FILENAME);
saveCategoryPayments(category, getCategoryFile(category, PAYMENTS_FILENAME));
}

public void saveCategoryPayments(Category category, File file) throws IOException {
try (ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(file))) {
output.writeObject(category.getPayments());
}
Expand Down

0 comments on commit 2e2b8fe

Please sign in to comment.