| /******************************************************************************* |
| * Copyright (c) 2000, 2016 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 |
| * Lars Vogel <Lars.Vogel@vogella.com> - Bug 487943 |
| *******************************************************************************/ |
| package org.eclipse.pde.internal.ui.wizards.extension; |
| |
| import static org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter; |
| |
| import java.net.URL; |
| import java.util.*; |
| import java.util.regex.Pattern; |
| import java.util.regex.PatternSyntaxException; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IMessageProvider; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.internal.text.html.HTMLPrinter; |
| import org.eclipse.jface.viewers.*; |
| import org.eclipse.jface.wizard.IWizard; |
| import org.eclipse.jface.wizard.IWizardNode; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.pde.core.plugin.*; |
| import org.eclipse.pde.internal.core.PDECore; |
| import org.eclipse.pde.internal.core.ischema.ISchema; |
| import org.eclipse.pde.internal.core.ischema.ISchemaElement; |
| import org.eclipse.pde.internal.core.schema.*; |
| import org.eclipse.pde.internal.core.text.plugin.PluginExtensionNode; |
| import org.eclipse.pde.internal.core.text.plugin.PluginExtensionPointNode; |
| import org.eclipse.pde.internal.core.util.*; |
| import org.eclipse.pde.internal.ui.*; |
| import org.eclipse.pde.internal.ui.dialogs.PluginSelectionDialog; |
| import org.eclipse.pde.internal.ui.editor.contentassist.XMLInsertionComputer; |
| import org.eclipse.pde.internal.ui.elements.ElementLabelProvider; |
| import org.eclipse.pde.internal.ui.search.ShowDescriptionAction; |
| import org.eclipse.pde.internal.ui.util.SharedLabelProvider; |
| import org.eclipse.pde.internal.ui.util.TextUtil; |
| import org.eclipse.pde.internal.ui.wizards.*; |
| import org.eclipse.pde.internal.ui.wizards.templates.NewExtensionTemplateWizard; |
| import org.eclipse.pde.ui.IBasePluginWizard; |
| import org.eclipse.pde.ui.IExtensionWizard; |
| import org.eclipse.pde.ui.templates.ITemplateSection; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.SWTError; |
| import org.eclipse.swt.browser.Browser; |
| import org.eclipse.swt.custom.SashForm; |
| import org.eclipse.swt.events.KeyEvent; |
| import org.eclipse.swt.events.KeyListener; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.*; |
| import org.eclipse.ui.PlatformUI; |
| |
| public class PointSelectionPage extends BaseWizardSelectionPage { |
| private TableViewer fPointListViewer; |
| private TableViewer fTemplateViewer; |
| |
| private IPluginModelBase fModel; |
| private Button fFilterCheck; |
| private IPluginExtensionPoint fCurrentPoint; |
| private HashSet<?> fAvailableImports; |
| private IProject fProject; |
| private Label fTemplateLabel; |
| private ExtensionTreeSelectionPage fWizardsPage; |
| |
| private IPluginExtension fNewExtension; |
| private WizardCollectionElement fTemplateCollection; |
| private WizardCollectionElement fWizardCollection; |
| private NewExtensionWizard fWizard; |
| private Text fFilterText; |
| private WildcardFilter fWildCardFilter; |
| private Text fPointDescription; |
| private Link fDescLink; |
| private Browser fPointDescBrowser; |
| |
| class PointFilter extends ViewerFilter { |
| @Override |
| public boolean select(Viewer viewer, Object parentElement, Object element) { |
| if (!fFilterCheck.getSelection()) |
| return true; |
| |
| IPluginExtensionPoint point = (IPluginExtensionPoint) element; |
| if (point instanceof PluginExtensionPointNode) |
| return true; |
| |
| return fAvailableImports.contains(point.getPluginBase().getId()); |
| } |
| } |
| |
| class WildcardFilter extends ViewerFilter { |
| private String wMatch = "*"; //$NON-NLS-1$ |
| |
| protected void setMatchText(String match) { |
| if (match.indexOf("*") != 0 & match.indexOf("?") != 0 & match.indexOf(".") != 0) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| match = "*" + match; //$NON-NLS-1$ |
| } |
| wMatch = match + "*"; //$NON-NLS-1$ |
| } |
| |
| @Override |
| public boolean select(Viewer viewer, Object parentElement, Object element) { |
| String text = ((PointLabelProvider) fPointListViewer.getLabelProvider()).getColumnText(element, 0); |
| Pattern pattern = null; |
| try { |
| pattern = PatternConstructor.createPattern(wMatch, false); |
| } catch (PatternSyntaxException e) { |
| return false; |
| } |
| return pattern != null && pattern.matcher(text.subSequence(0, text.length())).matches(); |
| } |
| } |
| |
| class TemplateContentProvider implements IStructuredContentProvider { |
| @Override |
| public Object[] getElements(Object inputElement) { |
| if (inputElement instanceof IPluginExtensionPoint) { |
| IPluginExtensionPoint point = (IPluginExtensionPoint) inputElement; |
| String pointID = IdUtil.getFullId(point, fModel); |
| ArrayList<Object> result = new ArrayList<>(); |
| if (fTemplateCollection.getWizards() != null) { |
| Object[] wizards = fTemplateCollection.getWizards().getChildren(); |
| for (Object wizardObject : wizards) { |
| String wizardContributorId = ((WizardElement) wizardObject).getContributingId(); |
| if (wizardContributorId == null || pointID == null) |
| continue; |
| if (wizardObject instanceof WizardElement && wizardContributorId.equals(pointID)) |
| result.add(wizardObject); |
| } |
| return result.toArray(); |
| } |
| } |
| return new Object[0]; |
| } |
| } |
| |
| class PointContentProvider implements IStructuredContentProvider { |
| @Override |
| public Object[] getElements(Object parent) { |
| ArrayList<IPluginExtensionPoint> extPoints = new ArrayList<>(); |
| IPluginModelBase[] plugins = PluginRegistry.getActiveModels(); |
| for (IPluginModelBase plugin : plugins) { |
| IPluginExtensionPoint[] points = plugin.getPluginBase().getExtensionPoints(); |
| String id = plugin.getPluginBase().getId(); |
| if (id.equals(fModel.getPluginBase().getId())) |
| continue; |
| for (IPluginExtensionPoint point : points) |
| extPoints.add(point); |
| } |
| |
| IPluginExtensionPoint[] points = fModel.getPluginBase().getExtensionPoints(); |
| for (IPluginExtensionPoint point : points) |
| extPoints.add(point); |
| |
| return extPoints.toArray(); |
| } |
| } |
| |
| class PointLabelProvider extends LabelProvider implements ITableLabelProvider { |
| @Override |
| public String getText(Object obj) { |
| return getColumnText(obj, 0); |
| } |
| |
| @Override |
| public String getColumnText(Object obj, int index) { |
| IPluginExtensionPoint extPoint = (IPluginExtensionPoint) obj; |
| PDELabelProvider provider = PDEPlugin.getDefault().getLabelProvider(); |
| if (provider.isFullNameModeEnabled()) |
| return provider.getText(extPoint); |
| |
| return IdUtil.getFullId(extPoint, fModel); |
| } |
| |
| @Override |
| public Image getImage(Object obj) { |
| return getColumnImage(obj, 0); |
| } |
| |
| @Override |
| public Image getColumnImage(Object obj, int index) { |
| IPluginExtensionPoint exp = (IPluginExtensionPoint) obj; |
| |
| if (((TemplateContentProvider) fTemplateViewer.getContentProvider()).getElements(exp).length > 0) { |
| return PDEPlugin.getDefault().getLabelProvider().get(PDEPluginImages.DESC_NEWEXP_WIZ_TOOL, 0); |
| } |
| |
| // If the schema is deprecated add a warning flag |
| int flags = 0; |
| SchemaRegistry reg = PDECore.getDefault().getSchemaRegistry(); |
| ISchema schema = reg.getSchema(exp.getFullId()); |
| if (schema != null && schema.isDeperecated()) { |
| PDEPlugin.getDefault().getLabelProvider(); |
| flags = SharedLabelProvider.F_WARNING; |
| } |
| |
| return PDEPlugin.getDefault().getLabelProvider().get(PDEPluginImages.DESC_EXT_POINT_OBJ, flags); |
| } |
| } |
| |
| public PointSelectionPage(IProject project, IPluginModelBase model, WizardCollectionElement element, WizardCollectionElement templates, NewExtensionWizard wizard) { |
| super("pointSelectionPage", PDEUIMessages.NewExtensionWizard_PointSelectionPage_title); //$NON-NLS-1$ |
| this.fModel = model; |
| this.fWizardCollection = element; |
| this.fTemplateCollection = templates; |
| this.fWizard = wizard; |
| this.fProject = project; |
| fWildCardFilter = new WildcardFilter(); |
| fAvailableImports = PluginSelectionDialog.getExistingImports(model, true); |
| setTitle(PDEUIMessages.NewExtensionWizard_PointSelectionPage_title); |
| setDescription(PDEUIMessages.NewExtensionWizard_PointSelectionPage_desc); |
| } |
| |
| @Override |
| public void createControl(Composite parent) { |
| // tab folder |
| final TabFolder tabFolder = new TabFolder(parent, SWT.FLAT); |
| TabItem firstTab = new TabItem(tabFolder, SWT.NULL); |
| firstTab.setText(PDEUIMessages.PointSelectionPage_tab1); |
| TabItem secondTab = new TabItem(tabFolder, SWT.NULL); |
| secondTab.setText(PDEUIMessages.PointSelectionPage_tab2); |
| secondTab.setControl(createWizardsPage(tabFolder)); |
| tabFolder.addSelectionListener(widgetSelectedAdapter(e -> updateTabSelection(tabFolder.getSelectionIndex()))); |
| // top level group |
| Composite outerContainer = new Composite(tabFolder, SWT.NONE); |
| firstTab.setControl(outerContainer); |
| GridLayout layout = new GridLayout(); |
| outerContainer.setLayout(layout); |
| GridData gd = new GridData(GridData.FILL_BOTH); |
| outerContainer.setLayoutData(gd); |
| |
| Composite pointContainer = new Composite(outerContainer, SWT.NONE); |
| layout = new GridLayout(); |
| layout.marginHeight = layout.marginWidth = 0; |
| pointContainer.setLayout(layout); |
| gd = new GridData(GridData.FILL_BOTH); |
| pointContainer.setLayoutData(gd); |
| |
| Composite labelContainer = new Composite(pointContainer, SWT.NONE); |
| layout = new GridLayout(2, false); |
| layout.marginHeight = layout.marginWidth = 0; |
| labelContainer.setLayout(layout); |
| labelContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Label filterLabel = new Label(labelContainer, SWT.NONE); |
| filterLabel.setText(PDEUIMessages.NewExtensionWizard_PointSelectionPage_availExtPoints_label); |
| gd = new GridData(); |
| gd.verticalAlignment = GridData.CENTER; |
| filterLabel.setLayoutData(gd); |
| fFilterText = new Text(labelContainer, SWT.BORDER); |
| fFilterText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| fFilterText.addModifyListener(e -> { |
| fWildCardFilter.setMatchText(fFilterText.getText()); |
| fPointListViewer.refresh(); |
| }); |
| fFilterText.addKeyListener(new KeyListener() { |
| @Override |
| public void keyPressed(KeyEvent e) { |
| if (e.keyCode == SWT.ARROW_DOWN) |
| fPointListViewer.getControl().setFocus(); |
| } |
| |
| @Override |
| public void keyReleased(KeyEvent e) { |
| } |
| }); |
| |
| fFilterCheck = new Button(outerContainer, SWT.CHECK); |
| fFilterCheck.setText(PDEUIMessages.NewExtensionWizard_PointSelectionPage_filterCheck); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| fFilterCheck.setLayoutData(gd); |
| fFilterCheck.setSelection(true); |
| fFilterCheck.addSelectionListener(widgetSelectedAdapter(e -> fPointListViewer.refresh())); |
| |
| fPointListViewer = new TableViewer(pointContainer, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); |
| fPointListViewer.setContentProvider(new PointContentProvider()); |
| fPointListViewer.setLabelProvider(new PointLabelProvider()); |
| fPointListViewer.addSelectionChangedListener(this); |
| fPointListViewer.addDoubleClickListener(event -> { |
| if (canFinish()) { |
| fWizard.performFinish(); |
| fWizard.getShell().close(); |
| fWizard.dispose(); |
| fWizard.setContainer(null); |
| } |
| }); |
| fPointListViewer.addFilter(fWildCardFilter); |
| fPointListViewer.setComparator(ListUtil.NAME_COMPARATOR); |
| gd = new GridData(GridData.FILL_BOTH); |
| gd.heightHint = 150; |
| fPointListViewer.getTable().setLayoutData(gd); |
| |
| Composite templateComposite = new Composite(outerContainer, SWT.NONE); |
| layout = new GridLayout(); |
| layout.marginHeight = 4; |
| layout.marginWidth = 0; |
| templateComposite.setLayout(layout); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| templateComposite.setLayoutData(gd); |
| |
| fDescLink = new Link(templateComposite, SWT.NONE); |
| fDescLink.setText(NLS.bind(PDEUIMessages.PointSelectionPage_extPointDesc, "")); //$NON-NLS-1$ |
| fDescLink.addSelectionListener(widgetSelectedAdapter(e -> { |
| if (fCurrentPoint != null) |
| new ShowDescriptionAction(fCurrentPoint, true).run(); |
| })); |
| fDescLink.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| Control c = null; |
| Composite comp = new Composite(templateComposite, SWT.BORDER); |
| layout = new GridLayout(); |
| layout.marginHeight = layout.marginWidth = 0; |
| comp.setLayout(layout); |
| comp.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| try { |
| c = fPointDescBrowser = new Browser(comp, SWT.NONE); |
| } catch (SWTError e) { |
| } |
| if (c == null) |
| c = fPointDescription = new Text(comp, SWT.WRAP | SWT.MULTI | SWT.V_SCROLL | SWT.READ_ONLY); |
| |
| setPointDescriptionText(PDEUIMessages.NewExtensionWizard_PointSelectionPage_extPointDescription); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| gd.heightHint = 80; |
| c.setLayoutData(gd); |
| |
| fTemplateLabel = new Label(templateComposite, SWT.NONE | SWT.WRAP); |
| fTemplateLabel.setText(PDEUIMessages.NewExtensionWizard_PointSelectionPage_contributedTemplates_title); |
| gd = new GridData(GridData.FILL_HORIZONTAL); |
| fTemplateLabel.setLayoutData(gd); |
| |
| SashForm templateSashForm = new SashForm(templateComposite, SWT.HORIZONTAL); |
| templateSashForm.setLayout(new GridLayout()); |
| gd = new GridData(GridData.FILL_BOTH); |
| gd.heightHint = 80; |
| templateSashForm.setLayoutData(gd); |
| |
| Composite wizardComposite = new Composite(templateSashForm, SWT.NONE); |
| layout = new GridLayout(); |
| layout.marginHeight = 0; |
| layout.marginWidth = 0; |
| wizardComposite.setLayout(layout); |
| gd = new GridData(GridData.FILL_BOTH | GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); |
| wizardComposite.setLayoutData(gd); |
| fTemplateViewer = new TableViewer(wizardComposite, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); |
| fTemplateViewer.setContentProvider(new TemplateContentProvider()); |
| fTemplateViewer.setLabelProvider(ElementLabelProvider.INSTANCE); |
| fTemplateViewer.setComparator(ListUtil.NAME_COMPARATOR); |
| fTemplateViewer.addSelectionChangedListener(this); |
| gd = new GridData(GridData.FILL_BOTH); |
| |
| fTemplateViewer.getTable().setLayoutData(gd); |
| TableItem[] selection = fPointListViewer.getTable().getSelection(); |
| if (selection != null && selection.length > 0) |
| fTemplateViewer.setInput(selection[0]); |
| fTemplateViewer.addDoubleClickListener(event -> { |
| if (canFlipToNextPage()) { |
| advanceToNextPage(); |
| } |
| }); |
| |
| Composite descriptionComposite = new Composite(templateSashForm, SWT.NONE); |
| layout = new GridLayout(); |
| layout.marginHeight = 0; |
| layout.marginWidth = 0; |
| descriptionComposite.setLayout(layout); |
| gd = new GridData(GridData.FILL_BOTH | GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); |
| descriptionComposite.setLayoutData(gd); |
| createDescriptionIn(descriptionComposite); |
| |
| initialize(); |
| setControl(tabFolder); |
| Dialog.applyDialogFont(outerContainer); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(outerContainer.getParent(), IHelpContextIds.ADD_EXTENSIONS_SCHEMA_BASED); |
| } |
| |
| private Control createWizardsPage(Composite parent) { |
| fWizardsPage = new ExtensionTreeSelectionPage(fWizardCollection, null, PDEUIMessages.PointSelectionPage_categories); |
| fWizardsPage.createControl(parent); |
| fWizardsPage.setWizard(fWizard); |
| fWizardsPage.getSelectionProvider().addSelectionChangedListener(this); |
| fWizardsPage.init(fProject, fModel.getPluginBase()); |
| return fWizardsPage.getControl(); |
| } |
| |
| public void advanceToNextPage() { |
| getContainer().showPage(getNextPage()); |
| } |
| |
| @Override |
| public boolean canFlipToNextPage() { |
| return getNextPage() != null; |
| } |
| |
| public boolean canFinish() { |
| if (fTemplateViewer != null) { |
| IStructuredSelection selection = fTemplateViewer.getStructuredSelection(); |
| if (!selection.isEmpty()) |
| return false; |
| } |
| if (fPointListViewer != null) { |
| IStructuredSelection selection = fPointListViewer.getStructuredSelection(); |
| if (selection.isEmpty() == false) |
| return true; |
| } |
| return false; |
| } |
| |
| @Override |
| public void dispose() { |
| fWizardsPage.dispose(); |
| super.dispose(); |
| } |
| |
| public boolean finish() { |
| String point = IdUtil.getFullId(fCurrentPoint, fModel); |
| |
| try { |
| IPluginExtension extension = fModel.getFactory().createExtension(); |
| // Set the point attribute |
| // The point value overrides an auto-generated value |
| extension.setPoint(point); |
| fModel.getPluginBase().add(extension); |
| |
| // Recursively auto-insert required child elements and attributes |
| // respecting multiplicity |
| ISchemaElement schemaElement = null; |
| // Get the extension's schema |
| Object object = extension.getSchema(); |
| if ((object != null) && (object instanceof Schema)) { |
| Schema schema = (Schema) object; |
| if (extension instanceof PluginExtensionNode) { |
| // Get the extension's XML element name |
| String elementName = ((PluginExtensionNode) extension).getXMLTagName(); |
| // Find the extension's corresponding schema element |
| schemaElement = schema.findElement(elementName); |
| } |
| // If there is an associated schema, do the auto-insert |
| if (schemaElement != null) { |
| XMLInsertionComputer.computeInsertion(schemaElement, extension); |
| } |
| } |
| |
| String pluginID = fCurrentPoint.getPluginBase().getId(); |
| if (!(fCurrentPoint instanceof PluginExtensionPointNode) && !fAvailableImports.contains(pluginID) && !(fCurrentPoint.getPluginBase() instanceof IFragment)) { |
| if (MessageDialog.openQuestion(getShell(), PDEUIMessages.NewExtensionWizard_PointSelectionPage_dependencyTitle, NLS.bind(PDEUIMessages.NewExtensionWizard_PointSelectionPage_dependencyMessage, new String[] {pluginID, fCurrentPoint.getId()}))) { |
| IPluginImport importNode = fModel.getPluginFactory().createImport(); |
| importNode.setId(pluginID); |
| fModel.getPluginBase().add(importNode); |
| } |
| } |
| } catch (CoreException e) { |
| PDEPlugin.logException(e); |
| } |
| return true; |
| } |
| |
| public IPluginExtension getNewExtension() { |
| return fNewExtension; |
| } |
| |
| protected void initialize() { |
| fPointListViewer.addFilter(new PointFilter()); |
| fPointListViewer.setInput(PDECore.getDefault().getModelManager()); |
| fPointListViewer.getTable().setFocus(); |
| } |
| |
| @Override |
| public void selectionChanged(SelectionChangedEvent event) { |
| ISelection selection = event.getSelection(); |
| if (selection instanceof IStructuredSelection) { |
| IStructuredSelection ssel = (IStructuredSelection) selection; |
| if (!ssel.isEmpty()) { |
| Object element = ssel.getFirstElement(); |
| if (element instanceof WizardElement) |
| handleTemplateSelection((WizardElement) element); |
| else if (element instanceof IPluginExtensionPoint) |
| handlePointSelection((IPluginExtensionPoint) element); |
| } else { |
| setDescription(""); //$NON-NLS-1$ |
| setDescriptionText(""); //$NON-NLS-1$ |
| fTemplateLabel.setText(PDEUIMessages.NewExtensionWizard_PointSelectionPage_contributedTemplates_title); |
| setPointDescriptionText(PDEUIMessages.PointSelectionPage_noDescAvailable); |
| fDescLink.setText(NLS.bind(PDEUIMessages.PointSelectionPage_extPointDesc, "")); //$NON-NLS-1$ |
| setSelectedNode(null); |
| setPageComplete(false); |
| } |
| getContainer().updateButtons(); |
| } |
| } |
| |
| private void handleTemplateSelection(WizardElement element) { |
| setSelectedNode(createWizardNode(element)); |
| setDescriptionText(element.getDescription()); |
| setDescription(NLS.bind(PDEUIMessages.NewExtensionWizard_PointSelectionPage_templateDescription, element.getLabel())); |
| setPageComplete(false); |
| } |
| |
| private void handlePointSelection(IPluginExtensionPoint element) { |
| fCurrentPoint = element; |
| fTemplateViewer.setInput(fCurrentPoint); |
| fTemplateViewer.setSelection(StructuredSelection.EMPTY); |
| String fullPointID = IdUtil.getFullId(fCurrentPoint, fModel); |
| |
| String description = XMLComponentRegistry.Instance().getDescription(fullPointID, XMLComponentRegistry.F_SCHEMA_COMPONENT); |
| String name = XMLComponentRegistry.Instance().getName(fullPointID, XMLComponentRegistry.F_SCHEMA_COMPONENT); |
| URL url = null; |
| if ((description == null) || (name == null)) { |
| url = SchemaRegistry.getSchemaURL(fCurrentPoint, fModel); |
| } |
| if (url != null) { |
| SchemaAnnotationHandler handler = new SchemaAnnotationHandler(); |
| SchemaUtil.parseURL(url, handler); |
| description = handler.getDescription(); |
| name = handler.getName(); |
| } |
| if (description == null) { |
| setPointDescriptionText(PDEUIMessages.PointSelectionPage_noDescAvailable); |
| } else { |
| setPointDescriptionText(description); |
| } |
| if (name == null) { |
| name = fullPointID; |
| } |
| // Check if the extension point is deprecated and display a warning |
| SchemaRegistry reg = PDECore.getDefault().getSchemaRegistry(); |
| ISchema schema = reg.getSchema(fCurrentPoint.getFullId()); |
| if (schema != null && schema.isDeperecated()) { |
| setMessage(NLS.bind(PDEUIMessages.NewExtensionWizard_PointSelectionPage_pluginDescription_deprecated, name), IMessageProvider.WARNING); |
| } else { |
| setMessage(null); |
| setDescription(NLS.bind(PDEUIMessages.NewExtensionWizard_PointSelectionPage_pluginDescription, name)); |
| } |
| setDescriptionText(""); //$NON-NLS-1$ |
| fTemplateLabel.setText(NLS.bind(PDEUIMessages.NewExtensionWizard_PointSelectionPage_contributedTemplates_label, name.toLowerCase(Locale.ENGLISH))); |
| fDescLink.setText(NLS.bind(PDEUIMessages.PointSelectionPage_extPointDesc, name)); |
| setSelectedNode(null); |
| setPageComplete(true); |
| |
| XMLComponentRegistry.Instance().putDescription(fullPointID, description, XMLComponentRegistry.F_SCHEMA_COMPONENT); |
| XMLComponentRegistry.Instance().putName(fullPointID, name, XMLComponentRegistry.F_SCHEMA_COMPONENT); |
| } |
| |
| private void updateTabSelection(int index) { |
| if (index == 0) { |
| // extension point page |
| IStructuredSelection selection = fTemplateViewer.getStructuredSelection(); |
| if (selection.isEmpty() == false) |
| selectionChanged(new SelectionChangedEvent(fTemplateViewer, selection)); |
| else |
| selectionChanged( |
| new SelectionChangedEvent(fPointListViewer, fPointListViewer.getStructuredSelection())); |
| fFilterText.setFocus(); |
| } else { |
| // wizard page |
| ISelectionProvider provider = fWizardsPage.getSelectionProvider(); |
| selectionChanged(new SelectionChangedEvent(provider, provider.getSelection())); |
| } |
| } |
| |
| @Override |
| protected IWizardNode createWizardNode(WizardElement element) { |
| return new WizardNode(this, element) { |
| @Override |
| public IBasePluginWizard createWizard() throws CoreException { |
| IExtensionWizard wizard = createWizard(wizardElement); |
| if (wizard == null) |
| throw new CoreException(new Status(IStatus.ERROR, wizardElement.getConfigurationElement().getNamespaceIdentifier(), PDEUIMessages.PointSelectionPage_cannotFindTemplate)); |
| wizard.init(fProject, fModel); |
| return wizard; |
| } |
| |
| protected IExtensionWizard createWizard(WizardElement element) throws CoreException { |
| if (element.isTemplate()) { |
| IConfigurationElement template = element.getTemplateElement(); |
| if (template == null) |
| return null; |
| ITemplateSection section = (ITemplateSection) template.createExecutableExtension("class"); //$NON-NLS-1$ |
| return new NewExtensionTemplateWizard(section); |
| } |
| return (IExtensionWizard) element.createExecutableExtension(); |
| } |
| }; |
| } |
| |
| public void checkModel() { |
| IWizardNode node = getSelectedNode(); |
| if (node == null) |
| return; |
| IWizard wizard = node.getWizard(); |
| if (wizard instanceof NewExtensionTemplateWizard) { |
| if (((NewExtensionTemplateWizard) wizard).updatedDependencies()) { |
| if (MessageDialog.openQuestion(getShell(), PDEUIMessages.PointSelectionPage_newDepFound, PDEUIMessages.PointSelectionPage_newDepMessage)) { |
| fWizard.getEditor().doSave(new NullProgressMonitor()); |
| } |
| } |
| } |
| } |
| |
| @Override |
| public void setVisible(boolean visible) { |
| if (visible) |
| fFilterText.setFocus(); |
| super.setVisible(visible); |
| } |
| |
| private void setPointDescriptionText(String text) { |
| if (fPointDescBrowser != null) { |
| StringBuffer desc = new StringBuffer(); |
| HTMLPrinter.insertPageProlog(desc, 0, TextUtil.getJavaDocStyleSheerURL()); |
| desc.append(text); |
| HTMLPrinter.addPageEpilog(desc); |
| fPointDescBrowser.setText(desc.toString()); |
| } else |
| fPointDescription.setText(PDEHTMLHelper.stripTags(text)); |
| } |
| } |