Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Bullen2017-07-31 17:19:42 +0000
committerLucas Bullen2017-08-21 14:47:42 +0000
commit32c56e10e86ba1147e64db6af1b4cd1e3b578fc5 (patch)
treec7f38f18e3fffc007ca9edaced8ec8456432d0ae
parent65b67ddf98b557a1bbe172ca1af5f6625e1d79a5 (diff)
downloadeclipse.pde.ui-32c56e10e86ba1147e64db6af1b4cd1e3b578fc5.tar.gz
eclipse.pde.ui-32c56e10e86ba1147e64db6af1b4cd1e3b578fc5.tar.xz
eclipse.pde.ui-32c56e10e86ba1147e64db6af1b4cd1e3b578fc5.zip
Bug 520216 - Add generic target definition editor as a tabI20170823-2000I20170822-2000
Change-Id: Ic7a9865db6bb88ad27d973b5948351a07661d05d Signed-off-by: Lucas Bullen <lbullen@redhat.com>
-rw-r--r--ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF3
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java2
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/JRESection.java3
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java120
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties1
5 files changed, 106 insertions, 23 deletions
diff --git a/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF
index 37d9115abc..7c24474c6a 100644
--- a/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF
@@ -125,6 +125,7 @@ Require-Bundle:
Eclipse-LazyStart: true
Import-Package: com.ibm.icu.text,
org.eclipse.jdt.debug.core,
- org.eclipse.jdt.debug.ui.console
+ org.eclipse.jdt.debug.ui.console,
+ org.eclipse.ui.internal.genericeditor
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
index ad1779b0f8..fcef6e6661 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java
@@ -2675,6 +2675,8 @@ public class PDEUIMessages extends NLS {
public static String ManifestContentMergeViewer_title;
+ public static String GenericEditorTab_title;
+
public static String EnvironmentPage_title;
public static String JRESection_description;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/JRESection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/JRESection.java
index 06fa04abd1..81a59b98e9 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/JRESection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/JRESection.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.pde.internal.ui.editor.targetdefinition;
-import org.eclipse.pde.core.target.ITargetDefinition;
-
import static org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter;
import java.util.TreeSet;
@@ -19,6 +17,7 @@ import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
+import org.eclipse.pde.core.target.ITargetDefinition;
import org.eclipse.pde.internal.core.util.VMUtil;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.pde.internal.ui.SWTFactory;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java
index e3ede0bd5f..5001efda59 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/targetdefinition/TargetEditor.java
@@ -7,12 +7,16 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Lucas Bullen (Red Hat Inc.) - Bug 520216 - Add generic editor as a tab
*******************************************************************************/
package org.eclipse.pde.internal.ui.editor.targetdefinition;
-import java.io.File;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.Job;
@@ -21,10 +25,12 @@ import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.text.*;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.core.target.*;
import org.eclipse.pde.internal.core.*;
+import org.eclipse.pde.internal.core.target.TargetDefinitionPersistenceHelper;
import org.eclipse.pde.internal.core.target.WorkspaceFileTargetHandle;
import org.eclipse.pde.internal.ui.*;
import org.eclipse.pde.internal.ui.shared.target.*;
@@ -39,8 +45,10 @@ import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.*;
+import org.eclipse.ui.internal.genericeditor.ExtensionBasedTextEditor;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.progress.UIJob;
+import org.xml.sax.SAXException;
/**
* Editor for target definition (*.target) files. Interacts with the ITargetDefinition model
@@ -53,6 +61,10 @@ import org.eclipse.ui.progress.UIJob;
public class TargetEditor extends FormEditor {
private List<IManagedForm> fManagedFormPages = new ArrayList<>(2);
+ private ExtensionBasedTextEditor fTextualEditor;
+ private IDocument fTargetDocument;
+ private IDocumentListener fTargetDocumentListener;
+
private InputHandler fInputHandler = new InputHandler();
private TargetChangedListener fTargetChangedListener;
private boolean fDirty;
@@ -69,20 +81,23 @@ public class TargetEditor extends FormEditor {
addPage(new DefinitionPage(this));
addPage(new ContentPage(this));
addPage(new EnvironmentPage(this));
- } catch (PartInitException e) {
+ addTextualEditorPage();
+ } catch (CoreException e) {
PDEPlugin.log(e);
}
}
@Override
public void doSave(IProgressMonitor monitor) {
- commitPages(true);
- try {
- fInputHandler.saveTargetDefinition();
- } catch (CoreException e) {
- PDEPlugin.log(e);
- showError(PDEUIMessages.TargetEditor_3, e);
+ fInputHandler.setSaving(true);
+ if (!isActiveTabTextualEditor()) {
+ markStale();
+ updateTextualEditor();
}
+ fTextualEditor.doSave(monitor);
+ fDirty = false;
+ editorDirtyStateChanged();
+ fInputHandler.setSaving(false);
}
@Override
@@ -131,6 +146,9 @@ public class TargetEditor extends FormEditor {
protected void setDirty(boolean dirty) {
fDirty = fDirty || dirty;
editorDirtyStateChanged();
+ if (fDirty && isActiveTabTextualEditor()) {
+ updateTextualEditor();
+ }
}
@Override
@@ -138,6 +156,18 @@ public class TargetEditor extends FormEditor {
return fDirty || super.isDirty();
}
+ public void markStale() {
+ for (IManagedForm form : fManagedFormPages) {
+ IFormPart[] parts = form.getParts();
+ for (IFormPart part : parts) {
+ if (part instanceof AbstractFormPart) {
+ ((AbstractFormPart) part).markStale();
+ }
+ }
+ }
+ editorDirtyStateChanged();
+ }
+
/*
* @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
* @since 3.7
@@ -350,6 +380,10 @@ public class TargetEditor extends FormEditor {
setInput(fInput);
}
+ public void setSaving(boolean saving) {
+ this.fSaving = saving;
+ }
+
public void setInput(IEditorInput input) {
fInput = input;
fTargetFileInWorkspace = null;
@@ -373,6 +407,15 @@ public class TargetEditor extends FormEditor {
}
/**
+ * Resets the target definition to be newly generated by the target
+ * platform
+ */
+ public void formatTarget() throws CoreException {
+ ITargetPlatformService service = getTargetPlatformService();
+ fTarget = service.newTarget();
+ }
+
+ /**
* @return the target definition that is the input to the editor
*/
public ITargetDefinition getTarget() {
@@ -410,18 +453,6 @@ public class TargetEditor extends FormEditor {
return fTarget;
}
- public void saveTargetDefinition() throws CoreException {
- ITargetPlatformService service = getTargetPlatformService();
- fSaving = true;
- try {
- service.saveTargetDefinition(fTarget);
- TargetEditor.this.fDirty = false;
- TargetEditor.this.editorDirtyStateChanged();
- } finally {
- fSaving = false;
- }
- }
-
private ITargetPlatformService getTargetPlatformService() throws CoreException {
ITargetPlatformService service = (ITargetPlatformService) PDECore.getDefault().acquireService(ITargetPlatformService.class.getName());
if (service == null) {
@@ -452,6 +483,55 @@ public class TargetEditor extends FormEditor {
}
/**
+ * initializes fTargetDocument and fTargetDocumentListener
+ *
+ * @throws PartInitException
+ */
+ private void addTextualEditorPage() throws PartInitException {
+ fTextualEditor = new ExtensionBasedTextEditor();
+ int tabIndex = addPage(fTextualEditor, getEditorInput());
+ setPageText(tabIndex, PDEUIMessages.GenericEditorTab_title);
+
+ fTargetDocument = fTextualEditor.getDocumentProvider().getDocument(getEditorInput());
+
+ fTargetDocumentListener = new IDocumentListener() {
+ @Override
+ public void documentChanged(DocumentEvent event) {
+ try {
+ fInputHandler.formatTarget();
+ TargetDefinitionPersistenceHelper.initFromXML(getTarget(),
+ new ByteArrayInputStream(event.getDocument().get().getBytes(StandardCharsets.UTF_8)));
+ markStale();
+ } catch (CoreException | ParserConfigurationException | SAXException | IOException e) {
+ PDEPlugin.log(e);
+ }
+ }
+
+ @Override
+ public void documentAboutToBeChanged(DocumentEvent event) {
+ // documentChanged used instead
+ }
+ };
+ fTargetDocument.addDocumentListener(fTargetDocumentListener);
+ }
+
+ private void updateTextualEditor() {
+ fTargetDocument.removeDocumentListener(fTargetDocumentListener);
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+ try {
+ TargetDefinitionPersistenceHelper.persistXML(getTarget(), byteArrayOutputStream);
+ fTargetDocument.set(new String(byteArrayOutputStream.toByteArray()));
+ } catch (CoreException | ParserConfigurationException | TransformerException | IOException | SAXException e) {
+ PDEPlugin.log(e);
+ }
+ fTargetDocument.addDocumentListener(fTargetDocumentListener);
+ }
+
+ private boolean isActiveTabTextualEditor() {
+ return getActivePage() == getPageCount() - 1;
+ }
+
+ /**
* When changes are noticed in the target, this listener will resolve the
* target and update the necessary pages in the editor.
*/
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
index 833fa9f6d0..0b363a7a56 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties
@@ -1929,6 +1929,7 @@ EnvironmentSection_description=Specify the target environment. If left blank, t
EnvironmentSection_operationSystem=Operating System:
EnvironmentSection_windowingSystem=Windowing System:
EnvironmentSection_architecture=Architecture:
+GenericEditorTab_title=Source
################Product Editor#####################
Product_overview_configuration = <form><p>The <a href="navigate.configuration">product configuration</a> is based on:</p></form>

Back to the top