/******************************************************************************* * Copyright (c) 2010, 2016 Nicolas Roduit. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nicolas Roduit - initial API and implementation ******************************************************************************/ package org.weasis.core.api.service; import java.io.File; import java.lang.reflect.Field; import java.util.Arrays; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; import org.osgi.service.prefs.Preferences; import org.osgi.service.prefs.PreferencesService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.weasis.core.api.gui.util.AppProperties; import org.weasis.core.api.gui.util.MathUtil; public class BundlePreferences { private static final Logger LOGGER = LoggerFactory.getLogger(BundlePreferences.class); private BundlePreferences() { } public static File getDataFolder(BundleContext context) { if (context != null) { File dataFolder = new File(AppProperties.WEASIS_PATH + File.separator + "data", context.getBundle().getSymbolicName()); //$NON-NLS-1$ dataFolder.mkdirs(); return dataFolder; } return new File(AppProperties.WEASIS_PATH, "data"); //$NON-NLS-1$ } public static Preferences getDefaultPreferences(BundleContext context) { return getUserPreferences(context, AppProperties.WEASIS_USER); } public static Preferences getUserPreferences(BundleContext context, String name) { if (context != null) { String user = name == null ? AppProperties.WEASIS_USER : name; PreferencesService prefService = BundlePreferences.getService(context, PreferencesService.class); if (prefService != null) { return prefService.getUserPreferences(user); } } return null; } public static <S> S getService(BundleContext context, Class<S> clazz) { if (clazz != null) { try { ServiceReference<S> serviceRef = context.getServiceReference(clazz); if (serviceRef != null) { return context.getService(serviceRef); } } catch (Exception e) { LOGGER.error("", e); //$NON-NLS-1$ } } return null; } public static void putStringPreferences(Preferences pref, String key, String value) { // Does not support null key or value if (pref != null && key != null && value != null) { String val2 = pref.get(key, null); // Update only if the value is different to avoid setting the changeSet to true if (val2 == null || !value.equals(val2)) { pref.put(key, value); } } } public static void putBooleanPreferences(Preferences pref, String key, boolean value) { // Does not support null key if (pref != null && key != null) { Boolean result = null; final String s = pref.get(key, null); if (s != null) { result = Boolean.valueOf(s); } // Update only if the value is different to avoid setting the changeSet to true if (result == null || result.booleanValue() != value) { pref.putBoolean(key, value); } } } public static void putByteArrayPreferences(Preferences pref, String key, byte[] value) { // Does not support null key or value if (pref != null && key != null && value != null) { byte[] val2 = pref.getByteArray(key, null); // Update only if the value is different to avoid setting the changeSet to true if (val2 == null || !Arrays.equals(value, val2)) { pref.putByteArray(key, value); } } } public static void putDoublePreferences(Preferences pref, String key, double value) { // Does not support null key if (pref != null && key != null) { Double result = null; final String s = pref.get(key, null); if (s != null) { try { result = Double.parseDouble(s); } catch (NumberFormatException ignore) { LOGGER.error("Cannot parse {} into double", s); //$NON-NLS-1$ } } // Update only if the value is different to avoid setting the changeSet to true if (result == null || !MathUtil.isEqual(result.doubleValue(), value)) { pref.putDouble(key, value); } } } public static void putFloatPreferences(Preferences pref, String key, float value) { // Does not support null key if (pref != null && key != null) { Float result = null; final String s = pref.get(key, null); if (s != null) { try { result = Float.parseFloat(s); } catch (NumberFormatException ignore) { LOGGER.error("Cannot parse {} into float", s); //$NON-NLS-1$ } } // Update only if the value is different to avoid setting the changeSet to true if (result == null || !MathUtil.isEqual(result.floatValue(), value)) { pref.putFloat(key, value); } } } public static void putIntPreferences(Preferences pref, String key, int value) { // Does not support null key if (pref != null && key != null) { Integer result = null; final String s = pref.get(key, null); if (s != null) { try { result = Integer.parseInt(s); } catch (NumberFormatException ignore) { LOGGER.error("Cannot parse {} into int", s); //$NON-NLS-1$ } } // Update only if the value is different to avoid setting the changeSet to true if (result == null || result.intValue() != value) { pref.putInt(key, value); } } } public static void putLongPreferences(Preferences pref, String key, long value) { // Does not support null key if (pref != null && key != null) { Long result = null; final String s = pref.get(key, null); if (s != null) { try { result = Long.parseLong(s); } catch (NumberFormatException ignore) { LOGGER.error("Cannot parse {} into long", s); //$NON-NLS-1$ } } // Update only if the value is different to avoid setting the changeSet to true if (result == null || result.longValue() != value) { pref.putLong(key, value); } } } public static boolean isNullStaticFieldValue(Class<?> clazz, String fieldName) { try { Field instance = clazz.getDeclaredField(fieldName); if (instance != null) { instance.setAccessible(true); return instance.get(null) == null; } } catch (Exception e) { LOGGER.error("Checking static field value", e); //$NON-NLS-1$ } return false; } }