Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.m2e.core.ui')
-rw-r--r--org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF8
-rw-r--r--org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java102
2 files changed, 81 insertions, 29 deletions
diff --git a/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF b/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
index 69abd3c2..dbbb343f 100644
--- a/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.m2e.core.ui/META-INF/MANIFEST.MF
@@ -7,7 +7,7 @@ Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
Bundle-Localization: plugin
Export-Package: org.eclipse.m2e.core.ui.internal;x-internal:=true,
- org.eclipse.m2e.core.ui.internal.actions;x-internal:=true,
+ org.eclipse.m2e.core.ui.internal.actions;x-friends:="org.eclipse.m2e.editor",
org.eclipse.m2e.core.ui.internal.components;x-internal:=true,
org.eclipse.m2e.core.ui.internal.console;x-internal:=true,
org.eclipse.m2e.core.ui.internal.dialogs;x-friends:="org.eclipse.m2e.editor",
@@ -15,11 +15,11 @@ Export-Package: org.eclipse.m2e.core.ui.internal;x-internal:=true,
org.eclipse.m2e.core.ui.internal.lifecyclemapping;x-internal:=true,
org.eclipse.m2e.core.ui.internal.preferences;x-internal:=true,
org.eclipse.m2e.core.ui.internal.search;x-internal:=true,
- org.eclipse.m2e.core.ui.internal.search.util;x-internal:=true,
- org.eclipse.m2e.core.ui.internal.util;x-internal:=true,
+ org.eclipse.m2e.core.ui.internal.search.util;x-friends:="org.eclipse.m2e.editor",
+ org.eclipse.m2e.core.ui.internal.util;x-friends:="org.eclipse.m2e.editor",
org.eclipse.m2e.core.ui.internal.views;x-internal:=true,
org.eclipse.m2e.core.ui.internal.views.nodes;x-internal:=true,
- org.eclipse.m2e.core.ui.internal.wizards;x-internal:=true
+ org.eclipse.m2e.core.ui.internal.wizards;x-friends:="org.eclipse.m2e.editor"
Bundle-Activator: org.eclipse.m2e.core.ui.internal.M2EUIPluginActivator
Bundle-ActivationPolicy: lazy
Require-Bundle: org.eclipse.osgi;bundle-version="3.5.2",
diff --git a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java
index 76a69e0d..8efc3c68 100644
--- a/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java
+++ b/org.eclipse.m2e.core.ui/src/org/eclipse/m2e/core/ui/internal/editing/PomEdits.java
@@ -24,6 +24,7 @@ import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentExtension4;
import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.sse.core.internal.undo.IStructuredTextUndoManager;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
@@ -373,39 +374,53 @@ public class PomEdits {
//TODO we might want to attempt iterating opened editors and somehow initialize those
// that were not yet initialized. Then we could avoid saving a file that is actually opened, but was never used so far (after restart)
try {
- domModel = tuple.getModel() != null ? tuple.getModel() :
- (tuple.getFile() != null
- ? (IDOMModel) StructuredModelManager.getModelManager().getModelForEdit(tuple.getFile())
- : (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForEdit(tuple.getDocument())); //existing shall be ok here..
- //let the model know we make changes
- domModel.aboutToChangeModel();
- IStructuredTextUndoManager undo = domModel.getStructuredDocument().getUndoManager();
- DocumentRewriteSession session = null;
- //let the document know we make changes
- if (domModel.getStructuredDocument() instanceof IDocumentExtension4) {
- IDocumentExtension4 ext4 = (IDocumentExtension4)domModel.getStructuredDocument();
- session = ext4.startRewriteSession(DocumentRewriteSessionType.UNRESTRICTED_SMALL);
- }
- undo.beginRecording(domModel);
+ DocumentRewriteSession session = null;
+ IStructuredTextUndoManager undo = null;
+ if (tuple.isReadOnly()) {
+ domModel = (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForRead(tuple.getDocument());
+ if (domModel == null) {
+ domModel = (IDOMModel) StructuredModelManager.getModelManager().getModelForRead((IStructuredDocument)tuple.getDocument());
+ }
+ } else {
+ domModel = tuple.getModel() != null ? tuple.getModel() :
+ (tuple.getFile() != null
+ ? (IDOMModel) StructuredModelManager.getModelManager().getModelForEdit(tuple.getFile())
+ : (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForEdit(tuple.getDocument())); //existing shall be ok here..
+ //let the model know we make changes
+ domModel.aboutToChangeModel();
+ undo = domModel.getStructuredDocument().getUndoManager();
+ //let the document know we make changes
+ if (domModel.getStructuredDocument() instanceof IDocumentExtension4) {
+ IDocumentExtension4 ext4 = (IDocumentExtension4)domModel.getStructuredDocument();
+ session = ext4.startRewriteSession(DocumentRewriteSessionType.UNRESTRICTED_SMALL);
+ }
+ undo.beginRecording(domModel);
+ }
+
try {
tuple.getOperation().process(domModel.getDocument());
} finally {
- undo.endRecording(domModel);
- if (session != null && domModel.getStructuredDocument() instanceof IDocumentExtension4) {
- IDocumentExtension4 ext4 = (IDocumentExtension4)domModel.getStructuredDocument();
- ext4.stopRewriteSession(session);
+ if (!tuple.isReadOnly()) {
+ undo.endRecording(domModel);
+ if (session != null && domModel.getStructuredDocument() instanceof IDocumentExtension4) {
+ IDocumentExtension4 ext4 = (IDocumentExtension4)domModel.getStructuredDocument();
+ ext4.stopRewriteSession(session);
+ }
+ domModel.changedModel();
}
- domModel.changedModel();
}
} finally {
if(domModel != null) {
-
- //for ducuments saving shall only happen when the model is not held elsewhere (eg. in opened view)
- //for files, save always
- if(tuple.getFile() != null || domModel.getReferenceCountForEdit() == 1) {
- domModel.save();
+ if (tuple.isReadOnly()) {
+ domModel.releaseFromRead();
+ } else {
+ //for ducuments saving shall only happen when the model is not held elsewhere (eg. in opened view)
+ //for files, save always
+ if(tuple.getFile() != null || domModel.getReferenceCountForEdit() == 1) {
+ domModel.save();
+ }
+ domModel.releaseFromEdit();
}
- domModel.releaseFromEdit();
}
}
}
@@ -416,6 +431,7 @@ public class PomEdits {
private final IFile file;
private final IDocument document;
private final IDOMModel model;
+ private boolean readOnly = false;
/**
* operation on top of IFile is always saved
@@ -436,11 +452,21 @@ public class PomEdits {
* @param operation
*/
public OperationTuple(IDocument document, PomEdits.Operation operation) {
+ this(document, operation, false);
+ }
+ /**
+ * operation on top of IDocument is only saved when noone else is editing the document.
+ * @param document
+ * @param operation
+ * @param readonly operation that doesn't modify the content. Will only get the read, not edit model, up to the user of the code to ensure no edits happen
+ */
+ public OperationTuple(IDocument document, PomEdits.Operation operation, boolean readOnly) {
assert operation != null;
this.document = document;
this.operation = operation;
file = null;
model = null;
+ this.readOnly = readOnly;
}
/**
* only use for unmanaged models
@@ -455,6 +481,12 @@ public class PomEdits {
file = null;
}
+ /**
+ * @return Returns the readOnly.
+ */
+ public boolean isReadOnly() {
+ return readOnly;
+ }
public IFile getFile() {
return file;
@@ -545,6 +577,26 @@ public class PomEdits {
return toMatch != null && toMatch.trim().equals(matchingValue);
}
};
+ }
+
+ /**
+ *
+ * keeps internal state, needs to be recreated for each query, when used in conjunction with out matchers shall probably be placed last.
+ * @param elementName
+ * @param index
+ * @return
+ */
+ public static Matcher childAt(final int index) {
+ return new Matcher() {
+ int count = 0;
+ public boolean matches(Element child) {
+ if (count == index) {
+ return true;
+ }
+ count++;
+ return false;
+ }
+ };
}
} \ No newline at end of file

Back to the top