package org.ripple.power.config;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import org.ripple.power.utils.FileUtils;
public class ApplicationInfo {
private final String applicationName;
private final File userDir;
private final File applicationDataDir;
private static FileChannel channel;
private static FileLock lock;
private static File lockfile;
public ApplicationInfo(String applicationName) {
super();
assert applicationName != null;
this.applicationName = applicationName;
userDir = new File(LSystem.getUserName());
if (LSystem.isMacOSX()) {
applicationDataDir = new File(userDir, "/Library/"
+ applicationName);
} else {
applicationDataDir = new File(userDir, "/" + applicationName);
}
try {
FileUtils.makedirs(applicationDataDir);
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("resource")
public static boolean lock() {
try {
ApplicationInfo info = new ApplicationInfo("power");
lockfile = new File(info.applicationDataDir.getAbsolutePath()
+ ".lock");
channel = new RandomAccessFile(lockfile, "rw").getChannel();
lock = channel.tryLock();
if (lock == null) {
channel.close();
return true;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
public static void unlock() {
try {
if (lock != null) {
lock.release();
channel.close();
lockfile.delete();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public String getApplicationName() {
return applicationName;
}
public File getUserDir() {
return userDir;
}
public File getApplicationDataDir() {
return applicationDataDir;
}
}