package org.safehaus.penrose.studio.federation.partition; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.forms.IManagedForm; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.safehaus.penrose.federation.FederationClient; import org.safehaus.penrose.federation.FederationPartitionConfig; import org.safehaus.penrose.client.PenroseClient; import org.safehaus.penrose.partition.PartitionClient; import org.safehaus.penrose.partition.PartitionManagerClient; import org.safehaus.penrose.studio.PenroseStudio; import org.safehaus.penrose.studio.server.Server; import org.safehaus.penrose.studio.dialog.ErrorDialog; /** * @author Endi S. Dewata */ public class FederationDomainPartitionsPage extends FormPage { Logger log = Logger.getLogger(getClass()); FormToolkit toolkit; FederationDomainEditor editor; Server server; FederationClient federationClient; Table table; public FederationDomainPartitionsPage(FederationDomainEditor editor) { super(editor, "PARTITONS", " Partitions "); this.editor = editor; this.server = editor.server; this.federationClient = editor.getFederationClient(); } public void createFormContent(IManagedForm managedForm) { toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText("Partitions"); Composite body = form.getBody(); body.setLayout(new GridLayout()); Section section = toolkit.createSection(body, Section.TITLE_BAR | Section.EXPANDED); section.setText("Partitions"); section.setLayoutData(new GridData(GridData.FILL_BOTH)); Control sourcesSection = createPartitionsSection(section); section.setClient(sourcesSection); refresh(); } public Composite createPartitionsSection(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(150); tc.setText("Name"); tc = new TableColumn(table, SWT.NONE); tc.setWidth(100); tc.setText("Status"); 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 createButton = new Button(rightPanel, SWT.PUSH); createButton.setText("Create"); createButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); createButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent selectionEvent) { try { if (table.getSelectionCount() == 0) return; boolean confirm = MessageDialog.openQuestion( editor.getSite().getShell(), "Creating Partitions", "Are you sure?" ); if (!confirm) return; TableItem[] items = table.getSelection(); for (TableItem ti : items) { FederationPartitionConfig partitionConfig = (FederationPartitionConfig)ti.getData(); federationClient.createPartition(partitionConfig.getName()); } } 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 Partitions", "Are you sure?" ); if (!confirm) return; TableItem[] items = table.getSelection(); for (TableItem ti : items) { FederationPartitionConfig partitionConfig = (FederationPartitionConfig)ti.getData(); federationClient.removePartition(partitionConfig.getName()); } } 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(); PenroseClient client = server.getClient(); PartitionManagerClient partitionManagerClient = client.getPartitionManagerClient(); for (FederationPartitionConfig partitionConfig : federationClient.getPartitions()) { TableItem ti = new TableItem(table, SWT.NONE); ti.setData(partitionConfig); ti.setText(0, partitionConfig.getName()); PartitionClient partitionClient = partitionManagerClient.getPartitionClient(partitionConfig.getName()); ti.setText(1, partitionClient.exists() ? "OK" : "Missing"); } table.select(indices); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } }