All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jresearch.flexess.client.context.UserContext Maven / Gradle / Ivy

package org.jresearch.flexess.client.context;

import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.annotation.Nonnull;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;

public class UserContext extends AbstractUserContext implements Serializable {

	private static final long serialVersionUID = 2498167262395290752L;
	private String userId;
	private final Map serializableUserObjects = new HashMap<>();
	private final transient Map userObjects = new HashMap<>();
	private final transient Map> roles = new HashMap<>();
	private final transient Map models = new HashMap<>();

	public UserContext(final String userId) {
		super();
		this.userId = userId;
	}

	@Override
	public List getRoles() {
		final List result = new LinkedList<>();
		final Collection> modelsRoles = roles.values();
		for (final List modelRoles : modelsRoles) {
			result.addAll(modelRoles);
		}
		return result;
	}

	@Override
	@Nonnull
	public List getRoles(final String modelId) {
		final List result = roles.get(modelId);
		if (result == null) {
			return Collections.emptyList();
		}
		return result;
	}

	@Override
	public void setRoles(final String modelId, final List roles) {
		assert modelId != null && roles != null;
		this.roles.put(modelId, Collections.unmodifiableList(roles));
	}

	@Override
	public String getUserId() {
		return userId;
	}

	@Override
	public void setUserId(final String userId) {
		assert userId != null;
		this.userId = userId;
	}

	@Override
	public boolean equals(final Object arg0) {
		if (!(arg0 instanceof String)) {
			return false;
		}
		final UserContext comparable = (UserContext) arg0;
		if (comparable.getUserId() == null && getUserId() == null) {
			return true;
		}
		if (comparable.getUserId() != null && getUserId() != null) {
			return getUserId().equals(comparable.getUserId());
		}
		return false;
	}

	@Override
	public int hashCode() {
		if (getUserId() == null) {
			return 1;
		}
		return getUserId().hashCode();
	}

	@Override
	public boolean isEnrolled() {
		final Collection> values = roles.values();
		for (final List list : values) {
			if (!list.isEmpty()) {
				return true;
			}
		}
		return false;
	}

	/**
	 * @return true if model is unique
	 */
	public boolean addSecurityModels(final String id, final EPackage model) {
		assert id != null && model != null;
		return models.put(id, model) == null;
	}

	@Override
	public List getSecurityModels() {
		return new LinkedList<>(models.values());
	}

	@Override
	public EPackage getSecurityModel(final String modelId) {
		return models.get(modelId);
	}

	@Override
	public Collection getModelIds() {
		return Collections.unmodifiableSet(models.keySet());
	}

	@Override
	public boolean isValid() {
		return !models.isEmpty();
	}

	@Override
	public  void putUserObject(final String key, final U userObject) {
		if (userObject instanceof Serializable) {
			serializableUserObjects.put(key, (Serializable) userObject);
		} else {
			userObjects.put(key, userObject);
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public  U getUserObject(final String key) {
		return ((Map) (serializableUserObjects.containsKey(key) ? serializableUserObjects : userObjects)).get(key);
	}

}