package org.nightlabs.jfire.auth.ui.editor;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import javax.jdo.FetchPlan;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorInput;
import org.nightlabs.base.ui.entity.tree.EntityTree;
import org.nightlabs.base.ui.resource.SharedImages;
import org.nightlabs.base.ui.resource.SharedImages.ImageDimension;
import org.nightlabs.base.ui.resource.SharedImages.ImageFormat;
import org.nightlabs.base.ui.table.TableLabelProvider;
import org.nightlabs.jfire.auth.ui.JFireAuthUIPlugin;
import org.nightlabs.jfire.base.ui.entity.tree.ActiveJDOEntityTreeCategory;
import org.nightlabs.jfire.security.User;
import org.nightlabs.jfire.security.dao.UserManagementSystemDAO;
import org.nightlabs.jfire.security.integration.UserManagementSystem;
import org.nightlabs.jfire.security.integration.UserManagementSystemType;
import org.nightlabs.jfire.security.integration.id.UserManagementSystemID;
import org.nightlabs.progress.ProgressMonitor;
/**
* Entity tree category for {@link UserManagementSystem}s.
*
* @author Denis Dudnik <deniska.dudnik[at]gmail{dot}com>
*/
public class EntityTreeCategoryUserManagementSystem extends ActiveJDOEntityTreeCategory<UserManagementSystemID, UserManagementSystem>{
/**
* Label provider for {@link UserManagementSystem} objects in {@link EntityTree}.
* Returns name of {@link UserManagementSystem} as "name [type]".
* If name and/or type are null or empty they are replaced with corresponding simple class names.
*
* @author Denis Dudnik <deniska.dudnik[at]gmail{dot}com>
*/
protected class UserManagementSystemLabelProvider extends TableLabelProvider {
public String getColumnText(Object o, int columnIndex) {
// check for string first, so we don't need to be logged in when displaying a simple string
if (o instanceof String) {
return (String) o;
} else if (o instanceof UserManagementSystem) {
UserManagementSystem userManagementSystem = (UserManagementSystem) o;
String userManagementSystemName = userManagementSystem.getUserManagementSystemID()+User.SEPARATOR_BETWEEN_USER_ID_AND_ORGANISATION_ID+userManagementSystem.getOrganisationID();
if (userManagementSystem.getName() != null
&& !"".equals(userManagementSystem.getName().getText())){ //$NON-NLS-1$
userManagementSystemName = userManagementSystem.getName().getText();
}
String userManagementSystemTypeName = userManagementSystem.getType().getClass().getSimpleName();
if (userManagementSystem.getType().getName() != null
&& !"".equals(userManagementSystem.getType().getName().getText())){ //$NON-NLS-1$
userManagementSystemTypeName = userManagementSystem.getType().getName().getText();
}
return userManagementSystemName + " [" + userManagementSystemTypeName + "]"; //$NON-NLS-1$ //$NON-NLS-2$
} else {
return super.getText(o);
}
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
if (element instanceof UserManagementSystem){
UserManagementSystem userManagementSystem = (UserManagementSystem) element;
String imageSuffix = userManagementSystem.isActive()?"UserManagementSystemActive":"UserManagementSystemInactive"; //$NON-NLS-1$ //$NON-NLS-2$
return SharedImages.getSharedImage(
JFireAuthUIPlugin.sharedInstance(), EntityTreeCategoryUserManagementSystem.class, imageSuffix, ImageDimension._16x16, ImageFormat.png);
}else{
return super.getColumnImage(element, columnIndex);
}
}
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public IEditorInput createEditorInput(Object o){
UserManagementSystem userManagementSystem = (UserManagementSystem) o;
UserManagementSystemID userManagementSystemID = userManagementSystem.getUserManagementSystemObjectID();
return new UserManagementSystemEditorInput(userManagementSystemID, (Class<? extends UserManagementSystemType<?>>) userManagementSystem.getType().getClass());
}
/**
* {@inheritDoc}
*/
@Override
public ITableLabelProvider createLabelProvider() {
return new UserManagementSystemLabelProvider();
}
/**
* {@inheritDoc}
*/
@Override
protected Class<UserManagementSystem> getJDOObjectClass(){
return UserManagementSystem.class;
}
private static final String[] FETCH_GROUPS_USER_MANAGEMENT_SYSTEM = {
UserManagementSystem.FETCH_GROUP_NAME,
UserManagementSystem.FETCH_GROUP_TYPE,
UserManagementSystemType.FETCH_GROUP_NAME,
FetchPlan.DEFAULT
};
// UserManagementSystem -> UserManagementSystemType -> UserManagementSystemTypeName -> names
private static final int FETCH_DEPTH_USER_MANAGEMENT_SYSTEM = 4;
/**
* {@inheritDoc}
*/
@Override
protected Collection<UserManagementSystem> retrieveJDOObjects(Set<UserManagementSystemID> userIDs, ProgressMonitor monitor){
return UserManagementSystemDAO.sharedInstance().getUserManagementSystems(
userIDs, FETCH_GROUPS_USER_MANAGEMENT_SYSTEM, FETCH_DEPTH_USER_MANAGEMENT_SYSTEM, monitor
);
}
/**
* {@inheritDoc}
*/
@Override
protected Collection<UserManagementSystem> retrieveJDOObjects(ProgressMonitor monitor){
List<UserManagementSystem> userManagementSystems = UserManagementSystemDAO.sharedInstance().getAllUserManagementSystems(
FETCH_GROUPS_USER_MANAGEMENT_SYSTEM, FETCH_DEPTH_USER_MANAGEMENT_SYSTEM, monitor
);
List<UserManagementSystem> res = new ArrayList<UserManagementSystem>(userManagementSystems.size());
for (UserManagementSystem userManagementSystem : userManagementSystems) {
res.add(userManagementSystem);
}
return res;
}
/**
* {@inheritDoc}
*/
@Override
protected void sortJDOObjects(List<UserManagementSystem> userManagementSystems){
Collections.sort(userManagementSystems); // note that UserManagementSystem implements Comparable
}
}