Frameworks JAR talking to Plugin JAR
Post here questions and problems related to oXygen frameworks/document types.
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
Hello Team ,
We have a oxygen plugin as jar placed inside C:\Program Files\Oxygen XML Editor 24\plugins , this plugin has some menus and has some business logic which will connect to a Database to retrieve some folders/files.
We have framework project under C:\Program Files\Oxygen XML Editor 24\frameworks\"myown-oxygen-dita " which has some custom java code to customize the Menus under "DITA" , when we open the menu item , the menu item opens a swing window and that swing window has to talk to the business logic inside the oxygen plugin jar to list files/folders.
would be great please suggest how to make this happen?
Thanks,
vishwa
We have a oxygen plugin as jar placed inside C:\Program Files\Oxygen XML Editor 24\plugins , this plugin has some menus and has some business logic which will connect to a Database to retrieve some folders/files.
We have framework project under C:\Program Files\Oxygen XML Editor 24\frameworks\"myown-oxygen-dita " which has some custom java code to customize the Menus under "DITA" , when we open the menu item , the menu item opens a swing window and that swing window has to talk to the business logic inside the oxygen plugin jar to list files/folders.
would be great please suggest how to make this happen?
Thanks,
vishwa
Thanks,
vishwa
vishwa
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Frameworks JAR talking to Plugin JAR
Hi,
Usually Oxygen creates separate java class loaders for each plugin and framework so they cannot communicate with each other.
If you edit in the Oxygen Preferences->"Document Type Associations" page your custom framework, in the Classpath tab you can set the ID of the parent plugin:
https://www.oxygenxml.com/doc/versions/ ... yn_bgk_54b
and this should allow your plugin's code to call static methods from the plugin side.
Regards,
Radu
Usually Oxygen creates separate java class loaders for each plugin and framework so they cannot communicate with each other.
If you edit in the Oxygen Preferences->"Document Type Associations" page your custom framework, in the Classpath tab you can set the ID of the parent plugin:
https://www.oxygenxml.com/doc/versions/ ... yn_bgk_54b
and this should allow your plugin's code to call static methods from the plugin side.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
Thanks Radu for quick response.
what does it mean "and this should allow your plugin's code to call static methods from the plugin side.?"
am not understanding this sorry.
what does it mean "and this should allow your plugin's code to call static methods from the plugin side.?"
am not understanding this sorry.
Thanks,
vishwa
vishwa
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Frameworks JAR talking to Plugin JAR
Hi,
For example if in your plugin extension you keep a static reference to the extension instance like this:
On the framework side, in the framework's Java code you could do something like "MyPluginExtension.getInstance().doSomething()".
To compile the framework's Java code you would need the plugin's JAR libraries in the classpath but when Oxygen is running you will not need in the framework's Classpath list references to the plugin's libraries if you specify in the Classpath list the parent plugin ID.
Regards,
Radu
For example if in your plugin extension you keep a static reference to the extension instance like this:
Code: Select all
public class MyPluginExtension implements WorkspaceAccessPluginExtension {
private static MyPluginExtension instance;
/**
* @return Returns the instance.
*/
public static MyPluginExtension getInstance() {
return instance;
}
@Override
public void applicationStarted(StandalonePluginWorkspace pluginWorkspaceAccess) {
this.instance = this;
}
public void doSomething() {
//
}
public boolean applicationClosing() {
return true;
}
}
To compile the framework's Java code you would need the plugin's JAR libraries in the classpath but when Oxygen is running you will not need in the framework's Classpath list references to the plugin's libraries if you specify in the Classpath list the parent plugin ID.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
Thanks Radu for the detailed explanation , we will try this , and let you know how this goes.
Thanks,
vishwa
Thanks,
vishwa
Thanks,
vishwa
vishwa
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
Hi Radu ....here one more blocker I see
in my frameworks jar , i need the reference of StandalonePluginWorkspace of my plugin extension , so what am doing here
--------------------------------------------------------------------------------------------------------------------------------------------------------------
MyPluginExtension
--------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
in my frameworks jar ,
---------------------------------------------------------------------------------------------------------------------------------------------------------
getting workspace acess using MyPluginExtension.getWorkspace() is always returning null ,
here is my java class inside frameworks jar
Would you please help me here , is this correct way am doing?
in my frameworks jar , i need the reference of StandalonePluginWorkspace of my plugin extension , so what am doing here
--------------------------------------------------------------------------------------------------------------------------------------------------------------
MyPluginExtension
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Code: Select all
public class MyPluginExtension implements WorkspaceAccessPluginExtension {
private static MyPluginExtension instance;
private static StandalonePluginWorkspace myPluginWorkspace;
/**
* @return Returns the instance.
*/
public static MyPluginExtension getInstance() {
return instance;
}
@Override
public void applicationStarted(StandalonePluginWorkspace pluginWorkspaceAccess) {
this.instance = this;
/** here am setting the pluginWorkspaceAccess -call setWorkspace method*/
setWorkspace(pluginWorkspaceAccess);
} //applicationStarted closed
public void doSomething() {
//
}
public boolean applicationClosing() {
return true;
}
public static StandalonePluginWorkspace getWorkspace() {
return myPluginWorkspace;
}
public static void setWorkspace(StandalonePluginWorkspace pluginWorkspaceAccess) {
myPluginWorkspace = pluginWorkspaceAccess;
}
in my frameworks jar ,
---------------------------------------------------------------------------------------------------------------------------------------------------------
getting workspace acess using MyPluginExtension.getWorkspace() is always returning null ,
here is my java class inside frameworks jar
Code: Select all
if (AuthorNode.NODE_TYPE_ELEMENT == authorNode.getType()) {
AuthorNode parent = authorNode.getParent();
if (parent != null) {
WSEditor editor =null;
if (AuthorNode.NODE_NAME_DOCUMENT.equals(parent.getName())) {
URL location = authorNode.getXMLBaseURL();
if(MyPluginExtension.getWorkspace()!=null) {
editor = MyPluginExtension.getWorkspace().getEditorAccess(location, 0);
}else{
System.out.println("Workspace object is null");
if (editor != null && editor.getCurrentPage() instanceof WSAuthorEditorPage) {
WSAuthorEditorPage authorPage = (WSAuthorEditorPage)editor.getCurrentPage();
if (!authorPage.isEditable()) {
styles.setProperty(Styles.KEY_BACKGROUND_COLOR, Color.COLOR_LIGHT_GRAY);
}
}
}
// WSEditor editor = AuthoringBridge.getWorkspace().getEditorAccess(location, 0);
}
}
}
Thanks,
vishwa
vishwa
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Frameworks JAR talking to Plugin JAR
Hi,
We have our own a singleton access to the plugin workspace which you can use in your framework's Java code:
So that singleton access we offer should always work on the plugin side.
Other than that, what you tried should work as long as in the Oxygen Preferences->"Document Type Associations" page you edit your custom framework and in the Classpath tab you set the ID of the parent plugin. The plugin ID is specified in the plugin.xml file.
Regards,
Radu
We have our own a singleton access to the plugin workspace which you can use in your framework's Java code:
Code: Select all
ro.sync.exml.workspace.api.PluginWorkspaceProvider.getPluginWorkspace();
Other than that, what you tried should work as long as in the Oxygen Preferences->"Document Type Associations" page you edit your custom framework and in the Classpath tab you set the ID of the parent plugin. The plugin ID is specified in the plugin.xml file.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
I did this step
Oxygen Preferences->"Document Type Associations" page you edit your custom framework and in the Classpath tab you set the ID of the parent plugin. The plugin ID is specified in the plugin.xml file.
but i am getting an error
22:50:25.964 [main] ERROR ro.sync.exml.plugin.PluginManager - Failed to inject dependency to class com.xxx.xxx.xxx.workspace.xxxWorkspaceAccessPluginExtension
Oxygen Preferences->"Document Type Associations" page you edit your custom framework and in the Classpath tab you set the ID of the parent plugin. The plugin ID is specified in the plugin.xml file.
but i am getting an error
22:50:25.964 [main] ERROR ro.sync.exml.plugin.PluginManager - Failed to inject dependency to class com.xxx.xxx.xxx.workspace.xxxWorkspaceAccessPluginExtension
Thanks,
vishwa
vishwa
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Frameworks JAR talking to Plugin JAR
Hi,
I'm afraid I do not know why this does not work for your particular case. Can you paste the entire contents of your plugin.xml file in a followup email?
One more thing, have you tried using the alternative I gave you, the "ro.sync.exml.workspace.api.PluginWorkspaceProvider.getPluginWorkspace()" singleton access in your framework's Java code?
Regards,
Radu
I'm afraid I do not know why this does not work for your particular case. Can you paste the entire contents of your plugin.xml file in a followup email?
One more thing, have you tried using the alternative I gave you, the "ro.sync.exml.workspace.api.PluginWorkspaceProvider.getPluginWorkspace()" singleton access in your framework's Java code?
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
Yes Radu i used this
ro.sync.exml.workspace.api.PluginWorkspaceProvider.getPluginWorkspace()" singleton access in my frameworks code.
and the Document type associations used id as com.xxx.xxx.xxx.workspace.WorkspaceAccess as parent plugin ID
here is the plugin.xml in mycase
ro.sync.exml.workspace.api.PluginWorkspaceProvider.getPluginWorkspace()" singleton access in my frameworks code.
and the Document type associations used id as com.xxx.xxx.xxx.workspace.WorkspaceAccess as parent plugin ID
here is the plugin.xml in mycase
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!-- The plugin.dtd file is located in the OXYGEN_INSATALL_DIR/plugins directory -->
<!DOCTYPE plugin SYSTEM "../plugin.dtd">
<plugin
id="com.xxx.xxx.xxx.workspace.WorkspaceAccess"
name="xxxWorkspaceAccess"
description="Test"
version="1.0-SNAPSHOT"
vendor="oXygen XML"
class="com.xxx.xxx.xxx.workspace.WorkspaceAccessPlugin"
classLoaderType="preferReferencedResources">
<runtime>
<librariesFolder name="lib" />
<library name="target/classes" />
<librariesFolder name="target/lib" />
</runtime>
<extension type="WorkspaceAccess"
class="com.xxx.xxx.xxx.workspace.xxxWorkspaceAccessPluginExtension"/>
<!--The sample view which will present messages from the sample plugin.-->
<view id="xxxxWorkspaceAccessID" initialSide="WEST" initialRow="0" description="xxxOxygenWorkspace" />
<!--The sample toolbar which will present messages from the sample plugin.-->
<toolbar id="xxxxWorkspaceAccessID" initialSide="NORTH" initialRow="1"/>
</plugin>
Thanks,
vishwa
vishwa
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Frameworks JAR talking to Plugin JAR
Hi,
I'm afraid that without reproducing the problem on my side and adding logging in our code I do not know precisely why you get that "Failed to inject dependency to class" error in the console.
In my opinion, you should try to edit your framework customization and remove the reference to the parent plugin ID, then use in the framework Java code the "ro.sync.exml.workspace.api.PluginWorkspaceProvider.getPluginWorkspace()" singleton access that we provide.
Regards,
Radu
I'm afraid that without reproducing the problem on my side and adding logging in our code I do not know precisely why you get that "Failed to inject dependency to class" error in the console.
In my opinion, you should try to edit your framework customization and remove the reference to the parent plugin ID, then use in the framework Java code the "ro.sync.exml.workspace.api.PluginWorkspaceProvider.getPluginWorkspace()" singleton access that we provide.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
surprisingly this error "Failed to inject dependency to class" error in the console. not showing anymore.
but wanted to ask you here
We have our java.nio custom filesystem , and we are creating and initializing custom filesystem inside the method
and then inside frameworks jar
tried this
but my customfileSystemObject is always returning null
would you please help me here.
but wanted to ask you here
We have our java.nio custom filesystem , and we are creating and initializing custom filesystem inside the method
Code: Select all
private static FileSystem customfileSystemObject =null;
public void applicationStarted(StandalonePluginWorkspace pluginWorkspaceAccess)
{
customfileSystemObject initialized and created
/** and then i used a static method setFileSystem() out side applicationStarted to set the the same.
setFileSystem(customfileSystemObject);
}
/**
* @param usethisFileSystem
*/
public static void setFileSystem(FileSystem usethisFileSystem) {
customfileSystemObject = usethisFileSystem;
}
/**
* @return
*/
public static FileSystem getFileSystem() {
return customfileSystemObject ;
}
tried this
Code: Select all
FileSystem customfileSystemObject = xxxWorkspaceAccessPluginExtension.getFileSystem();
would you please help me here.
Thanks,
vishwa
vishwa
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Frameworks JAR talking to Plugin JAR
Hi,
A hack (which should work) would be to store the file system object on the plugin side in the UIManager map:
and on the framework Java code side to retrieve it like:
Other than that, the elegant way would have been to add the parent plugin ID in the framework configuration, but this did not seem to work for you.
And I do not understand why it did not. The framework configuration has a "Classpath" list, it should have referenced in that classpath list JAR libraries which are not used by the plugin itself. So I think this would have worked if you had separate JAR libraries containing the Java code for the framework and for the plugin.
Regards,
Radu
A hack (which should work) would be to store the file system object on the plugin side in the UIManager map:
Code: Select all
javax.swing.UIManager.put("MY_KEY", filesystem);
Code: Select all
FileSystem fs = javax.swing.UIManager.get("MY_KEY");
And I do not understand why it did not. The framework configuration has a "Classpath" list, it should have referenced in that classpath list JAR libraries which are not used by the plugin itself. So I think this would have worked if you had separate JAR libraries containing the Java code for the framework and for the plugin.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
Thanks Radu , the trick
(FileSystem) UIManager.get("KEY_TO_FILE_SYSTEM"); worked for me.
as we have customized the Menu Item under the menu "DITA" and now we are able to invoke the plugin classes from the frameworks.
for the first time the menu items are showing fine , but next time the DITA menu items are showing with a overlapped as shown below![Image]()
(FileSystem) UIManager.get("KEY_TO_FILE_SYSTEM"); worked for me.
as we have customized the Menu Item under the menu "DITA" and now we are able to invoke the plugin classes from the frameworks.
for the first time the menu items are showing fine , but next time the DITA menu items are showing with a overlapped as shown below
error.png
any suggestions please?You do not have the required permissions to view the files attached to this post.
Thanks,
vishwa
vishwa
-
- Posts: 9431
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Frameworks JAR talking to Plugin JAR
Hi,
Maybe you could have started a new thread for this other problem. How exactly did you customize the top level "DITA" menu? Can you give me some sample source code similar to how you customize it on your side?
Regards,
Radu
Maybe you could have started a new thread for this other problem. How exactly did you customize the top level "DITA" menu? Can you give me some sample source code similar to how you customize it on your side?
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 168
- Joined: Fri Feb 28, 2020 4:02 pm
Re: Frameworks JAR talking to Plugin JAR
Post by vishwavaranasi »
Thanks Radu, soon I will write my implementation sample code , we will see if that createing any other threads.
Thanks,
vishwa
Thanks,
vishwa
Thanks,
vishwa
vishwa
Return to “SDK-API, Frameworks - Document Types”
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service