modules/graphics/src/main/java/com/sun/glass/ui/monocle/NativePlatformFactory.java

Print this page

        

*** 23,79 **** * questions. */ package com.sun.glass.ui.monocle; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Locale; public abstract class NativePlatformFactory { protected abstract boolean matches(); protected abstract NativePlatform createNativePlatform(); private static NativePlatform platform; ! public static synchronized NativePlatform getNativePlatform() { ! if (platform == null) { ! String platformFactoryProperty = ! AccessController.doPrivileged(new PrivilegedAction<String>() { @Override public String run() { ! return System.getProperty("monocle.platform", ! "MX6,OMAP,Linux,Headless"); } ! }); String[] platformFactories = platformFactoryProperty.split(","); for (int i = 0; i < platformFactories.length; i++) { String factoryName = platformFactories[i].trim(); - String factoryClassName; if (factoryName.contains(".")) { factoryClassName = factoryName; } else { ! factoryClassName = "com.sun.glass.ui.monocle." ! + factoryName.toLowerCase(Locale.ROOT) ! + "." + factoryName + "PlatformFactory"; } try { ! NativePlatformFactory npf = (NativePlatformFactory) ! Class.forName(factoryClassName) ! .newInstance(); if (npf.matches()) { platform = npf.createNativePlatform(); return platform; } } catch (Exception e) { e.printStackTrace(); } ! } ! throw new UnsupportedOperationException( ! "Cannot load a native platform from: '" ! + platformFactoryProperty + "'"); } return platform; } } --- 23,104 ---- * questions. */ package com.sun.glass.ui.monocle; + import com.sun.glass.ui.monocle.linux.LinuxSystem; + import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Locale; public abstract class NativePlatformFactory { + private static String platformName=""; + private static String factoryClassName=""; + private static long nativeDisplayType = -1L; protected abstract boolean matches(); protected abstract NativePlatform createNativePlatform(); private static NativePlatform platform; ! private static boolean initialized = false; ! ! private static void determineNativePlatform(){ ! String platformFactoryProperty = AccessController.doPrivileged(new PrivilegedAction<String>() { @Override public String run() { ! return System.getProperty("monocle.platform", "MX6,OMAP,Linux,Headless"); } ! } ); ! String[] platformFactories = platformFactoryProperty.split(","); for (int i = 0; i < platformFactories.length; i++) { String factoryName = platformFactories[i].trim(); if (factoryName.contains(".")) { factoryClassName = factoryName; + platformName = factoryClassName.substring(factoryClassName.lastIndexOf(".", 0)); } else { ! platformName = factoryName.toLowerCase(Locale.ROOT); ! factoryClassName = "com.sun.glass.ui.monocle." + platformName + "." + factoryName + "PlatformFactory"; ! } ! try { ! NativePlatformFactory npf = (NativePlatformFactory) Class.forName(factoryClassName).newInstance(); ! if (npf.matches()) { ! initialized = true; ! return; ! } ! } catch (Exception e) { ! e.printStackTrace(); } + } + initialized = true; + } + + public static synchronized String getNativePlatformName() { + if (!initialized) { + determineNativePlatform(); + } + return platformName; + } + + public static synchronized NativePlatform getNativePlatform() { + if (!initialized) { + determineNativePlatform(); + } + if (platform == null) { try { ! NativePlatformFactory npf = (NativePlatformFactory) Class.forName(factoryClassName).newInstance(); if (npf.matches()) { platform = npf.createNativePlatform(); return platform; } } catch (Exception e) { e.printStackTrace(); } ! ! throw new UnsupportedOperationException("Cannot load a native platform: '" + platformName + "'"); } return platform; } }