/* * 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; } } }