| /******************************************************************************* |
| * Copyright (c) 2007 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, Initial coding of service policy |
| *******************************************************************************/ |
| package org.eclipse.wst.ws.internal.service.policy.ui; |
| |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.Vector; |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.wst.ws.service.policy.IServicePolicy; |
| import org.eclipse.wst.ws.service.policy.ServicePolicyPlatform; |
| import org.eclipse.wst.ws.service.policy.listeners.IPolicyChildChangeListener; |
| import org.eclipse.wst.ws.service.policy.ui.IPolicyOperation; |
| import org.eclipse.wst.ws.service.policy.ui.IQuickFixActionInfo; |
| |
| public class ServicePolicyPlatformUIImpl |
| { |
| private Map<String, BaseOperationImpl> baseOperationMap; |
| private Map<IServicePolicy, Set<IPolicyOperation>> policyCache; |
| private Map<String,List<IQuickFixActionInfo>> quickFixes; |
| |
| public ServicePolicyPlatformUIImpl() |
| { |
| ServicePolicyPlatform platform = ServicePolicyPlatform.getInstance(); |
| ServicePolicyRegistryUI registry = new ServicePolicyRegistryUI(); |
| Set<String> policyIds = platform.getAllPolicyIds(); |
| |
| baseOperationMap = new HashMap<String, BaseOperationImpl>(); |
| policyCache = new HashMap<IServicePolicy, Set<IPolicyOperation>>(); |
| quickFixes = new HashMap<String, List<IQuickFixActionInfo>>(); |
| registry.load( baseOperationMap, quickFixes ); |
| createOperationCache( policyIds ); |
| |
| platform.addChildChangeListener( new ChildListener() ); |
| } |
| |
| public List<IQuickFixActionInfo> getQuickFixes( IStatus status ) |
| { |
| String pluginId = status.getPlugin(); |
| int code = status.getCode(); |
| String key = pluginId + ":" + code; //$NON-NLS-1$ |
| List<IQuickFixActionInfo> result = quickFixes.get( key ); |
| |
| if( result == null ) |
| { |
| result = new Vector<IQuickFixActionInfo>(); |
| quickFixes.put( key, result ); |
| } |
| |
| return result; |
| } |
| |
| public List<IPolicyOperation> getAllOperations() |
| { |
| List<IPolicyOperation> operations = new Vector<IPolicyOperation>(); |
| |
| for( Set<IPolicyOperation> operationSet : policyCache.values() ) |
| { |
| operations.addAll( operationSet ); |
| } |
| |
| return operations; |
| } |
| |
| public Set<IPolicyOperation> getOperationsForPolicy( IServicePolicy policy, boolean isWorkspace ) |
| { |
| Set<IPolicyOperation> policyOperations = policyCache.get( policy ); |
| Set<IPolicyOperation> result = new HashSet<IPolicyOperation>(); |
| |
| if( policyOperations != null ) |
| { |
| result.addAll( policyOperations ); |
| |
| if( !isWorkspace ) |
| { |
| for( IPolicyOperation operation : policyOperations ) |
| { |
| if( operation.isWorkspaceOnly() ) |
| { |
| result.remove( operation ); |
| } |
| } |
| } |
| } |
| |
| return result; |
| } |
| |
| public List<List<IPolicyOperation>> getOperationsList( List<IServicePolicy> policies, boolean isWorkspace ) |
| { |
| Map<String, List<IPolicyOperation>> operationMap = new HashMap<String, List<IPolicyOperation>>(); |
| |
| for( IServicePolicy policy : policies ) |
| { |
| Set<IPolicyOperation> operations = policyCache.get( policy ); |
| |
| if( operations != null ) |
| { |
| for( IPolicyOperation operation : operations ) |
| { |
| String id = operation.getId(); |
| List<IPolicyOperation> entryList = operationMap.get( id ); |
| |
| if( entryList == null ) |
| { |
| entryList = new Vector<IPolicyOperation>(); |
| operationMap.put( id, entryList ); |
| } |
| |
| entryList.add( operation ); |
| } |
| } |
| } |
| |
| return new Vector<List<IPolicyOperation>>( operationMap.values() ); |
| } |
| |
| private void createOperationCache( Set<String> policyIds ) |
| { |
| ServicePolicyPlatform platform = ServicePolicyPlatform.getInstance(); |
| Collection<BaseOperationImpl> operations = baseOperationMap.values(); |
| |
| for( BaseOperationImpl operation : operations ) |
| { |
| String policyPattern = operation.getPolicyIdPattern(); |
| Pattern pattern = Pattern.compile( policyPattern ); |
| |
| for( String policyId : policyIds ) |
| { |
| Matcher matcher = pattern.matcher( policyId ); |
| |
| if( matcher.matches() ) |
| { |
| IServicePolicy policy = platform.getServicePolicy( policyId ); |
| Set<IPolicyOperation> operationsSet = policyCache.get(policy); |
| |
| if( operationsSet == null ) |
| { |
| operationsSet = new HashSet<IPolicyOperation>(); |
| policyCache.put( policy, operationsSet ); |
| } |
| |
| operationsSet.add( new PolicyOperationImpl( operation, policy ) ); |
| } |
| } |
| } |
| } |
| |
| private class ChildListener implements IPolicyChildChangeListener |
| { |
| public void childChange(List<IServicePolicy> childList, List<Boolean> addedList) |
| { |
| Set<String> idSet = new HashSet<String>(); |
| |
| for( int index = 0; index < childList.size(); index++ ) |
| { |
| IServicePolicy policy = childList.get( index ); |
| boolean added = addedList.get( index ); |
| |
| if( added ) |
| { |
| |
| idSet.add( policy.getId() ); |
| } |
| else |
| { |
| policyCache.remove( policy ); |
| } |
| } |
| |
| if( idSet.size() > 0 ) |
| { |
| createOperationCache( idSet ); |
| } |
| } |
| } |
| } |