Bug 532019 - Remove Circular Dependencies in SpreadSheet Renderer
Services
Use a dynamic method that gets the EMFFormsSpreadSheetRendererFactory
when it's needed instead of during the activation of the renderer
services.
Change-Id: I769838ee522bf9dfd3cecadd84b3137ab08cbef1
Signed-off-by: Lucas Koehler <lkoehler@eclipsesource.com>
diff --git a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationElementRendererService.java b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationElementRendererService.java
index 1d2c129..7829dd6 100644
--- a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationElementRendererService.java
+++ b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationElementRendererService.java
@@ -49,6 +49,7 @@
}
private ServiceReference<EMFFormsSpreadsheetRendererFactory> serviceReference;
+ private BundleContext bundleContext;
/**
* The activate method.
@@ -57,10 +58,8 @@
*/
@Activate
public void activate(BundleContext bundleContext) {
- serviceReference = bundleContext
- .getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
- emfformsSpreadsheetRendererFactory = bundleContext
- .getService(serviceReference);
+ this.bundleContext = bundleContext;
+
}
/**
@@ -70,7 +69,22 @@
*/
@Deactivate
public void deactivate(BundleContext bundleContext) {
- bundleContext.ungetService(serviceReference);
+ if (serviceReference != null) {
+ bundleContext.ungetService(serviceReference);
+ }
+ }
+
+ /**
+ * Gets and returns the {@link EMFFormsSpreadsheetRendererFactory}.
+ *
+ * @return The {@link EMFFormsSpreadsheetRendererFactory}
+ */
+ protected EMFFormsSpreadsheetRendererFactory getSpreadsheetRendererFactory() {
+ if (emfformsSpreadsheetRendererFactory == null) {
+ serviceReference = bundleContext.getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
+ emfformsSpreadsheetRendererFactory = bundleContext.getService(serviceReference);
+ }
+ return emfformsSpreadsheetRendererFactory;
}
/**
@@ -95,7 +109,7 @@
public EMFFormsAbstractSpreadsheetRenderer<VCategorizationElement> getRendererInstance(
VCategorizationElement vElement,
ViewModelContext viewModelContext) {
- return new EMFFormsCategorizationElementRenderer(emfformsSpreadsheetRendererFactory, reportService);
+ return new EMFFormsCategorizationElementRenderer(getSpreadsheetRendererFactory(), reportService);
}
}
diff --git a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationRendererService.java b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationRendererService.java
index db600bf..94baaca 100644
--- a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationRendererService.java
+++ b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategorizationRendererService.java
@@ -48,6 +48,7 @@
}
private ServiceReference<EMFFormsSpreadsheetRendererFactory> serviceReference;
+ private BundleContext bundleContext;
/**
* The activate method.
@@ -56,10 +57,8 @@
*/
@Activate
public void activate(BundleContext bundleContext) {
- serviceReference = bundleContext
- .getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
- emfformsSpreadsheetRendererFactory = bundleContext
- .getService(serviceReference);
+ this.bundleContext = bundleContext;
+
}
/**
@@ -69,7 +68,22 @@
*/
@Deactivate
public void deactivate(BundleContext bundleContext) {
- bundleContext.ungetService(serviceReference);
+ if (serviceReference != null) {
+ bundleContext.ungetService(serviceReference);
+ }
+ }
+
+ /**
+ * Gets and returns the {@link EMFFormsSpreadsheetRendererFactory}.
+ *
+ * @return The {@link EMFFormsSpreadsheetRendererFactory}
+ */
+ protected EMFFormsSpreadsheetRendererFactory getSpreadsheetRendererFactory() {
+ if (emfformsSpreadsheetRendererFactory == null) {
+ serviceReference = bundleContext.getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
+ emfformsSpreadsheetRendererFactory = bundleContext.getService(serviceReference);
+ }
+ return emfformsSpreadsheetRendererFactory;
}
/**
@@ -93,7 +107,7 @@
@Override
public EMFFormsAbstractSpreadsheetRenderer<VCategorization> getRendererInstance(VCategorization vElement,
ViewModelContext viewModelContext) {
- return new EMFFormsCategorizationRenderer(emfformsSpreadsheetRendererFactory, reportService);
+ return new EMFFormsCategorizationRenderer(getSpreadsheetRendererFactory(), reportService);
}
}
diff --git a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategoryRendererService.java b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategoryRendererService.java
index ea7dc8b..ae2fc83 100644
--- a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategoryRendererService.java
+++ b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer.categorization/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/categorization/EMFFormsCategoryRendererService.java
@@ -47,6 +47,7 @@
}
private ServiceReference<EMFFormsSpreadsheetRendererFactory> serviceReference;
+ private BundleContext bundleContext;
/**
* The activate method.
@@ -55,10 +56,8 @@
*/
@Activate
public void activate(BundleContext bundleContext) {
- serviceReference = bundleContext
- .getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
- emfformsSpreadsheetRendererFactory = bundleContext
- .getService(serviceReference);
+ this.bundleContext = bundleContext;
+
}
/**
@@ -68,7 +67,22 @@
*/
@Deactivate
public void deactivate(BundleContext bundleContext) {
- bundleContext.ungetService(serviceReference);
+ if (serviceReference != null) {
+ bundleContext.ungetService(serviceReference);
+ }
+ }
+
+ /**
+ * Gets and returns the {@link EMFFormsSpreadsheetRendererFactory}.
+ *
+ * @return The {@link EMFFormsSpreadsheetRendererFactory}
+ */
+ protected EMFFormsSpreadsheetRendererFactory getSpreadsheetRendererFactory() {
+ if (emfformsSpreadsheetRendererFactory == null) {
+ serviceReference = bundleContext.getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
+ emfformsSpreadsheetRendererFactory = bundleContext.getService(serviceReference);
+ }
+ return emfformsSpreadsheetRendererFactory;
}
/**
@@ -92,7 +106,7 @@
@Override
public EMFFormsAbstractSpreadsheetRenderer<VCategory> getRendererInstance(VCategory vElement,
ViewModelContext viewModelContext) {
- return new EMFFormsCategoryRenderer(emfformsSpreadsheetRendererFactory, reportService);
+ return new EMFFormsCategoryRenderer(getSpreadsheetRendererFactory(), reportService);
}
}
diff --git a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetContainerRendererService.java b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetContainerRendererService.java
index d300b8c..ddbe881 100644
--- a/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetContainerRendererService.java
+++ b/bundles/spreadsheet/org.eclipse.emfforms.spreadsheet.core.renderer/src/org/eclipse/emfforms/internal/spreadsheet/core/renderer/EMFFormsSpreadsheetContainerRendererService.java
@@ -48,6 +48,7 @@
}
private ServiceReference<EMFFormsSpreadsheetRendererFactory> serviceReference;
+ private BundleContext bundleContext;
/**
* The activate method.
@@ -56,10 +57,8 @@
*/
@Activate
public void activate(BundleContext bundleContext) {
- serviceReference = bundleContext
- .getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
- emfformsSpreadsheetRendererFactory = bundleContext
- .getService(serviceReference);
+ this.bundleContext = bundleContext;
+
}
/**
@@ -69,7 +68,22 @@
*/
@Deactivate
public void deactivate(BundleContext bundleContext) {
- bundleContext.ungetService(serviceReference);
+ if (serviceReference != null) {
+ bundleContext.ungetService(serviceReference);
+ }
+ }
+
+ /**
+ * Gets and returns the {@link EMFFormsSpreadsheetRendererFactory}.
+ *
+ * @return The {@link EMFFormsSpreadsheetRendererFactory}
+ */
+ protected EMFFormsSpreadsheetRendererFactory getSpreadsheetRendererFactory() {
+ if (emfformsSpreadsheetRendererFactory == null) {
+ serviceReference = bundleContext.getServiceReference(EMFFormsSpreadsheetRendererFactory.class);
+ emfformsSpreadsheetRendererFactory = bundleContext.getService(serviceReference);
+ }
+ return emfformsSpreadsheetRendererFactory;
}
/**
@@ -96,7 +110,7 @@
@Override
public EMFFormsAbstractSpreadsheetRenderer<VContainer> getRendererInstance(
VContainer vElement, ViewModelContext viewModelContext) {
- return new EMFFormsSpreadsheetContainerRenderer(emfformsSpreadsheetRendererFactory, reportService);
+ return new EMFFormsSpreadsheetContainerRenderer(getSpreadsheetRendererFactory(), reportService);
}
}