| /******************************************************************************* |
| * 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.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; |
| |
| public class ServicePolicyPlatformUIImpl |
| { |
| private Map<String, PolicyOperationImpl> operationMap; |
| private Map<IServicePolicy, Set<IPolicyOperation>> policyCache; |
| |
| public ServicePolicyPlatformUIImpl() |
| { |
| ServicePolicyPlatform platform = ServicePolicyPlatform.getInstance(); |
| ServicePolicyRegistryUI registry = new ServicePolicyRegistryUI(); |
| Set<String> policyIds = platform.getAllPolicyIds(); |
| |
| operationMap = new HashMap<String, PolicyOperationImpl>(); |
| policyCache = new HashMap<IServicePolicy, Set<IPolicyOperation>>(); |
| registry.load( operationMap ); |
| createOperationCache( policyIds ); |
| |
| // Now add listeners to each node. |
| for( String policyId : policyIds ) |
| { |
| IServicePolicy policy = platform.getServicePolicy( policyId ); |
| policy.addPolicyChildChangeListener( new ChildListener() ); |
| } |
| } |
| |
| public IPolicyOperation getOperation( String operationId ) |
| { |
| return operationMap.get( operationId ); |
| } |
| |
| public List<IPolicyOperation> getAllOperations() |
| { |
| return new Vector<IPolicyOperation>( operationMap.values() ); |
| } |
| |
| public Set<IPolicyOperation> getSelectedOperations( List<IServicePolicy> policiesSelected, boolean isWorkspace ) |
| { |
| Set<IPolicyOperation> operations = new HashSet<IPolicyOperation>(); |
| |
| for( IServicePolicy policy : policiesSelected ) |
| { |
| Set<IPolicyOperation> policyOperations = policyCache.get( policy ); |
| |
| if( policyOperations != null ) |
| { |
| operations.addAll( policyOperations ); |
| } |
| } |
| |
| if( !isWorkspace ) |
| { |
| // We are getting operations for a project so we must remove the operations that are |
| // only for a workspace. |
| List<IPolicyOperation> operationsToRemove = new Vector<IPolicyOperation>(); |
| |
| for( IPolicyOperation operation : operations ) |
| { |
| if( operation.isWorkspaceOnly() ) operationsToRemove.add( operation ); |
| } |
| |
| operations.removeAll( operationsToRemove ); |
| } |
| |
| return operations; |
| } |
| |
| private void createOperationCache( Set<String> policyIds ) |
| { |
| ServicePolicyPlatform platform = ServicePolicyPlatform.getInstance(); |
| Collection<PolicyOperationImpl> operations = operationMap.values(); |
| |
| for( PolicyOperationImpl 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( operation ); |
| } |
| } |
| } |
| } |
| |
| private class ChildListener implements IPolicyChildChangeListener |
| { |
| public void childChange(IServicePolicy child, boolean added) |
| { |
| if( added ) |
| { |
| Set<String> idSet = new HashSet<String>(); |
| |
| idSet.add( child.getId() ); |
| createOperationCache( idSet ); |
| } |
| else |
| { |
| policyCache.remove( child ); |
| } |
| } |
| } |
| } |