17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.java2d.cmm; 27 28 import java.awt.color.ColorSpace; 29 import java.awt.color.ICC_Profile; 30 import java.awt.color.CMMException; 31 import java.awt.image.BufferedImage; 32 import java.awt.image.Raster; 33 import java.awt.image.WritableRaster; 34 import java.security.AccessController; 35 import java.security.PrivilegedAction; 36 import sun.security.action.GetPropertyAction; 37 import java.util.ServiceLoader; 38 39 public class CMSManager { 40 public static ColorSpace GRAYspace; // These two fields allow access 41 public static ColorSpace LINEAR_RGBspace; // to java.awt.color.ColorSpace 42 // private fields from other 43 // packages. The fields are set 44 // by java.awt.color.ColorSpace 45 // and read by 46 // java.awt.image.ColorModel. 47 48 private static PCMM cmmImpl = null; 49 50 public static synchronized PCMM getModule() { 51 if (cmmImpl != null) { 52 return cmmImpl; 53 } 54 55 CMMServiceProvider spi = AccessController.doPrivileged( 56 new PrivilegedAction<CMMServiceProvider>() { 57 public CMMServiceProvider run() { 58 String cmmClass = System.getProperty( 59 "sun.java2d.cmm", "sun.java2d.cmm.lcms.LcmsServiceProvider"); 60 61 ServiceLoader<CMMServiceProvider> cmmLoader 62 = ServiceLoader.loadInstalled(CMMServiceProvider.class); 63 64 CMMServiceProvider spi = null; 65 66 for (CMMServiceProvider cmm : cmmLoader) { 67 spi = cmm; 68 if (cmm.getClass().getName().equals(cmmClass)) { 69 break; 70 } 71 } 72 return spi; 73 } 74 }); 75 76 cmmImpl = spi.getColorManagementModule(); 77 78 if (cmmImpl == null) { 79 throw new CMMException("Cannot initialize Color Management System."+ 80 "No CM module found"); 81 } 82 83 GetPropertyAction gpa = new GetPropertyAction("sun.java2d.cmm.trace"); 84 String cmmTrace = AccessController.doPrivileged(gpa); 85 if (cmmTrace != null) { 86 cmmImpl = new CMMTracer(cmmImpl); 87 } 88 89 return cmmImpl; 90 } 91 92 static synchronized boolean canCreateModule() { 93 return (cmmImpl == null); 94 } 95 96 /* CMM trace routines */ 97 98 public static class CMMTracer implements PCMM { 99 PCMM tcmm; 100 String cName ; 101 102 public CMMTracer(PCMM tcmm) { 103 this.tcmm = tcmm; | 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package sun.java2d.cmm; 27 28 import java.awt.color.ColorSpace; 29 import java.awt.color.ICC_Profile; 30 import java.awt.color.CMMException; 31 import java.awt.image.BufferedImage; 32 import java.awt.image.Raster; 33 import java.awt.image.WritableRaster; 34 import java.security.AccessController; 35 import java.security.PrivilegedAction; 36 import sun.security.action.GetPropertyAction; 37 38 public class CMSManager { 39 public static ColorSpace GRAYspace; // These two fields allow access 40 public static ColorSpace LINEAR_RGBspace; // to java.awt.color.ColorSpace 41 // private fields from other 42 // packages. The fields are set 43 // by java.awt.color.ColorSpace 44 // and read by 45 // java.awt.image.ColorModel. 46 47 private static PCMM cmmImpl = null; 48 49 public static synchronized PCMM getModule() { 50 if (cmmImpl != null) { 51 return cmmImpl; 52 } 53 54 GetPropertyAction gpa = new GetPropertyAction("sun.java2d.cmm"); 55 String cmmProviderClass = AccessController.doPrivileged(gpa); 56 CMMServiceProvider provider = null; 57 if (cmmProviderClass != null) { 58 try { 59 Class<?> cls = Class.forName(cmmProviderClass); 60 provider = (CMMServiceProvider)cls.newInstance(); 61 } catch (ReflectiveOperationException e) { 62 } 63 } 64 if (provider == null) { 65 provider = new sun.java2d.cmm.lcms.LcmsServiceProvider(); 66 } 67 68 cmmImpl = provider.getColorManagementModule(); 69 70 if (cmmImpl == null) { 71 throw new CMMException("Cannot initialize Color Management System."+ 72 "No CM module found"); 73 } 74 75 gpa = new GetPropertyAction("sun.java2d.cmm.trace"); 76 String cmmTrace = AccessController.doPrivileged(gpa); 77 if (cmmTrace != null) { 78 cmmImpl = new CMMTracer(cmmImpl); 79 } 80 81 return cmmImpl; 82 } 83 84 static synchronized boolean canCreateModule() { 85 return (cmmImpl == null); 86 } 87 88 /* CMM trace routines */ 89 90 public static class CMMTracer implements PCMM { 91 PCMM tcmm; 92 String cName ; 93 94 public CMMTracer(PCMM tcmm) { 95 this.tcmm = tcmm; |