diff options
author | Milos Kleint | 2011-03-16 06:41:25 +0000 |
---|---|---|
committer | Milos Kleint | 2011-03-18 07:35:08 +0000 |
commit | 46d74526611a22dfc17099478c5843180c080a6d (patch) | |
tree | a190d05acd6b35496babdaea0684140ab613871c | |
parent | e54306e6d65590a4240615cea7f1764950cb46f2 (diff) | |
download | m2e-core-46d74526611a22dfc17099478c5843180c080a6d.tar.gz m2e-core-46d74526611a22dfc17099478c5843180c080a6d.tar.xz m2e-core-46d74526611a22dfc17099478c5843180c080a6d.zip |
the final step of removing emf pom model from the editor
10 files changed, 381 insertions, 501 deletions
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/EditDependencyDialog.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/EditDependencyDialog.java index 2f1fb208..8426f4ef 100644 --- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/EditDependencyDialog.java +++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/dialogs/EditDependencyDialog.java @@ -14,15 +14,16 @@ package org.eclipse.m2e.core.ui.internal.dialogs; import static org.eclipse.m2e.core.ui.internal.util.Util.nvl; import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.*; +import org.apache.maven.model.Dependency; import org.apache.maven.project.MavenProject; import org.eclipse.core.resources.IProject; import org.eclipse.jface.text.IDocument; import org.eclipse.m2e.core.ui.internal.Messages; +import org.eclipse.m2e.core.ui.internal.editing.PomEdits.Operation; import org.eclipse.m2e.core.ui.internal.editing.PomHelper; import org.eclipse.m2e.core.ui.internal.search.util.Packaging; import org.eclipse.m2e.core.ui.internal.util.M2EUIUtils; import org.eclipse.m2e.core.ui.internal.util.ProposalUtil; -import org.eclipse.m2e.model.edit.pom.Dependency; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -76,6 +77,8 @@ public class EditDependencyDialog extends AbstractMavenDialog { private final boolean dependencyManagement; + private Operation resultOperation; + /** * * @param parent @@ -195,32 +198,38 @@ public class EditDependencyDialog extends AbstractMavenDialog { return superComposite; } + + public Operation getEditOperation() { + return resultOperation; + } protected void computeResult() { - try { - performOnDOMDocument(new OperationTuple(document, new Operation() { + final String groupId = valueOrNull(groupIdText.getText()); + final String artifactId = valueOrNull(artifactIdText.getText()); + final String version = valueOrNull(versionText.getText()); + final String type = valueOrNull(typeCombo.getText()); + final String scope = valueOrNull(scopeCombo.getText()); + final String classifier = valueOrNull(classifierText.getText()); + final String system = valueOrNull(systemPathText.getText()); + final boolean optional = optionalButton.getSelection(); + resultOperation = new Operation() { public void process(Document document) { Element depsEl = dependencyManagement ? getChild(document.getDocumentElement(), DEPENDENCY_MANAGEMENT, DEPENDENCIES) : getChild(document.getDocumentElement(), DEPENDENCIES); - Element dep = PomHelper.addOrUpdateDependency(depsEl, valueOrNull(groupIdText.getText()), - valueOrNull(artifactIdText.getText()), valueOrNull(versionText.getText()), - valueOrNull(typeCombo.getText()), valueOrNull(scopeCombo.getText()), valueOrNull(classifierText.getText())); - String system = valueOrNull(systemPathText.getText()); + Element dep = PomHelper.addOrUpdateDependency(depsEl, groupId, + artifactId, version, + type, scope, classifier); if (system != null) { setText(getChild(dep, SYSTEM_PATH), system); } else { removeChild(dep, findChild(dep, SYSTEM_PATH)); } - boolean optional = optionalButton.getSelection(); if (optional) { setText(getChild(dep, OPTIONAL), Boolean.toString(optional)); } else { removeChild(dep, findChild(dep, OPTIONAL)); } } - })); - } catch (Exception e) { - LOG.error("error updating dependency", e); - } + }; } private String valueOrNull(String value) { diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java index f7ddab6e..bfbcbde2 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependenciesComposite.java @@ -21,14 +21,13 @@ import java.util.LinkedList; import java.util.List; import org.apache.maven.artifact.Artifact; +import org.apache.maven.model.Dependency; import org.apache.maven.project.MavenProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.operation.IRunnableWithProgress; @@ -59,10 +58,6 @@ import org.eclipse.m2e.editor.pom.MavenPomEditorPage; import org.eclipse.m2e.editor.pom.SearchControl; import org.eclipse.m2e.editor.pom.SearchMatcher; import org.eclipse.m2e.editor.pom.ValueProvider; -import org.eclipse.m2e.model.edit.pom.Dependency; -import org.eclipse.m2e.model.edit.pom.DependencyManagement; -import org.eclipse.m2e.model.edit.pom.Model; -import org.eclipse.m2e.model.edit.pom.PomPackage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.ModifyEvent; @@ -91,8 +86,6 @@ import org.w3c.dom.Element; public class DependenciesComposite extends Composite { private static final Logger log = LoggerFactory.getLogger(DependenciesComposite.class); - protected static PomPackage POM_PACKAGE = PomPackage.eINSTANCE; - protected MavenPomEditorPage editorPage; MavenPomEditor pomEditor; @@ -120,10 +113,6 @@ public class DependenciesComposite extends Composite { Action openWebPageAction; - // model - - Model model; - final DependencyLabelProvider dependencyLabelProvider = new DependencyLabelProvider(true); final DependencyLabelProvider dependencyManagementLabelProvider = new DependencyLabelProvider(); @@ -138,6 +127,10 @@ public class DependenciesComposite extends Composite { DependenciesComparator<Dependency> dependencyManagementComparator; + private List<DependenciesComposite.Dependency> dependencies; + private List<DependenciesComposite.Dependency> manageddependencies; + + public DependenciesComposite(Composite composite, MavenPomEditorPage editorPage, int flags, MavenPomEditor pomEditor) { super(composite, flags); this.editorPage = editorPage; @@ -182,7 +175,7 @@ public class DependenciesComposite extends Composite { public void widgetSelected(SelectionEvent e) { final List<Object> dependencyList = dependenciesEditor.getSelection(); try { - performOnDOMDocument(new OperationTuple(editorPage.getPomEditor().getDocument(), new Operation() { + editorPage.performEditOperation( new Operation() { public void process(Document document) { Element deps = findChild(document.getDocumentElement(), DEPENDENCIES); if (deps == null) { @@ -192,18 +185,17 @@ public class DependenciesComposite extends Composite { for (Object dependency : dependencyList) { if (dependency instanceof Dependency) { Element dep = findChild(deps, DEPENDENCY, - childEquals(GROUP_ID, ((Dependency)dependency).getGroupId()), - childEquals(ARTIFACT_ID, ((Dependency)dependency).getArtifactId())); + childEquals(GROUP_ID, ((Dependency)dependency).groupId), + childEquals(ARTIFACT_ID, ((Dependency)dependency).artifactId)); removeChild(deps, dep); } } removeIfNoChildElement(deps); } - })); - } catch (Exception x) { - log.error("error removing dependencies", x); + }, log, "error removing dependencies"); + } finally { + setDependenciesInput(); } - setDependenciesInput(); } }); @@ -214,10 +206,14 @@ public class DependenciesComposite extends Composite { Dependency dependency = (Dependency) selection; EditDependencyDialog d = new EditDependencyDialog(getShell(), false, editorPage .getProject(), editorPage.getPomEditor().getMavenProject(), editorPage.getPomEditor().getDocument()); - d.setDependency(dependency); + d.setDependency(toApacheDependency(dependency)); if(d.open() == Window.OK) { - setDependenciesInput(); - dependenciesEditor.setSelection(Collections.singletonList((Object) dependency)); + try { + editorPage.performEditOperation(d.getEditOperation(), log, "Error updating dependency"); + } finally { + setDependenciesInput(); + dependenciesEditor.setSelection(Collections.singletonList((Object) dependency)); + } } } else if (selection instanceof org.apache.maven.model.Dependency) { /* @@ -225,6 +221,7 @@ public class DependenciesComposite extends Composite { */ } } + }); dependenciesSection.setClient(dependenciesEditor); @@ -250,30 +247,23 @@ public class DependenciesComposite extends Composite { getShell(), Messages.DependenciesComposite_action_selectDependency, editorPage.getPomEditor().getMavenProject(), editorPage.getProject(), false); if(addDepDialog.open() == Window.OK) { - IndexedArtifactFile dep = (IndexedArtifactFile) addDepDialog.getFirstResult(); - final org.apache.maven.model.Dependency dependency = dep.getDependency(); - String selectedScope = addDepDialog.getSelectedScope(); - dependency.setScope(selectedScope); - - if (dep.version == null) { - dependency.setVersion(null); - } + final IndexedArtifactFile dep = (IndexedArtifactFile) addDepDialog.getFirstResult(); + final String selectedScope = addDepDialog.getSelectedScope(); try { - performOnDOMDocument(new OperationTuple(editorPage.getPomEditor().getDocument(), new Operation() { + editorPage.performEditOperation(new Operation() { public void process(Document document) { Element depsEl = getChild(document.getDocumentElement(), DEPENDENCIES); PomHelper.addOrUpdateDependency(depsEl, - dependency.getGroupId(), dependency.getArtifactId(), - dependency.getVersion(), dependency.getType(), dependency.getScope(), dependency.getClassifier()); + dep.group, dep.artifact, + dep.version, dep.type, selectedScope, dep.classifier); } - })); - } catch(Exception e1) { - log.error("errror adding dependency", e1); - } - - setDependenciesInput(); - if (model.getDependencies() != null && model.getDependencies().size() > 0) { - dependenciesEditor.setSelection(Collections.<Object>singletonList(model.getDependencies().get(model.getDependencies().size() - 1))); + }, log, "errror adding dependency"); + } finally { + setDependenciesInput(); + List<Dependency> deps = getDependencies(); + if (deps.size() > 0) { + dependenciesEditor.setSelection(Collections.<Object>singletonList(deps.get(deps.size() - 1))); + } } } } @@ -393,7 +383,7 @@ public class DependenciesComposite extends Composite { public void widgetSelected(SelectionEvent e) { final List<Dependency> dependencyList = dependencyManagementEditor.getSelection(); try { - performOnDOMDocument(new OperationTuple(editorPage.getPomEditor().getDocument(), new Operation() { + editorPage.performEditOperation(new Operation() { public void process(Document document) { Element deps = findChild(findChild(document.getDocumentElement(), DEPENDENCY_MANAGEMENT), DEPENDENCIES); if (deps == null) { @@ -402,15 +392,16 @@ public class DependenciesComposite extends Composite { } for (Dependency dependency : dependencyList) { Element dep = findChild(deps, DEPENDENCY, - childEquals(GROUP_ID, dependency.getGroupId()), - childEquals(ARTIFACT_ID, dependency.getArtifactId())); + childEquals(GROUP_ID, dependency.groupId), + childEquals(ARTIFACT_ID, dependency.artifactId)); removeChild(deps, dep); } removeIfNoChildElement(deps); } - })); - } catch (Exception x) { - log.error("error removing dependencies", x); + }, log, "error removing managed dependencies"); + } finally { + setDependencyManagementInput(); + dependenciesEditor.refresh(); } } }); @@ -420,12 +411,16 @@ public class DependenciesComposite extends Composite { Dependency dependency = dependencyManagementEditor.getSelection().get(0); EditDependencyDialog d = new EditDependencyDialog(getShell(), true, editorPage .getProject(), editorPage.getPomEditor().getMavenProject(), editorPage.getPomEditor().getDocument()); - d.setDependency(dependency); + d.setDependency(toApacheDependency(dependency)); if(d.open() == Window.OK) { - setDependencyManagementInput(); - dependencyManagementEditor.setSelection(Collections.singletonList(dependency)); - //refresh this one to update decorations.. - dependenciesEditor.refresh(); + try { + editorPage.performEditOperation(d.getEditOperation(), log, "Error updating dependency"); + } finally { + setDependencyManagementInput(); + dependencyManagementEditor.setSelection(Collections.singletonList(dependency)); + //refresh this one to update decorations.. + dependenciesEditor.refresh(); + } } } }); @@ -448,36 +443,27 @@ public class DependenciesComposite extends Composite { final MavenRepositorySearchDialog addDepDialog = MavenRepositorySearchDialog.createSearchDependencyDialog( getShell(), Messages.DependenciesComposite_action_selectDependency, editorPage.getPomEditor().getMavenProject(), editorPage.getProject(), true); if(addDepDialog.open() == Window.OK) { - IndexedArtifactFile dep = (IndexedArtifactFile) addDepDialog.getFirstResult(); - final org.apache.maven.model.Dependency dependency = dep.getDependency(); - String selectedScope = addDepDialog.getSelectedScope(); - dependency.setScope(selectedScope); - if (dep.version == null) { - dependency.setVersion(null); - } - + final IndexedArtifactFile dep = (IndexedArtifactFile) addDepDialog.getFirstResult(); + final String selectedScope = addDepDialog.getSelectedScope(); try { - performOnDOMDocument(new OperationTuple(editorPage.getPomEditor().getDocument(), new Operation() { + editorPage.performEditOperation(new Operation() { public void process(Document document) { Element depsEl = getChild(document.getDocumentElement(), DEPENDENCY_MANAGEMENT, DEPENDENCIES); PomHelper.addOrUpdateDependency(depsEl, - dependency.getGroupId(), dependency.getArtifactId(), - dependency.getVersion(), dependency.getType(), dependency.getScope(), dependency.getClassifier()); + dep.group, dep.artifact, + dep.version, dep.type, selectedScope, dep.classifier); } - })); - } catch(Exception e1) { - log.error("errror adding dependency", e1); - } - setDependenciesInput(); - setDependencyManagementInput(); - if (model.getDependencyManagement() != null && model.getDependencyManagement().getDependencies() != null - && model.getDependencyManagement().getDependencies().size() > 0) { - List<Dependency> dlist = model.getDependencyManagement().getDependencies(); - dependencyManagementEditor.setSelection(Collections.<Dependency>singletonList(dlist.get(dlist.size() - 1))); + }, log, "errror adding dependency"); + } finally { + setDependencyManagementInput(); + List<Dependency> dlist = getManagedDependencies(); + if (dlist.size() > 0) { + dependencyManagementEditor.setSelection(Collections.<Dependency>singletonList(dlist.get(dlist.size() - 1))); + } + //refresh this one to update decorations.. + dependenciesEditor.refresh(); } - - //refresh this one to update decorations.. - dependenciesEditor.refresh(); + } } }); @@ -556,15 +542,24 @@ public class DependenciesComposite extends Composite { @SuppressWarnings("unchecked") - public void loadData(Model model, ValueProvider<DependencyManagement> dependencyManagementProvider) { - this.model = model; - this.dependencyLabelProvider.setPomEditor(editorPage.getPomEditor(), dependencyManagementProvider); - this.dependencyManagementLabelProvider.setPomEditor(editorPage.getPomEditor(), dependencyManagementProvider); + public void loadData() { + resetDependencies(); + resetManagedDependencies(); + ValueProvider<List<org.apache.maven.model.Dependency>> dmValueProvider = new ValueProvider<List<org.apache.maven.model.Dependency>>() { + @Override + public List<org.apache.maven.model.Dependency> getValue() { + List<org.apache.maven.model.Dependency> toRet = new ArrayList<org.apache.maven.model.Dependency>(); + for (DependenciesComposite.Dependency d : getManagedDependencies()) { + toRet.add(toApacheDependency(d)); + } + return toRet; + } + }; + this.dependencyLabelProvider.setPomEditor(editorPage.getPomEditor(), dmValueProvider); + this.dependencyManagementLabelProvider.setPomEditor(editorPage.getPomEditor(), dmValueProvider); setDependenciesInput(); - - DependencyManagement dependencyManagement = model.getDependencyManagement(); - dependencyManagementEditor.setInput(dependencyManagement == null ? null : dependencyManagement.getDependencies()); + setDependencyManagementInput(); dependenciesEditor.setReadOnly(editorPage.isReadOnly()); dependencyManagementEditor.setReadOnly(editorPage.isReadOnly()); @@ -574,43 +569,6 @@ public class DependenciesComposite extends Composite { } } - public void updateView(final MavenPomEditorPage editorPage, final Notification notification) { - EObject object = (EObject) notification.getNotifier(); - Object feature = notification.getFeature(); - - // XXX event is not received when <dependencies> is deleted in XML - if(object instanceof Model) { - Model model2 = (Model) object; - if((model2.getDependencyManagement() != null && dependencyManagementEditor.getInput() == null) - || feature == PomPackage.Literals.MODEL__DEPENDENCY_MANAGEMENT) { - dependencyManagementEditor.setInput(model2.getDependencyManagement() != null ? model2.getDependencyManagement().getDependencies() : null); - } else if(model2.getDependencyManagement() == null) { - dependencyManagementEditor.setInput(null); - } - - if((model2.getDependencies() != null && dependenciesEditor.getInput() == null) - || feature == PomPackage.Literals.MODEL__DEPENDENCIES) { - setDependenciesInput(); - } else if(model2.getDependencies() == null) { - setDependenciesInput(); - } - dependenciesEditor.refresh(); - dependencyManagementEditor.refresh(); - } - - if(object instanceof DependencyManagement) { - if(dependencyManagementEditor.getInput() == null || feature == PomPackage.Literals.DEPENDENCY_MANAGEMENT__DEPENDENCIES) { - dependencyManagementEditor.setInput(((DependencyManagement) object).getDependencies()); - } - dependencyManagementEditor.refresh(); - //refresh this one to update decorations.. - dependenciesEditor.refresh(); - } - if (object instanceof Dependency) { - dependenciesEditor.refresh(); - dependencyManagementEditor.refresh(); - } - } public void setSearchControl(SearchControl searchControl) { if(this.searchControl != null) { @@ -620,23 +578,26 @@ public class DependenciesComposite extends Composite { this.searchMatcher = new SearchMatcher(searchControl); this.searchFilter = new DependencyFilter(searchMatcher); this.searchControl = searchControl; - this.searchControl.getSearchText().addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - selectDepenendencies(dependenciesEditor, model, POM_PACKAGE.getModel_Dependencies()); - EObject parent = model.getDependencyManagement() != null ? model.getDependencyManagement() : null; - selectDepenendencies(dependencyManagementEditor, parent, - POM_PACKAGE.getDependencyManagement_Dependencies()); - } - - @SuppressWarnings({"unchecked", "rawtypes"}) - private void selectDepenendencies(PropertiesListComposite<?> dependencyManagementEditor, EObject parent, - EStructuralFeature feature) { - if(parent != null) { - dependencyManagementEditor.setSelection((List) parent.eGet(feature)); - dependencyManagementEditor.refresh(); - } - } - }); + + //mkleint: not sure why this is here. searching in the control is both showing less entries and selecting them. + //it feels like one of these has to go. +// this.searchControl.getSearchText().addModifyListener(new ModifyListener() { +// public void modifyText(ModifyEvent e) { +// selectDepenendencies(dependenciesEditor, model, POM_PACKAGE.getModel_Dependencies()); +// EObject parent = model.getDependencyManagement() != null ? model.getDependencyManagement() : null; +// selectDepenendencies(dependencyManagementEditor, parent, +// POM_PACKAGE.getDependencyManagement_Dependencies()); +// } +// +// @SuppressWarnings({"unchecked", "rawtypes"}) +// private void selectDepenendencies(PropertiesListComposite<?> editor, EObject parent, +// EStructuralFeature feature) { +// if(parent != null) { +// editor.setSelection((List) parent.eGet(feature)); +// editor.refresh(); +// } +// } +// }); //we add filter here as the default behaviour is to filter.. TableViewer viewer = dependenciesEditor.getViewer(); viewer.addFilter(searchFilter); @@ -676,7 +637,7 @@ public class DependenciesComposite extends Composite { public boolean select(Viewer viewer, Object parentElement, Object element) { if(element instanceof Dependency) { Dependency d = (Dependency) element; - return searchMatcher.isMatchingArtifact(d.getGroupId(), d.getArtifactId()); + return searchMatcher.isMatchingArtifact(d.groupId, d.artifactId); } else if (element instanceof org.apache.maven.model.Dependency) { org.apache.maven.model.Dependency dependency = (org.apache.maven.model.Dependency) element; return searchMatcher.isMatchingArtifact(dependency.getGroupId(), dependency.getArtifactId()); @@ -714,21 +675,113 @@ public class DependenciesComposite extends Composite { return; } - final ManageDependenciesDialog manageDepDialog = new ManageDependenciesDialog(getShell(), model, hierarchy, + final ManageDependenciesDialog manageDepDialog = new ManageDependenciesDialog(getShell(), new ValueProvider<List<org.apache.maven.model.Dependency>>() { + @Override + public List<org.apache.maven.model.Dependency> getValue() { + List<org.apache.maven.model.Dependency> toRet = new ArrayList<org.apache.maven.model.Dependency>(); + for (DependenciesComposite.Dependency d : getDependencies()) { + toRet.add(toApacheDependency(d)); + } + return toRet; + } + }, hierarchy, dependenciesEditor.getSelection()); manageDepDialog.open(); } protected void setDependencyManagementInput() { - DependencyManagement dependencyManagement = model.getDependencyManagement(); - dependencyManagementEditor.setInput(dependencyManagement == null ? null : dependencyManagement.getDependencies()); + resetManagedDependencies(); + final List<Dependency> managed = getManagedDependencies(); + dependencyManagementEditor.setInput(managed); + } + + /** + * only to be called within the perform* methods.. + * @param depEl + * @return + */ + private Dependency toDependency(Element depEl) { + Dependency dep = new Dependency(); + dep.groupId = getTextValue(findChild(depEl, GROUP_ID)); + dep.artifactId = getTextValue(findChild(depEl, ARTIFACT_ID)); + dep.version = getTextValue(findChild(depEl, VERSION)); + dep.type = getTextValue(findChild(depEl, TYPE)); + dep.scope = getTextValue(findChild(depEl, SCOPE)); + dep.classifier = getTextValue(findChild(depEl, CLASSIFIER)); + dep.systemPath = getTextValue(findChild(depEl, SYSTEM_PATH)); + dep.optional = Boolean.parseBoolean(getTextValue(findChild(depEl, OPTIONAL))); + return dep; + } + + private final Object MAN_DEP_LOCK = new Object(); + + private List<Dependency> getManagedDependencies() { + synchronized (MAN_DEP_LOCK) { + if (manageddependencies == null) { + manageddependencies = new ArrayList<Dependency>(); + try { + performOnDOMDocument(new OperationTuple(pomEditor.getDocument(), new Operation() { + public void process(Document document) { + Element dms = findChild(findChild(document.getDocumentElement(), DEPENDENCY_MANAGEMENT), DEPENDENCIES); + for (Element depEl : findChilds(dms, DEPENDENCY)) { + Dependency dep = toDependency(depEl); + if (dep != null) { + manageddependencies.add(dep); + } + } + } + }, true)); + } catch (Exception ex) { + log.error("Error loading managed dependencies", ex); + } + } + return manageddependencies; + } + } + + private void resetManagedDependencies() { + synchronized (MAN_DEP_LOCK) { + manageddependencies = null; + } + } + + + private final Object DEP_LOCK = new Object(); + private List<Dependency> getDependencies() { + synchronized (DEP_LOCK) { + if (dependencies == null) { + dependencies = new ArrayList<Dependency>(); + try { + performOnDOMDocument(new OperationTuple(pomEditor.getDocument(), new Operation() { + public void process(Document document) { + Element dms = findChild(document.getDocumentElement(), DEPENDENCIES); + for (Element depEl : findChilds(dms, DEPENDENCY)) { + Dependency dep = toDependency(depEl); + if (dep != null) { + dependencies.add(dep); + } + } + } + }, true)); + } catch (Exception ex) { + log.error("Error loading dependencies", ex); + } + } + return dependencies; + } + } + + private void resetDependencies() { + synchronized (DEP_LOCK) { + dependencies = null; + } } protected void setDependenciesInput() { + resetDependencies(); List<Object> deps = new ArrayList<Object>(); - if (model.getDependencies() != null) { - deps.addAll(model.getDependencies()); - } + deps.addAll(getDependencies()); + if (showInheritedDependencies) { /* @@ -743,11 +796,11 @@ public class DependenciesComposite extends Composite { } for (org.apache.maven.model.Dependency mavenDep : allDeps) { boolean found = false; - Iterator<Dependency> iter = model.getDependencies().iterator(); + Iterator<Dependency> iter = getDependencies().iterator(); while (!found && iter.hasNext()) { Dependency m2eDep = iter.next(); - if (mavenDep.getGroupId().equals(m2eDep.getGroupId()) - && mavenDep.getArtifactId().equals(m2eDep.getArtifactId())) { + if (mavenDep.getGroupId().equals(m2eDep.groupId) + && mavenDep.getArtifactId().equals(m2eDep.artifactId)) { found = true; } } @@ -871,12 +924,10 @@ public class DependenciesComposite extends Composite { protected void updateManageButton() { boolean hasNonManaged = false; //MNGECLIPSE-2675 only enable when there are unmanaged dependencies - if (model.getDependencies() != null) { - for (Dependency d : model.getDependencies()) { - if (d.getVersion() != null) { - hasNonManaged = true; - break; - } + for(Dependency d : getDependencies()) { + if(d.version != null) { + hasNonManaged = true; + break; } } manage.setEnabled(!readOnly && hasNonManaged); @@ -896,6 +947,30 @@ public class DependenciesComposite extends Composite { dependenciesEditor.refresh(); } + private org.apache.maven.model.Dependency toApacheDependency(Dependency dependency) { + org.apache.maven.model.Dependency toRet = new org.apache.maven.model.Dependency(); + toRet.setArtifactId(dependency.artifactId); + toRet.setGroupId(dependency.groupId); + toRet.setClassifier(dependency.classifier); + toRet.setScope(dependency.scope); + toRet.setOptional(dependency.optional); + toRet.setSystemPath(dependency.systemPath); + toRet.setType(dependency.type); + toRet.setVersion(dependency.version); + return toRet; + } + class Dependency { + String artifactId; + String groupId; + String version; + String type; + String classifier; + String scope; + String systemPath; + boolean optional; + + public Dependency() {} + } } diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependencyLabelProvider.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependencyLabelProvider.java index 005dd0b2..107ba897 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependencyLabelProvider.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/composites/DependencyLabelProvider.java @@ -12,8 +12,10 @@ package org.eclipse.m2e.editor.composites; import java.util.Collection; +import java.util.List; import org.apache.maven.artifact.Artifact; +import org.apache.maven.model.Dependency; import org.apache.maven.model.DependencyManagement; import org.apache.maven.model.InputLocation; import org.apache.maven.project.MavenProject; @@ -30,9 +32,6 @@ import org.eclipse.m2e.editor.MavenEditorImages; import org.eclipse.m2e.editor.internal.Messages; import org.eclipse.m2e.editor.pom.MavenPomEditor; import org.eclipse.m2e.editor.pom.ValueProvider; -import org.eclipse.m2e.model.edit.pom.Dependency; -import org.eclipse.m2e.model.edit.pom.Exclusion; -import org.eclipse.m2e.model.edit.pom.Extension; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; @@ -53,8 +52,8 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv private final boolean showManagedOverlay; - private ValueProvider<org.eclipse.m2e.model.edit.pom.DependencyManagement> managementProvider; - + private ValueProvider<List<org.apache.maven.model.Dependency>> valueProvider; + public DependencyLabelProvider() { this(false); } @@ -64,11 +63,10 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv this.showManagedOverlay = showManagedOverlay; } - public void setPomEditor(MavenPomEditor pomEditor, ValueProvider<org.eclipse.m2e.model.edit.pom.DependencyManagement> dependencyManagementProvider) { + public void setPomEditor(MavenPomEditor pomEditor, ValueProvider<List<org.apache.maven.model.Dependency>> valueProvider) { assert pomEditor != null; - assert managementProvider != null; this.pomEditor = pomEditor; - this.managementProvider = dependencyManagementProvider; + this.valueProvider = valueProvider; } public void setShowGroupId(boolean showGroupId) { @@ -78,7 +76,9 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv // IColorProvider public Color getForeground(Object element) { - if (element instanceof org.apache.maven.model.Dependency) { + //a workaround to handle display in ManagedDependenciesDialog + //TODO shall have a switch of it's own.. the curse of blind code reuse + if (showManagedOverlay && element instanceof org.apache.maven.model.Dependency) { //mkleint: let's just assume all maven Dependency instances are inherited return Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY); } @@ -89,7 +89,7 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv return null; } - private String findManagedVersion(Dependency dep) { + private String findManagedVersion(DependenciesComposite.Dependency dep) { if (pomEditor != null) { MavenProject mp = pomEditor.getMavenProject(); String version = null; @@ -98,7 +98,7 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv DependencyManagement dm = mp.getDependencyManagement(); if(dm != null) { for(org.apache.maven.model.Dependency d : dm.getDependencies()) { - if(d.getGroupId().equals(dep.getGroupId()) && d.getArtifactId().equals(dep.getArtifactId())) { + if(d.getGroupId().equals(dep.groupId) && d.getArtifactId().equals(dep.artifactId)) { //based on location, try finding a match in the live Model InputLocation location = d.getLocation("artifactId"); if (location != null) { @@ -112,14 +112,13 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv } } } - org.eclipse.m2e.model.edit.pom.DependencyManagement dm = managementProvider.getValue(); - if (dm != null && dm.getDependencies() != null) { - for (Dependency modelDep : dm.getDependencies()) { + List<org.apache.maven.model.Dependency> dm = valueProvider.getValue(); + for (org.apache.maven.model.Dependency modelDep : dm) { String modelGroupId = modelDep.getGroupId(); String modelArtifactId = modelDep.getArtifactId(); String modelVersion = modelDep.getVersion(); - if (modelGroupId != null && modelGroupId.equals(dep.getGroupId()) && modelArtifactId != null - && modelArtifactId.equals(dep.getArtifactId())) { + if (modelGroupId != null && modelGroupId.equals(dep.groupId) && modelArtifactId != null + && modelArtifactId.equals(dep.artifactId)) { if (version != null && (modelVersion == null || modelVersion.contains("${"))) { //prefer the resolved version to the model one if the model version as expressions.. return version; @@ -127,15 +126,14 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv return modelVersion; } } - } } return null; } public StyledString getStyledText(Object element) { - if(element instanceof Dependency) { + if(element instanceof DependenciesComposite.Dependency) { StyledString ss = new StyledString(getText(element)); - Dependency dep = (Dependency) element; + DependenciesComposite.Dependency dep = (DependenciesComposite.Dependency) element; String version = findManagedVersion(dep); if (version != null) { ss.append(NLS.bind(Messages.DependencyLabelProvider_0, version), StyledString.DECORATIONS_STYLER); @@ -149,39 +147,47 @@ public class DependencyLabelProvider extends LabelProvider implements IColorProv @Override public String getText(Object element) { - if(element instanceof Dependency) { - Dependency dependency = (Dependency) element; - return getText(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), // - dependency.getClassifier(), dependency.getType(), dependency.getScope()); + if(element instanceof DependenciesComposite.Dependency) { + DependenciesComposite.Dependency dependency = (DependenciesComposite.Dependency) element; + return getText(dependency.groupId, dependency.artifactId, dependency.version, // + dependency.classifier, dependency.type, dependency.scope); } else if (element instanceof org.apache.maven.model.Dependency) { org.apache.maven.model.Dependency dependency = (org.apache.maven.model.Dependency) element; return getText(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), dependency.getClassifier(), dependency.getType(), dependency.getScope()); - } else if(element instanceof Exclusion) { - Exclusion exclusion = (Exclusion) element; - return getText(exclusion.getGroupId(), exclusion.getArtifactId(), null, null, null, null); - } else if(element instanceof Extension) { - Extension extension = (Extension) element; - return getText(extension.getGroupId(), extension.getArtifactId(), extension.getVersion(), null, null, null); +// } else if(element instanceof Exclusion) { +// Exclusion exclusion = (Exclusion) element; +// return getText(exclusion.getGroupId(), exclusion.getArtifactId(), null, null, null, null); +// } else if(element instanceof Extension) { +// Extension extension = (Extension) element; +// return getText(extension.getGroupId(), extension.getArtifactId(), extension.getVersion(), null, null, null); } return super.getText(element); } @Override public Image getImage(Object element) { - if(element instanceof Dependency) { - Dependency dependency = (Dependency) element; + if(element instanceof DependenciesComposite.Dependency) { + DependenciesComposite.Dependency dependency = (DependenciesComposite.Dependency) element; boolean isManaged = showManagedOverlay && findManagedVersion(dependency) != null; - return getImage(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), isManaged); + return getImage(dependency.groupId, dependency.artifactId, dependency.version, isManaged); } else if (element instanceof org.apache.maven.model.Dependency) { - //mkleint: all MavenDependency instances are inherited + + + if (!showManagedOverlay) { + org.apache.maven.model.Dependency dependency = (Dependency) element; + //a workaround to handle display in ManagedDependenciesDialog + //TODO shall have a switch of it's own.. the curse of blind code reuse + return getImage(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), false); + } + //mkleint: all MavenDependency instances are inherited but only in *dependenciesComposite* return MavenEditorImages.IMG_INHERITED; - }else if(element instanceof Exclusion) { - Exclusion exclusion = (Exclusion) element; - return getImage(exclusion.getGroupId(), exclusion.getArtifactId(), null, false); - } else if(element instanceof Extension) { - Extension extension = (Extension) element; - return getImage(extension.getGroupId(), extension.getArtifactId(), extension.getVersion(), false); +// }else if(element instanceof Exclusion) { +// Exclusion exclusion = (Exclusion) element; +// return getImage(exclusion.getGroupId(), exclusion.getArtifactId(), null, false); +// } else if(element instanceof Extension) { +// Extension extension = (Extension) element; +// return getImage(extension.getGroupId(), extension.getArtifactId(), extension.getVersion(), false); } return null; diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/dialogs/ManageDependenciesDialog.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/dialogs/ManageDependenciesDialog.java index e9e3a4b4..50126863 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/dialogs/ManageDependenciesDialog.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/dialogs/ManageDependenciesDialog.java @@ -27,6 +27,7 @@ import java.util.LinkedList; import java.util.List; import java.util.ListIterator; +import org.apache.maven.model.Dependency; import org.apache.maven.project.MavenProject; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; @@ -54,8 +55,7 @@ import org.eclipse.m2e.editor.MavenEditorPlugin; import org.eclipse.m2e.editor.composites.DependencyLabelProvider; import org.eclipse.m2e.editor.composites.ListEditorContentProvider; import org.eclipse.m2e.editor.composites.PomHierarchyComposite; -import org.eclipse.m2e.model.edit.pom.Dependency; -import org.eclipse.m2e.model.edit.pom.Model; +import org.eclipse.m2e.editor.pom.ValueProvider; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; @@ -89,8 +89,6 @@ public class ManageDependenciesDialog extends AbstractMavenDialog { private TableViewer dependenciesViewer; - private final Model model; - private final LinkedList<MavenProject> projectHierarchy; private PomHierarchyComposite pomHierarchy; @@ -101,24 +99,26 @@ public class ManageDependenciesDialog extends AbstractMavenDialog { protected boolean isTest = false; + private ValueProvider<List<Dependency>> modelVProvider; + /** * Hierarchy is a LinkedList representing the hierarchy relationship between POM represented by model and its parents. * The head of the list should be the child, while the tail should be the root parent, with the others in between. */ - public ManageDependenciesDialog(Shell parent, Model model, LinkedList<MavenProject> hierarchy) { - this(parent, model, hierarchy, null); + public ManageDependenciesDialog(Shell parent, ValueProvider<List<Dependency>> modelVProvider, LinkedList<MavenProject> hierarchy) { + this(parent, modelVProvider, hierarchy, null); } - public ManageDependenciesDialog(Shell parent, Model model, LinkedList<MavenProject> hierarchy, + public ManageDependenciesDialog(Shell parent, ValueProvider<List<Dependency>> modelVProvider, LinkedList<MavenProject> hierarchy, List<Object> selection) { super(parent, DIALOG_SETTINGS); setShellStyle(getShellStyle() | SWT.RESIZE); setTitle(Messages.ManageDependenciesDialog_dialogTitle); - this.model = model; this.projectHierarchy = hierarchy; this.originalSelection = selection; + this.modelVProvider = modelVProvider; } /* (non-Javadoc) @@ -208,7 +208,7 @@ public class ManageDependenciesDialog extends AbstractMavenDialog { dependenciesViewer.setLabelProvider(new DependencyLabelProvider()); dependenciesViewer.setContentProvider(new ListEditorContentProvider<Dependency>()); //MNGECLIPSE-2675 only show the dependencies not already managed (decide just by absence of the version element - List<Dependency> deps = model.getDependencies(); + List<Dependency> deps = modelVProvider.getValue(); List<Dependency> nonManaged = new ArrayList<Dependency>(); if (deps != null) { for (Dependency d : deps) { diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependenciesPage.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependenciesPage.java index 78244b6f..42762694 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependenciesPage.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/DependenciesPage.java @@ -90,24 +90,10 @@ public class DependenciesPage extends MavenPomEditorPage { } public void loadData() { - - - ValueProvider<DependencyManagement> dependencyManagementProvider = new ValueProvider<DependencyManagement>() { - public DependencyManagement getValue() { - return model.getDependencyManagement(); - } - }; - - dependenciesComposite.loadData(model, dependencyManagementProvider); + dependenciesComposite.loadData(); } public void updateView(final Notification notification) { - Display.getDefault().asyncExec(new Runnable(){ - public void run(){ - dependenciesComposite.updateView(DependenciesPage.this, notification); - } - }); - } /* (non-Javadoc) diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java index ef1d961c..75b396d9 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditor.java @@ -11,14 +11,9 @@ package org.eclipse.m2e.editor.pom; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.io.StringWriter; import java.util.ArrayList; -import java.util.Collections; import java.util.EventObject; import java.util.HashMap; import java.util.List; @@ -26,7 +21,6 @@ import java.util.Map; import org.apache.maven.model.io.xpp3.MavenXpp3Writer; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.util.IOUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; @@ -34,7 +28,6 @@ import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; -import org.eclipse.core.resources.IStorage; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; @@ -42,7 +35,6 @@ import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IExtensionRegistry; -import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; @@ -51,7 +43,6 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.emf.common.command.BasicCommandStack; import org.eclipse.emf.common.command.CommandStackListener; import org.eclipse.emf.common.notify.Adapter; -import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.text.IDocument; @@ -64,7 +55,6 @@ import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.m2e.core.MavenPlugin; import org.eclipse.m2e.core.core.IMavenConstants; import org.eclipse.m2e.core.embedder.ArtifactKey; -import org.eclipse.m2e.core.embedder.MavenModelManager; import org.eclipse.m2e.core.project.IMavenProjectChangedListener; import org.eclipse.m2e.core.project.IMavenProjectFacade; import org.eclipse.m2e.core.project.MavenProjectChangedEvent; @@ -73,13 +63,8 @@ import org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator; import org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.MavenPathStorageEditorInput; import org.eclipse.m2e.core.ui.internal.actions.OpenPomAction.MavenStorageEditorInput; import org.eclipse.m2e.core.ui.internal.actions.SelectionUtil; -import org.eclipse.m2e.core.ui.internal.util.Util; -import org.eclipse.m2e.core.ui.internal.util.Util.FileStoreEditorInputStub; import org.eclipse.m2e.editor.MavenEditorPlugin; import org.eclipse.m2e.editor.internal.Messages; -import org.eclipse.m2e.model.edit.pom.Model; -import org.eclipse.m2e.model.edit.pom.util.PomResourceFactoryImpl; -import org.eclipse.m2e.model.edit.pom.util.PomResourceImpl; import org.eclipse.search.ui.text.ISearchEditorAccess; import org.eclipse.search.ui.text.Match; import org.eclipse.swt.widgets.Composite; @@ -92,7 +77,6 @@ import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IPartService; import org.eclipse.ui.IShowEditorInput; -import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.IWindowListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; @@ -107,10 +91,7 @@ import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.IDocumentProviderExtension3; import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.model.ModelLifecycleEvent; -import org.eclipse.wst.sse.core.internal.provisional.IModelLifecycleListener; import org.eclipse.wst.sse.core.internal.provisional.IModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IModelStateListener; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; import org.eclipse.wst.sse.core.internal.undo.IStructuredTextUndoManager; @@ -158,8 +139,6 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene List<MavenPomEditorPage> pages = new ArrayList<MavenPomEditorPage>(); - private Model projectDocument; - private Map<String, org.sonatype.aether.graph.DependencyNode> rootNodes = new HashMap<String, org.sonatype.aether.graph.DependencyNode>(); IDOMModel structuredModel; @@ -336,19 +315,10 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene } public void reload() { - if (projectDocument != null) { - projectDocument.eResource().unload(); - } - projectDocument = null; - try { - readProjectDocument(); - //fix for resetting the pom document after an external change -// sourcePage.getDocumentProvider().resetDocument(sourcePage.getEditorInput()); - } catch(CoreException e) { - log.error(e.getMessage(), e); - } - for(MavenPomEditorPage page : pages) { - page.reload(); + int active = getActivePage(); + if (active > -1) { + MavenPomEditorPage page = getPages().get(active); + page.loadData(); } if(isEffectiveActive()){ loadEffectivePOM(); @@ -682,11 +652,6 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene } //mkleint: why is this here? flushCommandStack(); - try { - readProjectDocument(); - } catch(CoreException e) { - log.error(e.getMessage(), e); - } // TODO activate xml source page if model is empty or have errors @@ -714,69 +679,6 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene } } - // XXX move to MavenModelManager (CommandStack and EditorDomain too) - public synchronized Model readProjectDocument() throws CoreException { - if(projectDocument == null) { - IEditorInput input = getEditorInput(); - if(input instanceof IFileEditorInput) { - pomFile = ((IFileEditorInput) input).getFile(); - pomFile.refreshLocal(1, null); - - ResourcesPlugin.getWorkspace().addResourceChangeListener(this); - MavenModelManager modelManager = MavenPlugin.getDefault().getMavenModelManager(); - PomResourceImpl resource = modelManager.loadResource(pomFile); - projectDocument = resource.getModel(); - - } else if(input instanceof IStorageEditorInput) { - IStorageEditorInput storageInput = (IStorageEditorInput) input; - IStorage storage = storageInput.getStorage(); - IPath path = storage.getFullPath(); - if(path == null || !new File(path.toOSString()).exists()) { - File tempPomFile = null; - InputStream is = null; - OutputStream os = null; - try { - tempPomFile = File.createTempFile("maven-pom", ".pom"); //$NON-NLS-1$ //$NON-NLS-2$ - os = new FileOutputStream(tempPomFile); - is = storage.getContents(); - IOUtil.copy(is, os); - projectDocument = loadModel(tempPomFile.getAbsolutePath()); - } catch(IOException ex) { - log.error("Can't close stream", ex); //$NON-NLS-1$ - } finally { - IOUtil.close(is); - IOUtil.close(os); - if(tempPomFile != null) { - tempPomFile.delete(); - } - } - } else { - projectDocument = loadModel(path.toOSString()); - } - - } else if(input.getClass().getName().endsWith("FileStoreEditorInput")) { //$NON-NLS-1$ - projectDocument = loadModel(Util.proxy(input, FileStoreEditorInputStub.class).getURI().getPath()); - } - } - - return projectDocument; - } - - private Model loadModel(String path) { - URI uri = URI.createFileURI(path); - PomResourceFactoryImpl factory = new PomResourceFactoryImpl(); - PomResourceImpl resource = (PomResourceImpl) factory.createResource(uri); - - try { - resource.load(Collections.EMPTY_MAP); - return (Model)resource.getContents().get(0); - - } catch(Exception ex) { - log.error("Can't load model " + path, ex); //$NON-NLS-1$ - return null; - - } - } public synchronized org.sonatype.aether.graph.DependencyNode readDependencyTree(boolean force, String classpath, IProgressMonitor monitor) throws CoreException { @@ -858,9 +760,6 @@ public class MavenPomEditor extends FormEditor implements IResourceChangeListene ResourcesPlugin.getWorkspace().removeResourceChangeListener(MavenPomEditor.this); - if(projectDocument != null) { - projectDocument.eResource().unload(); - } MavenPomEditor.super.dispose(); return Status.OK_STATUS; } diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java index 9f5d1530..24b2ce54 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/MavenPomEditorPage.java @@ -13,7 +13,6 @@ package org.eclipse.m2e.editor.pom; import static org.eclipse.m2e.editor.pom.FormUtils.isEmpty; -import java.util.Iterator; import org.apache.maven.project.MavenProject; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; @@ -27,11 +26,6 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.emf.common.notify.Adapter; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.Notifier; -import org.eclipse.emf.ecore.EAttribute; -import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; @@ -54,11 +48,7 @@ import static org.eclipse.m2e.core.ui.internal.editing.PomEdits.*; import org.eclipse.m2e.editor.MavenEditorImages; import org.eclipse.m2e.editor.internal.Messages; -import org.eclipse.m2e.editor.pom.PropertiesSection.PropertyElement; import org.eclipse.m2e.editor.xml.internal.FormHoverProvider; -import org.eclipse.m2e.model.edit.pom.Model; -import org.eclipse.m2e.model.edit.pom.Parent; -import org.eclipse.m2e.model.edit.pom.PomPackage; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; @@ -91,7 +81,7 @@ import org.w3c.dom.Node; * @author Anton Kraev * @author Eugene Kuleshov */ -public abstract class MavenPomEditorPage extends FormPage implements Adapter { +public abstract class MavenPomEditorPage extends FormPage { private static final String MODIFY_LISTENER = "MODIFY_LISTENER"; private static final String VALUE_PROVIDER = "VALUE_PROVIDER"; @@ -101,15 +91,6 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { // parent editor protected final MavenPomEditor pomEditor; - // model - protected Model model; - - // Notifier target - protected Notifier target; - - // are we already updating model - protected boolean updatingModel; - private boolean updatingModel2 = false; // have we loaded data? @@ -117,8 +98,6 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { private InputHistory inputHistory; - protected static PomPackage POM_PACKAGE = PomPackage.eINSTANCE; - private Action selectParentAction; private IModelStateListener listener; @@ -157,6 +136,12 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { return pomEditor; } + /** + * all edits in the editor to be channeled through this method.. + * @param operation + * @param logger + * @param logMessage + */ public final void performEditOperation(PomEdits.Operation operation, Logger logger, String logMessage) { try { updatingModel2 = true; @@ -177,16 +162,29 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { selectParentAction = new Action(Messages.MavenPomEditorPage_action_open, MavenEditorImages.PARENT_POM) { public void run() { - // XXX listen to parent modification and accordingly enable/disable action - final Parent parent = model.getParent(); - if(parent!=null && !isEmpty(parent.getGroupId()) && !isEmpty(parent.getArtifactId()) && !isEmpty(parent.getVersion())) { - new Job(Messages.MavenPomEditorPage_job_opening) { - protected IStatus run(IProgressMonitor monitor) { - OpenPomAction.openEditor(parent.getGroupId(), parent.getArtifactId(), parent.getVersion(), monitor); - return Status.OK_STATUS; + final String[] ret = new String[3]; + try { + performOnDOMDocument(new OperationTuple(getPomEditor().getDocument(), new Operation() { + public void process(Document document) { + Element parent = findChild(document.getDocumentElement(), PARENT); + ret[0] = getTextValue(findChild(parent, GROUP_ID)); + ret[1] = getTextValue(findChild(parent, ARTIFACT_ID)); + ret[2] = getTextValue(findChild(parent, VERSION)); } - }.schedule(); + }, true)); + // XXX listen to parent modification and accordingly enable/disable action + if(!isEmpty(ret[0]) && !isEmpty(ret[1]) && !isEmpty(ret[2])) { + new Job(Messages.MavenPomEditorPage_job_opening) { + protected IStatus run(IProgressMonitor monitor) { + OpenPomAction.openEditor(ret[0], ret[1], ret[2], monitor); + return Status.OK_STATUS; + } + }.schedule(); + } + } catch(Exception e) { + LOG.error("Error finding parent element", e); } + } }; toolBarManager.add(selectParentAction); @@ -218,6 +216,7 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { } if (active && alreadyShown) { loadData(); + updateParentAction(); } alreadyShown = true; @@ -238,27 +237,18 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { try { if(active && !dataLoaded) { dataLoaded = true; -// new Job("Loading pom.xml") { -// protected IStatus run(IProgressMonitor monitor) { - model = pomEditor.readProjectDocument(); - if(model != null) { if(getPartControl() != null) { getPartControl().getDisplay().asyncExec(new Runnable() { public void run() { - updatingModel = true; try { loadData(); updateParentAction(); - registerListeners(); } catch(Throwable e) { LOG.error("Error loading data", e); //$NON-NLS-1$ - } finally { - updatingModel = false; } } }); } - } } @@ -373,77 +363,28 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { } } - public Notifier getTarget() { - return target; - } public boolean isAdapterForType(Object type) { return false; } - public void reload() { - deRegisterListeners(); - boolean oldDataLoaded = dataLoaded; - dataLoaded = false; - doLoadData(oldDataLoaded); - } - - public synchronized void notifyChanged(Notification notification) { - if(updatingModel) { - return; - } - - updatingModel = true; - try { - switch(notification.getEventType()) { - //TODO: fine-grained notification? - case Notification.ADD: - case Notification.MOVE: - case Notification.REMOVE: - case Notification.UNSET: - case Notification.ADD_MANY: //this is for properties (clear/addAll is used for any properties update) - case Notification.REMOVE_MANY: - if (getManagedForm() != null) { - updateView(notification); - updateParentAction(); - } - break; - case Notification.SET: { - Object newValue = notification.getNewValue(); - Object oldValue = notification.getOldValue(); - if (newValue instanceof String && oldValue instanceof String && newValue.equals(oldValue)) { - //the idea here is that triggering a view update for something that didn't change is not useful. - //still there are other notifications that are similar (File>Revert or SCM team update seem to trigger - // a complete reload of the model, which triggers a cloud of notification events.. - break; - } - if (getManagedForm() != null) { - updateView(notification); - updateParentAction(); + private void updateParentAction() { + if (selectParentAction != null) { + final boolean[] ret = new boolean[1]; + try { + performOnDOMDocument(new OperationTuple(getPomEditor().getDocument(), new Operation() { + public void process(Document document) { + Element parent = findChild(document.getDocumentElement(), PARENT); + String g = getTextValue(findChild(parent, GROUP_ID)); + String a = getTextValue(findChild(parent, ARTIFACT_ID)); + String v = getTextValue(findChild(parent, VERSION)); + ret[0] = g != null && a != null && v != null; } - break; - } - - default: - break; - - // case Notification.ADD_MANY: - // case Notification.REMOVE_MANY: + }, true)); + } catch(Exception e) { + ret[0] = false; } - - } catch(Exception ex) { - LOG.error("Can't update view", ex); //$NON-NLS-1$ - } finally { - updatingModel = false; - } - - registerListeners(); - } - - private void updateParentAction() { - if (selectParentAction != null && model != null) { - Parent par = model.getParent(); - if (par != null && par.getGroupId() != null && par.getArtifactId() != null && par.getVersion() != null) { + if (ret[0]) { selectParentAction.setEnabled(true); } else { selectParentAction.setEnabled(false); @@ -518,53 +459,11 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { inputHistory.save(); getPomEditor().getModel().removeModelStateListener(listener); - deRegisterListeners(); - super.dispose(); } - public void setTarget(Notifier newTarget) { - this.target = newTarget; - } - - public Model getModel() { - return model; - } - public abstract void loadData(); - public abstract void updateView(Notification notification); - - public void registerListeners() { - if(model!=null) { - doRegister(model); - - for(Iterator<?> it = model.eAllContents(); it.hasNext();) { - Object next = it.next(); - if (next instanceof EObject) - doRegister((EObject) next); - } - } - } - - private void doRegister(EObject object) { - if (!object.eAdapters().contains(this)) { - object.eAdapters().add(this); - } - } - - public void deRegisterListeners() { - if(model!=null) { - model.eAdapters().remove(this); - for(Iterator<?> it = model.eAllContents(); it.hasNext(); ) { - Object next = it.next(); - if(next instanceof EObject) { - EObject object = (EObject) next; - object.eAdapters().remove(this); - } - } - } - } public void setElementValueProvider(Control control, ElementValueProvider provider) { control.setData(VALUE_PROVIDER, provider); @@ -726,18 +625,6 @@ public abstract class MavenPomEditorPage extends FormPage implements Adapter { getEditorSite().registerContextMenu(MavenPomEditor.EDITOR_ID + id, menuMgr, viewer, false); } - /* - * returns added/removed/updated EObject from notification (convenience method for detail forms) - */ - public static Object getFromNotification(Notification notification) { - if(notification.getFeature() != null && !(notification.getFeature() instanceof EAttribute)) { - // for structuralFeatures, return new value (for insert/delete) - return notification.getNewValue(); - } else { - // for attributes, return the notifier as it contains all new attributes (attribute modified) - return notification.getNotifier(); - } - } /** * Adapter for Text, Combo and CCombo widgets diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/OverviewPage.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/OverviewPage.java index c5b51bc0..9f1640d6 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/OverviewPage.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/OverviewPage.java @@ -14,6 +14,7 @@ package org.eclipse.m2e.editor.pom; import static org.eclipse.m2e.editor.pom.FormUtils.nvl; import static org.eclipse.m2e.editor.pom.FormUtils.setText; +import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -21,6 +22,7 @@ import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -572,7 +574,24 @@ public class OverviewPage extends MavenPomEditorPage { @Override public void widgetSelected(SelectionEvent e) { final Set<Object> moduleContainers = new HashSet<Object>(); - for(String module : model.getModules()) { + final List<String> modules = new ArrayList<String>(); + try { + performOnDOMDocument(new OperationTuple(getPomEditor().getDocument(), new Operation() { + public void process(Document document) { + Element modsEl = findChild(document.getDocumentElement(), MODULES); + for (Element el : findChilds(modsEl, MODULE)) { + String m = getTextValue(el); + if (m != null) { + modules.add(m); + } + } + } + }, true)); + } catch(Exception e1) { + LOG.error("Cannot load modules", e1); + } + + for(String module : modules) { IMavenProjectFacade facade = findModuleProject(module); if(facade != null) { moduleContainers.add(facade.getProject().getLocation()); diff --git a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/ValueProvider.java b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/ValueProvider.java index c9635e93..ea56306a 100644 --- a/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/ValueProvider.java +++ b/org.eclipse.m2e.editor/src/org/eclipse/m2e/editor/pom/ValueProvider.java @@ -16,7 +16,6 @@ package org.eclipse.m2e.editor.pom; * Value provider for retrieving and creating holder element values * * @author Eugene Kuleshov - * @deprecated to be removed soon */ public abstract class ValueProvider<T> { diff --git a/org.eclipse.m2e.integration.tests.common/src/org/eclipse/m2e/integration/tests/common/UIIntegrationTestCase.java b/org.eclipse.m2e.integration.tests.common/src/org/eclipse/m2e/integration/tests/common/UIIntegrationTestCase.java index 699dfa00..65f377a6 100644 --- a/org.eclipse.m2e.integration.tests.common/src/org/eclipse/m2e/integration/tests/common/UIIntegrationTestCase.java +++ b/org.eclipse.m2e.integration.tests.common/src/org/eclipse/m2e/integration/tests/common/UIIntegrationTestCase.java @@ -942,15 +942,15 @@ public abstract class UIIntegrationTestCase { return editor; } - protected Model getModel(final MavenPomEditor editor) throws Exception { - Model model = (Model) UIThreadTask.executeOnEventQueue(new UIThreadTask() { - - public Object runEx() throws Exception { - return editor.readProjectDocument(); - } - }); - return model; - } +// protected Model getModel(final MavenPomEditor editor) throws Exception { +// Model model = (Model) UIThreadTask.executeOnEventQueue(new UIThreadTask() { +// +// public Object runEx() throws Exception { +// return editor.readProjectDocument(); +// } +// }); +// return model; +// } /** * Create an archetype project and assert that it has proper natures & builders, and no error markers |