package org.occiware.clouddesigner.occi.design.dialog; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.ui.action.LoadResourceAction.LoadResourceDialog; import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; import org.eclipse.jface.viewers.LabelProvider; 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.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.occiware.clouddesigner.occi.Extension; import org.occiware.clouddesigner.occi.OCCIRegistry; import org.occiware.clouddesigner.occi.design.Messages; import org.occiware.clouddesigner.occi.provider.OCCIEditPlugin; public class LoadExtensionDialog extends LoadResourceDialog { protected Set<Extension> registeredPackages = new LinkedHashSet<Extension>(); public LoadExtensionDialog(Shell parent, EditingDomain domain) { super(parent, domain); } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); Composite buttonComposite = (Composite) composite.getChildren()[0]; Button browseRegisteredExtensionsButton = new Button(buttonComposite, SWT.PUSH); browseRegisteredExtensionsButton .setText(Messages.LoadExtensionDialog_ExtensionRegistry); prepareBrowseRegisteredPackagesButton(browseRegisteredExtensionsButton); { FormData data = new FormData(); Control[] children = buttonComposite.getChildren(); data.right = new FormAttachment(children[0], -CONTROL_OFFSET); browseRegisteredExtensionsButton.setLayoutData(data); } return composite; } protected void prepareBrowseRegisteredPackagesButton( Button browseRegisteredPackagesButton) { browseRegisteredPackagesButton .addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { RegisteredExtensionsDialog registeredExtensionsDialog = new RegisteredExtensionsDialog( getShell()); registeredExtensionsDialog.open(); Object[] result = registeredExtensionsDialog .getResult(); if (result != null) { StringBuffer schemes = new StringBuffer(); for (int i = 0, length = result.length; i < length; i++) { schemes.append(OCCIRegistry.getInstance() .getExtensionURI( String.valueOf(result[i]))); schemes.append(" "); //$NON-NLS-1$ } uriField.setText((uriField.getText() + " " + schemes //$NON-NLS-1$ .toString()).trim()); } } }); } public static class RegisteredExtensionsDialog extends ElementListSelectionDialog { public RegisteredExtensionsDialog(Shell parent) { super(parent, new LabelProvider() { @Override public Image getImage(Object element) { return ExtendedImageRegistry.getInstance().getImage( OCCIEditPlugin.INSTANCE .getImage("full/obj16/Extension")); //$NON-NLS-1$ } }); setMultipleSelection(true); setMessage(Messages.LoadExtensionDialog_SelectRegisteredExtension); setFilter("*"); //$NON-NLS-1$ setTitle(Messages.LoadExtensionDialog_SelectExtension); } protected void updateElements() { Object[] result = OCCIRegistry .getInstance() .getRegisteredExtensions() .toArray( new Object[OCCIRegistry.getInstance() .getRegisteredExtensions().size()]); Arrays.sort(result); setListElements(result); } @Override protected Control createDialogArea(Composite parent) { Composite result = (Composite) super.createDialogArea(parent); Composite buttonGroup = new Composite(result, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; buttonGroup.setLayout(layout); updateElements(); return result; } } }