/** * Copyright (c) 2010, 2012 Darmstadt University of Technology. * 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: * Sebastian Proksch - initial API and implementation */ package org.eclipse.recommenders.internal.apidocs.rcp; import static java.lang.Integer.parseInt; import static org.eclipse.recommenders.internal.apidocs.rcp.l10n.LogMessages.*; import static org.eclipse.recommenders.utils.Logs.log; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.recommenders.apidocs.rcp.ApidocProvider; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; import com.google.common.base.Joiner; public class ApidocsPreferences { public static final String PROVIDER_RANKING = "providerRanking"; //$NON-NLS-1$ private static final String DISABLED_PROVIDERS = "disabledProviders"; //$NON-NLS-1$ private static final String SASH_WEIGHTS = "sashWeights"; //$NON-NLS-1$ private final IEclipsePreferences pluginPreferences; private final Preferences providerRankingPreferences; public ApidocsPreferences() { pluginPreferences = InstanceScope.INSTANCE.getNode(ApidocsRcpPlugin.PLUGIN_ID); providerRankingPreferences = pluginPreferences.node(PROVIDER_RANKING); } public void storeProviderRanking(final List<ApidocProvider> providerRanking) { clearPreferences(providerRankingPreferences); for (int i = 0; i < providerRanking.size(); i++) { providerRankingPreferences.put(Integer.toString(i), providerRanking.get(i).getId()); } flush(); } public List<String> loadOrderedProviderIds() { String[] keys = fetchKeys(providerRankingPreferences); List<String> providerIds = new LinkedList<String>(); for (int i = 0; i < keys.length; i++) { String tmp = providerRankingPreferences.get(Integer.toString(i), null); if (tmp != null) { providerIds.add(tmp); } else { log(NO_SUCH_ENTRY); } } return providerIds; } private String[] fetchKeys(Preferences node) { String[] keys = new String[0]; try { keys = node.keys(); } catch (BackingStoreException e) { log(ERROR_FAILED_TO_READ_PREFERENCES, e, node); } return keys; } private boolean clearPreferences(Preferences prefs) { try { prefs.clear(); return true; } catch (BackingStoreException e) { log(ERROR_FAILED_TO_CLEAR_PREFERENCES, e, prefs.absolutePath()); return false; } } public boolean isProviderEnabled(final ApidocProvider p) { final String arrayString = pluginPreferences.get(DISABLED_PROVIDERS, ""); //$NON-NLS-1$ final String[] deactivatedProviders = arrayString.split(","); //$NON-NLS-1$ final String providerName = p.getDescription().getName(); for (final String deactivatedName : deactivatedProviders) { if (deactivatedName.equals(providerName)) { return false; } } return true; } public void storeProviderEnablement(final List<ApidocProvider> providers) { final String[] disabledProviderNames = getDisabledProviderNames(providers); final String toSave = Joiner.on(',').join(disabledProviderNames); pluginPreferences.put(DISABLED_PROVIDERS, toSave); flush(); } private String[] getDisabledProviderNames(final List<ApidocProvider> providers) { final List<String> disabledProviders = new ArrayList<String>(); for (final ApidocProvider p : providers) { if (!p.isEnabled()) { disabledProviders.add(p.getDescription().getName()); } } return disabledProviders.toArray(new String[0]); } public int[] loadSashWeights() { final String weightString = pluginPreferences.get(SASH_WEIGHTS, "1,3"); //$NON-NLS-1$ final String[] weights = weightString.split(","); //$NON-NLS-1$ return new int[] { parseInt(weights[0]), parseInt(weights[1]) }; } public void storeSashWeights(final int[] weights) { final String toSave = weights[0] + "," + weights[1]; //$NON-NLS-1$ pluginPreferences.put(SASH_WEIGHTS, toSave); flush(); } private boolean flush() { try { pluginPreferences.flush(); return true; } catch (BackingStoreException e) { log(FAILED_TO_SAVE_PREFERENCES, e); return false; } } public boolean clearProviderRankingPreferences() { return clearPreferences(providerRankingPreferences); } }