blob: 0a58d3a3786833fe35c0396145f8adee2cbf8056 [file] [log] [blame]
/*
* Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.server.internal.mongodb;
import org.eclipse.emf.cdo.eresource.EresourcePackage;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import java.util.HashMap;
import java.util.Map;
/**
* @author Eike Stepper
*/
public class Classes
{
public static final String PROPERTIES = "props";
private Map<EClassifier, Integer> classifierToIDs = new HashMap<EClassifier, Integer>();
private Map<Integer, EClassifier> idToClassifiers = new HashMap<Integer, EClassifier>();
private MongoDBStore store;
private boolean initialized;
private int lastClassifierID;
private int resourceNodeClassID;
private int resourceFolderClassID;
private int resourceClassID;
public Classes(MongoDBStore store)
{
this.store = store;
}
public MongoDBStore getStore()
{
return store;
}
public int getLastClassifierID()
{
return lastClassifierID;
}
public void setLastClassifierID(int lastClassifierID)
{
this.lastClassifierID = lastClassifierID;
}
public synchronized int getResourceNodeClassID()
{
initialize();
return resourceNodeClassID;
}
public synchronized int getResourceFolderClassID()
{
initialize();
return resourceFolderClassID;
}
public synchronized int getResourceClassID()
{
initialize();
return resourceClassID;
}
public synchronized int mapNewClassifier(EClassifier classifier)
{
int id = ++lastClassifierID;
mapClassifier(classifier, id);
return id;
}
public synchronized void mapClassifier(EClassifier classifier, int id)
{
classifierToIDs.put(classifier, id);
idToClassifiers.put(id, classifier);
if (classifier == EresourcePackage.eINSTANCE.getCDOResourceNode())
{
resourceNodeClassID = id;
}
else if (classifier == EresourcePackage.eINSTANCE.getCDOResourceFolder())
{
resourceFolderClassID = id;
}
else if (classifier == EresourcePackage.eINSTANCE.getCDOResource())
{
resourceClassID = id;
}
}
public synchronized int getClassifierID(EClassifier classifier)
{
initialize();
return classifierToIDs.get(classifier);
}
public synchronized EClassifier getClassifier(int id)
{
initialize();
return idToClassifiers.get(id);
}
public synchronized EClass getClass(int id)
{
return (EClass)getClassifier(id);
}
private void initialize()
{
if (!initialized)
{
Commits commits = store.getCommits();
commits.initializeClassifiers();
initialized = true;
}
}
}