blob: 60cf094684ba75ed5ea3837fb3dc09dec7456e76 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2011 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
*******************************************************************************/
package org.eclipse.ui.internal.views.properties.tabbed.view;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
/**
* tabbed property registry factory. Caches the tabbed property registry by
* tabbed property contributor ID.
*
* @author Anthony Hunter
*/
public class TabbedPropertyRegistryFactory {
class CacheData {
TabbedPropertyRegistry registry;
List references;
}
/**
* singleton instance of this class
*/
private static TabbedPropertyRegistryFactory INSTANCE = new TabbedPropertyRegistryFactory();
/**
* get the singleton instance of this class.
*
* @return the TabbedPropertyRegistryFactory instance.
*/
public static TabbedPropertyRegistryFactory getInstance() {
return INSTANCE;
}
/**
* private constructor.
*/
private TabbedPropertyRegistryFactory() {
super();
idToCacheData = new HashMap();
}
protected Map idToCacheData; // cache
/**
* Creates a registry for the given contributor.
*
* @param target
* the contributor.
* @return a registry for the given contributor.
*/
public TabbedPropertyRegistry createRegistry(
ITabbedPropertySheetPageContributor target) {
/**
* Get the contributor id from the ITabbedPropertySheetPageContributor
* interface
*/
String key = target.getContributorId();
CacheData data = (CacheData) idToCacheData.get(key);
if (data == null) {
data = new CacheData();
data.registry = new TabbedPropertyRegistry(key);
data.references = new ArrayList(5);
idToCacheData.put(key, data);
}
data.references.add(target);
// keeps track of contributor using the same registry
return data.registry;
}
/**
* Indicates that the given contributor no longer needs a registry. The
* registry will be disposed when no other contributor of the same type
* needs it.
*
* @param target
* the contributor;
*/
public void disposeRegistry(ITabbedPropertySheetPageContributor target) {
/**
* Get the contributor id from the ITabbedPropertySheetPageContributor
* interface
*/
String key = target.getContributorId();
CacheData data = (CacheData) idToCacheData.get(key);
if (data != null) {
data.references.remove(target);
if (data.references.isEmpty()) {
data.registry.dispose();
idToCacheData.remove(key);
}
}
}
}