Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.directory.studio.ldapbrowser.ui.wizards; import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileWriter; import org.apache.directory.api.ldap.model.name.Dn; import org.apache.directory.studio.common.ui.CommonUIUtils; import org.apache.directory.studio.connection.core.Connection; import org.apache.directory.studio.connection.ui.RunnableContextRunner; import org.apache.directory.studio.ldapbrowser.common.actions.BrowserSelectionUtils; import org.apache.directory.studio.ldapbrowser.common.actions.CopyAction; import org.apache.directory.studio.ldapbrowser.core.BrowserCoreConstants; import org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable; import org.apache.directory.studio.ldapbrowser.core.jobs.SearchRunnable; import org.apache.directory.studio.ldapbrowser.core.jobs.StudioBrowserJob; import org.apache.directory.studio.ldapbrowser.core.model.IAttribute; import org.apache.directory.studio.ldapbrowser.core.model.IBookmark; import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; import org.apache.directory.studio.ldapbrowser.core.model.IEntry; import org.apache.directory.studio.ldapbrowser.core.model.ISearch; import org.apache.directory.studio.ldapbrowser.core.model.ISearchResult; import org.apache.directory.studio.ldapbrowser.core.model.IValue; import org.apache.directory.studio.ldapbrowser.ui.BrowserUIConstants; import org.apache.directory.studio.ldifeditor.editor.LdifEditor; import org.apache.directory.studio.ldifeditor.editor.NonExistingLdifEditorInput; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.SaveAsDialog; import org.eclipse.ui.texteditor.IDocumentProvider; public class BatchOperationWizard extends Wizard implements INewWizard { /** The connection */ private IBrowserConnection connection; // Wizard pages private BatchOperationApplyOnWizardPage applyOnPage; private BatchOperationTypeWizardPage typePage; private BatchOperationLdifWizardPage ldifPage; private BatchOperationModifyWizardPage modifyPage; private BatchOperationFinishWizardPage finishPage; /** * Creates a new instance of BatchOperationWizard. */ public BatchOperationWizard() { super.setWindowTitle(Messages.getString("BatchOperationWizard.BatchOperation")); //$NON-NLS-1$ super.setNeedsProgressMonitor(true); } /** * Gets the id. * * @return the id */ public static String getId() { return BrowserUIConstants.WIZARD_BATCH_OPERATION; } /** * {@inheritDoc} */ public void init(IWorkbench workbench, IStructuredSelection selection) { // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection() } /** * {@inheritDoc} */ public void addPages() { ISelection selection = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService() .getSelection(); Connection[] connections = BrowserSelectionUtils.getConnections(selection); ISearch[] searches = BrowserSelectionUtils.getSearches(selection); IEntry[] entries = BrowserSelectionUtils.getEntries(selection); ISearchResult[] searchResults = BrowserSelectionUtils.getSearchResults(selection); IBookmark[] bookmarks = BrowserSelectionUtils.getBookmarks(selection); IAttribute[] attributes = BrowserSelectionUtils.getAttributes(selection); IValue[] values = BrowserSelectionUtils.getValues(selection); // if(searches.length + entries.length + searchResults.length + // bookmarks.length > 0) { if (connections.length > 0 && connections[0].getConnectionWrapper().isConnected() || searches.length + entries.length + searchResults.length + bookmarks.length + attributes.length + values.length > 0) { ISearch search = BrowserSelectionUtils.getExampleSearch(selection); search.setName(null); this.connection = search.getBrowserConnection(); applyOnPage = new BatchOperationApplyOnWizardPage(BatchOperationApplyOnWizardPage.class.getName(), this); addPage(applyOnPage); typePage = new BatchOperationTypeWizardPage(BatchOperationTypeWizardPage.class.getName(), this); addPage(typePage); ldifPage = new BatchOperationLdifWizardPage(BatchOperationLdifWizardPage.class.getName(), this); addPage(ldifPage); modifyPage = new BatchOperationModifyWizardPage(BatchOperationModifyWizardPage.class.getName(), this); addPage(modifyPage); finishPage = new BatchOperationFinishWizardPage(BatchOperationFinishWizardPage.class.getName()); addPage(finishPage); } else { IWizardPage page = new DummyWizardPage(); addPage(page); } } /** * {@inheritDoc} */ public void createPageControls(Composite pageContainer) { super.createPageControls(pageContainer); // set help context ID PlatformUI.getWorkbench().getHelpSystem().setHelp(applyOnPage.getControl(), BrowserUIConstants.PLUGIN_ID + "." + "tools_batchoperation_wizard"); //$NON-NLS-1$ //$NON-NLS-2$ PlatformUI.getWorkbench().getHelpSystem().setHelp(typePage.getControl(), BrowserUIConstants.PLUGIN_ID + "." + "tools_batchoperation_wizard"); //$NON-NLS-1$ //$NON-NLS-2$ PlatformUI.getWorkbench().getHelpSystem().setHelp(ldifPage.getControl(), BrowserUIConstants.PLUGIN_ID + "." + "tools_batchoperation_wizard"); //$NON-NLS-1$ //$NON-NLS-2$ PlatformUI.getWorkbench().getHelpSystem().setHelp(modifyPage.getControl(), BrowserUIConstants.PLUGIN_ID + "." + "tools_batchoperation_wizard"); //$NON-NLS-1$ //$NON-NLS-2$ PlatformUI.getWorkbench().getHelpSystem().setHelp(finishPage.getControl(), BrowserUIConstants.PLUGIN_ID + "." + "tools_batchoperation_wizard"); //$NON-NLS-1$ //$NON-NLS-2$ } /** * This private class implements a dummy wizard page that is displayed when no connection is selected. * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ class DummyWizardPage extends WizardPage { /** * Creates a new instance of DummyWizardPage. */ protected DummyWizardPage() { super(""); //$NON-NLS-1$ super.setTitle(Messages.getString("BatchOperationWizard.NoConnectionSelected")); //$NON-NLS-1$ super.setDescription(Messages.getString("BatchOperationWizard.SelectOpenConnection")); //$NON-NLS-1$ // super.setImageDescriptor(BrowserUIPlugin.getDefault().getImageDescriptor(BrowserUIConstants.IMG_ENTRY_WIZARD)); super.setPageComplete(true); } /** * {@inheritDoc} */ public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout gl = new GridLayout(1, false); composite.setLayout(gl); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); setControl(composite); } } /** * {@inheritDoc} */ public IWizardPage getNextPage(IWizardPage page) { if (this.applyOnPage != null) { if (page == this.applyOnPage) { return this.typePage; } else if (page == this.typePage && this.typePage .getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_CREATE_LDIF) { return this.ldifPage; } else if (page == this.typePage && this.typePage.getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_MODIFY) { return this.modifyPage; } else if (page == this.typePage && this.typePage.getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_DELETE) { return this.finishPage; } else if (page == this.modifyPage) { return this.finishPage; } else if (page == this.ldifPage) { return this.finishPage; } } return null; } /** * {@inheritDoc} */ public boolean canFinish() { if (this.applyOnPage != null) { if (!this.applyOnPage.isPageComplete()) { return false; } if (!this.typePage.isPageComplete()) { return false; } if (this.typePage.getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_CREATE_LDIF && !this.ldifPage.isPageComplete()) { return false; } if (this.typePage.getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_MODIFY && !this.modifyPage.isPageComplete()) { return false; } if (!this.finishPage.isPageComplete()) { return false; } } return true; } /** * {@inheritDoc} */ public boolean performCancel() { return true; } /** * {@inheritDoc} */ public boolean performFinish() { if (this.applyOnPage != null) { this.applyOnPage.saveDialogSettings(); this.finishPage.saveDialogSettings(); // get LDIF String ldifFragment = ""; //$NON-NLS-1$ if (typePage.getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_CREATE_LDIF) { ldifFragment = this.ldifPage.getLdifFragment(); } else if (typePage.getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_MODIFY) { ldifFragment = this.modifyPage.getLdifFragment(); } if (typePage.getOperationType() == BatchOperationTypeWizardPage.OPERATION_TYPE_DELETE) { ldifFragment = "changetype: delete" + BrowserCoreConstants.LINE_SEPARATOR; //$NON-NLS-1$ } // get DNs Dn[] dns = applyOnPage.getApplyOnDns(); if (dns == null) { if (applyOnPage.getApplyOnSearch() != null) { ISearch search = applyOnPage.getApplyOnSearch(); if (search.getBrowserConnection() != null) { search.setSearchResults(null); SearchRunnable runnable = new SearchRunnable(new ISearch[] { search }); IStatus status = RunnableContextRunner.execute(runnable, getContainer(), true); if (status.isOK()) { ISearchResult[] srs = search.getSearchResults(); dns = new Dn[srs.length]; for (int i = 0; i < srs.length; i++) { dns[i] = srs[i].getDn(); } } } } } if (dns != null) { StringBuffer ldif = new StringBuffer(); for (int i = 0; i < dns.length; i++) { ldif.append("dn: "); //$NON-NLS-1$ ldif.append(dns[i].getName()); ldif.append(BrowserCoreConstants.LINE_SEPARATOR); ldif.append(ldifFragment); ldif.append(BrowserCoreConstants.LINE_SEPARATOR); } if (finishPage .getExecutionMethod() == BatchOperationFinishWizardPage.EXECUTION_METHOD_LDIF_EDITOR) { // Opening an LDIF Editor with the LDIF content try { IEditorInput input = new NonExistingLdifEditorInput(); IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .openEditor(input, LdifEditor.getId()); IDocumentProvider documentProvider = ((LdifEditor) editor).getDocumentProvider(); if (documentProvider != null) { IDocument document = documentProvider.getDocument(input); if (document != null) { document.set(ldif.toString()); } } } catch (PartInitException e) { return false; } return true; } else if (finishPage .getExecutionMethod() == BatchOperationFinishWizardPage.EXECUTION_METHOD_LDIF_FILE) // TODO { // Saving the LDIF to a file // Getting the shell Shell shell = Display.getDefault().getActiveShell(); // detect IDE or RCP: // check if perspective org.eclipse.ui.resourcePerspective is available boolean isIDE = CommonUIUtils.isIDEEnvironment(); if (isIDE) { // Asking the user for the location where to 'save as' the file SaveAsDialog dialog = new SaveAsDialog(shell); if (dialog.open() != Dialog.OK) { return false; } // Getting if the resulting file IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(dialog.getResult()); try { // Creating the file if it does not exist if (!file.exists()) { file.create(new ByteArrayInputStream("".getBytes()), true, null); //$NON-NLS-1$ } // Saving the LDIF to the file in the workspace file.setContents(new ByteArrayInputStream(ldif.toString().getBytes()), true, true, new NullProgressMonitor()); } catch (Exception e) { return false; } } else { boolean canOverwrite = false; String path = null; while (!canOverwrite) { // Open FileDialog FileDialog dialog = new FileDialog(shell, SWT.SAVE); path = dialog.open(); if (path == null) { return false; } // Check whether file exists and if so, confirm overwrite final File externalFile = new File(path); if (externalFile.exists()) { String question = NLS.bind( Messages.getString("BatchOperationWizard.TheFileAlreadyExistsReplace"), //$NON-NLS-1$ path); MessageDialog overwriteDialog = new MessageDialog(shell, Messages.getString("BatchOperationWizard.Question"), null, question, //$NON-NLS-1$ MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 0); int overwrite = overwriteDialog.open(); switch (overwrite) { case 0: // Yes canOverwrite = true; break; case 1: // No break; case 2: // Cancel default: return false; } } else { canOverwrite = true; } } // Saving the LDIF to the file on disk try { BufferedWriter outFile = new BufferedWriter(new FileWriter(path)); outFile.write(ldif.toString()); outFile.close(); } catch (Exception e) { return false; } } return true; } else if (finishPage .getExecutionMethod() == BatchOperationFinishWizardPage.EXECUTION_METHOD_LDIF_CLIPBOARD) { // Copying the LDIF to the clipboard CopyAction.copyToClipboard(new Object[] { ldif.toString() }, new Transfer[] { TextTransfer.getInstance() }); return true; } else if (finishPage .getExecutionMethod() == BatchOperationFinishWizardPage.EXECUTION_METHOD_ON_CONNECTION) { // Executing the LDIF on the connection ExecuteLdifRunnable runnable = new ExecuteLdifRunnable(getConnection(), ldif.toString(), true, finishPage.getContinueOnError()); StudioBrowserJob job = new StudioBrowserJob(runnable); job.execute(); return true; } } return false; } return true; } /** * Gets the type of the page. * * @return the type of the page */ public BatchOperationTypeWizardPage getTypePage() { return typePage; } /** * Gets the connection. * * @return the connection */ public IBrowserConnection getConnection() { return this.connection; } }