/*****************************************************************************
* Copyright (c) 2006, 2007 g-Eclipse Consortium
* 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
*
* Initial development of the original code was made for the
* g-Eclipse project founded by European Union
* project number: FP6-IST-034327 http://www.geclipse.eu/
*
* Contributors:
* Mathias Stuempert - initial API and implementation
*****************************************************************************/
package eu.geclipse.ui.dialogs;
import java.util.Date;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IconAndMessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import eu.geclipse.core.auth.IAuthenticationToken;
/**
* A dialog that presents information about authentication tokens to the user.
*/
public class AuthTokenInfoDialog extends IconAndMessageDialog {
/**
* The token for which to display information.
*/
private IAuthenticationToken token;
/**
* Construct a new info dialog from the specified token.
*
* @param token The <code>IAuthenticationToken</code> for which to display the information.
* @param parentShell The parent shell of this dialog.
*/
public AuthTokenInfoDialog( final IAuthenticationToken token, final Shell parentShell ) {
super( parentShell );
setShellStyle( SWT.CLOSE | SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL
| SWT.RESIZE | SWT.MIN | SWT.MAX );
this.token = token;
}
/**
* Get the token of this info dialog.
*
* @return The <code>IAuthenticationToken</code> for which to display the info.
*/
protected IAuthenticationToken getToken() {
return this.token;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea( final Composite parent ) {
createMessageArea(parent);
GridData gData;
Composite mainComp = new Composite( parent, SWT.NONE );
mainComp.setLayout( new GridLayout( 2, false ) );
gData = new GridData( GridData.FILL_BOTH );
gData.grabExcessHorizontalSpace = true;
gData.grabExcessVerticalSpace = true;
gData.widthHint = 600;
gData.heightHint = 400;
mainComp.setLayoutData( gData );
Label idLabel = new Label( mainComp, SWT.LEFT );
idLabel.setText( Messages.getString("AuthTokenInfoDialog.token_id_label") ); //$NON-NLS-1$
gData = new GridData();
gData.horizontalAlignment = GridData.BEGINNING;
idLabel.setLayoutData( gData );
Text idText = new Text( mainComp, SWT.LEFT | SWT.BORDER );
idText.setText( this.token.getID() );
gData = new GridData( GridData.FILL_HORIZONTAL );
gData.grabExcessHorizontalSpace = true;
idText.setLayoutData( gData );
idText.setEditable( false );
Label typeLabel = new Label( mainComp, SWT.LEFT );
typeLabel.setText( Messages.getString("AuthTokenInfoDialog.token_type_label") ); //$NON-NLS-1$
gData = new GridData();
gData.horizontalAlignment = GridData.BEGINNING;
typeLabel.setLayoutData( gData );
Text typeText = new Text( mainComp, SWT.LEFT | SWT.BORDER );
typeText.setText( this.token.getDescription().getTokenTypeName() );
gData = new GridData( GridData.FILL_HORIZONTAL );
gData.grabExcessHorizontalSpace = true;
typeText.setLayoutData( gData );
typeText.setEditable( false );
Label stateLabel = new Label( mainComp, SWT.LEFT );
stateLabel.setText( Messages.getString("AuthTokenInfoDialog.token_state_label") ); //$NON-NLS-1$
gData = new GridData();
gData.horizontalAlignment = GridData.BEGINNING;
stateLabel.setLayoutData( gData );
String state = this.token.isActive()
? Messages.getString( "AuthTokenInfoDialog.state_active" ) //$NON-NLS-1$
: Messages.getString( "AuthTokenInfoDialog.state_inactive" ); //$NON-NLS-1$
Text stateText = new Text( mainComp, SWT.LEFT | SWT.BORDER );
stateText.setText( state );
gData = new GridData( GridData.FILL_HORIZONTAL );
gData.grabExcessHorizontalSpace = true;
stateText.setLayoutData( gData );
stateText.setEditable( false );
Label expLabel = new Label( mainComp, SWT.LEFT );
expLabel.setText( Messages.getString("AuthTokenInfoDialog.exp_date_label") ); //$NON-NLS-1$
gData = new GridData();
gData.horizontalAlignment = GridData.BEGINNING;
expLabel.setLayoutData( gData );
Text expText = new Text( mainComp, SWT.LEFT | SWT.BORDER );
gData = new GridData( GridData.FILL_HORIZONTAL );
gData.grabExcessHorizontalSpace = true;
expText.setLayoutData( gData );
expText.setEditable( false );
if ( !this.token.isActive() ) {
expText.setText( Messages.getString( "AuthTokenInfoDialog.token_not_active_message" ) ); //$NON-NLS-1$
} else {
long lifetime = this.token.getTimeLeft();
if ( lifetime < 0 ) {
expText.setText( Messages.getString( "AuthTokenInfoDialog.infinite_lifetime_message" ) ); //$NON-NLS-1$
} else if ( lifetime == 0 ) {
expText.setText( Messages.getString( "AuthTokenInfoDialog.token_expired_message" ) ); //$NON-NLS-1$
} else {
Date expDate = new Date();
expDate.setTime( expDate.getTime() + lifetime * 1000 );
StringBuilder bf = new StringBuilder( expDate.toString() );
int days = ( int )( lifetime / 86400 );
int hours = ( int )( ( lifetime % 86400 ) / 3600 );
int minutes = ( int )( ( lifetime % 3600 ) / 60 );
int seconds = ( int )( lifetime % 60 );
String ltString = String.format( " (%1$dd %2$2dh %3$2dm %4$2ds)", //$NON-NLS-1$
Integer.valueOf( days ),
Integer.valueOf( hours ),
Integer.valueOf( minutes ),
Integer.valueOf(seconds ) );
expText.setText( bf.toString()+ltString );
}
}
Control infoArea = createInfoArea( mainComp );
gData = new GridData( GridData.FILL_BOTH );
gData.horizontalSpan = 2;
gData.grabExcessHorizontalSpace = true;
gData.grabExcessVerticalSpace = true;
infoArea.setLayoutData( gData );
return mainComp;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IconAndMessageDialog#getImage()
*/
@Override
protected Image getImage() {
return getInfoImage();
}
/**
* Create the token specific info area.
*
* @param parent The parent composite that will contain the created info area.
* @return The created info area.
*/
protected Control createInfoArea( final Composite parent ) {
GridData gData;
Composite mainComp = new Composite( parent, SWT.BORDER );
mainComp.setLayout( new GridLayout( 2, false ) );
Label label = new Label( mainComp, SWT.NONE );
label.setText( Messages.getString( "AuthTokenInfoDialog.no_info_label" ) ); //$NON-NLS-1$
gData = new GridData();
label.setLayoutData( gData );
return mainComp;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
*/
@Override
protected IDialogSettings getDialogBoundsSettings() {
return eu.geclipse.ui.internal.Activator.getDefault().getDialogSettings();
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
@Override
protected void configureShell( final Shell shell ) {
super.configureShell( shell );
String tokenType = this.token.getDescription().getTokenTypeName();
shell.setText( tokenType + " " + Messages.getString("AuthTokenInfoDialog.info_suffix") ); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
protected void createButtonsForButtonBar( final Composite parent) {
createButton(parent, IDialogConstants.CANCEL_ID,
"Close", false);
}
}