package org.chartsy.main.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
/**
*
* @author viorel.gheba
*/
public final class FileUtils {
protected FileUtils() {}
public static String LocalFolder() {
String result = System.getProperty("user.home") + File.separator + "Chartsy";
createFolder(result);
return result;
}
public static String LogFolder() {
String result = LocalFolder() + File.separator + "log";
createFolder(result);
return result;
}
public static String LogFile() {
String result = LogFolder() + File.separator + "log.txt";
createFile(result);
return result;
}
public static String ErrorFile() {
String result = LogFolder() + File.separator + "err.txt";
createFile(result);
return result;
}
public static String SettingsFolder() {
String result = LocalFolder() + File.separator + "settings";
createFolder(result);
return result;
}
public static String UserFile() {
String result = SettingsFolder() + File.separator + "user.xml";
return result;
}
public static String RegisterFile() {
String result = SettingsFolder() + File.separator + "registred.xml";
return result;
}
public static String intervalsFolder()
{
String result = LocalFolder() + File.separator + "intervals";
createFolder(result);
return result;
}
public static String intervalFolder(String dataProvider)
{
String folder = intervalsFolder() + File.separator + dataProvider;
return folder;
}
public static String intervalPath(String dataProvider, String interval)
{
String folder = intervalsFolder() + File.separator + dataProvider;
createFolder(folder);
String path = folder + File.separator + interval + ".properties";
return path;
}
public static String cacheFolder()
{
String result = LocalFolder() + File.separator + "cache";
createFolder(result);
return result;
}
public static String cacheStocksFolder()
{
String result = cacheFolder() + File.separator + "stocks";
createFolder(result);
return result;
}
public static String cacheDatasetsFolder()
{
String result = cacheFolder() + File.separator + "datasets";
createFolder(result);
return result;
}
public static String cacheChartsFolder()
{
String result = cacheFolder() + File.separator + "charts";
createFolder(result);
return result;
}
public static String cacheChartFolder(String id)
{
String result = cacheChartsFolder() + File.separator + id;
createFolder(result);
return result;
}
public static String cacheHistoryFolder(String id)
{
String result = cacheChartFolder(id) + File.separator + "history";
createFolder(result);
return result;
}
public static String cacheFile(String file) throws IOException
{
String filePath = cacheFolder() + File.separator + file;
FileObject object = FileUtil.createData(new File(filePath));
return object.getPath();
}
public static String cacheFilePath(String file) throws IOException
{
String filePath = cacheFolder() + File.separator + file;
return filePath;
}
public static String hashedCacheFilePath(String folder, String fileName)
{
String result = folder + File.separator + getStringHash(fileName) + ".properties";
return result;
}
public static File hashedCacheFile(String folder, String fileName)
{
String path = hashedCacheFilePath(folder, fileName);
File file = new File(path);
return file;
}
public static FileObject cacheFileObject(String fileName) throws IOException
{
return FileUtil.createData(new File(cacheFile(fileName)));
}
public static String getStringHash(String fileName)
{
try
{
MessageDigest digest = MessageDigest.getInstance("md5");
digest.reset();
digest.update(fileName.getBytes());
byte messageDigest[] = digest.digest();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < messageDigest.length; i++)
builder.append(Integer.toHexString(0xFF & messageDigest[i]));
String result = builder.toString();
return result;
} catch (NoSuchAlgorithmException ex)
{
return fileName;
}
}
public static String getHistoryFolder()
{
String result = LocalFolder() + File.separator + "history";
createFolder(result);
return result;
}
/*public static String favoritesFolder()
{
String result = LocalFolder() + File.separator + "favorites";
createFolder(result);
return result;
}
public static String favoritesFile()
{
String result = favoritesFolder() + File.separator + "favorites.xml";
createFile(result);
return result;
}*/
public static File favoritesFile()
{
String result = LocalFolder() + File.separator + "favorites.xml";
return new File(result);
}
public static String stockScanFolder()
{
String result = LocalFolder() + File.separator + "StockScanPRO";
createFolder(result);
return result;
}
public static File stockScanFile(String fileName)
{
String result = stockScanFolder() + File.separator + fileName;
return new File(result);
}
public static String templatesFolder()
{
String result = LocalFolder() + File.separator + "templates";
createFolder(result);
return result;
}
public static File templatesFile(String fileName)
{
String result = templatesFolder() + File.separator + fileName;
return new File(result);
}
public static boolean fileExists(String path)
{
File file = new File(path);
return file.exists();
}
public static void removeFile(String path) {
File file = new File(path);
if (file.exists())
{
try {
FileObject fo = FileUtil.toFileObject(file);
fo.delete();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void createFile(String path) {
File f = new File(path);
try { FileObject file = FileUtil.createData(f); }
catch (IOException ex) { ex.printStackTrace(); }
}
public static void createFolder(String path) {
File dir = new File(path);
try { FileObject folder = FileUtil.createFolder(dir); }
catch (IOException ex) { ex.printStackTrace(); }
}
public static void copyFile(String source, String destination) throws IOException {
File sourceFile = new File(source);
File destinationFile = new File(destination);
copyFile(sourceFile, destinationFile);
}
public static void copyFile(File source, File destination) throws IOException {
FileChannel in = null;
FileChannel out = null;
try {
in = new FileInputStream(source).getChannel();
out = new FileOutputStream(destination).getChannel();
in.transferTo(0, in.size(), out);
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
public static String getFileName(String folder, final String path)
{
File dir = new File(folder);
String[] list = dir.list(new FilenameFilter()
{
public boolean accept(File dir, String name)
{
return name.contains(path);
}
});
if (list.length == 0)
return folder + File.separator + path;
else
return folder + File.separator + path + "(" + list.length + ")";
}
}