blob: 5396fd7b8ba743e1c47b4a75f9072ec24cb1a3ed [file] [log] [blame]
/***************************************************************************************************
* Copyright (c) 2003, 2005 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.wst.common.frameworks.internal;
import java.util.HashMap;
import java.util.Iterator;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
public class DataModelManager {
private IDataModel rootDataModel;
private HashMap nestedModelEntries; // Element = java.lang.Integer
public DataModelManager(IDataModel rootDataModel) {
this.rootDataModel = rootDataModel;
nestedModelEntries = new HashMap();
Iterator names = this.rootDataModel.getNestedModelNames().iterator();
while (names.hasNext()) {
String nestedModelName = (String) names.next();
nestedModelEntries.put(nestedModelName, new Integer(1));
}
}
public IDataModel getDataModel() {
return rootDataModel;
}
public void addNestedDataModel(String dataModelID) {
Integer referenceCount = (Integer) nestedModelEntries.get(dataModelID);
if (referenceCount == null) {
// This nested data model is not currently in the root data model.
// Therefore, we need to create one and add it as a nested data model.
IDataModel dataModel = DataModelFactory.createDataModel(dataModelID);
if (dataModel != null) {
rootDataModel.addNestedModel(dataModelID, dataModel);
nestedModelEntries.put(dataModelID, new Integer(1));
}
} else {
// We already have this data model nested in the root data model
// so just increment the reference count.
nestedModelEntries.put(dataModelID, new Integer(referenceCount.intValue() + 1));
}
}
public void removeNestedDataModel(String dataModelID) {
Integer referenceCount = (Integer) nestedModelEntries.get(dataModelID);
if (referenceCount != null) {
int newRefCount = referenceCount.intValue() - 1;
if (newRefCount == 0) {
// Remove the nested data model.
nestedModelEntries.remove(dataModelID);
rootDataModel.removeNestedModel(dataModelID);
} else {
// Set the table entry to the decremented ref count value.
nestedModelEntries.put(dataModelID, new Integer(newRefCount));
}
}
}
}