/*
* Copyright (c) 2013 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.internal.security;
import org.eclipse.emf.cdo.common.revision.CDORevisionProvider;
import org.eclipse.emf.cdo.view.CDOView;
import java.util.HashMap;
import java.util.Map;
/**
* @author Eike Stepper
*/
public final class PermissionUtil
{
private static final ThreadLocal<String> USER = new ThreadLocal<String>();
private static final ThreadLocal<ViewCreator> VIEW_CREATOR = new ThreadLocal<ViewCreator>();
private static final ThreadLocal<Map<CDORevisionProvider, CDOView>> VIEWS = new ThreadLocal<Map<CDORevisionProvider, CDOView>>();
private PermissionUtil()
{
}
public static String getUser()
{
return USER.get();
}
public static void setUser(String user)
{
if (user == null)
{
USER.remove();
}
else
{
USER.set(user);
}
}
private static Map<CDORevisionProvider, CDOView> getViews()
{
Map<CDORevisionProvider, CDOView> views = VIEWS.get();
if (views == null)
{
views = new HashMap<CDORevisionProvider, CDOView>();
VIEWS.set(views);
}
return views;
}
public static CDOView getView(CDORevisionProvider revisionProvider)
{
Map<CDORevisionProvider, CDOView> views = getViews();
CDOView view = views.get(revisionProvider);
if (view == null)
{
ViewCreator viewCreator = VIEW_CREATOR.get();
if (viewCreator == null)
{
throw new IllegalStateException("No view creator available for " + revisionProvider);
}
view = viewCreator.createView(revisionProvider);
views.put(revisionProvider, view);
}
return view;
}
public static void initViewCreation(ViewCreator viewCreator)
{
VIEW_CREATOR.set(viewCreator);
}
public static void doneViewCreation()
{
VIEW_CREATOR.remove();
VIEWS.remove();
}
}