Java tutorial
/* ***************************************************************************** * Copyright (c) 2007-2009 Bioclipse Project * 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 * * Contributors: * *******************************************************************************/ package net.bioclipse.usermanager.preferences; import net.bioclipse.usermanager.Activator; import net.bioclipse.usermanager.User; import net.bioclipse.usermanager.UserContainer; import net.bioclipse.usermanager.business.IUserManager; import net.bioclipse.usermanager.dialogs.CreateUserDialog; import net.bioclipse.usermanager.dialogs.EditUserDialog; import net.bioclipse.usermanager.dialogs.PassWordPromptDialog; import org.apache.log4j.Logger; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.osgi.service.prefs.BackingStoreException; /** * Preferencepage for the UserContainer * * @author jonalv * */ public class UserManagerPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private Button deleteButton; private Button editButton; private Label usersLabel; private ListViewer listViewer; private Button createButton; private List list; private Button propOnLogoutButton; private UserContainer sandBoxUserContainer; private IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore(); private Logger logger = Logger.getLogger(this.getClass()); private User loggedInUser; @Override protected Control createContents(Composite parent) { Composite container = new Composite(parent, SWT.BORDER); container.setLayout(new FormLayout()); listViewer = new ListViewer(container, SWT.BORDER | SWT.SINGLE); listViewer.setLabelProvider(new ListLabelProvider()); listViewer.setContentProvider(new ContentProvider()); listViewer.setInput(sandBoxUserContainer.getUserNames()); if (sandBoxUserContainer.getUserNames().size() > 0) { listViewer.getList().select(0); } list = listViewer.getList(); final FormData formData = new FormData(); formData.bottom = new FormAttachment(100, -42); formData.left = new FormAttachment(0, 5); formData.right = new FormAttachment(100, -5); list.setLayoutData(formData); usersLabel = new Label(container, SWT.NONE); formData.top = new FormAttachment(usersLabel, 5, SWT.BOTTOM); final FormData formData_1 = new FormData(); formData_1.top = new FormAttachment(0, 5); formData_1.left = new FormAttachment(list, 0, SWT.LEFT); usersLabel.setLayoutData(formData_1); usersLabel.setText("Users:"); createButton = new Button(container, SWT.NONE); createButton.addSelectionListener(new SelectionAdapter() { /* * CREATE NEW USER */ public void widgetSelected(SelectionEvent e) { CreateUserDialog createDialog = new CreateUserDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), sandBoxUserContainer); createDialog.open(); if (createDialog.getReturnCode() == createDialog.OK) { EditUserDialog dialog = new EditUserDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), sandBoxUserContainer); dialog.open(); } updateListViewer(); } }); final FormData formData_2 = new FormData(); formData_2.left = new FormAttachment(0, 6); formData_2.top = new FormAttachment(list, 5, SWT.BOTTOM); createButton.setLayoutData(formData_2); createButton.setText("Create..."); editButton = new Button(container, SWT.NONE); editButton.addSelectionListener(new SelectionAdapter() { /* * EDIT USER */ public void widgetSelected(SelectionEvent e) { String userName = getSelectedUserName(); if (userName == null) { MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "No user selected", "There is no user selected to edit"); return; } PassWordPromptDialog passDialog = new PassWordPromptDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), userName, sandBoxUserContainer); passDialog.open(); if (passDialog.getReturnCode() == passDialog.OK) { EditUserDialog dialog = new EditUserDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), sandBoxUserContainer); dialog.open(); } } }); final FormData formData_3 = new FormData(); formData_3.top = new FormAttachment(createButton, 0, SWT.TOP); formData_3.bottom = new FormAttachment(createButton, 0, SWT.BOTTOM); formData_3.left = new FormAttachment(createButton, 5, SWT.DEFAULT); editButton.setLayoutData(formData_3); editButton.setText("Edit..."); deleteButton = new Button(container, SWT.NONE); deleteButton.addSelectionListener(new SelectionAdapter() { /* * DELETE USER */ public void widgetSelected(SelectionEvent e) { String userName = getSelectedUserName(); if (MessageDialog.openQuestion(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Confirm removing " + "of Account", "Really remove the " + "account with username: " + userName + "?")) { sandBoxUserContainer.deleteUser(userName); } updateListViewer(); } }); final FormData formData_4 = new FormData(); formData_4.top = new FormAttachment(createButton, 0, SWT.TOP); formData_4.bottom = new FormAttachment(createButton, 0, SWT.BOTTOM); formData_4.left = new FormAttachment(editButton, 5, SWT.DEFAULT); deleteButton.setLayoutData(formData_4); deleteButton.setText("Delete"); propOnLogoutButton = new Button(container, SWT.CHECK); final FormData formData_5 = new FormData(); formData_5.top = new FormAttachment(createButton, 0, SWT.TOP); formData_5.bottom = new FormAttachment(createButton, 0, SWT.BOTTOM); formData_5.right = new FormAttachment(list, 0, SWT.RIGHT); propOnLogoutButton.setLayoutData(formData_5); propOnLogoutButton.setText("Always logout without prompt"); boolean promptOnLogout = prefStore.getBoolean(Activator.PROMPT_ON_LOGOUT); propOnLogoutButton.setSelection(!promptOnLogout); container.setTabList( new Control[] { createButton, editButton, deleteButton, propOnLogoutButton, list, usersLabel }); return container; } @Override public boolean performOk() { IUserManager userManager = Activator.getDefault().getUserManager(); userManager.persist(); userManager.switchUserContainer(sandBoxUserContainer); if (loggedInUser == null) { /* There where on one logged in when opening the page, so if any one * are logged in now let's log any one logged-in out*/ userManager.logOut(); } prefStore.setValue(Activator.PROMPT_ON_LOGOUT, !propOnLogoutButton.getSelection()); try { InstanceScope.INSTANCE.getNode(Activator.PLUGIN_ID).flush(); } catch (BackingStoreException e) { logger.error(e.getStackTrace()); e.printStackTrace(); } return super.performOk(); } @Override public boolean performCancel() { if (loggedInUser == null) { /* There where on one logged in when opening the page, so if any one * are logged in now let's log any one logged-in out*/ Activator.getDefault().getUserManager().logOut(); } return super.performCancel(); } public void init(IWorkbench workbench) { sandBoxUserContainer = Activator.getDefault().getUserManager().getSandBoxUserContainer(); if (sandBoxUserContainer.isLoggedIn()) loggedInUser = sandBoxUserContainer.getLoggedInUser(); } private String getSelectedUserName() { if (list.getSelection().length == 1) { return list.getSelection()[0]; } return null; } private void updateListViewer() { listViewer.setInput(sandBoxUserContainer.getUserNames()); listViewer.refresh(); } @Override protected void performDefaults() { propOnLogoutButton.setSelection(false); super.performDefaults(); } /** * LabelProvider for the Keyring users list * * @author jonalv * */ class ListLabelProvider extends LabelProvider { public String getText(Object element) { return element.toString(); } public Image getImage(Object element) { return null; } } /** * ContentProvider for the Keyring users list * * @author jonalv * */ class ContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement) { return ((java.util.List<String>) inputElement).toArray(new String[0]); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } }