Bug 307148 - [UI] [API] Wrapper bug for j2ee assembly page
diff --git a/plugins/org.eclipse.jst.common.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.common.ui/META-INF/MANIFEST.MF
index bd61bd6..b862143 100644
--- a/plugins/org.eclipse.jst.common.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.common.ui/META-INF/MANIFEST.MF
@@ -12,7 +12,9 @@
org.eclipse.jdt.ui;bundle-version="[3.5.0,4.0.0)",
org.eclipse.wst.common.modulecore;bundle-version="[1.1.300,2.0.0)",
org.eclipse.wst.common.modulecore.ui;bundle-version="[1.0.0,2.0.0)",
- org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)"
+ org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
+ org.eclipse.jst.common.frameworks;bundle-version="1.1.400",
+ org.eclipse.wst.common.frameworks;bundle-version="1.2.0"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
Export-Package: org.eclipse.jst.common.ui.internal.assembly.wizard;x-internal:=true
diff --git a/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/Messages.java b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/Messages.java
index bc91218..aeb146e 100644
--- a/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/Messages.java
+++ b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/Messages.java
@@ -21,6 +21,16 @@
public static String Browse;
public static String VariableReferenceTitle;
public static String VariableReferenceDescription;
+ public static String AddManifestEntryTaskWizardTitle;
+ public static String AddManifestEntryTaskWizardDesc;
+ public static String ParentProjects;
+ public static String CustomEntryButton;
+ public static String Add;
+ public static String Remove;
+ public static String MoveUp;
+ public static String MoveDown;
+ public static String ManifestEntryColumn;
+ public static String ManifestEntrySourceColumn;
static {
// initialize resource bundle
diff --git a/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/assembly/wizard/AddManifestEntryTaskWizard.java b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/assembly/wizard/AddManifestEntryTaskWizard.java
new file mode 100644
index 0000000..22f2560
--- /dev/null
+++ b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/assembly/wizard/AddManifestEntryTaskWizard.java
@@ -0,0 +1,134 @@
+package org.eclipse.jst.common.ui.internal.assembly.wizard;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jst.common.internal.modulecore.util.JavaModuleComponentUtility;
+import org.eclipse.jst.common.ui.internal.Messages;
+import org.eclipse.jst.common.ui.internal.assembly.wizard.ManifestModuleDependencyControl.ManifestLabelProvider;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.impl.TaskModel;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+import org.eclipse.wst.common.componentcore.ui.internal.taskwizard.IWizardHandle;
+import org.eclipse.wst.common.componentcore.ui.internal.taskwizard.TaskWizard;
+import org.eclipse.wst.common.componentcore.ui.internal.taskwizard.WizardFragment;
+
+public class AddManifestEntryTaskWizard extends TaskWizard {
+ public static final String PARENT_PROJECT = "PARENT_PROJECT"; // data model key //$NON-NLS-1$
+ public static final String CHILD_PROJECT = "CHILD_PROJECT"; // data model key //$NON-NLS-1$
+ public static final String CURRENT_REFERENCES = "CURRENT_REFERENCES"; // data model key for return val //$NON-NLS-1$
+ public static final String RETURNED_REFERENCES = "RETURNED_REFERENCES"; // data model key for return val //$NON-NLS-1$
+ public AddManifestEntryTaskWizard() {
+ super(Messages.AddManifestEntryTaskWizardTitle, new ManifestRootFragment());
+ }
+
+ public static class ManifestRootFragment extends WizardFragment {
+ private TableViewer viewer;
+ private Button addCustom;
+ private Text customEntryText;
+ private IProject parentProject, childProject;
+ private IVirtualReference[] selected;
+ private ShowPossibleManifestEntryContentProvider contentProvider;
+ public boolean hasComposite() {
+ return true;
+ }
+
+ public Composite createComposite(Composite parent, IWizardHandle handle) {
+ parentProject = (IProject)getTaskModel().getObject(PARENT_PROJECT);
+ childProject = (IProject)getTaskModel().getObject(CHILD_PROJECT);
+ handle.setDescription(NLS.bind(Messages.AddManifestEntryTaskWizardDesc, parentProject.getName()));
+ Composite root = new Composite(parent, SWT.NONE);
+ root.setLayout(new FormLayout());
+ customEntryText = new Text(root, SWT.BORDER);
+ addCustom = new Button(root, SWT.PUSH);
+ customEntryText.setLayoutData(ManifestModuleDependencyControl.createFormData(null, 0, 100, -5, 0, 5, addCustom, -5));
+ addCustom.setText(Messages.CustomEntryButton);
+ addCustom.setLayoutData(ManifestModuleDependencyControl.createFormData(null, 0, 100, -5, null, 0, 100, -5));
+ addCustom.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ addCustomPressed();
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+
+ viewer = ManifestModuleDependencyControl.createManifestReferenceTableViewer(root, SWT.MULTI);
+ viewer.getTable().setLayoutData(ManifestModuleDependencyControl.createFormData(0, 5, addCustom, 0, 0, 5, 100, -5));
+ contentProvider = new ShowPossibleManifestEntryContentProvider(parentProject, childProject, getTaskModel());
+ viewer.setContentProvider(contentProvider);
+ viewer.setLabelProvider(new ManifestLabelProvider());
+ viewer.setInput(ResourcesPlugin.getWorkspace());
+ viewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ viewerSelectionChanged();
+ }
+ });
+ return root;
+ }
+
+ private void addCustomPressed() {
+ IVirtualReference ref = ManifestModuleDependencyControl.createDummyReference(
+ customEntryText.getText(), parentProject, ComponentCore.createComponent(parentProject));
+ contentProvider.addPossibleReference(ref);
+ customEntryText.setText(""); //$NON-NLS-1$
+ viewer.refresh();
+ }
+
+ private void viewerSelectionChanged() {
+ IStructuredSelection sel = (IStructuredSelection)viewer.getSelection();
+ Object[] obj = sel.toArray();
+ IVirtualReference[] ret = new IVirtualReference[obj.length];
+ for( int i = 0; i < ret.length; i++ ) {
+ ret[i] = (IVirtualReference)obj[i];
+ }
+ selected = ret;
+ }
+
+ // just return the selected refs
+ public void performFinish(IProgressMonitor monitor) throws CoreException {
+ getTaskModel().putObject(RETURNED_REFERENCES, selected);
+ }
+ }
+
+ public static class ShowPossibleManifestEntryContentProvider extends ArrayContentProvider {
+ private IProject parent, child;
+ private TaskModel model;
+ private IVirtualReference[] possible;
+ public ShowPossibleManifestEntryContentProvider(IProject parent, IProject child, TaskModel taskModel) {
+ this.parent = parent;
+ this.child = child;
+ this.model = taskModel;
+ }
+ public Object[] getElements(Object inputElement) {
+ if( possible == null ) {
+ IVirtualReference[] current = (IVirtualReference[])model.getObject(CURRENT_REFERENCES);
+ possible = JavaModuleComponentUtility.findPossibleManifestEntries(parent, child, current);
+ }
+ return possible;
+ }
+ public void addPossibleReference(IVirtualReference ref) {
+ ArrayList<IVirtualReference> newRefs = new ArrayList<IVirtualReference>();
+ newRefs.addAll(Arrays.asList(possible));
+ newRefs.add(ref);
+ possible = newRefs.toArray(new IVirtualReference[newRefs.size()]);
+ }
+
+ }
+}
diff --git a/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/assembly/wizard/ManifestModuleDependencyControl.java b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/assembly/wizard/ManifestModuleDependencyControl.java
new file mode 100644
index 0000000..2512084
--- /dev/null
+++ b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/assembly/wizard/ManifestModuleDependencyControl.java
@@ -0,0 +1,466 @@
+/******************************************************************************
+ * Copyright (c) 2009 Red Hat
+ * 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:
+ * Rob Stryker - initial implementation and ongoing maintenance
+ ******************************************************************************/
+package org.eclipse.jst.common.ui.internal.assembly.wizard;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.BaseLabelProvider;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jst.common.internal.modulecore.util.ArchiveManifest;
+import org.eclipse.jst.common.internal.modulecore.util.JavaModuleComponentUtility;
+import org.eclipse.jst.common.internal.modulecore.util.ManifestUtilities;
+import org.eclipse.jst.common.internal.modulecore.util.UpdateManifestDataModelProperties;
+import org.eclipse.jst.common.internal.modulecore.util.UpdateManifestDataModelProvider;
+import org.eclipse.jst.common.ui.internal.Messages;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.internal.resources.AbstractResourceListVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
+import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
+import org.eclipse.wst.common.componentcore.ui.ModuleCoreUIPlugin;
+import org.eclipse.wst.common.componentcore.ui.internal.propertypage.DependencyPageExtensionManager;
+import org.eclipse.wst.common.componentcore.ui.internal.propertypage.IVirtualComponentLabelProvider;
+import org.eclipse.wst.common.componentcore.ui.propertypage.IModuleDependenciesControl;
+import org.eclipse.wst.common.componentcore.ui.propertypage.ModuleAssemblyRootPage;
+import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+
+public class ManifestModuleDependencyControl implements
+ IModuleDependenciesControl {
+
+ protected IProject project;
+ protected IVirtualComponent rootComponent;
+ protected IProject parentProject;
+ protected ModuleAssemblyRootPage propPage;
+ protected Button addButton, removeButton, moveUpButton, moveDownButton;
+ protected Combo parentSelection;
+ protected TableViewer manifestEntryViewer;
+ private ArrayList<IVirtualReference> list = new ArrayList<IVirtualReference>();
+
+ public ManifestModuleDependencyControl(final IProject project,
+ final ModuleAssemblyRootPage page) {
+ this.project = project;
+ this.propPage = page;
+ rootComponent = ComponentCore.createComponent(project);
+ }
+
+ /*
+ * Convenience method to quickly create form datas,
+ * referencing either pixel counts (via autoboxing) or controls.
+ * If the object is null, no attachment will be created for that side
+ */
+ public static FormData createFormData(Object top, int topDif, Object bottom, int bottomDif,
+ Object left, int leftDif, Object right, int rightDif) {
+ FormData fd = new FormData();
+ if( top instanceof Control ) fd.top = new FormAttachment((Control)top, topDif);
+ else if( top != null ) fd.top = new FormAttachment(((Integer)top).intValue(), topDif);
+
+ if( bottom instanceof Control ) fd.bottom = new FormAttachment((Control)bottom, bottomDif);
+ else if( bottom != null ) fd.bottom = new FormAttachment(((Integer)bottom).intValue(), bottomDif);
+
+ if( left instanceof Control ) fd.left = new FormAttachment((Control)left, leftDif);
+ else if( left != null ) fd.left = new FormAttachment(((Integer)left).intValue(), leftDif);
+
+ if( right instanceof Control ) fd.right = new FormAttachment((Control)right, rightDif);
+ else if( right != null ) fd.right = new FormAttachment(((Integer)right).intValue(), rightDif);
+
+ return fd;
+ }
+
+ public Composite createContents(Composite parent) {
+ Composite root = new Composite(parent, SWT.NONE);
+ root.setLayout(new FormLayout());
+ Label l = new Label(root, SWT.NONE);
+ l.setText(Messages.ParentProjects);
+ l.setLayoutData(createFormData(0,10,null,0, 0, 5, null,0));
+ parentSelection = new Combo(root, SWT.READ_ONLY);
+ parentSelection.setLayoutData(createFormData(0,5,null,0,l,5,100,-5));
+ parentSelection.setItems(getPossibleParentProjects());
+ parentSelection.addModifyListener(new ModifyListener(){
+ public void modifyText(ModifyEvent e) {
+ refreshViewerFromNewParentProject();
+ }
+ });
+ manifestEntryViewer = createManifestReferenceTableViewer(root, SWT.SINGLE);
+
+ addButton = new Button(root, SWT.PUSH);
+ removeButton = new Button(root, SWT.PUSH);
+ moveUpButton = new Button(root, SWT.PUSH);
+ moveDownButton = new Button(root, SWT.PUSH);
+
+ addButton.setText(Messages.Add);
+ removeButton.setText(Messages.Remove);
+ moveUpButton.setText(Messages.MoveUp);
+ moveDownButton.setText(Messages.MoveDown);
+ removeButton.setEnabled(false);
+ moveUpButton.setEnabled(false);
+ moveDownButton.setEnabled(false);
+
+ addButton.setLayoutData(createFormData(parentSelection,5,null,0,manifestEntryViewer.getTable(),5,100,-5));
+ removeButton.setLayoutData(createFormData(addButton,5,null,0,manifestEntryViewer.getTable(),5,100,-5));
+ moveUpButton.setLayoutData(createFormData(removeButton,5,null,0,manifestEntryViewer.getTable(),5,100,-5));
+ moveDownButton.setLayoutData(createFormData(moveUpButton,5,null,0,null,0,100,-5));
+
+ addButton.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ addPressed();
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ removeButton.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ removePressed();
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ moveUpButton.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ moveUp();
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+ moveDownButton.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ moveDown();
+ }
+ public void widgetDefaultSelected(SelectionEvent e) {
+ }
+ });
+
+ manifestEntryViewer.getTable().setLayoutData(createFormData(
+ parentSelection, 5, 100, -5, 0, 5, moveDownButton, -5));
+ manifestEntryViewer.setLabelProvider(new ManifestLabelProvider());
+ manifestEntryViewer.setContentProvider(new ManifestContentProvider());
+ manifestEntryViewer.setInput(ResourcesPlugin.getWorkspace());
+ parentSelection.select(0);
+
+ manifestEntryViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ viewerSelectionChanged();
+ }
+ });
+ return root;
+ }
+
+ protected void viewerSelectionChanged() {
+ updateButtons();
+ }
+
+ protected void updateButtons() {
+ int index = manifestEntryViewer.getTable().getSelectionIndex();
+ int size = manifestEntryViewer.getTable().getItems().length;
+ removeButton.setEnabled(index != -1);
+ moveUpButton.setEnabled(index != -1 && index != 0);
+ moveDownButton.setEnabled(index != size-1);
+ }
+
+ protected void moveUp() {
+ int index = manifestEntryViewer.getTable().getSelectionIndex();
+ IVirtualReference ref = list.remove(index);
+ list.add(index-1,ref);
+ refreshViewer();
+ updateButtons();
+ }
+ protected void moveDown() {
+ int index = manifestEntryViewer.getTable().getSelectionIndex();
+ IVirtualReference ref = list.remove(index);
+ list.add(index+1,ref);
+ refreshViewer();
+ updateButtons();
+ }
+
+ protected void addPressed() {
+ AddManifestEntryTaskWizard wizard = new AddManifestEntryTaskWizard();
+ wizard.getTaskModel().putObject(AddManifestEntryTaskWizard.CHILD_PROJECT, project);
+ wizard.getTaskModel().putObject(AddManifestEntryTaskWizard.PARENT_PROJECT, parentProject);
+ wizard.getTaskModel().putObject(AddManifestEntryTaskWizard.CURRENT_REFERENCES, list.toArray(new IVirtualReference[list.size()]));
+ WizardDialog wd = new WizardDialog(addButton.getShell(), wizard);
+ if( wd.open() != Window.CANCEL) {
+ IVirtualReference[] ret = (IVirtualReference[])wizard.getTaskModel().getObject(AddManifestEntryTaskWizard.RETURNED_REFERENCES);
+ list.addAll(Arrays.asList(ret));
+ refreshViewer();
+ updateButtons();
+ }
+ }
+
+ protected void removePressed() {
+ IStructuredSelection sel = (IStructuredSelection)manifestEntryViewer.getSelection();
+ Iterator i = sel.iterator();
+ while(i.hasNext()) {
+ list.remove(i.next());
+ }
+ refreshViewer();
+ updateButtons();
+ }
+
+ public static class ManifestLabelProvider extends BaseLabelProvider implements ITableLabelProvider {
+ private IVirtualComponentLabelProvider[] delegates;
+ protected void getDelegates() {
+ if( delegates == null )
+ delegates = DependencyPageExtensionManager.loadDelegates();
+ }
+ public Image getColumnImage(Object element, int columnIndex) {
+ getDelegates();
+ if( columnIndex == 1 ) {
+ if( element instanceof IVirtualReference ) {
+ for( int i = 0; i < delegates.length; i++ )
+ if( delegates[i].canHandle(((IVirtualReference)element).getReferencedComponent()))
+ return delegates[i].getSourceImage(((IVirtualReference)element).getReferencedComponent());
+ }
+ }
+ return ModuleCoreUIPlugin.getInstance().getImage("jar_obj");
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ if( element instanceof IVirtualReference ) {
+ IVirtualReference ref = (IVirtualReference)element;
+ if( columnIndex == 0 )
+ return ref.getRuntimePath().append(ref.getArchiveName()).toString();
+ if( columnIndex == 1 )
+ return handleSourceText(ref.getReferencedComponent());
+ }
+ return null;
+ }
+
+ private String handleSourceText(IVirtualComponent component) {
+ if( delegates == null )
+ delegates = DependencyPageExtensionManager.loadDelegates();
+ for( int i = 0; i < delegates.length; i++ )
+ if( delegates[i].canHandle(component))
+ return delegates[i].getSourceText(component);
+
+ // default impl
+ if( component.isBinary() ) {
+ IPath p = (IPath)component.getAdapter(IPath.class);
+ return p == null ? null : p.toString();
+ }
+ return component.getProject().getName();
+ }
+ }
+
+
+ private class ManifestContentProvider implements IStructuredContentProvider {
+ public void dispose() {
+ }
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ public Object[] getElements(Object inputElement) {
+ return refsForCurrentProject == null ? new Object[]{} : refsForCurrentProject;
+ }
+ }
+
+ public static TableViewer createManifestReferenceTableViewer(Composite parent, int style) {
+ int flags = SWT.BORDER | style;
+
+ Table table = new Table(parent, flags);
+ TableViewer viewer = new TableViewer(table);
+
+ // set up table layout
+ TableLayout tableLayout = new org.eclipse.jface.viewers.TableLayout();
+ tableLayout.addColumnData(new ColumnWeightData(200, true));
+ tableLayout.addColumnData(new ColumnWeightData(200, true));
+ table.setLayout(tableLayout);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+
+ // table columns
+ TableColumn fileNameColumn = new TableColumn(table, SWT.NONE, 0);
+ fileNameColumn.setText(Messages.ManifestEntryColumn);
+ fileNameColumn.setResizable(true);
+
+ TableColumn projectColumn = new TableColumn(table, SWT.NONE, 1);
+ projectColumn.setText(Messages.ManifestEntrySourceColumn);
+ projectColumn.setResizable(true);
+ tableLayout.layout(table, true);
+ return viewer;
+ }
+
+ private IVirtualReference[] refsForCurrentProject;
+ protected void refreshViewerFromNewParentProject() {
+ String parentString = parentSelection.getText();
+ refsForCurrentProject = new IVirtualReference[]{};
+ if( parentString != null && !"".equals(parentString)) { //$NON-NLS-1$
+ parentProject = ResourcesPlugin.getWorkspace().getRoot().getProject(parentString);
+ IVirtualReference[] current = JavaModuleComponentUtility.findCurrentManifestEntries(parentProject, project);
+ refsForCurrentProject = addMissingDummyEntries(current);
+ for( int i = 0; i < refsForCurrentProject.length; i++ ) {
+ list.add(refsForCurrentProject[i]);
+ }
+ }
+ manifestEntryViewer.refresh();
+ }
+
+ protected void refreshViewer() {
+ refsForCurrentProject = list.toArray(new IVirtualReference[list.size()]);
+ manifestEntryViewer.refresh();
+ }
+
+ protected IVirtualReference[] addMissingDummyEntries(IVirtualReference[] current) {
+ IFile manifestFile = getManifestIFile(rootComponent);
+ if( manifestFile != null ) {
+ ArrayList<IVirtualReference> refs = new ArrayList<IVirtualReference>();
+ refs.addAll(Arrays.asList(current));
+ ArchiveManifest manifest = ManifestUtilities.getManifest(manifestFile);
+ String[] entries = manifest.getClassPathTokenized();
+ String[] unusedEntries = findUnusedEntries(current, entries);
+ for( int i = 0; i < unusedEntries.length; i++ ) {
+ refs.add(createDummyReference(unusedEntries[i]));
+ }
+ return refs.toArray(new IVirtualReference[refs.size()]);
+ }
+ return current;
+ }
+
+
+ public static class DummyVirtualComponent extends AbstractResourceListVirtualComponent {
+ private static final String DUMMY_FIRST_SEGMENT = "dummyVirtualComponent"; //$NON-NLS-1$
+ public DummyVirtualComponent(IProject p, IVirtualComponent referencingComponent) {
+ super(p, referencingComponent);
+ }
+
+ protected String getFirstIdSegment() {
+ return DUMMY_FIRST_SEGMENT;
+ }
+
+ protected IContainer[] getUnderlyingContainers() {
+ return new IContainer[]{};
+ }
+
+ protected IResource[] getLooseResources() {
+ return new IResource[]{};
+ }
+ }
+
+ private IVirtualReference createDummyReference(String path) {
+ return createDummyReference(path, parentProject, ComponentCore.createComponent(parentProject));
+ }
+
+ public static IVirtualReference createDummyReference(String path, IProject project, IVirtualComponent rootComponent) {
+ IVirtualComponent comp = new DummyVirtualComponent(project, rootComponent);
+ IVirtualReference ref = ComponentCore.createReference(rootComponent, comp);
+ IPath path2 = new Path(path);
+ IPath runtimePath = path2.segmentCount() > 1 ? path2.removeLastSegments(1) : new Path("/"); //$NON-NLS-1$
+ runtimePath = runtimePath.makeRelative();
+ ref.setRuntimePath(runtimePath);
+ ref.setArchiveName(path2.lastSegment());
+ return ref;
+ }
+
+ private String[] findUnusedEntries(IVirtualReference[] current, String[] entries) {
+ ArrayList<String> list = new ArrayList<String>();
+ list.addAll(Arrays.asList(entries));
+ for( int i = 0; i < current.length; i++ ) {
+ String currentEntry = current[i].getRuntimePath().append(current[i].getArchiveName()).toString();
+ list.remove(currentEntry);
+ }
+ return list.toArray(new String[list.size()]);
+ }
+
+ /**
+ * Clients who find this unacceptable should override
+ * @param root
+ * @return
+ */
+ public IFile getManifestIFile(IVirtualComponent root) {
+ IVirtualFolder rootFolder = root.getRootFolder();
+ IVirtualFile vf = rootFolder.getFile(new Path("META-INF/MANIFEST.MF"));
+ if( vf.exists() )
+ return vf.getUnderlyingFile();
+ return null;
+ }
+
+ protected String[] getPossibleParentProjects() {
+ IProject[] projects = JavaModuleComponentUtility.findParentProjects(project);
+ String[] strings = new String[projects.length];
+ for( int i = 0; i < projects.length; i++ ) {
+ strings[i] = projects[i].getName();
+ }
+ return strings;
+ }
+
+
+ public boolean performOk() {
+ IDataModel updateManifestDataModel = DataModelFactory.createDataModel(new UpdateManifestDataModelProvider());
+ updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.PROJECT_NAME, project.getName());
+ updateManifestDataModel.setBooleanProperty(UpdateManifestDataModelProperties.MERGE, false);
+ updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.MANIFEST_FILE, getManifestIFile(rootComponent));
+ ArrayList<String> asStrings = new ArrayList<String>();
+ Iterator<IVirtualReference> i = list.iterator();
+ IVirtualReference tmp;
+ while(i.hasNext()) {
+ tmp = i.next();
+ asStrings.add(tmp.getRuntimePath().append(tmp.getArchiveName()).toString());
+ }
+ updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.JAR_LIST, asStrings);
+ try {
+ updateManifestDataModel.getDefaultOperation().execute(new NullProgressMonitor(), null );
+ } catch (ExecutionException e) {
+ // TODO log J2EEUIPlugin.logError(e);
+ }
+
+ return true;
+ }
+
+ public void performDefaults() {
+ }
+
+ public boolean performCancel() {
+ return false;
+ }
+
+ public void setVisible(boolean visible) {
+ }
+
+ public void dispose() {
+ }
+
+}
diff --git a/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/messages.properties b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/messages.properties
index 181f067..9bddf57 100644
--- a/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/messages.properties
+++ b/plugins/org.eclipse.jst.common.ui/src/org/eclipse/jst/common/ui/internal/messages.properties
@@ -4,4 +4,14 @@
ExternalJarDescription=Here you can reference a filesystem Jar\nThis is not a suggested use-case, but is here for backwards compatability.
Browse=Browse...
VariableReferenceTitle=Add a Variable Reference
-VariableReferenceDescription=Here you can reference a variable which maps to a single jar.\nThis is not a suggested use-case, but is here for backwards compatability.
\ No newline at end of file
+VariableReferenceDescription=Here you can reference a variable which maps to a single jar.\nThis is not a suggested use-case, but is here for backwards compatability.
+AddManifestEntryTaskWizardTitle=Add Manifest Entry
+AddManifestEntryTaskWizardDesc=To add manifest entries that should be accessible at runtime,\nselect one or more desired entries and press "Finish"
+ParentProjects=Parent Projects:
+CustomEntryButton=Add Custom Entry
+Add=Add...
+Remove=Remove
+MoveUp=Move Up
+MoveDown=Move Down
+ManifestEntryColumn=Manifest Entry
+ManifestEntrySourceColumn=Source
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/plugin.xml b/plugins/org.eclipse.wst.common.modulecore.ui/plugin.xml
index 9713e02..a3664b1 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/plugin.xml
@@ -31,5 +31,11 @@
id="org.eclipse.wst.common.componentcore.ui.newProjectReference"
name="Project">
</referenceFragment>
+ <referenceFragment
+ class="org.eclipse.wst.common.componentcore.ui.internal.propertypage.FolderMappingWizardFragment"
+ icon="icons/folder.gif"
+ id="org.eclipse.wst.common.componentcore.ui.resourceMappingReference"
+ name="Folder Mapping">
+ </referenceFragment>
</extension>
</plugin>
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java
index 7ccc4f7..d6fce43 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/Messages.java
@@ -24,8 +24,8 @@
public static String AddFolder;
public static String AddFolderElipses;
public static String AddFolderMappings;
- public static String AddReference;
- public static String EditReference;
+ public static String AddEllipsis;
+ public static String EditEllipsis;
public static String RemoveSelected;
public static String JarTitle;
public static String JarDescription;
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/AddFolderDialog.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/AddFolderDialog.java
index 2c307b7..2c93a37 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/AddFolderDialog.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/AddFolderDialog.java
@@ -33,6 +33,7 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.common.componentcore.ui.Messages;
+@Deprecated
public class AddFolderDialog extends TitleAreaDialog {
private IProject project;
private TreeViewer viewer;
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/FolderMappingWizardFragment.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/FolderMappingWizardFragment.java
new file mode 100644
index 0000000..98b82da
--- /dev/null
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/internal/propertypage/FolderMappingWizardFragment.java
@@ -0,0 +1,155 @@
+/******************************************************************************
+ * Copyright (c) 2009 Red Hat
+ * 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:
+ * Rob Stryker - initial implementation and ongoing maintenance
+ ******************************************************************************/
+package org.eclipse.wst.common.componentcore.ui.internal.propertypage;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.common.componentcore.ui.Messages;
+import org.eclipse.wst.common.componentcore.ui.internal.taskwizard.IWizardHandle;
+import org.eclipse.wst.common.componentcore.ui.internal.taskwizard.WizardFragment;
+import org.eclipse.wst.common.componentcore.ui.propertypage.IReferenceWizardConstants;
+import org.eclipse.wst.common.componentcore.ui.propertypage.AddModuleDependenciesPropertiesPage.ComponentResourceProxy;
+
+public class FolderMappingWizardFragment extends WizardFragment {
+ private IProject project;
+ private TreeViewer viewer;
+ private IContainer selected = null;
+
+ public boolean hasComposite() {
+ return true;
+ }
+
+ public Composite createComposite(Composite parent, IWizardHandle handle) {
+ handle.setTitle(Messages.AddFolder);
+ handle.setDescription(Messages.AddFolderMappings);
+ project = (IProject)getTaskModel().getObject(IReferenceWizardConstants.PROJECT);
+ Composite c = new Composite(parent, SWT.NONE);
+ c.setLayout(new FillLayout());
+ this.viewer = new TreeViewer(c, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ viewer.setContentProvider(getContentProvider());
+ viewer.setLabelProvider(getLabelProvider());
+ viewer.addFilter(getFilter());
+ viewer.setInput(project);
+ viewer.addSelectionChangedListener(getListener());
+ return c;
+ }
+
+ protected ISelectionChangedListener getListener() {
+ return new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ IStructuredSelection sel = (IStructuredSelection)viewer.getSelection();
+ Object first = sel.getFirstElement();
+ if( first instanceof IContainer)
+ selected = (IContainer)first;
+ }
+ };
+ }
+
+ public IContainer getSelected() {
+ return selected;
+ }
+
+ protected ViewerFilter getFilter() {
+ return new ViewerFilter() {
+ public boolean select(Viewer viewer, Object parentElement,
+ Object element) {
+ return element instanceof IContainer;
+ }
+ };
+ }
+
+ protected ITreeContentProvider getContentProvider() {
+ return new ITreeContentProvider() {
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ public void dispose() {
+ }
+
+ public Object[] getElements(Object inputElement) {
+ try {
+ return project.members();
+ } catch( CoreException ce ) {
+ return new Object[]{};
+ }
+ }
+
+ public boolean hasChildren(Object element) {
+ if( element instanceof IContainer) {
+ try {
+ return ((IContainer)element).members().length > 0;
+ } catch( CoreException ce ) {
+ }
+ }
+ return false;
+ }
+
+ public Object getParent(Object element) {
+ if( element instanceof IResource)
+ return ((IResource)element).getParent();
+ return null;
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if( parentElement instanceof IContainer) {
+ try {
+ return ((IContainer)parentElement).members();
+ } catch( CoreException ce ) {
+ }
+ }
+ return new Object[]{};
+ }
+ };
+ }
+
+ protected LabelProvider getLabelProvider() {
+ return new LabelProvider() {
+ public Image getImage(Object element) {
+ return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
+ }
+ public String getText(Object element) {
+ if( element instanceof IResource)
+ return ((IResource)element).getName();
+ return element.toString();
+ }
+ };
+ }
+
+
+ public void performFinish(IProgressMonitor monitor) throws CoreException {
+ IContainer c = getSelected();
+ if( c != null ) {
+ IPath p = c.getProjectRelativePath();
+ ComponentResourceProxy proxy = new ComponentResourceProxy(p, new Path("/")); //$NON-NLS-1$
+ getTaskModel().putObject(IReferenceWizardConstants.FOLDER_MAPPING, proxy);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties
index 0e71c6f..bc5397e 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/messages.properties
@@ -1,5 +1,5 @@
ModuleAssemblyRootPageDescription=Create and change packaging structure for this project
-ModuleAssembly=Deployment Assembly
+ModuleAssembly=Deployment a&ssembly:
ErrorCheckingFacets=Error Checking Project Facets
ErrorNotVirtualComponent=The given project is not a virtual component project
DeployPathColumn=Deploy Path
@@ -7,10 +7,10 @@
InternalLibJarWarning=This library has been added to the project by using the project tree or the file system. If you want to move / remove it, use the same approach.
AddFolder=Add Folder
AddFolderElipses=Add Folder...
-AddFolderMappings=Add folder mappings
-AddReference=Add Reference...
-EditReference=Edit Reference...
-RemoveSelected=Remove selected
+AddFolderMappings=Add a folder mapping
+AddEllipsis=&Add...
+EditEllipsis=&Edit...
+RemoveSelected=&Remove
ExternalJarTitle=Add an External Jar Reference
ExternalJarDescription=Here you can reference a filesystem Jar\nThis is not a suggested use-case, but is here for backwards compatability.
JarTitle=Add a Jar Reference
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
index 8b6790d..8505db7 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/AddModuleDependenciesPropertiesPage.java
@@ -18,7 +18,6 @@
import java.util.Map;
import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.IWorkspaceRunnable;
@@ -73,11 +72,11 @@
import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
import org.eclipse.wst.common.componentcore.ui.Messages;
import org.eclipse.wst.common.componentcore.ui.ModuleCoreUIPlugin;
-import org.eclipse.wst.common.componentcore.ui.internal.propertypage.AddFolderDialog;
import org.eclipse.wst.common.componentcore.ui.internal.propertypage.ComponentDependencyContentProvider;
import org.eclipse.wst.common.componentcore.ui.internal.propertypage.DependencyPageExtensionManager;
-import org.eclipse.wst.common.componentcore.ui.internal.propertypage.NewReferenceWizard;
import org.eclipse.wst.common.componentcore.ui.internal.propertypage.DependencyPageExtensionManager.ReferenceExtension;
+import org.eclipse.wst.common.componentcore.ui.internal.propertypage.NewReferenceWizard;
+import org.eclipse.wst.common.componentcore.ui.internal.taskwizard.TaskWizard;
import org.eclipse.wst.common.componentcore.ui.internal.taskwizard.WizardFragment;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
@@ -181,10 +180,10 @@
Composite composite = new Composite(parent, SWT.NONE);
GridData gData = new GridData(GridData.FILL_BOTH);
composite.setLayoutData(gData);
- fillComposite(composite);
+ fillTableComposite(composite);
}
- public void fillComposite(Composite parent) {
+ public void fillTableComposite(Composite parent) {
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginHeight = 0;
@@ -202,26 +201,9 @@
}
protected void createPushButtons() {
- addMappingButton = createPushButton(getAddFolderLabel());
- addReferenceButton = createPushButton(getAddReferenceLabel());
- editReferenceButton = createPushButton(getEditReferenceLabel());
- removeButton = createPushButton(getRemoveSelectedLabel());
- }
-
- protected String getRemoveSelectedLabel() {
- return Messages.RemoveSelected;
- }
-
- protected String getEditReferenceLabel() {
- return Messages.EditReference;
- }
-
- protected String getAddReferenceLabel() {
- return Messages.AddReference;
- }
-
- protected String getAddFolderLabel() {
- return Messages.AddFolderElipses;
+ addReferenceButton = createPushButton(Messages.AddEllipsis);
+ editReferenceButton = createPushButton(Messages.EditEllipsis);
+ removeButton = createPushButton(Messages.RemoveSelected);
}
protected Button createPushButton(String label) {
@@ -460,9 +442,10 @@
}
public void handleEvent(Event event) {
- if( event.widget == addMappingButton)
- handleAddMappingButton();
- else if( event.widget == addReferenceButton)
+// if( event.widget == addMappingButton)
+// handleAddMappingButton();
+// else
+ if( event.widget == addReferenceButton)
handleAddReferenceButton();
else if( event.widget == editReferenceButton)
handleEditReferenceButton();
@@ -470,18 +453,18 @@
handleRemoveSelectedButton();
}
- protected void handleAddMappingButton() {
- AddFolderDialog afd = new AddFolderDialog(addMappingButton.getShell(), project);
- if( afd.open() == Window.OK) {
- IContainer c = afd.getSelected();
- if( c != null ) {
- IPath p = c.getProjectRelativePath();
- ComponentResourceProxy proxy = new ComponentResourceProxy(p, new Path("/")); //$NON-NLS-1$
- resourceMappings.add(proxy);
- refresh();
- }
- }
- }
+// protected void handleAddMappingButton() {
+// AddFolderDialog afd = new AddFolderDialog(addMappingButton.getShell(), project);
+// if( afd.open() == Window.OK) {
+// IContainer c = afd.getSelected();
+// if( c != null ) {
+// IPath p = c.getProjectRelativePath();
+// ComponentResourceProxy proxy = new ComponentResourceProxy(p, new Path("/")); //$NON-NLS-1$
+// resourceMappings.add(proxy);
+// refresh();
+// }
+// }
+// }
protected void handleAddReferenceButton() {
showReferenceWizard(false);
@@ -512,7 +495,7 @@
selected = (IVirtualComponent)o;
wizard.getTaskModel().putObject(IReferenceWizardConstants.COMPONENT, selected);
wizard.getTaskModel().putObject(IReferenceWizardConstants.COMPONENT_PATH, objectToRuntimePath.get(selected));
- }
+ }
}
WizardDialog wd = new WizardDialog(addReferenceButton.getShell(), wizard);
@@ -523,27 +506,42 @@
consumedReferences.remove(selected);
}
- Object c1 = wizard.getTaskModel().getObject(IReferenceWizardConstants.COMPONENT);
- Object p1 = wizard.getTaskModel().getObject(IReferenceWizardConstants.COMPONENT_PATH);
- DependencyType type = (DependencyType)wizard.getTaskModel().getObject(IReferenceWizardConstants.DEPENDENCY_TYPE);
- boolean consumed = type == null ? false : type.equals(DependencyType.CONSUMES_LITERAL);
-
- IVirtualComponent[] compArr = c1 instanceof IVirtualComponent ?
- new IVirtualComponent[] { (IVirtualComponent)c1 } :
- (IVirtualComponent[])c1;
- String[] pathArr = p1 instanceof String ?
- new String[] { (String)p1 } :
- (String[])p1;
- for( int i = 0; i < compArr.length; i++ ) {
- objectToRuntimePath.put(compArr[i],
- getRuntimePath(compArr[i], pathArr[i]));
- if( consumed )
- consumedReferences.add(compArr[i]);
- }
+ if( wizard.getTaskModel().getObject(IReferenceWizardConstants.FOLDER_MAPPING) != null )
+ handleAddFolderMapping(wizard);
+ else
+ handleAddNewReference(wizard);
refresh();
}
}
+ protected void handleAddFolderMapping(TaskWizard wizard) {
+ Object o = wizard.getTaskModel().getObject(IReferenceWizardConstants.FOLDER_MAPPING);
+ if( o != null && o instanceof ComponentResourceProxy ) {
+ ComponentResourceProxy proxy = (ComponentResourceProxy)o;
+ resourceMappings.add(proxy);
+ }
+ }
+
+ protected void handleAddNewReference(TaskWizard wizard) {
+ Object c1 = wizard.getTaskModel().getObject(IReferenceWizardConstants.COMPONENT);
+ Object p1 = wizard.getTaskModel().getObject(IReferenceWizardConstants.COMPONENT_PATH);
+ DependencyType type = (DependencyType)wizard.getTaskModel().getObject(IReferenceWizardConstants.DEPENDENCY_TYPE);
+ boolean consumed = type == null ? false : type.equals(DependencyType.CONSUMES_LITERAL);
+
+ IVirtualComponent[] compArr = c1 instanceof IVirtualComponent ?
+ new IVirtualComponent[] { (IVirtualComponent)c1 } :
+ (IVirtualComponent[])c1;
+ String[] pathArr = p1 instanceof String ?
+ new String[] { (String)p1 } :
+ (String[])p1;
+ for( int i = 0; i < compArr.length; i++ ) {
+ objectToRuntimePath.put(compArr[i],
+ getRuntimePath(compArr[i], pathArr[i]));
+ if( consumed )
+ consumedReferences.add(compArr[i]);
+ }
+ }
+
/**
* Subclasses are encouraged to override this method if
* they have some specific place (webinf/lib etc) where certain
@@ -564,11 +562,15 @@
protected void handleRemoveSelectedButton() {
ISelection sel = availableComponentsViewer.getSelection();
if( sel instanceof IStructuredSelection ) {
- Object o = ((IStructuredSelection)sel).getFirstElement();
- if( o instanceof IVirtualComponent)
- objectToRuntimePath.remove(o);
- else if( o instanceof ComponentResourceProxy)
- resourceMappings.remove(o);
+ IStructuredSelection sel2 = (IStructuredSelection)sel;
+ Object[] selectedStuff = sel2.toArray();
+ for( int i = 0; i < selectedStuff.length; i++) {
+ Object o = selectedStuff[i];
+ if( o instanceof IVirtualComponent)
+ objectToRuntimePath.remove(o);
+ else if( o instanceof ComponentResourceProxy)
+ resourceMappings.remove(o);
+ }
refresh();
}
}
@@ -642,7 +644,7 @@
protected void initialize() {
Map<String, Object> options = new HashMap<String, Object>();
- options.put(IVirtualComponent.IGNORE_DERIVED_REFERENCES, new Boolean(true));
+ options.put(IVirtualComponent.REQUESTED_REFERENCE_TYPE, IVirtualComponent.DISPLAYABLE_REFERENCES);
IVirtualReference[] refs = rootComponent.getReferences(options);
IVirtualComponent comp;
for( int i = 0; i < refs.length; i++ ) {
@@ -685,7 +687,7 @@
return new ComponentResource[]{};
}
- public class ComponentResourceProxy {
+ public static class ComponentResourceProxy {
public IPath source, runtimePath;
public ComponentResourceProxy(IPath source, IPath runtimePath) {
this.source = source;
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IReferenceWizardConstants.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IReferenceWizardConstants.java
index 8efa7a6..2d03fc8 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IReferenceWizardConstants.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/IReferenceWizardConstants.java
@@ -11,6 +11,11 @@
package org.eclipse.wst.common.componentcore.ui.propertypage;
public interface IReferenceWizardConstants {
+ /**
+ * The key representing that this wizard can return a folder mapping
+ * The value should be an instanceof ComponentResourceProxy
+ */
+ public static final String FOLDER_MAPPING = "folder.mapping"; //$NON-NLS-1$
public static final String COMPONENT = "dependency.component"; //$NON-NLS-1$
public static final String COMPONENT_PATH = "dependency.component.path"; //$NON-NLS-1$
public static final String PROJECT = "root.project"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java
index 22f2ebc..3518bcd 100644
--- a/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java
+++ b/plugins/org.eclipse.wst.common.modulecore.ui/src/org/eclipse/wst/common/componentcore/ui/propertypage/ModuleAssemblyRootPage.java
@@ -175,4 +175,9 @@
}
return getFacetErrorComposite(parent);
}
+
+ public void createControl(Composite parent){
+ noDefaultAndApplyButton();
+ super.createControl(parent);
+ }
}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
index bc7a7a8..8c64a80 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
@@ -406,7 +406,6 @@
public IVirtualReference[] getReferences() {
HashMap<String, Object> map = new HashMap<String, Object>();
- map.put(IVirtualComponent.IGNORE_DERIVED_REFERENCES, new Boolean(false));
return getReferences(map);
}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
index 82836f1..6150ada 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
@@ -359,4 +359,5 @@
uri = reference.getRuntimePath() + "/" + reference.getReferencedComponent().getProject().getName() + extension; //$NON-NLS-1$
}
return uri;
- }}
+ }
+}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
index 3bc2c18..ed87e24 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/resources/IVirtualComponent.java
@@ -38,17 +38,13 @@
public static final int BINARY = 0x1;
/**
- * An option key to ignore derived references.
- * The default is false
+ * The key for the property of which reference types we're requesting
*/
- public static final String IGNORE_DERIVED_REFERENCES = "IGNORE_DERIVED_REFERENCES";
-
- /**
- * An option key to display all references which are
- * displayable or editable in the UI
- */
+ public static final String REQUESTED_REFERENCE_TYPE = "REQUESTED_REFERENCE_TYPE";
+ public static final String HARD_REFERENCES = "HARD_REFERENCES";
+ public static final String NON_DERIVED_REFERENCES = "NON_DERIVED_REFERENCES";
public static final String DISPLAYABLE_REFERENCES = "DISPLAYABLE_REFERENCES";
-
+
/**
* The name of the component must be unique within its enclosing project.
*