1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2024-06-24 06:03:28 +00:00
CC-Tweaked/src/main/java/dan200/computercraft/shared/util/IDAssigner.java
SquidDev 44ba4069c1 Print stack traces/add logging messages in several places
This will hopefully make it easier to track down various issues which
might otherwise go unnoticed or provide little information.

The main areas modified are those that external APIs may provide values
for or interact with: various providers and ILuaObject/IPeripheral
implementations. However, we do also log in a couple of other places
which indicate a problem with this, or another, mod.
2017-05-16 15:49:55 +01:00

119 lines
3.4 KiB
Java

package dan200.computercraft.shared.util;
import dan200.computercraft.core.logger.Logger;
import java.io.*;
public class IDAssigner
{
private IDAssigner()
{
}
public static int getNextIDFromDirectory( File dir )
{
return getNextID( dir, true );
}
public static int getNextIDFromFile( File file )
{
return getNextID( file, false );
}
private static int getNextID( File location, boolean directory )
{
// Determine where to locate ID file
File lastidFile;
if( directory )
{
location.mkdirs();
lastidFile = new File( location, "lastid.txt" );
}
else
{
location.getParentFile().mkdirs();
lastidFile = location;
}
// Try to determine the id
int id = 0;
if( !lastidFile.exists() )
{
// If an ID file doesn't exist, determine it from the file structure
if( directory && location.exists() && location.isDirectory() )
{
String[] contents = location.list();
for( String content : contents )
{
try
{
int number = Integer.parseInt( content );
id = Math.max( number + 1, id );
}
catch( NumberFormatException e )
{
Logger.error( "Unexpected file '" + content + "' in '" + location.getAbsolutePath() + "'", e );
}
}
}
}
else
{
// If an ID file does exist, parse the file to get the ID string
String idString;
try
{
FileInputStream in = new FileInputStream( lastidFile );
InputStreamReader isr;
try
{
isr = new InputStreamReader( in, "UTF-8" );
}
catch( UnsupportedEncodingException e )
{
isr = new InputStreamReader( in );
}
BufferedReader br = new BufferedReader( isr );
try
{
idString = br.readLine();
}
finally
{
br.close();
}
}
catch( IOException e )
{
Logger.error( "Cannot open ID file '" + lastidFile + "'", e );
return 0;
}
try
{
id = Integer.parseInt( idString ) + 1;
}
catch( NumberFormatException e )
{
Logger.error( "Cannot parse ID file '" + lastidFile + "', perhaps it is corrupt?", e );
return 0;
}
}
// Write the lastID file out with the new value
try
{
BufferedWriter out = new BufferedWriter( new FileWriter( lastidFile, false ) );
out.write( Integer.toString( id ) );
out.newLine();
out.close();
}
catch( IOException e )
{
Logger.error( "An error occured while trying to create the computer folder. Please check you have relevant permissions.", e );
}
return id;
}
}