Skip to content

Commit

Permalink
+ Added some methods to FileUtils.java for handling Directories.
Browse files Browse the repository at this point in the history
% Exposed static instance of AcLog.
$ Fixed handling of resources when outside of an IDE.
  • Loading branch information
draknyte1 committed Mar 6, 2019
1 parent 44cf2fb commit f45d21c
Show file tree
Hide file tree
Showing 3 changed files with 214 additions and 12 deletions.
15 changes: 12 additions & 3 deletions src/main/java/net/alkalus/api/objects/misc/AcLog.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,21 @@ public AcLog(final String aLoggerName) {
logger = makeLogger(aLoggerName, true);
}

private AcLog(String aLoggerName, boolean b) {
logger = makeLogger(aLoggerName, b);
}

// Static Logger used by core
private static final Logger modLogger = AcLog.makeLogger("AlkCore_API",
false);
public static final AcLog STATIC_INSTANCE;
private static final Logger modLogger;

static {
STATIC_INSTANCE = new AcLog("AlkCore_API", false);
modLogger = STATIC_INSTANCE.getLogger();
}

// Generate Logger
private static Logger makeLogger(final String aLoggerName, final boolean aChild) {
protected static Logger makeLogger(final String aLoggerName, final boolean aChild) {
return LogManager.getLogger(aLoggerName);
}

Expand Down
78 changes: 74 additions & 4 deletions src/main/java/net/alkalus/core/locale/LocaleCache.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package net.alkalus.core.locale;

import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;

import net.alkalus.api.objects.data.AutoMap;
import net.alkalus.api.objects.misc.AcLog;
import net.alkalus.core.lib.CORE;
import net.alkalus.core.util.data.FileUtils;

public class LocaleCache {
Expand Down Expand Up @@ -81,16 +84,61 @@ public LocaleCache(final String aLocale) {
* @param aDelimiter - Custom delimiter for splitting locale data
*/
public LocaleCache(final String aLocale, final char aDelimiter) {
mLocale = aLocale;
DELIMITER = aDelimiter;


boolean aInternalSearchMethod = false;
ClassLoader classLoader = getClass().getClassLoader();

//Determine Fallback Behaviour
boolean didFindDesignatedLocale = false;


for (final String g : INTERNAL_LOCALE_NAME_CACHE) {
File file;
File file = null;
String aFileString = "/locale/" + g + ".lang";
try {
file = new File(LocaleCache.class
.getResource("/locale/" + g + ".lang").getFile());

InputStream in = getClass().getResourceAsStream(aFileString);
if (in != null) {
//log("Using InputStream Lookup for "+aFileString);
File aTempFile = new File(FileUtils.getTempStorage(), CORE.NAME+"_"+CORE.VERSION+"_"+g + ".lang");
file = FileUtils.convertFileInputStream(in, aTempFile);
if (file != null && file.exists()) {
//log("Found, Processing.");
aInternalSearchMethod = false;
}
}
else {
//log("Using internal locale lookup");
if (classLoader != null) {
URL aFileURL = classLoader.getResource(aFileString);
if (aFileURL != null) {
//log("Found resource object");
file = new File(aFileURL.getFile());
if (file != null && file.exists()) {
//log("Found, Processing.");
aInternalSearchMethod = true;
}
}
}
}

} catch (final Throwable t) {
t.printStackTrace();
//log("Failed to create '"+aFileString+"' | Exception");
continue;
}
if (file == null || !file.exists()) {
//log("Failed to create '"+aFileString+"'");
continue;
}
else {
if (g.equals(aLocale)) {
didFindDesignatedLocale = true;
}
log("Found: "+file.getAbsolutePath() + " | "+aInternalSearchMethod);
}
if (file != null && file.exists() && !file.isDirectory()) {
INTERNAL_LOCALE_FILE_CACHE.put(g, file);
log("Found locale data for " + g);
Expand All @@ -101,10 +149,21 @@ public LocaleCache(final String aLocale, final char aDelimiter) {
} else {
log("Could not find default locale file " + mLocale);
VALID = false;
}

if (didFindDesignatedLocale) {
mLocale = aLocale;
}
else {
mLocale = "en_US"; //Fallback Behaviour
}

if (VALID) {
populate();
}
else {
log("Could not populate LocaleCache. Please verify there are valid .lang files to load.");
}
}

/**
Expand Down Expand Up @@ -240,7 +299,12 @@ public synchronized final HashMap<String, String> getCurrentLocaleData() {
return mCurrentlySelectedLocaleData;
}


public void dumpLocaleMappings() {
dumpLocaleMappings(AcLog.STATIC_INSTANCE);
}

public void dumpLocaleMappings(AcLog aLogger) {
for (final String g : mCurrentlySelectedLocaleData.keySet()) {
if (g != null && g.length() >= 1) {
final String aBuilt = (g + " : "
Expand All @@ -250,5 +314,11 @@ public void dumpLocaleMappings() {

}
}

public static String getSystemDefaultLocale() {
String country = System.getProperty("user.country");
String lang = System.getProperty("user.language");
return lang+"_"+country;
}

}
133 changes: 128 additions & 5 deletions src/main/java/net/alkalus/core/util/data/FileUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
Expand Down Expand Up @@ -37,27 +40,57 @@ public static boolean doesFileExist(final String path, final String filename,
return getFile(path, filename, extension) != null;
}



public static File createFolder(final String filename) {
return createDirectory(filename);
}
public static File createDirectory(final String filename) {
return createDirectory(getWorkingDirectory(), filename);
}

public static File createFolder(String path, final String filename) {
return createDirectory(path, filename);
}
public static File createDirectory(String path, final String filename) {
return createFileObject_Base(path, filename, "", true);
}



public static File createFile(final String filename, final String extension) {
return createFile(getWorkingDirectory(), filename, extension);
}

public static File createFile(String path, final String filename,
String extension) {
public static File createFile(String path, final String filename, String extension) {
return createFileObject_Base(path, filename, extension, false);
}


/**
* Creates a File, may be a directory. Wrapped by classes with clearer names and visibility.
* @param path
* @param filename
* @param extension
* @param isDirectory
* @return
*/
private static File createFileObject_Base(String path, final String filename, String extension, boolean isDirectory) {
if (!extension.startsWith(".")) {
extension = ("." + extension);
}
if (!path.endsWith("/")) {
path = path + "/";
}
final File file = new File(path + filename + extension);
final File file = new File(path + filename + (!isDirectory ? extension : ""));
boolean blnCreated = false;
AcLog.INFO("Trying to use path " + file.getPath());
try {
AcLog.INFO("Trying to use path " + file.getCanonicalPath());
AcLog.INFO("Trying to use absolute path " + file.getAbsolutePath());
blnCreated = file.createNewFile();
blnCreated = !isDirectory ? file.createNewFile() : file.mkdir();
} catch (final IOException ioe) {
AcLog.INFO("Error while creating a new empty file :" + ioe);
AcLog.INFO("Error while creating a new empty file object :" + ioe + " | " + isDirectory);
return null;
}
return blnCreated ? file : null;
Expand Down Expand Up @@ -174,6 +207,9 @@ public static String getWorkingDirectory() {
}

public static AutoMap<String> readLines(final File f) {
if (f == null) {
return new AutoMap<String>();
}
try {
final List<String> aData = org.apache.commons.io.FileUtils.readLines(f,
utf8);
Expand Down Expand Up @@ -201,5 +237,92 @@ public static String getFileExtension(final String aAbsolutePathOfFile) {
.substring(aAbsolutePathOfFile.lastIndexOf(".") + 1));
return a.get();
}

public static boolean wipeFileIfExists(File aFile) {
if (!removeFile(aFile)) {
if (!doesFileExist(aFile)) {
return false;
}
}
try {
return aFile.createNewFile();
} catch (IOException e) {
return false;
}
}

/**
* Not a conversion, but it shows you how to read “input Stream” and write it into another new file via FileOutputStream
* @param aDataStream - The Input Data.
* @param aOutputFile - A blank File, mainly used for giving the FileOutputStream some data and then later, populting the File object with the Data Stream.
* @return - a File containing the Input Stream.
*/
public static File convertFileInputStream(InputStream aDataStream, File aOutputFile) {
InputStream inputStream = null;
OutputStream outputStream = null;
try {
// read this file into InputStream
inputStream = aDataStream;

// write the inputStream to a FileOutputStream
outputStream = new FileOutputStream(aOutputFile);

int read = 0;
byte[] bytes = new byte[1024];

while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}


} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
// outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return aOutputFile;
}








private static File bTempStorage_Internal;

public static File getTempStorage() {
if (bTempStorage_Internal != null) {
return bTempStorage_Internal;
}
else {
try {
File f = File.createTempFile("GTPP_", ".tmp");
if (f != null) {
File aTempFolder = f.getParentFile();
if (aTempFolder != null) {
return aTempFolder;
}
}
} catch (IOException e) {
}
return FileUtils.createDirectory("temp");
}
}

}

0 comments on commit f45d21c

Please sign in to comment.