package com.horstmann.violet.application.autosave;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import javax.swing.JOptionPane;
import javax.swing.Timer;
import com.horstmann.violet.application.gui.MainFrame;
import com.horstmann.violet.framework.dialog.DialogFactory;
import com.horstmann.violet.framework.file.GraphFile;
import com.horstmann.violet.framework.file.IFile;
import com.horstmann.violet.framework.file.LocalFile;
import com.horstmann.violet.framework.file.persistence.IFilePersistenceService;
import com.horstmann.violet.framework.file.persistence.IFileReader;
import com.horstmann.violet.framework.file.persistence.JFileReader;
import com.horstmann.violet.framework.injection.bean.ManiocFramework.BeanInjector;
import com.horstmann.violet.framework.injection.bean.ManiocFramework.InjectedBean;
import com.horstmann.violet.framework.injection.resources.ResourceBundleInjector;
import com.horstmann.violet.framework.injection.resources.annotation.ResourceBundleBean;
import com.horstmann.violet.product.diagram.abstracts.IGraph;
import com.horstmann.violet.framework.file.IGraphFile;
import com.horstmann.violet.workspace.IWorkspace;
import com.horstmann.violet.workspace.Workspace;
/**
* Violet's auto save
*
* @author Pawel Majka
*
*/
public class AutoSave implements ActionListener {
private MainFrame mainFrame;
private Timer saveTimer;
private final int second = 1000;
private final int saveInterval = 60 * second;
private final String autoSaveDirectory = System.getProperty("user.home") + File.separator + "VioletUML";
public AutoSave(MainFrame mainFrame)
{
BeanInjector.getInjector().inject(this);
if (mainFrame != null)
{
this.mainFrame = mainFrame;
if (createVioletDirectory())
{
openAutoSaveProjects();
initializeTimer();
}
}
}
private boolean createVioletDirectory()
{
File directory = new File(autoSaveDirectory);
if (directory.isDirectory())
{
return true;
}
else
{
return directory.mkdir();
}
}
private void openAutoSaveProjects()
{
File directory = new File(autoSaveDirectory);
if (directory.isDirectory())
{
File[] files = directory.listFiles();
if (files.length == 0)
return;
for (File file: files)
{
try {
IFile autoSaveFile = new LocalFile(file);
IFileReader readFile = new JFileReader(file);
InputStream in = readFile.getInputStream();
if (in != null)
{
IGraph graph = this.filePersistenceService.read(in);
IGraphFile graphFile = new GraphFile(autoSaveFile);
IWorkspace workspace = new Workspace(graphFile);
mainFrame.addWorkspace(workspace);
file.delete();
}
} catch (IOException e) {
file.delete();
} catch (Exception e) {
file.delete();
}
}
}
}
private void initializeTimer()
{
saveTimer = new Timer(saveInterval, (ActionListener) this);
saveTimer.setInitialDelay(0);
saveTimer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
for (IWorkspace workspace: mainFrame.getWorkspaceList())
{
IGraphFile graphFile = workspace.getGraphFile();
if (graphFile.isSaveRequired())
{
graphFile.autoSave();
}
}
}
@InjectedBean
private IFilePersistenceService filePersistenceService;
}