| /******************************************************************************* |
| * Copyright (c) 2002, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.xml.ui.internal.catalog; |
| |
| import java.io.ByteArrayInputStream; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.MultiStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.ErrorDialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.dialogs.SaveAsDialog; |
| import org.eclipse.wst.common.ui.internal.dialogs.SelectSingleFileDialog; |
| import org.eclipse.wst.xml.core.internal.catalog.CatalogSet; |
| import org.eclipse.wst.xml.core.internal.catalog.provisional.ICatalog; |
| import org.eclipse.wst.xml.ui.internal.XMLUIPlugin; |
| |
| public class AdvancedOptionsDialog extends Dialog { |
| protected ICatalog workingUserCatalog; |
| |
| public AdvancedOptionsDialog(Shell parentShell, ICatalog workingUserCatalog) { |
| super(parentShell); |
| setShellStyle(getShellStyle() | SWT.RESIZE); |
| this.workingUserCatalog = workingUserCatalog; |
| } |
| |
| |
| protected void createButtonsForButtonBar(Composite parent) { |
| createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); |
| } |
| |
| |
| protected Control createDialogArea(Composite parent) { |
| Composite dialogArea = (Composite) super.createDialogArea(parent); |
| // WorkbenchHelp.setHelp(dialogArea, new |
| // ControlContextComputer(dialogArea, |
| // XMLBuilderContextIds.XMLP_PROJECT_DIALOG)); |
| |
| Composite composite = new Composite(dialogArea, SWT.NONE); |
| composite.setLayout(new GridLayout()); |
| composite.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| Label label = new Label(composite, SWT.NONE); |
| label.setText(XMLCatalogMessages.UI_LABEL_DIALOG_DESCRIPTION); |
| |
| Composite buttonComposite = new Composite(composite, SWT.NONE); |
| GridLayout gridLayout = new GridLayout(); |
| gridLayout.numColumns = 3; |
| buttonComposite.setLayout(gridLayout); |
| buttonComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Composite placeHolder = new Composite(buttonComposite, SWT.NONE); |
| placeHolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Composite buttonGroup = new Composite(buttonComposite, SWT.NONE); |
| gridLayout = new GridLayout(); |
| gridLayout.numColumns = 2; |
| gridLayout.makeColumnsEqualWidth = true; |
| buttonGroup.setLayout(gridLayout); |
| buttonGroup.setLayoutData(createGridData()); |
| |
| Button importButton = new Button(buttonGroup, SWT.PUSH | SWT.CENTER); |
| importButton.setText(" " + XMLCatalogMessages.UI_BUTTON_IMPORT + " "); //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| Button exportButton = new Button(buttonGroup, SWT.PUSH | SWT.CENTER); |
| exportButton.setText(" " + XMLCatalogMessages.UI_BUTTON_EXPORT + " "); //$NON-NLS-1$ //$NON-NLS-2$ |
| |
| placeHolder = new Composite(buttonComposite, SWT.NONE); |
| placeHolder.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| // add importButton listener |
| SelectionListener importButtonSelectionListener = new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| invokeImportDialog(); |
| } |
| }; |
| importButton.addSelectionListener(importButtonSelectionListener); |
| |
| // add exportButton listener |
| SelectionListener exportButtonSelectionListener = new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| invokeExportDialog(); |
| } |
| }; |
| exportButton.addSelectionListener(exportButtonSelectionListener); |
| |
| return dialogArea; |
| } |
| |
| protected GridData createGridData() { |
| GridData gd = new GridData(GridData.CENTER); |
| gd.horizontalAlignment = GridData.HORIZONTAL_ALIGN_CENTER; |
| gd.verticalAlignment = GridData.VERTICAL_ALIGN_CENTER; |
| return gd; |
| } |
| |
| |
| protected void invokeImportDialog() { |
| SelectSingleFileDialog dialog = new SelectSingleFileDialog(getShell(), null, true); |
| String[] extensions = {".xmlcatalog", ".xml"}; //$NON-NLS-1$ //$NON-NLS-2$ |
| dialog.addFilterExtensions(extensions); |
| dialog.create(); |
| dialog.getShell().setText(XMLCatalogMessages.UI_LABEL_IMPORT_DIALOG_TITLE); |
| dialog.setTitle(XMLCatalogMessages.UI_LABEL_IMPORT_DIALOG_HEADING); |
| dialog.setMessage(XMLCatalogMessages.UI_LABEL_IMPORT_DIALOG_MESSAGE); |
| dialog.setBlockOnOpen(true); |
| int rc = dialog.open(); |
| if (rc == Window.OK) { |
| IFile file = dialog.getFile(); |
| if (file != null) { |
| String fileName = file.getLocation().toFile().toURI().toString(); |
| try { |
| CatalogSet tempResourceSet = new CatalogSet(); |
| ICatalog newCatalog = tempResourceSet.lookupOrCreateCatalog("temp", fileName); //$NON-NLS-1$ |
| workingUserCatalog.addEntriesFromCatalog(newCatalog); |
| } |
| catch (Exception e) { |
| // TODO... give error message |
| } |
| } |
| close(); |
| } |
| } |
| |
| |
| protected void invokeExportDialog() { |
| IPath originalFilePath = null; |
| IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); |
| if (projects.length > 0) { |
| originalFilePath = projects[0].getFullPath().append(".xmlcatalog"); //$NON-NLS-1$ |
| } |
| |
| SaveAsDialog dialog = new SaveAsDialog(getShell()); |
| if (originalFilePath != null) { |
| IFile originalFile = ResourcesPlugin.getWorkspace().getRoot().getFile(originalFilePath); |
| dialog.setOriginalFile(originalFile); |
| } |
| dialog.create(); |
| |
| dialog.getShell().setText(XMLCatalogMessages.UI_LABEL_EXPORT_DIALOG_TITLE); |
| dialog.setTitle(XMLCatalogMessages.UI_LABEL_EXPORT_DIALOG_HEADING); |
| dialog.setMessage(XMLCatalogMessages.UI_LABEL_EXPORT_DIALOG_MESSAGE); |
| |
| dialog.setBlockOnOpen(true); |
| int rc = dialog.open(); |
| if (rc == Window.OK) { |
| IPath path = dialog.getResult(); |
| if (path != null) { |
| IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path); |
| String fileName = file.getLocation().toFile().toURI().toString(); |
| |
| // here we save the catalog entries to the selected file |
| try { |
| createFileIfRequired(file); |
| workingUserCatalog.setLocation(fileName); |
| workingUserCatalog.save(); |
| } |
| catch (Exception ex) { |
| try { |
| String title = XMLCatalogMessages.UI_LABEL_CATALOG_SAVE_ERROR; |
| String briefMessage = XMLCatalogMessages.UI_LABEL_CATALOG_COULD_NOT_BE_SAVED; |
| String reason = file.isReadOnly() ? NLS.bind(XMLCatalogMessages.UI_LABEL_FILE_IS_READ_ONLY, fileName) : NLS.bind(XMLCatalogMessages.ERROR_SAVING_FILE, fileName); |
| String details = NLS.bind(XMLCatalogMessages.ERROR_SAVING_FILE, fileName); |
| |
| ErrorDialog.openError(Display.getCurrent().getActiveShell(), title, briefMessage, createStatus(reason, details)); |
| } |
| catch (Exception ex2) { |
| } |
| } |
| close(); |
| } |
| } |
| } |
| |
| // TODO... This was copied from WindowUtility. Is there an easier way to |
| // create a status object? |
| // If not, we should open an eclipse bug or add a similar utility to |
| // baseExtensionsUI. |
| // |
| private static IStatus createStatus(String reason, String msg) { |
| String pluginId = XMLUIPlugin.getDefault().getBundle().getSymbolicName(); |
| MultiStatus multiStatus = new MultiStatus(pluginId, 0, reason, null); |
| Status status = new Status(IStatus.ERROR, pluginId, 0, msg, null); |
| multiStatus.add(status); |
| return multiStatus; |
| } |
| |
| |
| protected void createFileIfRequired(IFile file) { |
| try { |
| if ((file != null) && !file.exists()) { |
| ByteArrayInputStream inputStream = new ByteArrayInputStream(new byte[0]); |
| file.create(inputStream, true, null); |
| // createEmptyXMLCatalog(file); |
| } |
| } |
| catch (Exception e) { |
| } |
| } |
| } |