blob: 294049a8607025e43c1c41463f8a63f94accd2c2 [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
* -------- -------- -----------------------------------------------------------
* 20071024 196997 pmoogk@ca.ibm.com - Peter Moogk
* 20080428 227501 pmoogk@ca.ibm.com - Peter Moogk, Fixed toLowerCase Locale problem.
*******************************************************************************/
package org.eclipse.wst.ws.internal.service.policy.ui;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Vector;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.wst.ws.service.policy.IDescriptor;
import org.eclipse.wst.ws.service.policy.ui.IQuickFixActionInfo;
import org.eclipse.wst.ws.service.policy.ui.ServicePolicyActivatorUI;
import org.eclipse.wst.ws.service.policy.utils.RegistryUtils;
public class ServicePolicyRegistryUI
{
private final String SERVICE_POLICY_ID = ServicePolicyActivatorUI.PLUGIN_ID + ".servicepolicyui"; //$NON-NLS-1$
public ServicePolicyRegistryUI()
{
}
public void load( Map<String, BaseOperationImpl> operationMap, Map<String, List<IQuickFixActionInfo>> quickFixes )
{
IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(SERVICE_POLICY_ID);
for( IConfigurationElement element : elements )
{
String elementName = element.getName().toLowerCase( Locale.ENGLISH );
if( elementName.equals( "servicepolicyui") ) //$NON-NLS-1$
{
IConfigurationElement[] children = element.getChildren();
for( IConfigurationElement child : children )
{
String name = child.getName().toLowerCase( Locale.ENGLISH );
if( name.equals( "operation" ) ) //$NON-NLS-1$
{
loadServicePolicyui( child, operationMap );
}
else if( name.equals( "quickfix") ) //$NON-NLS-1$
{
loadQuickFix( child, quickFixes );
}
else
{
error( "Undefined service policy ui element, " + name + " found." ); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
else
{
error( "Undefined service policy ui element, " + elementName + " found." ); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
private void loadServicePolicyui( IConfigurationElement element,
Map<String, BaseOperationImpl> operationMap )
{
String id = RegistryUtils.getAttribute( element, "id" ); //$NON-NLS-1$
String policyPattern = RegistryUtils.getAttribute( element, "policypattern" ); //$NON-NLS-1$
String workspaceOnly = RegistryUtils.getAttribute( element, "workspaceonly" ); //$NON-NLS-1$
String useDefaultString = RegistryUtils.getAttribute( element, "defaultdata" ); //$NON-NLS-1$
IConfigurationElement[] children = element.getChildren();
IDescriptor descriptor = null;
String enumId = null;
String defaultItem = null;
boolean selection = false;
boolean icon = false;
boolean multiSelect = false;
IConfigurationElement enabledElement = null;
IConfigurationElement launchElement = null;
boolean error = false;
boolean useDefaultData = true;
if( useDefaultString != null )
{
useDefaultData = useDefaultString.equals( "true" ); //$NON-NLS-1$
}
for( IConfigurationElement child : children )
{
String name = child.getName().toLowerCase( Locale.ENGLISH );
if( name.equals( "descriptor" ) ) //$NON-NLS-1$
{
descriptor = RegistryUtils.loadDescriptor( child );
}
else if( name.equals( "enumeration" ) ) //$NON-NLS-1$
{
enumId = RegistryUtils.getAttribute( child, "id" ); //$NON-NLS-1$
defaultItem = RegistryUtils.getAttribute( child, "defaultitem" ); //$NON-NLS-1$
if( enumId == null )
{
error( "Service policy ui enumeration element is missing id attribute." ); //$NON-NLS-1$
error = true;
}
}
else if( name.equals( "selection" ) ) //$NON-NLS-1$
{
String iconValue = RegistryUtils.getAttribute( child, "icon" ); //$NON-NLS-1$
selection = true;
if( iconValue != null && iconValue.equalsIgnoreCase( "true" ) ) //$NON-NLS-1$
{
icon = true;
useDefaultData = true;
}
}
else if( name.equals( "complex" ) ) //$NON-NLS-1$
{
String launchClass = RegistryUtils.getAttribute( child, "launchclass" ); //$NON-NLS-1$
if( launchClass == null )
{
error( "Service policy ui enumeration element is missing id attribute." ); //$NON-NLS-1$
error = true;
}
launchElement = child;
}
else if( name.equals( "enabled" ) ) //$NON-NLS-1$
{
String multiSelectValue = RegistryUtils.getAttribute( child, "multiselect" ).toLowerCase( Locale.ENGLISH ); //$NON-NLS-1$
if( multiSelectValue != null && multiSelectValue.equals( "true" )) //$NON-NLS-1$
{
multiSelect = true;
}
String enabledClass = RegistryUtils.getAttribute( child, "enabledclass" ); //$NON-NLS-1$
if( enabledClass != null )
{
enabledElement = child;
}
}
else
{
error( "Undefined service policy ui element, " + name + " found." ); //$NON-NLS-1$ //$NON-NLS-2$
error = true;
}
}
if( descriptor == null )
{
error( "Service policy operation element must have a descriptor element defined." ); //$NON-NLS-1$
error = true;
}
if( id == null )
{
error( "Id attribute not specified in service policy ui operation element." ); //$NON-NLS-1$
error = true;
}
if( policyPattern == null )
{
error( "Id attribute not specified in service policy ui operation element." ); //$NON-NLS-1$
error = true;
}
if( ( enumId == null && !selection && launchElement == null) ||
( enumId != null && (selection || launchElement != null)) ||
( selection && (enumId != null || launchElement != null)) ||
( launchElement != null && (selection && enumId != null)))
{
error( "Service policy operation element must have either an enumeration element or a selection element or a complex element" ); //$NON-NLS-1$
error = true;
}
if( ! error )
{
BaseOperationImpl operation = new BaseOperationImpl();
boolean workspaceOnlyValue = workspaceOnly != null && workspaceOnly.equals( "true" ); //$NON-NLS-1$
operation.setId( id );
operation.setPolicyIdPattern( policyPattern );
operation.setDescriptor( descriptor );
operation.setMultiSelect( multiSelect );
operation.setEnumerationId( enumId );
operation.setWorkspaceOnly( workspaceOnlyValue );
operation.setUseDefaultData( useDefaultData );
if( defaultItem != null )
{
operation.setDefaultItem( defaultItem );
}
if( selection )
{
operation.setEnumerationId( "org.eclipse.wst.service.policy.booleanEnum" ); //$NON-NLS-1$
operation.setSelection( icon );
}
if( launchElement != null )
{
operation.setComplexElement( launchElement );
}
if( enabledElement != null )
{
operation.setEnabledElement( enabledElement );
}
operationMap.put( id, operation );
}
}
private void loadQuickFix( IConfigurationElement element, Map<String, List<IQuickFixActionInfo>> quickFixes )
{
IConfigurationElement[] children = element.getChildren( "action" ); //$NON-NLS-1$
String pluginId = RegistryUtils.getAttribute( element, "pluginid" ); //$NON-NLS-1$
String code = RegistryUtils.getAttribute( element, "code" ); //$NON-NLS-1$
List<IQuickFixActionInfo> fixList = new Vector<IQuickFixActionInfo>();
for( IConfigurationElement child : children )
{
loadAction( child, fixList );
}
if( pluginId == null )
{
error( "Missing pluginId attribute for Service policy UI quick fix extension" ); //$NON-NLS-1$
return;
}
if( code == null )
{
error( "Missing code attribute for Service policy UI quick fix extension" ); //$NON-NLS-1$
return;
}
if( fixList.size() == 0 )
{
error( "Missing action element for Service policy UI quick fix extension" ); //$NON-NLS-1$
return;
}
String key = pluginId + ":" + code; //$NON-NLS-1$
quickFixes.put( key, fixList );
}
private void loadAction( IConfigurationElement element, List<IQuickFixActionInfo> fixList )
{
IConfigurationElement[] descElem = element.getChildren( "descriptor" ); //$NON-NLS-1$
String clazz = RegistryUtils.getAttribute( element, "class" ); //$NON-NLS-1$
if( descElem == null )
{
error( "Missing descriptor element for Service policy UI quick fix extension" ); //$NON-NLS-1$
return;
}
if( clazz == null )
{
error( "Missing class attribute for Service policy UI quick fix extension" ); //$NON-NLS-1$
return;
}
IDescriptor descriptor = RegistryUtils.loadDescriptor( element );
QuickFixActionInfoImpl action = new QuickFixActionInfoImpl( element, descriptor );
fixList.add( action );
}
private void error( String message )
{
ServicePolicyActivatorUI.logError( message, null );
}
}