package org.safehaus.penrose.studio.federation.nis.editor; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.window.Window; import org.apache.log4j.Logger; import org.safehaus.penrose.federation.NISDomain; import org.safehaus.penrose.federation.FederationRepositoryConfig; import org.safehaus.penrose.federation.FederationClient; import org.safehaus.penrose.studio.federation.nis.wizard.AddNISDomainWizard; import org.safehaus.penrose.studio.federation.nis.wizard.EditNISDomainWizard; import org.safehaus.penrose.studio.PenroseStudio; import org.safehaus.penrose.studio.dialog.ErrorDialog; /** * @author Endi S. Dewata */ public class NISDomainsPage extends FormPage { Logger log = Logger.getLogger(getClass()); FormToolkit toolkit; NISEditor editor; FederationClient federationClient; Table table; public NISDomainsPage(NISEditor editor, FederationClient federationClient) { super(editor, "DOMAINS", " Domains "); this.editor = editor; this.federationClient = federationClient; } public void createFormContent(IManagedForm managedForm) { toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText("Domains"); Composite body = form.getBody(); body.setLayout(new GridLayout()); Section section = toolkit.createSection(body, Section.TITLE_BAR | Section.EXPANDED); section.setText("Domains"); section.setLayoutData(new GridData(GridData.FILL_BOTH)); Control sourcesSection = createDomainsSection(section); section.setClient(sourcesSection); refresh(); } public Composite createDomainsSection(Composite parent) { Composite composite = toolkit.createComposite(parent); composite.setLayout(new GridLayout(2, false)); Composite leftPanel = toolkit.createComposite(composite); leftPanel.setLayout(new GridLayout()); leftPanel.setLayoutData(new GridData(GridData.FILL_BOTH)); table = new Table(leftPanel, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); table.setLayoutData(new GridData(GridData.FILL_BOTH)); table.setHeaderVisible(true); table.setLinesVisible(true); TableColumn tc = new TableColumn(table, SWT.NONE); tc.setWidth(100); tc.setText("Name"); tc = new TableColumn(table, SWT.NONE); tc.setWidth(150); tc.setText("Server"); tc = new TableColumn(table, SWT.NONE); tc.setWidth(250); tc.setText("Domain"); Composite links = toolkit.createComposite(leftPanel); links.setLayout(new RowLayout()); links.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Hyperlink selectAllLink = toolkit.createHyperlink(links, "Select All", SWT.NONE); selectAllLink.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent event) { table.selectAll(); } }); Hyperlink selectNoneLink = toolkit.createHyperlink(links, "Select None", SWT.NONE); selectNoneLink.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent event) { table.deselectAll(); } }); Composite rightPanel = toolkit.createComposite(composite); rightPanel.setLayout(new GridLayout()); GridData gd = new GridData(GridData.FILL_VERTICAL); gd.verticalSpan = 2; gd.widthHint = 120; rightPanel.setLayoutData(gd); Button addButton = new Button(rightPanel, SWT.PUSH); addButton.setText("Add"); addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); addButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent selectionEvent) { try { AddNISDomainWizard wizard = new AddNISDomainWizard(); WizardDialog dialog = new WizardDialog(editor.getSite().getShell(), wizard); dialog.setPageSize(600, 300); int rc = dialog.open(); if (rc == Window.CANCEL) return; FederationRepositoryConfig repositoryConfig = wizard.getRepository(); federationClient.addRepository(repositoryConfig); federationClient.store(); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } refresh(); } }); Button editButton = new Button(rightPanel, SWT.PUSH); editButton.setText("Edit"); editButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); editButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent selectionEvent) { try { if (table.getSelectionCount() == 0) return; TableItem item = table.getSelection()[0]; FederationRepositoryConfig domain = (FederationRepositoryConfig)item.getData(); EditNISDomainWizard wizard = new EditNISDomainWizard(domain); WizardDialog dialog = new WizardDialog(editor.getSite().getShell(), wizard); dialog.setPageSize(600, 300); int rc = dialog.open(); if (rc == Window.CANCEL) return; federationClient.updateRepository(domain); federationClient.store(); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } refresh(); } }); Button removeButton = new Button(rightPanel, SWT.PUSH); removeButton.setText("Remove"); removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); removeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent selectionEvent) { try { if (table.getSelectionCount() == 0) return; boolean confirm = MessageDialog.openQuestion( editor.getSite().getShell(), "Removing Repository", "Are you sure?" ); if (!confirm) return; int index = table.getSelectionIndex(); TableItem[] items = table.getSelection(); for (TableItem ti : items) { FederationRepositoryConfig repository = (FederationRepositoryConfig)ti.getData(); try { federationClient.removeRepository(repository.getName()); federationClient.store(); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } table.select(index); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } refresh(); } }); new Label(rightPanel, SWT.NONE); Button refreshButton = new Button(rightPanel, SWT.PUSH); refreshButton.setText("Refresh"); refreshButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); refreshButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent selectionEvent) { refresh(); } }); return composite; } public void refresh() { try { int[] indices = table.getSelectionIndices(); table.removeAll(); for (FederationRepositoryConfig repositoryConfig : federationClient.getRepositories("NIS")) { TableItem ti = new TableItem(table, SWT.NONE); ti.setText(0, repositoryConfig.getName()); String server = repositoryConfig.getParameter(NISDomain.SERVER); ti.setText(1, server == null ? "" : server); String domain = repositoryConfig.getParameter(NISDomain.DOMAIN); ti.setText(2, domain == null ? "" : domain); ti.setData(repositoryConfig); } table.select(indices); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } }