Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/FacetMatchCache.java')
-rw-r--r--bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/FacetMatchCache.java496
1 files changed, 0 insertions, 496 deletions
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/FacetMatchCache.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/FacetMatchCache.java
deleted file mode 100644
index 3243101d9..000000000
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/FacetMatchCache.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 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
- * -------- -------- -----------------------------------------------------------
- * 20060131 121071 rsinha@ca.ibm.com - Rupam Kuehner (initial creation)
- * 20060426 138051 kathy@ca.ibm.com - Kathy Chan
- * 20060427 126780 rsinha@ca.ibm.com - Rupam Kuehner
- * 20080923 247525 mahutch@ca.ibm.com - Mark Hutchinson, cache not updated properly when project facet versions changed
- *******************************************************************************/
-package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
-import org.eclipse.jst.ws.internal.consumption.common.FacetMatcher;
-import org.eclipse.jst.ws.internal.consumption.common.FacetSetsByTemplateCache;
-import org.eclipse.jst.ws.internal.consumption.common.FacetUtils;
-import org.eclipse.jst.ws.internal.consumption.common.RequiredFacetVersion;
-import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
-import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
-
-/**
- * FacetMatchCache caches results of calculations made respecting
- * the suitability of projects and project types for serviceRuntimes
- * and clientRuntimes.
- *
- * <br/><br/>
- * Terminology used in the javadoc in this class:
- * <ul>
- * <li><b>serviceRuntime</b>: extension to org.eclipse.jst.ws.consumption.ui.serviceRuntimes.
- * The Java representation of this is org.eclipse.jst.ws.internal.consumption.ui.wsrt.ServiceRuntimeDescriptor</li>
- * <li><b>clientRuntime</b>: extension to org.eclipse.jst.ws.consumption.ui.clientRuntimes.
- * The Java representation of this is org.eclipse.jst.ws.internal.consumption.ui.wsrt.ClientRuntimeDescriptor</li>
- * </ul>
- *
- */
-public class FacetMatchCache implements IResourceChangeListener
-{
- //single instance per workbench
- private static FacetMatchCache instance_;
-
-
- //Tables related to existing projects in the workspace
-
- //serviceFacetMatchTable_:
- //key: Object of type String.
- // Forward slash separated concatenation of a serviceRuntimeId and a projectName
- // (e.g. org.eclipse.jst.ws.axis.creation.java/wp).
- //value: Object of type org.eclipse.jst.ws.internal.consumption.common.FacetMatcher.
- // The FacetMatcher contains the matching characteristics calculated for the
- // serviceRuntime and project in the key.
- private Hashtable serviceFacetMatchTable_;
-
- //serviceTableKeysByProjectName_:
- //key: Object of type String.
- // project name (e.g. wp)
- //value: Set of elements of type String. The Strings in the Set are keys from the serviceFacetMatchTable_
- // that contain the project name (e.g. org.eclipse.jst.ws.axis.creation.java/wp). Used to rapidly
- // delete entries from serviceFacetMatchTable_ after a project is deleted from the workspace.
- private Hashtable serviceTableKeysByProjectName_;
-
- //clientFacetMatchTable_;
- //key: Object of type String.
- // forward slash separated concatenation of a clientRuntimeId and a projectName
- // (e.g. org.eclipse.jst.ws.axis.consumption.java/wp)
- //value: Object of type org.eclipse.jst.ws.internal.consumption.common.FacetMatcher
- // The FacetMatcher contains the matching characteristics calculated for the
- // clientRuntime and project in the key.
- private Hashtable clientFacetMatchTable_;
-
- //clientTableKeysByProjectName_
- //key: Object of type String.
- // project name (e.g. wp)
- //value: Set of elements of type String. The Strings in the Set are keys from the clientFacetMatchTable_
- // that contain the project name (e.g. org.eclipse.jst.ws.axis.consumption.java/wp). Used to rapidly
- // delete entries from clientFacetMatchTable_ after a project is deleted from the workspace.
- private Hashtable clientTableKeysByProjectName_;
-
- //projectEntriesToDelete_: elements of type String containing the names of projects that have
- //been deleted from the workspace but their corresponding entries from serviceFacetMatchTable_
- //and clientFacetMatchTable_ have yet to be deleted.
- private List projectEntriesToDelete_;
-
-
-
- //Tables related to templates
-
- //templatesByServiceRuntimeId_:
- //key: Object of type String.
- // serviceRuntime id
- //value: Set of elements of type org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate
- // This the set of templates that support the serviceRuntime identified by the key.
- private Hashtable templatesByServiceRuntimeId_;
-
- //templatesByClientRuntimeId_
- //key: Object of type String.
- // clientRuntime id
- //value: Set of elements of type org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate
- // This the set of templates that support the clientRuntime identified by the key.
- private Hashtable templatesByClientRuntimeId_;
-
-
- /**
- * Returns a singleton instance of this class.
- *
- * @return A singleton FacetMatchCache object.
- */
- public static synchronized FacetMatchCache getInstance()
- {
- if (instance_ == null)
- {
- instance_ = new FacetMatchCache();
- instance_.load();
- }
- return instance_;
- }
-
- private void load()
- {
- serviceFacetMatchTable_ = new Hashtable();
- serviceTableKeysByProjectName_ = new Hashtable();
- clientFacetMatchTable_ = new Hashtable();
- clientTableKeysByProjectName_ = new Hashtable();
- projectEntriesToDelete_ = new ArrayList();
- templatesByClientRuntimeId_ = new Hashtable();
- templatesByServiceRuntimeId_ = new Hashtable();
-
- //Listen for deletions of projects in order to delete all entries in
- //Hashtables for the deleted project.
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.PRE_DELETE);
- }
-
-
- /*
- * Returns the FacetMatcher resulting from matching a serviceRuntime or clientRuntime with an existing project.
- * @param isClient true if runtimeId is a clientRuntimeId. false if runtimeId is a serviceRuntimeId.
- * @param runtimeId the id of a clientRuntime if isClient is true or the id of a serviceRuntime if
- * isClient is false.
- * @param projectName the name of an existing project.
- *
- * @returns FacetMatcher resulting from calling FacetUtils.match(..) using the serviceRuntime or clientRuntime id
- * and the project name. Returns null if the project doesn't exist. Non-faceted existing projects will always result
- * in a FacetMatcher with isMatch() equal to false (with the exception of Java projects which are a special case
- * - see FacetUtils.getFacetsForProject()).
- */
- public synchronized FacetMatcher getMatchForProject(boolean isClient, String runtimeId, String projectName)
- {
- //Delete entries from tables if there are deletions pending.
- if (projectEntriesToDelete_.size() > 0)
- {
- Iterator projectItr = projectEntriesToDelete_.iterator();
- while(projectItr.hasNext())
- {
- String projectNameToDelete = (String)projectItr.next();
-
- //Delete entries from client table
- removeTableEntriesForProject(true, projectNameToDelete);
-
- //Delete entries from service table
- removeTableEntriesForProject(false, projectNameToDelete);
- }
-
- //Clear the projectEntriesToDelete list
- projectEntriesToDelete_.clear();
- }
-
- IProject project = ProjectUtilities.getProject(projectName);
- FacetMatcher fm = null;
- if (project != null && project.exists())
- {
- String key = getKey(runtimeId, projectName);
- if (isClient)
- {
- fm = (FacetMatcher) clientFacetMatchTable_.get(key);
- }
- else
- {
- fm = (FacetMatcher) serviceFacetMatchTable_.get(key);
- }
-
- if (fm == null)
- {
- // This combination has not yet been calculated and cached so calculate it and cache it.
- fm = calculateFacetMatcher(isClient, runtimeId, projectName);
- if (isClient)
- {
- clientFacetMatchTable_.put(key,fm);
- }
- else
- {
- serviceFacetMatchTable_.put(key, fm);
- }
- updateTableOfKeys(isClient, key, projectName);
-
- } else
- {
- // If the project's facets have changed since the last time the
- // facets were calculated, refresh the facetMatcher.
- Set currentFacetVersions = FacetUtils.getFacetsForProject(projectName);
- Set previousFacetVersions = fm.getFacetsTested();
- if (!currentFacetVersions.equals(previousFacetVersions))
- {
- //recalculate and cache the FacetMatcher
- fm = calculateFacetMatcher(isClient, runtimeId, projectName);
- if (isClient)
- {
- clientFacetMatchTable_.put(key,fm);
- }
- else
- {
- serviceFacetMatchTable_.put(key, fm);
- }
- }
- }
- }
-
- return fm;
- }
-
- /**
- * Updates serviceTableKeysByProjectName_ or clientTableKeysByProjectName_ with
- * the provided project name and key. This is called whenever a new entry is
- * added to serviceFacetMatchTable_ or clientFacetMatchTable_.
- * @param isClient true if runtimeId is a clientRuntimeId. false if runtimeId is a serviceRuntimeId.
- * @param key
- * @param projectName
- */
- private void updateTableOfKeys(boolean isClient, String key, String projectName)
- {
- Set setOfKeysForProjectName = null;
- if (isClient)
- {
- setOfKeysForProjectName = (Set)clientTableKeysByProjectName_.get(projectName);
- }
- else
- {
- setOfKeysForProjectName = (Set)serviceTableKeysByProjectName_.get(projectName);
- }
-
- if (setOfKeysForProjectName == null)
- {
- //Add an entry in the table for this project.
- Set keys = new HashSet();
- keys.add(key);
- if (isClient)
- {
- clientTableKeysByProjectName_.put(projectName, keys);
- }
- else
- {
- serviceTableKeysByProjectName_.put(projectName, keys);
- }
- }
- else
- {
- //Update the entry in the table for this project.
- setOfKeysForProjectName.add(key);
- }
- }
-
- /**
- * Returns the {@link FacetMatcher} calculated for the given serviceRuntime or clientRuntime and project
- * @param isClient true if runtimeId is a clientRuntimeId. false if runtimeId is a serviceRuntimeId.
- * @param runtimeId the id of a clientRuntime if isClient is true or the id of a serviceRuntime if
- * isClient is false.
- * @param projectName the name of an existing project.
- * @return FacetMatcher resulting from calling FacetUtils.match(..) using the serviceRuntime or clientRuntime id
- * and the project name. Returns null if the project doesn't exist. Non-faceted existing projects will always result
- * in a FacetMatcher with isMatch() equal to false (with the exception of Java projects which are a special case
- * - see FacetUtils.getFacetsForProject()).
- */
- private FacetMatcher calculateFacetMatcher(boolean isClient, String runtimeId, String projectName)
- {
- FacetMatcher fm = null;
- RequiredFacetVersion[] rfvs = null;
- if (isClient)
- {
- ClientRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(runtimeId);
- rfvs = desc.getRequiredFacetVersions();
- }
- else
- {
- ServiceRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(runtimeId);
- rfvs = desc.getRequiredFacetVersions();
- }
-
- Set facetVersions = new HashSet(FacetUtils.getFacetsForProject(projectName));
- if (facetVersions == null)
- {
- fm = new FacetMatcher();
- fm.setMatch(false);
- return fm;
- }
-
- fm = FacetUtils.match(rfvs, facetVersions);
-
- // Check if the facet runtime required by the required facet is supported
- // by the project without chaning it's current facet runtime
-
- IRuntime fProjectRuntime = FacetUtils.getFacetRuntimeForProject(projectName);
- if (fProjectRuntime != null) {
- String fProjectRuntimeName = fProjectRuntime.getName();
- boolean projectSupportRequiredFacetRuntime = false;
- Set rts = FacetUtils.getRuntimes(rfvs);
- for (Iterator iterator = rts.iterator(); iterator.hasNext() && !projectSupportRequiredFacetRuntime;) {
- IRuntime fRequiredRuntime = (IRuntime) iterator.next();
- if (fRequiredRuntime != null) {
- if (fRequiredRuntime.getName().equals(fProjectRuntimeName)) {
- projectSupportRequiredFacetRuntime = true;
- }
- }
- }
-
- // if project does not support the required facet runtime, set FacetMatch match to false
- if (!projectSupportRequiredFacetRuntime) {
- fm.setMatch(false);
- }
- }
- return fm;
- }
-
- private String getKey(String a, String b)
- {
- StringBuffer keysb = new StringBuffer();
- keysb.append(a);
- keysb.append("/");
- keysb.append(b);
- return keysb.toString();
- }
-
- /**
- * Removes all table entries in this cache for the given project
- * @param isClient true to remove entries from client side tables. false to remove entries from service side tables
- * @param projectName
- */
- private void removeTableEntriesForProject(boolean isClient, String projectName)
- {
- //First remove the entries from clientFacetMatchTable_ or serviceFacetMatchTable_
- //that have keys containing this project name.
- Set setOfKeysForProjectName = null;
- if (isClient)
- {
- setOfKeysForProjectName = (Set)clientTableKeysByProjectName_.get(projectName);
- }
- else
- {
- setOfKeysForProjectName = (Set)serviceTableKeysByProjectName_.get(projectName);
- }
-
- if (setOfKeysForProjectName != null)
- {
- Iterator keysItr = setOfKeysForProjectName.iterator();
- while (keysItr.hasNext())
- {
- String key = (String)keysItr.next();
- if (isClient)
- {
- clientFacetMatchTable_.remove(key);
- }
- else
- {
- serviceFacetMatchTable_.remove(key);
- }
- }
-
- //Second, remove the entry in clientTableKeysByProjectName_ or serviceTableKeysByProjectName_
- //with this projectName as the key.
- if (isClient)
- {
- clientTableKeysByProjectName_.remove(projectName);
- }
- else
- {
- serviceTableKeysByProjectName_.remove(projectName);
- }
-
- }
-
- }
-
- /**
- * Returns a set of templates supported by the given clientRuntime
- * @param clientRuntimeId id of a clientRuntime
- * @returns Set (elementtype: IFacetedProjectTemplate)
- */
- public synchronized Set getTemplatesForClientRuntime(String clientRuntimeId)
- {
- Set templates = (Set)templatesByClientRuntimeId_.get(clientRuntimeId);
- if (templates != null)
- {
- //Return the cached set of templates.
- return templates;
- }
- else
- {
- //Calculate the templates, cache them for later use, and return them.
- ClientRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(clientRuntimeId);
- Set validTemplates = getTemplates(desc.getRequiredFacetVersions());
- templatesByClientRuntimeId_.put(clientRuntimeId, validTemplates);
- return validTemplates;
- }
- }
-
- /**
- * Returns a set of templates supported by the given serviceRuntime
- * @param serviceRuntimeId id of a serviceRuntime
- * @returns Set (elementtype: IFacetedProjectTemplate)
- */
- public synchronized Set getTemplatesForServiceRuntime(String serviceRuntimeId)
- {
- Set templates = (Set)templatesByServiceRuntimeId_.get(serviceRuntimeId);
- if (templates != null)
- {
- //Return the cached set of templates.
- return templates;
- }
- else
- {
- //Calculate the templates, cache them for later use, and return them.
- ServiceRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(serviceRuntimeId);
- Set validTemplates = getTemplates(desc.getRequiredFacetVersions());
- templatesByServiceRuntimeId_.put(serviceRuntimeId, validTemplates);
- return validTemplates;
- }
- }
-
-
- /**
- * Returns the set of templates that supported the given required facet versions.
- * @param requiredFacetVersions
- * @return Set containing elemets of type {@link IFacetedProjectTemplate}.
- */
- private Set getTemplates(RequiredFacetVersion[] requiredFacetVersions)
- {
- Set templates = new HashSet();
-
- for( Iterator itr = ProjectFacetsManager.getTemplates().iterator(); itr.hasNext(); )
- {
- final IFacetedProjectTemplate template = (IFacetedProjectTemplate) itr.next();
- String templateId = template.getId();
- if (templateId.indexOf("ear") == -1 && templateId.indexOf("wst.web") == -1) //Don't include the EARs!!
- {
- Set[] combinations = FacetSetsByTemplateCache.getInstance().getFacetVersionCombinationsFromTemplate(templateId);
- for (int i=0; i<combinations.length; i++)
- {
- FacetMatcher fm = FacetUtils.match(requiredFacetVersions, combinations[i]);
- if (fm.isMatch())
- {
- //Found a combination that worked. Add the template to the list and move on.
- templates.add(template);
- break;
- }
- }
- }
- }
-
- return templates;
-
- }
-
- public synchronized void resourceChanged(IResourceChangeEvent event)
- {
- if (event.getType() == IResourceChangeEvent.PRE_DELETE)
- {
- IResource projectResource = event.getResource();
- if (projectResource!=null)
- {
- String projectName = projectResource.getName();
-
- //Add this project name to the list of project entries
- //to delete. Next time getMatchForProject is called all
- //entries for this project from all tables in this cache
- //will be deleted.
- projectEntriesToDelete_.add(projectName);
- }
- }
- }
-}

Back to the top