package ecologylab.bigsemantics.platformspecifics;
import ecologylab.appframework.PropertiesAndDirectories;
import ecologylab.generic.ReflectionTools;
/**
* instantiation of ISpecificsPlatformSpeciics
*
* @author shenfeng
*
*/
public class SemanticsPlatformSpecifics
{
private static ISemanticsPlatformSpecifics iSemanticplatformSpecifics;
private static boolean dead = false;
public static void set(ISemanticsPlatformSpecifics that)
{
iSemanticplatformSpecifics = that;
}
public static ISemanticsPlatformSpecifics get()
{
if (dead)
throw new RuntimeException("Can't initialize SemanticsPlatformSpecifics");
if (iSemanticplatformSpecifics == null)
synchronized (SemanticsPlatformSpecifics.class)
{
String className = null;
if (iSemanticplatformSpecifics == null)
{
if (PropertiesAndDirectories.os() == PropertiesAndDirectories.ANDROID)
className = "SemanticsPlatformSpecificsAndroid";
else
className = "SemanticsPlatformSpecificsSun";
}
if (className != null)
{
Class platformSpecificsClass;
try
{
platformSpecificsClass = Class.forName("ecologylab.semantics.platformspecifics."
+ className);
}
catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("Can't initialize FundamentalPlatformSpecifics" + className);
}
if (platformSpecificsClass != null
&& ISemanticsPlatformSpecifics.class.isAssignableFrom(platformSpecificsClass))
{
iSemanticplatformSpecifics =
(ISemanticsPlatformSpecifics) ReflectionTools.getInstance(platformSpecificsClass);
}
else
{
dead = true;
throw new RuntimeException("Can't initialize FundamentalPlatformSpecifics");
}
}
}
return iSemanticplatformSpecifics;
}
}