diff --git a/sqldeveloper/extension/.classpath b/sqldeveloper/extension/.classpath
index cbcedfdd..c5e9f0bc 100644
--- a/sqldeveloper/extension/.classpath
+++ b/sqldeveloper/extension/.classpath
@@ -8,6 +8,6 @@
-
+
diff --git a/sqldeveloper/extension/README.md b/sqldeveloper/extension/README.md
index 698918db..ebaf44f2 100644
--- a/sqldeveloper/extension/README.md
+++ b/sqldeveloper/extension/README.md
@@ -6,7 +6,14 @@ Depending on requirements, this can be done in either XML or java and deployed b
### Contents
+* [Set Up / Tutorial](./setup.md) - A step by step guide to building your first extension and check for updates bundle.
+
+
* ["Simple" User Extensions (XML)](xml)
+
+
* [Standard Extensions (java)](java)
+
+
* [Check For Updates (cfu)](cfu)
\ No newline at end of file
diff --git a/sqldeveloper/extension/build.properties b/sqldeveloper/extension/build.properties
index 7db32b29..25162708 100644
--- a/sqldeveloper/extension/build.properties
+++ b/sqldeveloper/extension/build.properties
@@ -5,7 +5,8 @@
# Where sqldev lives. The directory that sqldeveloper/bin is in.
# This is where the builds will deploy the extension
# and where we can find our dependencies
-sqldev.dir=D:/sqldeveloper-4.2.0.17.089.1709/sqldeveloper
+#sqldev.dir=D:/sqldeveloper-4.2.0.17.089.1709/sqldeveloper
+sqldev.dir=D:/sqldeveloper-18.1.0/sqldeveloper
# Information about the company or person creating the extension
extension.owner=Oracle Examples
diff --git a/sqldeveloper/extension/buildtools/ant/classpaths.xml b/sqldeveloper/extension/buildtools/ant/classpaths.xml
index cc140bd9..3e6a0f92 100644
--- a/sqldeveloper/extension/buildtools/ant/classpaths.xml
+++ b/sqldeveloper/extension/buildtools/ant/classpaths.xml
@@ -107,7 +107,8 @@ limitations under the License.
-
+
+
diff --git a/sqldeveloper/extension/cfu/README.md b/sqldeveloper/extension/cfu/README.md
index 6c9ea722..bdf9d7b4 100644
--- a/sqldeveloper/extension/cfu/README.md
+++ b/sqldeveloper/extension/cfu/README.md
@@ -1,6 +1,6 @@
# SQL Developer Examples
## Check For Updates (cfu)
This is a bit of a table of contents trick to bring cfu closer to the top.
-Go to one of the projects and run the cfu ant task. The results will be in the built/cfu directory in the project.
+Go to one of the projects and run the _cfu ant task. The results will be in the built/cfu directory in the project.
* [Packaged XML extension](../xml/packaged)
* [Java extension](../java/DependencyExample)
diff --git a/sqldeveloper/extension/images/cfu-install-local-1.png b/sqldeveloper/extension/images/cfu-install-local-1.png
new file mode 100644
index 00000000..f4a4ac6b
Binary files /dev/null and b/sqldeveloper/extension/images/cfu-install-local-1.png differ
diff --git a/sqldeveloper/extension/images/get-examples.png b/sqldeveloper/extension/images/get-examples.png
new file mode 100644
index 00000000..93d39bea
Binary files /dev/null and b/sqldeveloper/extension/images/get-examples.png differ
diff --git a/sqldeveloper/extension/java/ContextMenuAction/build.properties b/sqldeveloper/extension/java/ContextMenuAction/build.properties
index 10d44c17..95cd969c 100644
--- a/sqldeveloper/extension/java/ContextMenuAction/build.properties
+++ b/sqldeveloper/extension/java/ContextMenuAction/build.properties
@@ -1,7 +1,7 @@
extension.id=oracle.db.example.sqldeveloper.extension.contextMenuAction
extension.name=Context Menu Action
extension.descr=Example context menu action on FUNCTION, PROCEURE code editor to insert static string
-extension.version=1.0.0
+extension.version=18.1.0
extension.resources=oracle.db.example.sqldeveloper.extension.contextMenuAction.ExtensionResources
extension.lib=external:$oracle.fcp.home$/sqldeveloper/extensions/${extension.id}/lib
diff --git a/sqldeveloper/extension/java/DependencyExample/DependencyExample.userlibraries b/sqldeveloper/extension/java/DependencyExample/DependencyExample.userlibraries
index 59133bf6..570e29f3 100644
--- a/sqldeveloper/extension/java/DependencyExample/DependencyExample.userlibraries
+++ b/sqldeveloper/extension/java/DependencyExample/DependencyExample.userlibraries
@@ -2,7 +2,7 @@
-
+
diff --git a/sqldeveloper/extension/java/DependencyExample/README.md b/sqldeveloper/extension/java/DependencyExample/README.md
index f669e03c..347a7fe5 100644
--- a/sqldeveloper/extension/java/DependencyExample/README.md
+++ b/sqldeveloper/extension/java/DependencyExample/README.md
@@ -1,20 +1,36 @@
# SQL Developer Examples
## DependencyExample
-This example is built with ant but is also set up for editing & (remote) debugging in the eclipse extension project.
+This example is built with ant but is also set up for editing & (remote) debugging in the eclipse extension project.
* Building this example requires two external libraries. Copy the required jar files to DependencyExample/lib.
The exact jars needed from them can be found in *DependencyExample/DependencyExample.userlibraries* which you will also need to import to use eclipse.
- * [FXDiagram 0.35.0](http://dl.bintray.com/jankoehnlein/FXDiagram/standalone/:fxdiagram-jars-0.35.0.zip "fxdiagram-jars-0.35.0.zip")
+ * [FXDiagram 0.35.0](http://dl.bintray.com/jankoehnlein/FXDiagram/standalone/fxdiagram-jars-0.35.0.zip "fxdiagram-jars-0.35.0.zip")
* [KIELER KLay Layouters 0.14.0](http://rtsys.informatik.uni-kiel.de/~kieler/files/release_pragmatics_2015-02/klay/klay_2015-02.jar "klay_2015-02.jar")
[Set up your environment](../../setup.md), get the required libraries (see above), build the (default) deploy target, and start SQLDeveloper from the command line WITH THE (sqldeveloper/bin/)sqldeveloper -clean OPTION.
On the first run, only the triggers defined in extension.xml will load.
+

+
In our case, that means the context menu entry only and NOT the dependency viewer tab referenced in the hook section (via DependencyExampleGraphViewer.xml which is in the directory the hook says to load xml from)
+

+
Which opens the dependency diagram AND causes the rest of the extension hooks to load. (The editor tab name is pulled from the 1st selected node but will switch when focus goes to another editor and back. TODO: This really should be implemented as it's own dockable, not as an 'editor'.)
+

-the diagram is scrollable, zoomable, editable, and can be exported to svg (all thanks to the FXDiagram library.) Double clicking on a node performs a "DrillLink" to open the SQL Developer editor for that node.
+
+The diagram is scrollable, zoomable, editable, and can be exported to svg (all thanks to the FXDiagram library.)
+Controls:
+* Scroll with mouse wheel
+* Zoom with Ctrl + mouse wheel
+* Select with left click, Ctrl+left click to add to selection, or draw bounding box with mouse
+* Move nodes / selection / diagram by holding down right mouse button & dragging. Left button also works for node / selection
+* Double clicking on a node performs a "DrillLink" to open the SQL Developer editor for that node.
+* Right click brings up context menu. Hover over icons to see what is available. Note that do / undo refer to changes made to the diagram since opening it.
+

+
Now that it is fully loaded, the viewer definition is active and a dependency graph tab is added to the object viewers. (The next time a new one is opened.)
+

diff --git a/sqldeveloper/extension/java/DependencyExample/build.properties b/sqldeveloper/extension/java/DependencyExample/build.properties
index c7c4ca62..e559d6fc 100644
--- a/sqldeveloper/extension/java/DependencyExample/build.properties
+++ b/sqldeveloper/extension/java/DependencyExample/build.properties
@@ -1,7 +1,7 @@
extension.id=oracle.db.example.sqldeveloper.extension.dependency
extension.name=Example Dependency Viewer
extension.descr=Object viewer(s) for dependency analysis
-extension.version=1.0.0
+extension.version=18.1.0
extension.resources=oracle.db.example.sqldeveloper.extension.dependency.DependencyExampleResources
# Note that there are attribution and potential license requirements if you DISTRIBUTE
# this example with the third party libraries included.
diff --git a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/DependencyExampleController.java b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/DependencyExampleController.java
index 9891b575..3f6fbf99 100644
--- a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/DependencyExampleController.java
+++ b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/DependencyExampleController.java
@@ -113,6 +113,7 @@ private Editor openEditor(Context context) {
*/
@Override
public boolean update(IdeAction action, Context context) {
+ action.setEnabled(true);
return true;
}
diff --git a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/DependencyExampleFxControl.java b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/DependencyExampleFxControl.java
index 85f25d0a..719bc594 100644
--- a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/DependencyExampleFxControl.java
+++ b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/DependencyExampleFxControl.java
@@ -45,6 +45,7 @@
import oracle.dbtools.raptor.ui.URLFileChooser;
import oracle.dbtools.util.Logger;
import oracle.ide.Ide;
+import oracle.ide.controls.WaitCursor;
/**
* DependencyExampleFxControl an javaFX custom control to contain the vworkflow UI
@@ -183,14 +184,18 @@ public DependencyExampleModel getViewModel() {
/**
* @param aViewModel the viewModel to set
+ * @param waitCursor
*/
- public void setViewModel(DependencyExampleModel aViewModel) {
+ public void setViewModel(DependencyExampleModel aViewModel, final WaitCursor waitCursor) {
viewModel = aViewModel;
Platform.runLater(() -> {
getViewModel().load();
updateUI();
diagram.applyCss();
diagram.layout();
+ SwingUtilities.invokeLater(() -> {
+ waitCursor.hide();
+ });
});
}
diff --git a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/FxDiagram.java b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/FxDiagram.java
index 07a90aaf..62650732 100644
--- a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/FxDiagram.java
+++ b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/control/FxDiagram.java
@@ -112,7 +112,6 @@ Everyone is permitted to copy and distribute copies of this Agreement, but in or
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
-import javafx.scene.Cursor;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
@@ -239,17 +238,12 @@ public void handle(MouseEvent event) {
lastClickTime = now;
}
if (MouseButton.PRIMARY == event.getButton() && timeBetween < doubleClickThreshold) {
- setCursor(Cursor.WAIT);
SwingUtilities.invokeLater(() -> {
try {
model.performDrill(key);
} catch (Exception e) {
String msg = DependencyExampleResources.format(DependencyExampleResources.DependencyExampleFxControl_drillLink_fail, key);
Logger.warn(FxDiagram.class, msg, e);
- } finally {
- Platform.runLater(() -> {
- FxDiagram.this.setCursor(Cursor.DEFAULT);
- });
}
});
} else {
diff --git a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/viewer/DependencyExampleGraphViewer.java b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/viewer/DependencyExampleGraphViewer.java
index 064bc9a0..23d4e64a 100644
--- a/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/viewer/DependencyExampleGraphViewer.java
+++ b/sqldeveloper/extension/java/DependencyExample/src/oracle/db/example/sqldeveloper/extension/dependency/viewer/DependencyExampleGraphViewer.java
@@ -18,6 +18,7 @@
import java.awt.BorderLayout;
import java.awt.Component;
+import java.awt.Cursor;
import java.util.Collections;
import javafx.application.Platform;
@@ -48,6 +49,7 @@
import oracle.dbtools.util.Logger;
import oracle.ide.Context;
import oracle.ide.Ide;
+import oracle.ide.controls.WaitCursor;
import oracle.ide.editor.AsynchronousEditor;
import oracle.ide.editor.EditorManager;
import oracle.ide.model.UpdateMessage;
@@ -210,7 +212,7 @@ private void initFX(JFXPanel fxPanel) {
try {
dependencyExampleFxControl = new DependencyExampleFxControl();
Scene scene = SceneFactory.createScene(dependencyExampleFxControl.getRoot());
- scene.setCamera(new PerspectiveCamera());
+ // GPU turned off in sqldev 18.1 scene.setCamera(new PerspectiveCamera());
fxPanel.setScene(scene);
}
catch(Exception e) {
@@ -230,6 +232,8 @@ private void loadContentModel(Context context) {
return;
}
}
+ final WaitCursor waitCursor = new WaitCursor(Ide.getMainWindow());
+ waitCursor.show();
dbObject = new DBObject(context.getNode());
multipleSelections = context.getSelection().length > 1;
dependencyModel = new DependencyExampleModel(context);
@@ -245,7 +249,9 @@ protected Object doWork() throws TaskException {
@Override
protected void invokeLater() {
// This is only called if the task finishes and is on the UI thread
- dependencyExampleFxControl.setViewModel(dependencyModel);
+ dependencyExampleFxControl.setViewModel(dependencyModel, waitCursor);
+ // Force update UI
+ EditorManager.getEditorManager().refreshEditorUI(DependencyExampleGraphViewer.this);
}
@Override
diff --git a/sqldeveloper/extension/java/DumpObjectTypesAction/build.properties b/sqldeveloper/extension/java/DumpObjectTypesAction/build.properties
index f54f4081..eb2fc9d1 100644
--- a/sqldeveloper/extension/java/DumpObjectTypesAction/build.properties
+++ b/sqldeveloper/extension/java/DumpObjectTypesAction/build.properties
@@ -1,7 +1,7 @@
extension.id=oracle.db.example.sqldeveloper.extension.dumpObjectTypes
extension.name=Dump Object Types Action
extension.descr=Object action to dump an object type list as INFO to log window.
-extension.version=1.0.0
+extension.version=18.1.0
extension.resources=oracle.db.example.sqldeveloper.extension.dumpObjectTypes.DumpObjectTypesResources
extension.lib=external:$oracle.fcp.home$/sqldeveloper/extensions/${extension.id}/lib
diff --git a/sqldeveloper/extension/java/README.md b/sqldeveloper/extension/java/README.md
index 63c785d8..5ac7a84d 100644
--- a/sqldeveloper/extension/java/README.md
+++ b/sqldeveloper/extension/java/README.md
@@ -2,7 +2,7 @@
## Standard Extensions (java)
Standard extensions are jar files with an [OSGi](https://en.wikipedia.org/wiki/OSGi) manifest and an extension.xml defining the extension and how it integrates with SQL Developer.
-[Set up your environment](../setup.md). If using the eclipse project, also modify paths in *SQLDeveloper4.2.userlibraries* and import into eclipse.
+[Set up your environment](../setup.md). If using the eclipse project, also modify paths in *SQLDeveloper18.1.userlibraries* and import into eclipse.
* [packaged XML](../xml/packaged)
XML Examples packaged as an extension.jar
diff --git a/sqldeveloper/extension/java/SQLDeveloper18.1.userlibraries b/sqldeveloper/extension/java/SQLDeveloper18.1.userlibraries
new file mode 100644
index 00000000..7004cee8
--- /dev/null
+++ b/sqldeveloper/extension/java/SQLDeveloper18.1.userlibraries
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sqldeveloper/extension/setenv.bat b/sqldeveloper/extension/setenv.bat
new file mode 100644
index 00000000..b0910a80
--- /dev/null
+++ b/sqldeveloper/extension/setenv.bat
@@ -0,0 +1,6 @@
+SET ANT_HOME=D:\apache-ant-1.10.3
+SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_152
+SET ANT_BIN=%ANT_HOME%\bin
+SET SQLDEV_BIN=D:\sqldeveloper-18.1.0\sqldeveloper\sqldeveloper\bin
+SET PATH=%PATH%;%ANT_BIN%;%SQLDEV_BIN%
+
diff --git a/sqldeveloper/extension/setup.md b/sqldeveloper/extension/setup.md
index 8dbb9f50..5e24d3b6 100644
--- a/sqldeveloper/extension/setup.md
+++ b/sqldeveloper/extension/setup.md
@@ -1,9 +1,83 @@
# [SQL Developer](http://www.oracle.com/technetwork/developer-tools/sql-developer/) Examples
-## Java set up
+
+## First things first: Getting the pieces
+
+### Java JDK 8
+We are currently using [jdk1.8.0_152](http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html)
+
+### SQL Developer
+You'll need a copy of [SQL Developer](http://www.oracle.com/technetwork/developer-tools/sql-developer/) both as a deployment location for testing and as the source for required library files.
+
+### The Examples
+Currently the SQL Developer examples are part of a larger set that must be downloaded together.
+
+1. Go to the main [oracle-db-examples](/../../) page,
+2. Select the green Clone or download button,
+3. and then the Download ZIP button.
+4. unzip the file somewhere (we only really need the sqldeveloper folder)
+
+
+
+### Third party libraries
+**If** you plan to build the [Dependency Example](java/DependencyExample), you will also need:
+* [FXDiagram 0.35.0](http://dl.bintray.com/jankoehnlein/FXDiagram/standalone/fxdiagram-jars-0.35.0.zip "fxdiagram-jars-0.35.0.zip")
+* [KIELER KLay Layouters 0.14.0](http://rtsys.informatik.uni-kiel.de/~kieler/files/release_pragmatics_2015-02/klay/klay_2015-02.jar "klay_2015-02.jar")
+
+### The build environment
+sqldeveloper/extension is an eclipse project directory but the examples are built using Apache ant. If you don't know or want to use eclipse, you can [download ant](https://ant.apache.org/bindownload.cgi) and do everything simply from the command line.
+
+
+## Wiring it together
### build.properties
* extension/build.properties - Update to point to your SQL Developer installation & optionally change the owner info.
-You need ant or eclipse (or you get to set it up yourself.)
+
+* extension/java/SQLDeveloper18.1.userlibraries - **IF** you are using eclipse, update the paths to point to your SQL Developer installation and import the library.
+
+### Third party libraries
+**If/when** you plan to build the [Dependency Example](java/DependencyExample), see that page for additional set up requirements.
+
+## Making it go
+If you are using eclipse, I'm going to assume you know how to import an existing project and run ant tasks but continue reading to learn about the various ant tasks and how they are used.
+
+If you are using ant from the command line, make sure `ANT_HOME` and `JAVA_HOME` are defined for your environment and that ant is on your `PATH` and accessible from the command line. An example setenv.bat file to do this is in the extension folder. I included sqldeveloper on the path so I wouldn't have to navigate around.
+
+### Ant tasks
+The [XML Packaged](xml/packaged) example and all of the [Java](java) examples use ant to build and deploy the example. The 'heavy lifting' is all defined in buildtools so the individual build.xml files for each example are pretty simple. There only a few targets of interest:
+* `_rebuild` cleans and deploys the example
+
+
+* `_deploy` builds and deploys the example to the target SQL Developer installation (defined in build.properties). Please remember to exit out of SQL developer before running this so you don't confuse yourself. (Which I have great experience with :/ )
+
+
+* `_cfu` creates a check for updates bundle and associated metadata xml file in the built/cfu directory for the example.
+
+
+* `resgen` generates the ResourceBundle java files from the .properties files listed in resfiles.properties. Running this manually - and then refreshing the project - is only "needed" if you are using eclipse and want code completion and the error checker to know about new entries when editing java.
+
+### _deploy Example
+```
+cd /sqldeveloper/extension/xml/packaged
+ant _deploy
+cd /sqldeveloper/bin
+sqldeveloper -clean
+```
+
+### cfu example
+```
+cd /sqldeveloper/extension/xml/packaged
+ant _cfu
+cd /sqldeveloper/bin
+sqldeveloper
+```
+Navigate to Help->Check for Updates
+1. Select Install From Local File(s)
+2. Browse to /sqldeveloper/extension/xml/packaged/built/cfu and select the zip file
+3. Select Next, then Finish on the next page
+4. Accept SQL developer restart
+
+
+
diff --git a/sqldeveloper/extension/xml/packaged/build.properties b/sqldeveloper/extension/xml/packaged/build.properties
index 71a9862b..fff85b46 100644
--- a/sqldeveloper/extension/xml/packaged/build.properties
+++ b/sqldeveloper/extension/xml/packaged/build.properties
@@ -1,4 +1,4 @@
extension.id=oracle.db.examples.sqldeveloper.xml.packaged
extension.name=XML Extension Examples
extension.descr=Extension examples using XML declarations
-extension.version=1.0.0
+extension.version=18.1.0