package eu.geclipse.ui.internal.wizards;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
public class ConfigurationDetailsComposite extends Composite {
private Text confNameText;
private Text confDescText;
private Text confPrereqText;
private Tree certTree;
private Tree voTree;
private Tree projectTree;
public ConfigurationDetailsComposite( final Composite parent, final int style ) {
super( parent, style );
setLayout( new GridLayout( 1, false ) );
TabFolder tabber = new TabFolder( this, SWT.NONE );
tabber.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
createGeneralTab( tabber );
createCertificateTab( tabber );
createVoTab( tabber );
createProjectTab( tabber );
}
public void setConfigurator( final IConfigurationElement configurator ) {
updateGeneralInfo( configurator );
updateCertificateInfo( configurator );
updateVoInfo( configurator );
updateProjectInfo( configurator );
}
protected void updateCertificateInfo( final IConfigurationElement configurator ) {
this.certTree.removeAll();
if ( configurator != null ) {
IConfigurationElement[] certs = configurator.getChildren( "certificates" );
if ( ( certs != null ) && ( certs.length > 0 ) ) {
for ( int i = 0 ; i < certs.length ; i++ ) {
TreeItem certItem = createTreeItem( this.certTree, String.format( "Certificate Configuration #%d", Integer.valueOf( i + 1 ) ), null );
createTreeItem( certItem, "Loader ID", certs[ i ].getAttribute( "loaderID" ) );
IConfigurationElement[] loaders = certs[ i ].getChildren();
if ( loaders != null ) {
for ( int j = 0 ; j < loaders.length ; j++ ) {
if ( loaders[ j ].getName().equals( "certificateDistribution" ) ) {
String authorityID = loaders[ j ].getAttribute( "authorityID" );
String distributionID = loaders[ j ].getAttribute( "distributionID" );
createTreeItem( certItem, String.format( "Authority ID #%d", Integer.valueOf( j + 1 ) ), authorityID );
createTreeItem( certItem, String.format( "Distribution ID #%d", Integer.valueOf( j + 1 ) ), distributionID );
}
else if ( loaders[ j ].getName().equals( "certificateURL" ) ) {
String url = loaders[ j ].getAttribute( "url" );
createTreeItem( certItem, String.format( "URL #%d", Integer.valueOf( j + 1 ) ), url );
}
}
}
certItem.setExpanded( true );
}
} else {
new TreeItem( this.certTree, SWT.NONE ).setText( "None" );
}
} else {
new TreeItem( this.certTree, SWT.NONE ).setText( "N/A" );
}
}
protected void updateGeneralInfo( final IConfigurationElement configurator ) {
this.confNameText.setText( securelyGetAttribute( configurator, "name" ) );
this.confDescText.setText( securelyGetAttribute( configurator, "description" ) );
String prereq = configurator == null ? null : configurator.getAttribute( "prerequisites" );
if ( prereq == null ) {
this.confPrereqText.setText( "N/A" );
} else {
String[] split = prereq.split( ";" );
StringBuffer buffer = new StringBuffer();
for ( String s : split ) {
buffer.append( "- " + s + "\n" );
}
this.confPrereqText.setText( buffer.toString() );
}
}
protected void updateProjectInfo( final IConfigurationElement configurator ) {
this.projectTree.removeAll();
if ( configurator != null ) {
IConfigurationElement[] projects = configurator.getChildren( "project" );
if ( ( projects != null ) && ( projects.length > 0 ) ) {
for ( IConfigurationElement project : projects ) {
TreeItem projectItem = createTreeItem( this.projectTree, project.getAttribute( "projectName" ), null );
createTreeItem( projectItem, "VO Name", project.getAttribute( "voName" ) );
IConfigurationElement[] folders = project.getChildren( "projectFolder" );
TreeItem foldersItem = createTreeItem( projectItem, "Project Folders", null );
for ( IConfigurationElement folder : folders ) {
createTreeItem( foldersItem, folder.getAttribute( "folderID" ), folder.getAttribute( "folderName" ) );
}
foldersItem.setExpanded( true );
projectItem.setExpanded( true );
}
} else {
new TreeItem( this.projectTree, SWT.NONE ).setText( "None" );
}
} else {
new TreeItem( this.projectTree, SWT.NONE ).setText( "N/A" );
}
}
protected void updateVoInfo( final IConfigurationElement configurator ) {
this.voTree.removeAll();
if ( configurator != null ) {
IConfigurationElement[] vos = configurator.getChildren( "vo" );
if ( ( vos != null ) && ( vos.length > 0 ) ) {
for ( IConfigurationElement vo : vos ) {
TreeItem voItem = createTreeItem( this.voTree, vo.getAttribute( "voName" ), null );
createTreeItem( voItem, "VO Creator", vo.getAttribute( "creatorID" ) );
IConfigurationElement[] parameters = vo.getChildren( "voParameter" );
TreeItem paramsItem = createTreeItem( voItem, "Parameters", null );
for ( IConfigurationElement parameter : parameters ) {
IConfigurationElement[] values = parameter.getChildren( "parameterValue" );
if ( values != null ) {
if ( values.length == 1 ) {
createTreeItem( paramsItem, parameter.getAttribute( "key" ), values[ 0 ].getAttribute( "value" ) );
} else if ( values.length > 1 ) {
TreeItem paramItem = createTreeItem( paramsItem, parameter.getAttribute( "key" ), null );
for ( IConfigurationElement value : values ) {
createTreeItem( paramItem, value.getAttribute( "value" ), null );
}
paramItem.setExpanded( true );
}
}
}
paramsItem.setExpanded( true );
voItem.setExpanded( true );
}
} else {
new TreeItem( this.voTree, SWT.NONE ).setText( "None" );
}
} else {
new TreeItem( this.voTree, SWT.NONE ).setText( "N/A" );
}
}
private void createCertificateTab( final TabFolder tabber ) {
TabItem certificatesTab = new TabItem( tabber, SWT.NONE );
certificatesTab.setText( "Certificates" );
Composite certComp = new Composite( tabber, SWT.NONE );
certComp.setLayout( new GridLayout( 1, false ) );
certComp.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
certificatesTab.setControl( certComp );
Label certLabel = new Label( certComp, SWT.NONE );
certLabel.setText( "Certificate Configurations" );
certLabel.setLayoutData( new GridData() );
this.certTree = new Tree( certComp, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER );
this.certTree.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
this.certTree.setHeaderVisible( true );
TreeColumn certFieldColumn = new TreeColumn( this.certTree, SWT.LEFT );
certFieldColumn.setText( "Field" );
certFieldColumn.setWidth( 200 );
TreeColumn certValueColumn = new TreeColumn( this.certTree, SWT.LEFT );
certValueColumn.setText( "Value" );
certValueColumn.setWidth( 100 );
}
private void createGeneralTab( final TabFolder tabber ) {
TabItem generalTab = new TabItem( tabber, SWT.NONE );
generalTab.setText( "General" );
Composite generalComp = new Composite( tabber, SWT.NONE );
generalComp.setLayout( new GridLayout( 1, false ) );
generalComp.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
generalTab.setControl( generalComp );
Label confNameLabel = new Label( generalComp, SWT.NONE );
confNameLabel.setLayoutData( new GridData() );
confNameLabel.setText( "Configuration Name:" );
this.confNameText = new Text( generalComp, SWT.BORDER | SWT.SINGLE | SWT.READ_ONLY );
this.confNameText.setLayoutData( new GridData( GridData.FILL, GridData.BEGINNING, true, false ) );
Label confDescLabel = new Label( generalComp, SWT.NONE );
confDescLabel.setLayoutData( new GridData() );
confDescLabel.setText( "Description:" );
this.confDescText = new Text( generalComp, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI | SWT.READ_ONLY );
GridData gData = new GridData( GridData.FILL, GridData.FILL, true, true );
gData.widthHint = 300;
gData.heightHint = 80;
this.confDescText.setLayoutData( gData );
Label confPrereqLabel = new Label( generalComp, SWT.NONE );
confPrereqLabel.setLayoutData( new GridData() );
confPrereqLabel.setText( "Prerequisites:" );
this.confPrereqText = new Text( generalComp, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI | SWT.READ_ONLY );
gData = new GridData( GridData.FILL, GridData.FILL, true, true );
gData.widthHint = 300;
gData.heightHint = 80;
this.confPrereqText.setLayoutData( gData );
}
private void createProjectTab( final TabFolder tabber ) {
TabItem projectTab = new TabItem( tabber, SWT.NONE );
projectTab.setText( "Projects" );
Composite projectComp = new Composite( tabber, SWT.NONE );
projectComp.setLayout( new GridLayout( 1, false ) );
projectComp.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
projectTab.setControl( projectComp );
Label projectLabel = new Label( projectComp, SWT.NONE );
projectLabel.setText( "Project Configurations" );
projectLabel.setLayoutData( new GridData() );
this.projectTree = new Tree( projectComp, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER );
this.projectTree.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
this.projectTree.setHeaderVisible( true );
TreeColumn voFieldColumn = new TreeColumn( this.projectTree, SWT.LEFT );
voFieldColumn.setText( "Field" );
voFieldColumn.setWidth( 200 );
TreeColumn voValueColumn = new TreeColumn( this.projectTree, SWT.LEFT );
voValueColumn.setText( "Value" );
voValueColumn.setWidth( 100 );
}
private TreeItem createTreeItem( final Tree tree, final String s1, final String s2 ) {
TreeItem item = new TreeItem( tree, SWT.NONE );
fillTreeItem( item, s1, s2 );
return item;
}
private TreeItem createTreeItem( final TreeItem parent, final String s1, final String s2 ) {
TreeItem item = new TreeItem( parent, SWT.NONE );
fillTreeItem( item, s1, s2 );
return item;
}
private void createVoTab( final TabFolder tabber ) {
TabItem voTab = new TabItem( tabber, SWT.NONE );
voTab.setText( "Virtual Organizations" );
Composite voComp = new Composite( tabber, SWT.NONE );
voComp.setLayout( new GridLayout( 1, false ) );
voComp.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
voTab.setControl( voComp );
Label voLabel = new Label( voComp, SWT.NONE );
voLabel.setText( "VO Configurations" );
voLabel.setLayoutData( new GridData() );
this.voTree = new Tree( voComp, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER );
this.voTree.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
this.voTree.setHeaderVisible( true );
TreeColumn voFieldColumn = new TreeColumn( this.voTree, SWT.LEFT );
voFieldColumn.setText( "Field" );
voFieldColumn.setWidth( 200 );
TreeColumn voValueColumn = new TreeColumn( this.voTree, SWT.LEFT );
voValueColumn.setText( "Value" );
voValueColumn.setWidth( 100 );
}
private void fillTreeItem( final TreeItem item, final String s1, final String s2 ) {
item.setText( 0, s1 == null ? "" : s1 );
item.setText( 1, s2 == null ? "" : s2 );
}
private String securelyGetAttribute( final IConfigurationElement conf,
final String attribute ) {
String result = "N/A"; //$NON-NLS-1$
if ( conf != null ) {
String s = conf.getAttribute( attribute );
if ( ( s != null ) && ( s.trim().length() > 0 ) ) {
result = s;
}
}
return result;
}
}