blob: 1910b1b9aee6a4e13d71a1d413ecf880745464a3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 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
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* 20071105 196997 pmoogk@ca.ibm.com - Peter Moogk
* 20071218 209858 epeters@ca.ibm.com - Eric Peters, Enhancing service policy framework and UI
* 20080318 223118 ericdp@ca.ibm.com - Eric D. Peters, metadata required in WS-I profiles to support editors & validators
* 20080318 221578 pmoogk@ca.ibm.com - Peter Moogk
*******************************************************************************/
package org.eclipse.wst.ws.internal.preferences;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.wst.ws.internal.plugin.WSPlugin;
import org.eclipse.wst.ws.service.policy.IPolicyState;
import org.eclipse.wst.ws.service.policy.IServicePolicy;
import org.eclipse.wst.ws.service.policy.ServicePolicyActivator;
import org.eclipse.wst.ws.service.policy.ServicePolicyPlatform;
import org.eclipse.wst.ws.service.policy.listeners.IPolicyPlatformLoadListener;
public class MigrateWSIpreferencesLoadListener implements IPolicyPlatformLoadListener
{
private static final String[] ENUM_ID_VALUES = { "org.eclipse.wst.sug.require", "org.eclipse.wst.sug.suggest", "org.eclipse.wst.sug.ignore"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
private static final String[] CONTEXT_IDS = { PersistentWSIContext.STOP_NON_WSI, PersistentWSIContext.WARN_NON_WSI, PersistentWSIContext.IGNORE_NON_WSI };
public void load()
{
// We need to check to see if the user has set any WSI preferences.
// If not we want to default WSI preferences to any old WSI preferences that
// have been set.
IEclipsePreferences preferences = new InstanceScope().getNode( ServicePolicyActivator.PLUGIN_ID );
String apValue = preferences.get( WSIServicePoliciesConstants.ServicePolicyID_AP10 + "." + IPolicyState.DefaultValueKey, null ); //$NON-NLS-1$
String ssbpValue = preferences.get( WSIServicePoliciesConstants.ServicePolicyID_SSBP10 + "." + IPolicyState.DefaultValueKey, null ); //$NON-NLS-1$
Preferences oldPrefs = WSPlugin.getInstance().getPluginPreferences();
String[] oldPropNames = oldPrefs.propertyNames();
if( apValue == null )
{
ServicePolicyPlatform platform = ServicePolicyPlatform.getInstance();
IServicePolicy apPolicy = platform.getServicePolicy( WSIServicePoliciesConstants.ServicePolicyID_AP10 );
IPolicyState apState = apPolicy.getPolicyState();
if( indexOfString( "nonWSIAPCompliance", oldPropNames ) != -1 ) //$NON-NLS-1$
{
// We have an old AP value so we will use it's value as the default for settings.
String oldApValue = oldPrefs.getString( "nonWSIAPCompliance" ); //$NON-NLS-1$
int oldApIndex = indexOfString( oldApValue, CONTEXT_IDS );
String newApValue = null;
if( oldApIndex < ENUM_ID_VALUES.length )
{
newApValue = ENUM_ID_VALUES[oldApIndex];
}
if( newApValue != null )
{
apState.putValue( IPolicyState.DefaultValueKey, newApValue );
}
}
// also need to check if any project specific preferences were set
QualifiedName name = new QualifiedName(WSPlugin.ID,
"nonWSIAPCompliance"); //$NON-NLS-1$
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot()
.getProjects();
for (int i = 0; i < projects.length; i++) {
try {
IProject project = projects[i];
String oldProperty = null;
oldProperty = project.getPersistentProperty(name);
if (oldProperty != null && !oldProperty.equals("")) { //$NON-NLS-1$
int oldApIndex = indexOfString(oldProperty, CONTEXT_IDS);
String newApValue = null;
if (oldApIndex != -1 && oldApIndex < ENUM_ID_VALUES.length) {
newApValue = ENUM_ID_VALUES[oldApIndex];
}
if (newApValue != null) {
apState = apPolicy.getPolicyState(project);
platform.setProjectPreferencesEnabled(project, true);
apState.putValue( IPolicyState.DefaultValueKey, newApValue );
}
}
} catch (CoreException e) {
//ignore this project
}
}
}
if( ssbpValue == null )
{
ServicePolicyPlatform platform = ServicePolicyPlatform.getInstance();
IServicePolicy ssbpPolicy = platform.getServicePolicy( WSIServicePoliciesConstants.ServicePolicyID_SSBP10 );
IPolicyState ssbpState = ssbpPolicy.getPolicyState();
if( indexOfString( "nonWSISSBPCompliance", oldPropNames ) != -1 ) //$NON-NLS-1$
{
// We have an old SSBP value so we will use it's value as the default for settings.
String oldSSBPValue = oldPrefs.getString( "nonWSISSBPCompliance" ); //$NON-NLS-1$
int oldSSBPIndex = indexOfString( oldSSBPValue, CONTEXT_IDS );
String newSSBPValue = null;
if( oldSSBPIndex < ENUM_ID_VALUES.length )
{
newSSBPValue = ENUM_ID_VALUES[oldSSBPIndex];
}
if( newSSBPValue != null )
{
ssbpState.putValue( IPolicyState.DefaultValueKey, newSSBPValue );
}
}
// also need to check if any project specific preferences were set
QualifiedName name = new QualifiedName(WSPlugin.ID,
"nonWSISSBPCompliance"); //$NON-NLS-1$
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot()
.getProjects();
for (int i = 0; i < projects.length; i++) {
try {
IProject project = projects[i];
String oldProperty = null;
oldProperty = project.getPersistentProperty(name);
if (oldProperty != null && !oldProperty.equals("")) { //$NON-NLS-1$
int oldSSBPIndex = indexOfString(oldProperty, CONTEXT_IDS);
String newSSBPValue = null;
if (oldSSBPIndex != -1 && oldSSBPIndex < ENUM_ID_VALUES.length) {
newSSBPValue = ENUM_ID_VALUES[oldSSBPIndex];
}
if (newSSBPValue != null) {
ssbpState = ssbpPolicy.getPolicyState(project);
platform.setProjectPreferencesEnabled(project, true);
ssbpState.putValue( IPolicyState.DefaultValueKey, newSSBPValue );
}
}
} catch (CoreException e) {
//ignore this project
}
}
}
}
private int indexOfString( String target, String[] values )
{
int result = -1;
for( int index = 0; index< values.length; index++ )
{
String value = values[index];
if( value.equals( target ) )
{
result = index;
break;
}
}
return result;
}
}