BUGFIX: Extensions.getQuickEntryService() - fixed cache management issue (#742)

Co-authored-by: Andreas <sumerauer@kanzlei-wmv.de>
This commit is contained in:
Andreas Sumerauer 2021-06-26 07:06:40 +02:00 committed by GitHub
parent 5f2f6364da
commit 0bb5aa70f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 29 deletions

View File

@ -265,14 +265,16 @@ public class Extensions {
/** /**
* *
* @param AD_Window_ID * @param AD_Window_ID
* @return IQuickEntryFactory instance or null if AD_Window_ID not found * @return IQuickEntryFactory instance or null if AdWindowID not found
*/ */
private static IQuickEntryFactory getQuickEntryService(Integer AdWindowID) { public static AbstractWQuickEntry getQuickEntry(Integer AdWindowID) {
IServiceReferenceHolder<IQuickEntryFactory> cache = s_quickEntryFactoryCache.get(AdWindowID); IServiceReferenceHolder<IQuickEntryFactory> cache = s_quickEntryFactoryCache.get(AdWindowID);
if (cache != null) { if (cache != null) {
IQuickEntryFactory service = cache.getService(); IQuickEntryFactory service = cache.getService();
if (service != null) { if (service != null) {
return service; AbstractWQuickEntry quickEntry = service.newQuickEntryInstance(AdWindowID);
if (quickEntry != null)
return quickEntry;
} }
s_quickEntryFactoryCache.remove(AdWindowID); s_quickEntryFactoryCache.remove(AdWindowID);
} }
@ -281,26 +283,14 @@ public class Extensions {
for(IServiceReferenceHolder<IQuickEntryFactory> factory : factories) { for(IServiceReferenceHolder<IQuickEntryFactory> factory : factories) {
IQuickEntryFactory service = factory.getService(); IQuickEntryFactory service = factory.getService();
if (service != null) { if (service != null) {
AbstractWQuickEntry quickEntry = service.newQuickEntryInstance(AdWindowID);
if (quickEntry != null) {
s_quickEntryFactoryCache.put(AdWindowID, factory); s_quickEntryFactoryCache.put(AdWindowID, factory);
return service;
}
}
}
return null;
}
/**
*
* @param AD_Window_ID
* @return IQuickEntry instance or null if AD_Window_ID not found
*/
public static AbstractWQuickEntry getQuickEntry(int AD_Window_ID) {
IQuickEntryFactory service = getQuickEntryService(AD_Window_ID);
if (service != null) {
AbstractWQuickEntry quickEntry = service.newQuickEntryInstance(AD_Window_ID);
if (quickEntry != null)
return quickEntry; return quickEntry;
} }
}
}
}
return null; return null;
} }
@ -309,15 +299,32 @@ public class Extensions {
* @param WindowNo * @param WindowNo
* @param AD_Window_ID * @param AD_Window_ID
* @param TabNo * @param TabNo
* @return IQuickEntry instance or null if AD_Window_ID not found * @return IQuickEntry instance or null if AdWindowID not found
*/ */
public static AbstractWQuickEntry getQuickEntry(int WindowNo, int TabNo, int AD_Window_ID) { public static AbstractWQuickEntry getQuickEntry(int WindowNo, int TabNo, int AdWindowID) {
IQuickEntryFactory service = getQuickEntryService(AD_Window_ID); IServiceReferenceHolder<IQuickEntryFactory> cache = s_quickEntryFactoryCache.get(AdWindowID);
if (cache != null) {
IQuickEntryFactory service = cache.getService();
if (service != null) { if (service != null) {
AbstractWQuickEntry quickEntry = service.newQuickEntryInstance(WindowNo, TabNo, AD_Window_ID); AbstractWQuickEntry quickEntry = service.newQuickEntryInstance(WindowNo, TabNo, AdWindowID);
if (quickEntry != null) if (quickEntry != null)
return quickEntry; return quickEntry;
} }
s_quickEntryFactoryCache.remove(AdWindowID);
}
List<IServiceReferenceHolder<IQuickEntryFactory>> factories = Service.locator().list(IQuickEntryFactory.class).getServiceReferences();
if (factories != null) {
for(IServiceReferenceHolder<IQuickEntryFactory> factory : factories) {
IQuickEntryFactory service = factory.getService();
if (service != null) {
AbstractWQuickEntry quickEntry = service.newQuickEntryInstance(WindowNo, TabNo, AdWindowID);
if (quickEntry != null) {
s_quickEntryFactoryCache.put(AdWindowID, factory);
return quickEntry;
}
}
}
}
return null; return null;
} }