blob: 0d9e25eb663ee7d1de6a009c8641c8d9972c4388 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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;
}
}