package at.bestsolution.e4.addressbook.swt.application; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.workbench.lifecycle.ProcessAdditions; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.osgi.service.prefs.BackingStoreException; import at.bestsolution.e4.addressbook.model.addressbook.AddressBook; import at.bestsolution.e4.addressbook.model.addressbook.AddressbookPackage; @SuppressWarnings("restriction") public class FileSelector { private String selectedFile; private Combo combo; private List<String> entryList = new ArrayList<String>(); @ProcessAdditions void initSelection(MApplication application, IEclipseContext context) { Display d = Display.getCurrent(); final Shell s = new Shell(d); s.setText("Select Addressbook"); s.setLayout(new GridLayout(3, false)); { Label l = new Label(s, SWT.NONE); l.setText("File"); String lastFiles = InstanceScope.INSTANCE.getNode( "at.bestsolution.e4.addressbook.swt.application").get( "lastFiles", ""); String[] items = lastFiles.split("#|#"); entryList.addAll(Arrays.asList(items)); combo = new Combo(s, SWT.READ_ONLY); combo.setItems(items); combo.setLayoutData(new GridData(300, SWT.DEFAULT)); if (items.length > 0) combo.select(0); Button b = new Button(s, SWT.PUSH); b.setText("Browse ..."); b.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(s, SWT.OPEN); dialog.setFilterExtensions(new String[] { "*.ead" }); String file = dialog.open(); if (file != null) { int idx = 0; boolean flag = false; for (String i : combo.getItems()) { if (i.equals(file)) { combo.select(idx); flag = true; break; } idx++; } if (!flag) { entryList.add(0, file); combo.add(file, 0); combo.select(0); } } } }); } { Composite container = new Composite(s, SWT.NONE); container.setLayout(new GridLayout(3, false)); container.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false, 3, 1)); Label l = new Label(container, SWT.NONE); l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); { Button b = new Button(container, SWT.PUSH); b.setText("Ok"); b.setLayoutData(new GridData(100, SWT.DEFAULT)); b.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { System.err.println(combo.getSelectionIndex()); if (combo.getSelectionIndex() != -1) { selectedFile = combo.getItem(combo .getSelectionIndex()); s.dispose(); } } }); } { Button b = new Button(container, SWT.PUSH); b.setText("Cancel"); b.setLayoutData(new GridData(100, SWT.DEFAULT)); b.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { s.dispose(); } }); } } s.pack(); Point p = s.getSize(); Rectangle r = s.getMonitor().getBounds(); s.setLocation(r.width / 2 - p.x / 2, r.height / 2 - p.y / 2); s.open(); while (!s.isDisposed()) { if (!d.readAndDispatch()) { d.sleep(); } } if (selectedFile == null) { System.exit(0); } else { StringBuilder b = new StringBuilder(); for (String i : entryList) { if (!i.equals(selectedFile)) { if (b.length() > 0) { b.append("#!#"); } b.append(i); } } if (b.length() != 0) { b.insert(0, "#!#"); } b.insert(0, selectedFile); try { IEclipsePreferences node = InstanceScope.INSTANCE .getNode("at.bestsolution.e4.addressbook.swt.application"); node.put("lastFiles", b.toString()); node.flush(); } catch (BackingStoreException e) { // not a problem } ResourceSet resourceSet = new ResourceSetImpl(); resourceSet .getResourceFactoryRegistry() .getExtensionToFactoryMap() .put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()); resourceSet.getPackageRegistry().put(AddressbookPackage.eNS_URI, AddressbookPackage.eINSTANCE); Resource resource = resourceSet.getResource( URI.createFileURI(selectedFile), true); context.set(AddressBook.class, (AddressBook) resource.getContents() .get(0)); context.set(Resource.class, resource); } } }