blob: 17bbc4516f867581a0799b3319444af1b196cfba [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2007 Oracle 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:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.pagedesigner.properties.internal;
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;
import org.eclipse.core.resources.IProject;
/**
* Cache of quickEditTabGroupDescriptors keyed by tagID as QName.
*/
public class QuickEditTabSectionsManager {
private static QuickEditTabSectionsManagerMgr _mgrInstance = new QuickEditTabSectionsManagerMgr();
private Map<QName, QuickEditTabSectionsDescriptor> map = new HashMap<QName, QuickEditTabSectionsDescriptor>(5);
private IProject _project;
private int clientCount = 0;
/**
* Returns instance of QuickEditTabSectionsManager for the given project. Caller must release the instance when caller is being disposed.
* @param project
* @return instance of QuickEditTabSectionsManager
*/
public static synchronized QuickEditTabSectionsManager acquireInstance(IProject project){
QuickEditTabSectionsManager instance = _mgrInstance.getSectionsManager(project);
instance.clientCount++;
return instance;
}
/**
* Releases instance of QuickEditTabSectionsManager and removes from the QuickEditSectionGroupsManagerMgr if it is the last reference
*/
public synchronized void releaseInstance(){
int refCount = --clientCount;
if (refCount == 0){
_mgrInstance.removeSectionsManager(_project);
}
}
/**
* private constructor
*/
private QuickEditTabSectionsManager(){
//
}
/**
* @return IProject that this section manager applies to
*/
public IProject getProject(){
return _project;
}
/**
* Get QuickEditTabSectionsDescriptor for passed tag
*
* @param tagId
* @return QuickEditTabSectionsDescriptor
*/
public QuickEditTabSectionsDescriptor getQuickEditTabSectionsFor(QName tagId) {
return map.get(tagId);
}
/**
* Adds QuickEditTabSectionsDescriptor to managed registry keyed by the tagId
* QName
*
* @param group
*/
public void addQuickEditTabGroupDescriptor(QuickEditTabSectionsDescriptor group) {
map.put(group.getTagId(), group);
}
/**
* Removes and disposes a cached {@link QuickEditTabSectionsDescriptor}
*
* @param tagId
*/
public void removeQuickEditTabGroup(QName tagId) {
QuickEditTabSectionsDescriptor grp = map.get(tagId);
if (grp != null) {
map.remove(tagId);
}
}
/**
* Manages the QuickEditTabSectionsManager instances. Ensures one per project.
*/
private static class QuickEditTabSectionsManagerMgr {
private Map <IProject,QuickEditTabSectionsManager>_map = new HashMap<IProject,QuickEditTabSectionsManager>();
/**
* @param project - may be null
* @return QuickEditTabManager for project
*/
public QuickEditTabSectionsManager getSectionsManager(IProject project){
if (_map.containsKey(project))
return _map.get(project);
QuickEditTabSectionsManager instance = new QuickEditTabSectionsManager();
instance._project = project;
_map.put(project, instance);
return instance;
}
/**
* Removes QuickEditTabManager from mgr for given project
* @param project
*/
public void removeSectionsManager(IProject project){
if (_map.containsKey(project))
_map.remove(project);
}
}
}