Skip to content

Commit 7446507

Browse files
committed
Avoid chatty API calls during extension load
Signed-off-by: Mitch Gaffigan <mitch.gaffigan@comcast.net>
1 parent bfe3348 commit 7446507

7 files changed

Lines changed: 62 additions & 4 deletions

File tree

client/src/com/mirth/connect/client/ui/Frame.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,14 +724,16 @@ public void dispose() {
724724
private void loadExtensionMetaData() throws ClientException {
725725
loadedPlugins = mirthClient.getPluginMetaData();
726726
loadedConnectors = mirthClient.getConnectorMetaData();
727+
Map<String, Boolean> extensionStatuses = mirthClient.getExtensionStatuses();
727728

728729
// Register extension JAX-RS providers with the client
729730
Set<String> apiProviderPackages = new HashSet<String>();
730731
Set<String> apiProviderClasses = new HashSet<String>();
731732

732733
for (Object extensionMetaData : CollectionUtils.union(loadedPlugins.values(), loadedConnectors.values())) {
733734
MetaData metaData = (MetaData) extensionMetaData;
734-
if (mirthClient.isExtensionEnabled(metaData.getName())) {
735+
// Check if disabled (unknown extensions are enabled by default)
736+
if (!Boolean.FALSE.equals(extensionStatuses.get(metaData.getName()))) {
735737
for (ApiProvider provider : metaData.getApiProviders(Version.getLatest())) {
736738
switch (provider.getType()) {
737739
case SERVLET_INTERFACE_PACKAGE:

client/src/com/mirth/connect/client/ui/LoadedExtensions.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,21 @@ public void initialize() {
102102
// initialized again
103103
clearExtensionMaps();
104104

105+
Map<String, Boolean> extensionStatuses;
106+
try {
107+
extensionStatuses = PlatformUI.MIRTH_FRAME.mirthClient.getExtensionStatuses();
108+
} catch (Exception e) {
109+
PlatformUI.MIRTH_FRAME.alertThrowable(PlatformUI.MIRTH_FRAME, e);
110+
return;
111+
}
112+
105113
// Order all the plugins by their weight before loading any of them.
106114
Map<String, String> pluginNameMap = new HashMap<String, String>();
107115
NavigableMap<Integer, List<String>> weightedPlugins = new TreeMap<Integer, List<String>>();
108116
for (PluginMetaData metaData : PlatformUI.MIRTH_FRAME.getPluginMetaData().values()) {
109117
try {
110-
if (PlatformUI.MIRTH_FRAME.mirthClient.isExtensionEnabled(metaData.getName())) {
118+
// Check if disabled (unknown extensions are enabled by default)
119+
if (!Boolean.FALSE.equals(extensionStatuses.get(metaData.getName()))) {
111120
extensionVersions.put(metaData.getName(), metaData.getPluginVersion());
112121
if (metaData.getClientClasses() != null) {
113122
for (PluginClass pluginClass : metaData.getClientClasses()) {
@@ -150,7 +159,8 @@ public void initialize() {
150159
// Load connector code template plugins before anything else
151160
for (ConnectorMetaData metaData : PlatformUI.MIRTH_FRAME.getConnectorMetaData().values()) {
152161
try {
153-
if (PlatformUI.MIRTH_FRAME.mirthClient.isExtensionEnabled(metaData.getName())) {
162+
// Check if disabled (unknown extensions are enabled by default)
163+
if (!Boolean.FALSE.equals(extensionStatuses.get(metaData.getName()))) {
154164
extensionVersions.put(metaData.getName(), metaData.getPluginVersion());
155165
if (StringUtils.isNotEmpty(metaData.getTemplateClassName())) {
156166
Class<?> clazz = Class.forName(metaData.getTemplateClassName());
@@ -205,7 +215,8 @@ public void initialize() {
205215

206216
for (ConnectorMetaData metaData : PlatformUI.MIRTH_FRAME.getConnectorMetaData().values()) {
207217
try {
208-
if (PlatformUI.MIRTH_FRAME.mirthClient.isExtensionEnabled(metaData.getName())) {
218+
// Check if disabled (unknown extensions are enabled by default)
219+
if (!Boolean.FALSE.equals(extensionStatuses.get(metaData.getName()))) {
209220

210221
String connectorName = metaData.getName();
211222
ConnectorSettingsPanel connectorSettingsPanel = (ConnectorSettingsPanel) Class.forName(metaData.getClientClassName()).newInstance();

server/src/com/mirth/connect/client/core/Client.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2622,6 +2622,16 @@ public boolean isExtensionEnabled(String extensionName) throws ClientException {
26222622
return getServlet(ExtensionServletInterface.class).isExtensionEnabled(extensionName);
26232623
}
26242624

2625+
/**
2626+
* Returns the enabled status of extensions on the classpath.
2627+
*
2628+
* @see ExtensionServletInterface#getExtensionStatuses
2629+
*/
2630+
@Override
2631+
public Map<String, Boolean> getExtensionStatuses() throws ClientException {
2632+
return getServlet(ExtensionServletInterface.class).getExtensionStatuses();
2633+
}
2634+
26252635
/**
26262636
* Enables or disables an extension.
26272637
*

server/src/com/mirth/connect/client/core/api/servlets/ExtensionServletInterface.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,16 @@ public void uninstallExtension(@Param("extensionPath") @RequestBody(description
111111
@MirthOperation(name = "isExtensionEnabled", display = "Check if extension is enabled", auditable = false)
112112
public boolean isExtensionEnabled(@Param("extensionName") @Parameter(description = "The name of the extension to retrieve.", required = true) @PathParam("extensionName") String extensionName) throws ClientException;
113113

114+
@GET
115+
@Path("/enabled")
116+
@Operation(summary = "Returns the enabled status of extensions on the classpath.")
117+
@ApiResponse(content = { @Content(mediaType = MediaType.APPLICATION_XML, examples = {
118+
@ExampleObject(name = "extensionStatuses", value = "<map><entry><string>Channel Reader</string><boolean>true</boolean></entry></map>") }),
119+
@Content(mediaType = MediaType.APPLICATION_JSON, examples = {
120+
@ExampleObject(name = "extensionStatuses", value = "{\"Channel Reader\":true}") }) })
121+
@MirthOperation(name = "getExtensionStatuses", display = "Get extension enabled statuses", auditable = false)
122+
public Map<String, Boolean> getExtensionStatuses() throws ClientException;
123+
114124
@POST
115125
@Path("/{extensionName}/_setEnabled")
116126
@Operation(summary = "Enables or disables an extension.")

server/src/com/mirth/connect/server/api/servlets/ExtensionServlet.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ public boolean isExtensionEnabled(String extensionName) {
102102
return extensionController.isExtensionEnabled(extensionName);
103103
}
104104

105+
@Override
106+
public Map<String, Boolean> getExtensionStatuses() {
107+
return extensionController.getExtensionStatuses();
108+
}
109+
105110
@Override
106111
public void setExtensionEnabled(String extensionName, boolean enabled) {
107112
try {

server/src/com/mirth/connect/server/controllers/DefaultExtensionController.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,21 @@ public boolean isExtensionEnabled(String extensionName) {
364364
return extensionStatuses.isEnabled(extensionName);
365365
}
366366

367+
@Override
368+
public Map<String, Boolean> getExtensionStatuses() {
369+
Map<String, Boolean> extensionStatusMap = new HashMap<String, Boolean>();
370+
371+
for (MetaData metaData : getPluginMetaData().values()) {
372+
extensionStatusMap.put(metaData.getName(), isExtensionEnabled(metaData.getName()));
373+
}
374+
375+
for (MetaData metaData : getConnectorMetaData().values()) {
376+
extensionStatusMap.put(metaData.getName(), isExtensionEnabled(metaData.getName()));
377+
}
378+
379+
return extensionStatusMap;
380+
}
381+
367382
@Override
368383
public void startPlugins() {
369384
for (ServerPlugin serverPlugin : serverPlugins) {

server/src/com/mirth/connect/server/controllers/ExtensionController.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ public static ExtensionController getInstance() {
8686
*/
8787
public abstract boolean isExtensionEnabled(String name);
8888

89+
/**
90+
* Returns the enabled status of extensions on the classpath, keyed by extension name.
91+
*/
92+
public abstract Map<String, Boolean> getExtensionStatuses();
93+
8994
/**
9095
* Invokes the start method on all loaded server plugins.
9196
*/

0 commit comments

Comments
 (0)