package net.sourceforge.squirrel_sql.client.gui.recentfiles;
import net.sourceforge.squirrel_sql.client.gui.db.ISQLAliasExt;
import net.sourceforge.squirrel_sql.fw.sql.ISQLAlias;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
public class RecentFilesManager
{
private RecentFilesXmlBean _recentFilesXmlBean;
public void fileTouched(String absolutePath, ISQLAliasExt alias)
{
ArrayList<String> recentFiles = _recentFilesXmlBean.getRecentFiles();
adjustFileArray(absolutePath, recentFiles);
ArrayList<String> recentAliasFiles = findOrCreateAliasFile(alias).getRecentFiles();
adjustFileArray(absolutePath, recentAliasFiles);
}
private void adjustFileArray(String newAbsolutePath, ArrayList<String> fileArray)
{
fileArray.remove(newAbsolutePath);
fileArray.add(0, newAbsolutePath);
while (_recentFilesXmlBean.getMaxRecentFiles() < fileArray.size())
{
fileArray.remove(fileArray.size()-1);
}
}
private AliasFileXmlBean findOrCreateAliasFile(ISQLAlias alias)
{
AliasFileXmlBean ret = findAliasFile(alias);
if (null == ret)
{
ret = new AliasFileXmlBean();
ret.setAlisaIdentifierString(alias.getIdentifier().toString());
_recentFilesXmlBean.getAliasFileXmlBeans().add(ret);
}
return ret;
}
private AliasFileXmlBean findAliasFile(ISQLAlias alias)
{
AliasFileXmlBean ret = null;
ArrayList<AliasFileXmlBean> aliasFileXmlBeans = _recentFilesXmlBean.getAliasFileXmlBeans();
for (AliasFileXmlBean aliasFileXmlBean : aliasFileXmlBeans)
{
if(aliasFileXmlBean.getAlisaIdentifierString().equals(alias.getIdentifier().toString()))
{
ret = aliasFileXmlBean;
break;
}
}
return ret;
}
public void saveXmlBean(File recentFilesBeanFile)
{
try
{
Marshaller marshaller = JAXBContext.newInstance(RecentFilesXmlBean.class).createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
FileOutputStream fos = new FileOutputStream(recentFilesBeanFile);
marshaller.marshal(_recentFilesXmlBean, fos);
fos.flush();
fos.close();
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
public void initXmlBean(File recentFilesXmlBeanFile)
{
if(false == recentFilesXmlBeanFile.exists())
{
_recentFilesXmlBean = new RecentFilesXmlBean();
return;
}
try
{
Unmarshaller um = JAXBContext.newInstance(RecentFilesXmlBean.class).createUnmarshaller();
_recentFilesXmlBean = (RecentFilesXmlBean) um.unmarshal(new FileReader(recentFilesXmlBeanFile));
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
public ArrayList<String> getRecentFiles()
{
return _recentFilesXmlBean.getRecentFiles();
}
public ArrayList<String> getFavouriteFiles()
{
return _recentFilesXmlBean.getFavouriteFiles();
}
public ArrayList<String> getRecentFilesForAlias(ISQLAlias selectedAlias)
{
return findOrCreateAliasFile(selectedAlias).getRecentFiles();
}
public ArrayList<String> getFavouriteFilesForAlias(ISQLAlias selectedAlias)
{
return findOrCreateAliasFile(selectedAlias).getFavouriteFiles();
}
public int getMaxRecentFiles()
{
return _recentFilesXmlBean.getMaxRecentFiles();
}
public void setMaxRecentFiles(int n)
{
_recentFilesXmlBean.setMaxRecentFiles(n);
}
public void adjustFavouriteFiles(File selectedFile)
{
adjustFileArray(selectedFile.getAbsolutePath(), _recentFilesXmlBean.getFavouriteFiles());
}
public void adjustFavouriteAliasFiles(ISQLAlias alias, File selectedFile)
{
adjustFileArray(selectedFile.getAbsolutePath(), findOrCreateAliasFile(alias).getFavouriteFiles());
}
public void setRecentFiles(ArrayList<String> files)
{
_recentFilesXmlBean.setRecentFiles(files);
}
public void setFavouriteFiles(ArrayList<String> files)
{
_recentFilesXmlBean.setFavouriteFiles(files);
}
public void setRecentFilesForAlias(ISQLAlias alias, ArrayList<String> files)
{
findOrCreateAliasFile(alias).setRecentFiles(files);
}
public void setFavouriteFilesForAlias(ISQLAlias alias, ArrayList<String> files)
{
findOrCreateAliasFile(alias).setFavouriteFiles(files);
}
}