Bug 572946 - [e4][Tooling] support new model-fragment header in the
wizard
Change-Id: I9f511568c1cf964036b16523fcd2db65e71151d4
Signed-off-by: Christoph Läubrich <laeubi@laeubi-soft.de>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.ui.tools/+/179492
Tested-by: Platform Bot <platform-bot@eclipse.org>
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java
index bc1b40b..d33ff60 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/Messages.java
@@ -22,6 +22,11 @@
*/
public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.e4.internal.tools.messages"; //$NON-NLS-1$
+ public static String ContributionMode;
+ public static String ContributionMode_Static;
+ public static String ContributionMode_Dynamic;
+ public static String ContributionMode_Static_Info;
+ public static String ContributionMode_Dynamic_Info;
public static String AbstractNewClassPage_Browse;
public static String AbstractNewClassPage_ChooseAPackage;
public static String AbstractNewClassPage_ChoosePackage;
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties
index 33c49ca..f39fdcb 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/messages.properties
@@ -78,3 +78,10 @@
NewToolControlClassWizard_CreateGUIMethod=Create GUI Method
NewToolControlClassWizard_CreateNewToolControl=Create a new tool control class
NewToolControlClassWizard_NewToolControl=New Tool Control
+ContributionMode=Contribution Mode
+ContributionMode_Static=Static
+ContributionMode_Static_Info=The model fragment will be registered in plugin.xml.\n\
+It will be applied only once in the life-time of the application
+ContributionMode_Dynamic=Dynamic (Eclipse 4.20 or later)
+ContributionMode_Dynamic_Info=The model fragment will be registered via a MANIFEST.MF header.\n\
+it will be refreshed whenever your bundle is updated.
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/BaseApplicationModelWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/BaseApplicationModelWizard.java
index 70bc88b..6b96776 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/BaseApplicationModelWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/BaseApplicationModelWizard.java
@@ -320,7 +320,7 @@
* Register the fragment.e4xmi with the org.eclipse.e4.workbench.model
* extension point, if there is not already a fragment registered.
*/
- private void registerWithExtensionPointIfRequired(IProject project, WorkspaceBundlePluginModel fModel, IFile file)
+ protected void registerWithExtensionPointIfRequired(IProject project, WorkspaceBundlePluginModel fModel, IFile file)
throws CoreException {
final String WORKBENCH_MODEL_EP_ID = "org.eclipse.e4.workbench.model"; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewContributionModelWizard.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewContributionModelWizard.java
index b995d2d..ec13d87 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewContributionModelWizard.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewContributionModelWizard.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010-2014 BestSolution.at and others.
+ * Copyright (c) 2010-2021 BestSolution.at and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -11,16 +11,58 @@
* Contributors:
* Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
* Marco Descher <marco@descher.at> - Bug 392907, Bug 434371
+ * Christoph Läubrich - Bug 572946 - [e4][Tooling] support new model-fragment header in the wizard
******************************************************************************/
package org.eclipse.e4.internal.tools.wizards.model;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.e4.internal.tools.Messages;
import org.eclipse.e4.ui.model.fragment.MFragmentFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.pde.internal.core.bundle.WorkspaceBundlePluginModel;
+import org.eclipse.pde.internal.core.ibundle.IBundle;
+import org.eclipse.swt.SWT;
+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.Label;
+@SuppressWarnings("restriction")
public class NewContributionModelWizard extends BaseApplicationModelWizard {
+ private static final String MODEL_FRAGMENT_HEADER = "Model-Fragment"; //$NON-NLS-1$
+
+ private enum ContributionMode {
+ STATIC(Messages.ContributionMode_Static, Messages.ContributionMode_Static_Info), DYNAMIC(
+ Messages.ContributionMode_Dynamic, Messages.ContributionMode_Dynamic_Info);
+
+ private String label;
+ private String description;
+
+ ContributionMode(String label, String description) {
+ this.label = label;
+ this.description = description;
+ }
+
+ @Override
+ public String toString() {
+ return label;
+ }
+
+ /**
+ * @return the description
+ */
+ String getDescription() {
+ return description;
+ }
+ }
+
@Override
public String getDefaultFileName() {
return "fragment.e4xmi"; //$NON-NLS-1$
@@ -33,11 +75,77 @@
@Override
protected NewModelFilePage createWizardPage(ISelection selection) {
- return new NewModelFilePage(selection, getDefaultFileName());
+ return new NewContributionModelFilePage(selection, getDefaultFileName());
}
@Override
protected void adjustDependencies(IFile file) {
super.adjustFragmentDependencies(file);
}
+
+ @Override
+ protected void registerWithExtensionPointIfRequired(IProject project, WorkspaceBundlePluginModel fModel, IFile file)
+ throws CoreException {
+ NewContributionModelFilePage page = (NewContributionModelFilePage) getPage(
+ NewContributionModelFilePage.PAGE_NAME);
+ if (page.mode == ContributionMode.DYNAMIC) {
+ IBundle bundle = fModel.getBundleModel().getBundle();
+ bundle.setHeader(MODEL_FRAGMENT_HEADER, file.getName());
+ fModel.save();
+ } else {
+ super.registerWithExtensionPointIfRequired(project, fModel, file);
+ }
+ }
+
+ private static final class NewContributionModelFilePage extends NewModelFilePage {
+
+ ContributionMode mode = ContributionMode.STATIC;
+
+ public NewContributionModelFilePage(ISelection selection, String defaultFilename) {
+ super(selection, defaultFilename);
+ }
+
+ @Override
+ protected void createAdditionalControls(Composite parent) {
+ Label label = new Label(parent, SWT.NULL);
+ label.setText(Messages.ContributionMode);
+ ContributionMode[] values = ContributionMode.values();
+ Button[] buttons = new Button[values.length];
+ Composite buttonParent = new Composite(parent, SWT.NULL);
+ buttonParent.setLayout(new GridLayout(values.length, false));
+ for (int i = 0; i < values.length; i++) {
+ ContributionMode mode = values[i];
+ Button button = buttons[i] = new Button(buttonParent, SWT.RADIO);
+ button.setSelection(this.mode == mode);
+ button.setData(mode);
+ button.setText(mode.toString());
+ }
+ new Label(parent, SWT.NULL);
+ new Label(parent, SWT.NULL);
+ Label modeDescriptionLabel = new Label(parent, SWT.NONE);
+ modeDescriptionLabel.setText(mode.getDescription());
+ GridData modeDescriptionLabelLayoutData = new GridData(GridData.FILL_BOTH);
+ modeDescriptionLabelLayoutData.horizontalSpan = 2;
+ modeDescriptionLabel.setLayoutData(modeDescriptionLabelLayoutData);
+ for (Button button : buttons) {
+ button.addSelectionListener(new SelectionListener() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ if (button.getSelection()) {
+ ContributionMode mode = (ContributionMode) button.getData();
+ NewContributionModelFilePage.this.mode = mode;
+ modeDescriptionLabel.setText(mode.getDescription());
+ }
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+
+ }
+ });
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewModelFilePage.java b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewModelFilePage.java
index 0b15133..8255196 100644
--- a/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewModelFilePage.java
+++ b/bundles/org.eclipse.e4.tools/src/org/eclipse/e4/internal/tools/wizards/model/NewModelFilePage.java
@@ -43,6 +43,8 @@
*/
public class NewModelFilePage extends WizardPage {
+ public static final String PAGE_NAME = "wizardPage"; //$NON-NLS-1$
+
private Text containerText;
private Text fileText;
@@ -56,7 +58,7 @@
*
*/
public NewModelFilePage(ISelection selection, String defaultFilename) {
- super("wizardPage"); //$NON-NLS-1$
+ super(PAGE_NAME);
setTitle(Messages.NewModelFilePage_NewApplicationModel);
setDescription(Messages.NewModelFilePage_TheWizardCreates);
this.selection = selection;