package org.safehaus.penrose.studio.federation.nis.synchronization; 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.IManagedForm; import org.eclipse.swt.widgets.*; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.GridData; 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.apache.log4j.Logger; import org.safehaus.penrose.federation.NISRepositoryClient; import org.safehaus.penrose.studio.server.Server; import org.safehaus.penrose.studio.PenroseStudio; import org.safehaus.penrose.studio.dialog.ErrorDialog; import org.safehaus.penrose.federation.NISDomain; import org.safehaus.penrose.federation.FederationRepositoryConfig; import org.safehaus.penrose.scheduler.JobClient; import org.safehaus.penrose.scheduler.SchedulerClient; import org.safehaus.penrose.source.SourceClient; import org.safehaus.penrose.source.SourceManagerClient; import org.safehaus.penrose.partition.PartitionClient; import org.safehaus.penrose.partition.PartitionManagerClient; import org.safehaus.penrose.ldap.*; import org.safehaus.penrose.client.PenroseClient; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.sql.Timestamp; /** * @author Endi S. Dewata */ public class NISSynchronizationTrackerPage extends FormPage { public DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Logger log = Logger.getLogger(getClass()); FormToolkit toolkit; Server server; NISSynchronizationEditor editor; NISRepositoryClient nisFederationClient; FederationRepositoryConfig domain; Table trackerTable; public NISSynchronizationTrackerPage(NISSynchronizationEditor editor) { super(editor, "TRACKER", " Tracker "); this.editor = editor; this.server = editor.getServer(); this.nisFederationClient = editor.getNISFederationClient(); this.domain = editor.getDomain(); } public void createFormContent(IManagedForm managedForm) { toolkit = managedForm.getToolkit(); ScrolledForm form = managedForm.getForm(); form.setText("Tracker"); Composite body = form.getBody(); body.setLayout(new GridLayout()); Section trackerSection = toolkit.createSection(body, Section.TITLE_BAR | Section.EXPANDED); trackerSection.setText("Tracker"); trackerSection.setLayoutData(new GridData(GridData.FILL_BOTH)); Control trackerControl = createTrackerControl(trackerSection); trackerSection.setClient(trackerControl); refreshTracker(); } public Composite createTrackerControl(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)); trackerTable = new Table(leftPanel, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); trackerTable.setLayoutData(new GridData(GridData.FILL_BOTH)); trackerTable.setHeaderVisible(true); trackerTable.setLinesVisible(true); TableColumn tc = new TableColumn(trackerTable, SWT.NONE); tc.setWidth(150); tc.setText("Change Number"); tc = new TableColumn(trackerTable, SWT.NONE); tc.setWidth(350); tc.setText("Change Time"); 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 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 (trackerTable.getSelectionCount() == 0) return; boolean confirm = MessageDialog.openQuestion( editor.getSite().getShell(), "Removing Tracker", "Are you sure?" ); if (!confirm) return; TableItem[] items = trackerTable.getSelection(); String federationName = nisFederationClient.getFederationClient().getFederationDomain(); PenroseClient penroseClient = server.getClient(); PartitionManagerClient partitionManagerClient = penroseClient.getPartitionManagerClient(); PartitionClient partitionClient = partitionManagerClient.getPartitionClient(federationName+"_"+domain.getName()+"_"+ NISDomain.YP); SchedulerClient schedulerClient = partitionClient.getSchedulerClient(); JobClient jobClient = schedulerClient.getJobClient("LDAPSync"); for (TableItem ti : items) { SearchResult searchResult = (SearchResult)ti.getData(); Attributes attributes = searchResult.getAttributes(); Long changeNumber = Long.parseLong(attributes.getValue("changeNumber").toString()); jobClient.invoke("removeTracker", new Object[] { changeNumber }, new String[] { Long.class.getName() }); } } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } refreshTracker(); } }); 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) { refreshTracker(); } }); return composite; } public void refreshTracker() { try { int[] indices = trackerTable.getSelectionIndices(); trackerTable.removeAll(); String federationName = nisFederationClient.getFederationClient().getFederationDomain(); PenroseClient penroseClient = server.getClient(); PartitionManagerClient partitionManagerClient = penroseClient.getPartitionManagerClient(); PartitionClient partitionClient = partitionManagerClient.getPartitionClient(federationName+"_"+domain.getName()+"_"+ NISDomain.YP); SourceManagerClient sourceManagerClient = partitionClient.getSourceManagerClient(); SourceClient tracker = sourceManagerClient.getSourceClient("tracker"); SearchRequest request = new SearchRequest(); SearchResponse response = new SearchResponse(); tracker.search(request, response); while (response.hasNext()) { SearchResult result = response.next(); Attributes attributes = result.getAttributes(); String changeNumber = attributes.getValue("changeNumber").toString(); String changeTimestamp = df.format((Timestamp)attributes.getValue("changeTimestamp")); TableItem ti = new TableItem(trackerTable, SWT.NONE); ti.setText(0, changeNumber); ti.setText(1, changeTimestamp); ti.setData(result); } trackerTable.select(indices); } catch (Exception e) { log.error(e.getMessage(), e); ErrorDialog.open(e); } } }