package gov.nasa.arc.mct.identitymgr.impl;
import gov.nasa.arc.mct.platform.spi.PersistenceProvider;
import gov.nasa.arc.mct.platform.spi.Platform;
import gov.nasa.arc.mct.platform.spi.PlatformAccess;
import gov.nasa.arc.mct.platform.spi.WindowManager;
import gov.nasa.arc.mct.services.internal.component.User;
import java.util.Arrays;
import java.util.Properties;
import java.util.ResourceBundle;
/**
* A minimal implementation of an IdentityManager suitable for demonstrations or
* evaluation environments. Prompts the user to enter their name if no user name
* (mct.user) has been specified.
*
* @author vwoeltje
*
*/
public class DefaultIdentityManager extends IdentityManager {
private static final ResourceBundle bundle = ResourceBundle.getBundle("DefaultIdentityManager"); //NOI18N
private boolean initialized = false;
/**
* Create a default identity manager
* @param properties input properties
*/
public DefaultIdentityManager(Properties properties) {
this.currentUser = properties.getProperty("mct.user"); //NOI18N
}
@Override
public String getCurrentUser() {
ensureInitialized();
return super.getCurrentUser();
}
@Override
public String getCurrentGroup() {
ensureInitialized();
return super.getCurrentGroup();
}
private void ensureInitialized() {
if (!initialized) {
String username = this.currentUser;
// If PersistenceProvider & WindowManager are available, we can create a dialog with available users
Platform platform = PlatformAccess.getPlatform();
PersistenceProvider persistence = platform != null ? platform.getPersistenceProvider() : null;
WindowManager windowing = platform != null ? platform.getWindowManager() : null;
if (username == null && persistence != null && windowing != null) {
Object[] users = persistence.getAllUsers().toArray();
if (users.length > 1) {
Arrays.sort(users);
username = (String) windowing.showInputDialog(bundle.getString("TITLE"), bundle.getString("QUESTION"), users, users[0], null); //NOI18N
} else if (users.length == 1) {
username = users[0].toString();
}
}
this.currentUser = username;
// If a user was selected, initialize with group info as well from Persistence
if (persistence != null && username != null) {
User user = persistence.getUser(username);
if (user != null) {
this.currentGroup = user.getDisciplineId();
}
}
}
}
@Override
public boolean isMonitorRunning() {
// There is no need for a monitor here.
return false;
}
}