blob: 3a259b847bf831922a0dc159969d05d80e5cf192 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2004, 2007 Boeing
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Boeing - initial API and implementation
**********************************************************************/
package org.eclipse.osee.framework.skynet.core;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import org.eclipse.osee.cache.admin.CacheAdmin;
import org.eclipse.osee.framework.core.data.ArtifactId;
import org.eclipse.osee.framework.core.data.UserToken;
import org.eclipse.osee.framework.core.exception.UserNotInDatabase;
import org.eclipse.osee.framework.jdk.core.type.LazyObject;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.util.OseeProperties;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.internal.Activator;
import org.eclipse.osee.framework.skynet.core.internal.ServiceUtil;
import org.eclipse.osee.framework.skynet.core.internal.users.UserAdminImpl;
/**
* @author Roberto E. Escobar
*/
public final class UserManager {
public static String DOUBLE_CLICK_SETTING_KEY_EDIT = "onDoubleClickOpenUsingEditMode";
private static AtomicBoolean showTokenForChangeName;
private static final LazyObject<UserAdmin> provider = new LazyObject<UserAdmin>() {
@Override
protected FutureTask<UserAdmin> createLoaderTask() {
Callable<UserAdmin> callable = new Callable<UserAdmin>() {
@Override
public UserAdmin call() throws Exception {
UserAdminImpl userAdmin = new UserAdminImpl();
CacheAdmin cacheAdmin = ServiceUtil.getCacheAdmin();
userAdmin.setCacheAdmin(cacheAdmin);
userAdmin.start();
return userAdmin;
}
};
return new FutureTask<>(callable);
}
};
private UserManager() {
// Utility class
}
private static UserAdmin getUserAdmin() {
return provider.get();
}
/**
* Returns the currently authenticated user
*/
public static User getUser() {
return getUserAdmin().getCurrentUser();
}
public static void releaseUser() {
getUserAdmin().releaseCurrentUser();
}
public static void clearCache() {
getUserAdmin().reset();
}
public static List<User> getUsersByUserId(Collection<String> userIds) {
List<User> users = new ArrayList<>();
for (String userId : userIds) {
try {
User user = getUserAdmin().getUserByUserId(userId);
if (user != null) {
users.add(user);
}
} catch (UserNotInDatabase ex) {
OseeLog.log(Activator.class, Level.SEVERE, ex);
}
}
return users;
}
/**
* @return shallow copy of ArrayList of all active users in the datastore sorted by user name
*/
public static List<User> getUsers() {
return getUserAdmin().getActiveUsers();
}
public static List<User> getUsersAll() {
return getUserAdmin().getUsersAll();
}
public static List<User> getUsersSortedByName() {
return getUserAdmin().getActiveUsersSortedByName();
}
public static List<User> getUsersAllSortedByName() {
return getUserAdmin().getUsersAllSortedByName();
}
/**
* Return sorted list of active User.getName() in database
*/
public static String[] getUserNames() {
return getUserAdmin().getUserNames();
}
public static String getSafeUserNameById(ArtifactId userArtifactId) {
UserAdmin userAdmin = null;
try {
userAdmin = getUserAdmin();
} catch (OseeCoreException ex) {
// Do nothing;
}
String name;
if (userAdmin == null) {
name = String.format("Unable resolve user by artId[%s] since userAdmin was unavailable", userArtifactId);
} else {
name = userAdmin.getSafeUserNameById(userArtifactId);
}
return name;
}
public static User getUserByArtId(ArtifactId userArtifactId) {
return getUserAdmin().getUserByArtId(userArtifactId);
}
public static User getUserByArtId(long userArtifactId) {
return getUserAdmin().getUserByArtId(ArtifactId.valueOf(userArtifactId));
}
/**
* This is not the preferred way to get a user. Most likely getUserByUserId() or getUserByArtId() should be used
*
* @return the first user found with the given name
*/
public static User getUserByName(String name) {
return getUserAdmin().getUserByName(name);
}
public static User getUser(UserToken user) {
return getUserAdmin().getUser(user);
}
public static User getUserByUserId(String userId) {
return getUserAdmin().getUserByUserId(userId);
}
/**
* @return whether the Authentication manager is in the middle of creating a user
*/
public static boolean duringMainUserCreation() {
return getUserAdmin().isDuringCurrentUserCreation();
}
public static String getSetting(String key) {
return getUser().getSetting(key);
}
public static String getSetting(Long key) {
return getUser().getSetting(String.valueOf(key));
}
public static boolean getBooleanSetting(String key) {
return getUser().getBooleanSetting(key);
}
public static void setSetting(String key, String value) {
getUser().setSetting(key, value);
}
public static void setSetting(String key, Long value) {
getUser().setSetting(key, String.valueOf(value));
}
public static void setShowTokenForChangeName(boolean showTokenForChangeName) {
UserManager.showTokenForChangeName.set(showTokenForChangeName);
getUser().setBooleanSetting(OseeProperties.OSEE_SHOW_TOKEN_FOR_CHANGE_NAME, showTokenForChangeName);
}
public synchronized static boolean isShowTokenForChangeName() {
if (showTokenForChangeName == null) {
showTokenForChangeName = new AtomicBoolean(false);
showTokenForChangeName.set(getUser().getBooleanSetting(OseeProperties.OSEE_SHOW_TOKEN_FOR_CHANGE_NAME));
}
return showTokenForChangeName.get();
}
public static boolean isBootstrap() {
return getUser().getUserId().equals("bootstrap");
}
}