/**************************************************************************************************
* Copyright (c) 2010 Fabian Steeg. 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
* <p/>
* Contributors: Fabian Steeg - initial API and implementation
*************************************************************************************************/
package de.uni_koeln.ub.drc.ui.views;
import java.security.Principal;
import java.util.Set;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginException;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import de.uni_koeln.ub.drc.ui.DrcUiActivator;
/**
* View to show user details (currently for debugging purpose only).
*
* @author Fabian Steeg (fsteeg)
*/
public final class UserView extends ViewPart {
/**
* The class / UserView ID
*/
public static final String ID = UserView.class.getName().toLowerCase();
private TreeViewer subjectViewer;
private Subject subject;
/**
* @param parent
* The parent composite for this part
*/
@Override
public void createPartControl(final Composite parent) {
subjectViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL
| SWT.V_SCROLL);
try {
subject = DrcUiActivator.getDefault().getLoginContext()
.getSubject();
} catch (LoginException e) {
e.printStackTrace();
}
subjectViewer.setContentProvider(new SubjectContentProvider());
subjectViewer.setLabelProvider(new SubjectLabelProvider(subject));
subjectViewer.setInput(subject);
GridLayoutFactory.fillDefaults().generateLayout(parent);
}
@Override
public void setFocus() {
}
private static class SubjectLabelProvider extends LabelProvider {
private final Subject subject;
public SubjectLabelProvider(final Subject subject) {
this.subject = subject;
}
@Override
public String getText(final Object object) {
if (object == this.subject) {
return "User Subject (" + object.getClass().getName() + ")"; //$NON-NLS-1$//$NON-NLS-2$
} else if (object == this.subject.getPrincipals()) {
return "Principals (" + Set.class.getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
} else if (object == this.subject.getPublicCredentials()) {
return "Public Credentials (" + Set.class.getName() + ")";//$NON-NLS-1$ //$NON-NLS-2$
} else if (object == this.subject.getPrivateCredentials()) {
return "Private Credentials (" + Set.class.getName() + ")";//$NON-NLS-1$ //$NON-NLS-2$
} else if (object instanceof Principal) {
return "Name: " + ((Principal) object).getName() + " ("//$NON-NLS-1$ //$NON-NLS-2$
+ object.getClass().getName() + ")"; //$NON-NLS-1$
}
return object.getClass().getName() + " [" + object.toString() + "]";//$NON-NLS-1$ //$NON-NLS-2$
}
}
private static class SubjectContentProvider implements ITreeContentProvider {
@Override
public Object[] getElements(final Object inputElement) {
/* For a subject, get the children: */
if (inputElement instanceof Subject) {
return getChildren(inputElement);
}
return new Object[] {};
}
@Override
public Object[] getChildren(final Object parentElement) {
if (parentElement instanceof Subject) {
return new Object[] {
((Subject) parentElement).getPrincipals(),
((Subject) parentElement).getPublicCredentials(),
((Subject) parentElement).getPrivateCredentials() };
} else if (parentElement instanceof Set) {
return ((Set<?>) parentElement).toArray();
} else {
return null;
}
}
@Override
public Object getParent(final Object element) {
return null;
}
@Override
public boolean hasChildren(final Object element) {
if (element instanceof Subject) {
return true;
} else if (element instanceof Set) {
return !((Set<?>) element).isEmpty();
}
return false;
}
@Override
public void dispose() {
}
@Override
public void inputChanged(final Viewer viewer, final Object oldInput,
final Object newInput) {
}
}
}