/******************************************************************************* * Copyright (c) 2008, 2015 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.help.internal.base.remote; import java.util.ArrayList; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.help.internal.base.HelpBasePlugin; import org.eclipse.help.internal.base.IHelpBaseConstants; import org.osgi.service.prefs.BackingStoreException; public class PreferenceFileHandler { protected String[] nameEntries, hostEntries, pathEntries, protocolEntries, portEntries, isICEnabled = null; protected String namePreference, hostPreference, pathPreference, protocolPreference, portPreference, icEnabledPreference; protected int numEntries = 0, numHostEntries=0; protected static String PREFERENCE_ENTRY_DELIMITER = ","; //$NON-NLS-1$ public static final int LOCAL_HELP_ONLY=0; public static final int LOCAL_HELP_PRIORITY=1; public static final int REMOTE_HELP_PRIORITY=2; public PreferenceFileHandler() { /* * Preference values are currently comma separated */ // TODO: Decide if comma is a good delimiter, or if we should use a different delimiter. namePreference = Platform.getPreferencesService().getString (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_REMOTE_HELP_NAME, "", null); //$NON-NLS-1$ hostPreference = Platform.getPreferencesService().getString (HelpBasePlugin.PLUGIN_ID,IHelpBaseConstants.P_KEY_REMOTE_HELP_HOST, "", null); //$NON-NLS-1$ pathPreference = Platform.getPreferencesService().getString (HelpBasePlugin.PLUGIN_ID,IHelpBaseConstants.P_KEY_REMOTE_HELP_PATH, "", null); //$NON-NLS-1$ protocolPreference = Platform.getPreferencesService().getString (HelpBasePlugin.PLUGIN_ID,IHelpBaseConstants.P_KEY_REMOTE_HELP_PROTOCOL, "", null); //$NON-NLS-1$ portPreference = Platform.getPreferencesService().getString (HelpBasePlugin.PLUGIN_ID,IHelpBaseConstants.P_KEY_REMOTE_HELP_PORT, "", null); //$NON-NLS-1$ icEnabledPreference =Platform.getPreferencesService().getString (HelpBasePlugin.PLUGIN_ID,IHelpBaseConstants.P_KEY_REMOTE_HELP_ICEnabled, "", null); //$NON-NLS-1$ //Get host array first, and initialize values if(hostPreference.length()==0) { this.hostEntries=new String[0]; numHostEntries=0; } else { this.hostEntries = hostPreference.split(PREFERENCE_ENTRY_DELIMITER); numHostEntries=hostEntries.length; } // Get the preference values this.nameEntries = getValues(namePreference, ""); //$NON-NLS-1$ this.pathEntries = getValues(pathPreference, "/"); //$NON-NLS-1$ this.protocolEntries = getValues(protocolPreference, "http"); //$NON-NLS-1$ this.portEntries = getValues(portPreference, "80"); //$NON-NLS-1$ this.isICEnabled = getValues(icEnabledPreference, "true"); //$NON-NLS-1$ // The size of any of the array elements should equal the number of remote infocenters if (this.nameEntries == null) this.numEntries = 0; else this.numEntries = this.nameEntries.length; } protected String[] getValues(String preferenceEntry, String appendString) { if (numHostEntries==0) //preference equals "" return new String[0];//NEW // Split the string and return an array of Strings String [] currEntries; String [] updatedArray=null; if(!preferenceEntry.equals("")) //$NON-NLS-1$ currEntries=preferenceEntry.split(PREFERENCE_ENTRY_DELIMITER); else currEntries = new String[0]; if(currEntries.length!=numHostEntries) //Current Entry not equals to Hosts { int i; updatedArray=new String[numHostEntries]; if(currEntries.length>numHostEntries) //More in this array then host. Only take values for # of hosts { for(i=0;i<numHostEntries;i++) { updatedArray[i]=currEntries[i]; } } else //Less values. Append values based off or array types { int entryCount=0; for(i=0;i<currEntries.length;i++) { updatedArray[i]=currEntries[i]; entryCount=entryCount+1; } for(i=entryCount;i<numHostEntries;i++) { updatedArray[i]=appendString; } } currEntries=updatedArray; } return currEntries; } /** * This methods writes the remote infocenters in the table model to the preferences.ini. * * @param List * of RemoteIC Objects * */ public static void commitRemoteICs(RemoteIC[] remoteICs) { RemoteIC remote_ic = null; String name = "", host = "", path = "", protocol="", port = "", enabledString = ""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ boolean enabled; int numICs = remoteICs.length; if (numICs > 0) { remote_ic = remoteICs[0]; name = remote_ic.getName(); host = remote_ic.getHost(); path = remote_ic.getPath(); protocol = remote_ic.getProtocol(); port = remote_ic.getPort(); enabled = remote_ic.isEnabled(); enabledString = enabled + ""; //$NON-NLS-1$ for (int i = 1; i < numICs; i++) { remote_ic = remoteICs[i]; name = name + PREFERENCE_ENTRY_DELIMITER + remote_ic.getName(); host = host + PREFERENCE_ENTRY_DELIMITER + remote_ic.getHost(); path = path + PREFERENCE_ENTRY_DELIMITER + remote_ic.getPath(); protocol = protocol + PREFERENCE_ENTRY_DELIMITER + remote_ic.getProtocol(); port = port + PREFERENCE_ENTRY_DELIMITER + remote_ic.getPort(); enabledString = enabledString + PREFERENCE_ENTRY_DELIMITER + remote_ic.isEnabled(); } } // Save new strings to preferences IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(HelpBasePlugin.PLUGIN_ID); prefs.put(IHelpBaseConstants.P_KEY_REMOTE_HELP_NAME, name); prefs.put(IHelpBaseConstants.P_KEY_REMOTE_HELP_HOST, host); prefs.put(IHelpBaseConstants.P_KEY_REMOTE_HELP_PATH, path); prefs.put(IHelpBaseConstants.P_KEY_REMOTE_HELP_PROTOCOL, protocol); prefs.put(IHelpBaseConstants.P_KEY_REMOTE_HELP_PORT, port); prefs.put(IHelpBaseConstants.P_KEY_REMOTE_HELP_ICEnabled, enabledString); try { prefs.flush(); } catch (BackingStoreException e) { } } /** * * This method returns an ArrayList containing all RemoteIC entries in the preferences * */ public ArrayList<RemoteIC> getRemoteICList() { ArrayList<RemoteIC> remoteICList = new ArrayList<>(); // Load the preferences in org.eclipse.help.base/preferences.ini RemoteIC initRemoteIC; int totalICs = this.getTotalRemoteInfocenters(); String host, name, path, protocol, port, enabledDisabled; boolean currEnabled; for (int i = 0; i < totalICs; i++) { host = (this.getHostEntries())[i]; name = (this.getNameEntries())[i]; path = (this.getPathEntries())[i]; protocol = (this.getProtocolEntries())[i]; port = (this.getPortEntries())[i]; enabledDisabled = (this.getEnabledEntries())[i]; if (enabledDisabled.equalsIgnoreCase("true")) //$NON-NLS-1$ { currEnabled = true; } else { currEnabled = false; } initRemoteIC = new RemoteIC(currEnabled, name, host, path, protocol,port); remoteICList.add(initRemoteIC); } return remoteICList; } public static int getEmbeddedHelpOption() { boolean isRemoteOn = Platform.getPreferencesService().getBoolean (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_REMOTE_HELP_ON, false, null); boolean isRemotePreferred = Platform.getPreferencesService().getBoolean (HelpBasePlugin.PLUGIN_ID, IHelpBaseConstants.P_KEY_REMOTE_HELP_PREFERRED, false, null); if(!isRemoteOn) { return LOCAL_HELP_ONLY; } else if(!isRemotePreferred) { return LOCAL_HELP_PRIORITY; } else { return REMOTE_HELP_PRIORITY; } } public String[] getHostEntries() { return hostEntries; } public String[] getNameEntries() { return nameEntries; } public String[] getPathEntries() { return pathEntries; } public String[] getProtocolEntries() { return protocolEntries; } public String[] getPortEntries() { return portEntries; } public String[] getEnabledEntries() { return isICEnabled; } public int getTotalRemoteInfocenters() { return numEntries; } public String[] isEnabled() { return isICEnabled; } public String getDelimeter() { return PREFERENCE_ENTRY_DELIMITER; } }