You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/11/10 10:59:31 UTC

[isis] branch master updated: ISIS-2891: make ExcelServiceImpl package-private

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new ac53905  ISIS-2891: make ExcelServiceImpl package-private
ac53905 is described below

commit ac53905d4fe95a1d5498af4f37b9c22cdc7d5af2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Nov 10 11:59:25 2021 +0100

    ISIS-2891: make ExcelServiceImpl package-private
    
    - then use Spring managed ExcelService instead
---
 .../applib/IsisModuleSubdomainsExcelApplib.java    |  2 +-
 .../subdomains/excel/applib/dom/ExcelService.java  |  3 +-
 .../subdomains/excel/applib/dom/WorksheetSpec.java |  2 +-
 .../{dom => service}/ExcelServiceDefault.java      | 62 +++++++---------------
 .../{dom/util => service}/_CellMarshaller.java     |  4 +-
 .../{dom/util => service}/_ExcelConverter.java     |  6 ++-
 .../_ExcelServiceHelper.java}                      | 42 +++++++--------
 .../applib/{dom => }/util/AnnotationList.java      |  2 +-
 .../applib/{dom => }/util/AnnotationTriplet.java   |  2 +-
 .../{dom => }/util/ExcelFileBlobConverter.java     |  4 +-
 .../excel/applib/{dom => }/util/Mode.java          |  2 +-
 .../excel/applib/{dom => }/util/PivotUtils.java    |  2 +-
 .../excel/applib/{dom => }/util/SheetPivoter.java  |  4 +-
 .../applib/{dom => }/util/AnnotationListTest.java  |  5 +-
 .../{dom => }/util/AnnotationTripletTest.java      |  4 +-
 .../applib/{dom => }/util/PivotUtilsTest.java      |  4 +-
 .../applib/{dom => }/util/SheetPivoterTest.java    |  4 +-
 .../ExcelPivotByCategoryAndSubcategoryMenu.java    |  2 +-
 .../DemoFixture_extending_ExcelFixture2.java       |  2 +-
 .../ExcelModuleDemoUploadService_IntegTest.java    |  2 +-
 .../subdomains/excel/testing/ExcelFixture.java     |  7 +--
 21 files changed, 75 insertions(+), 92 deletions(-)

diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java
index 8ee9b19..7f496e1 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/IsisModuleSubdomainsExcelApplib.java
@@ -21,7 +21,7 @@ package org.apache.isis.subdomains.excel.applib;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
-import org.apache.isis.subdomains.excel.applib.dom.ExcelServiceDefault;
+import org.apache.isis.subdomains.excel.applib.service.ExcelServiceDefault;
 
 /**
  * @since 2.0 {@index}
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/ExcelService.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/ExcelService.java
index adeb9f2..9979796 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/ExcelService.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/ExcelService.java
@@ -5,7 +5,8 @@ import java.util.List;
 
 import org.apache.isis.applib.exceptions.RecoverableException;
 import org.apache.isis.applib.value.Blob;
-import org.apache.isis.subdomains.excel.applib.dom.util.Mode;
+import org.apache.isis.subdomains.excel.applib.service.ExcelServiceDefault;
+import org.apache.isis.subdomains.excel.applib.util.Mode;
 
 /**
  * @since 2.0 {@index}
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/WorksheetSpec.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/WorksheetSpec.java
index 2ae1fc5..9d89c1d 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/WorksheetSpec.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/WorksheetSpec.java
@@ -24,7 +24,7 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.subdomains.excel.applib.dom.util.Mode;
+import org.apache.isis.subdomains.excel.applib.util.Mode;
 
 import lombok.Setter;
 
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/ExcelServiceDefault.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/ExcelServiceDefault.java
similarity index 72%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/ExcelServiceDefault.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/ExcelServiceDefault.java
index b866604..33a7f77 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/ExcelServiceDefault.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/ExcelServiceDefault.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom;
+package org.apache.isis.subdomains.excel.applib.service;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -37,8 +37,10 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.subdomains.excel.applib.dom.util.ExcelServiceImpl;
-import org.apache.isis.subdomains.excel.applib.dom.util.Mode;
+import org.apache.isis.subdomains.excel.applib.dom.ExcelService;
+import org.apache.isis.subdomains.excel.applib.dom.WorksheetContent;
+import org.apache.isis.subdomains.excel.applib.dom.WorksheetSpec;
+import org.apache.isis.subdomains.excel.applib.util.Mode;
 
 
 @Service
@@ -47,39 +49,23 @@ import org.apache.isis.subdomains.excel.applib.dom.util.Mode;
 @Qualifier("Default")
 public class ExcelServiceDefault implements ExcelService {
 
-    private ExcelServiceImpl excelServiceImpl;
-
-    public ExcelServiceDefault() {
-    }
+    private _ExcelServiceHelper helper;
 
     @PostConstruct
     public void init() {
-        excelServiceImpl = new ExcelServiceImpl();
-        serviceInjector.injectServicesInto(excelServiceImpl);
+        helper = new _ExcelServiceHelper();
+        serviceInjector.injectServicesInto(helper);
     }
 
     // //////////////////////////////////////
 
-    /**
-     * Creates a Blob holding a spreadsheet of the domain objects.
-     *
-     * <p>
-     *     There are no specific restrictions on the domain objects; they can be either persistable entities or
-     *     view models.  Do be aware though that if imported back using {@link #fromExcel(Blob, Class, String)},
-     *     then new instances are always created.  It is generally better therefore to work with view models than to
-     *     work with entities.  This also makes it easier to maintain backward compatibility in the future if the
-     *     persistence model changes; using view models represents a stable API for import/export.
-     * </p>
-     *
-     * @param sheetName - must be 31 chars or less
-     */
     @Override
     public <T> Blob toExcel(
             final List<T> domainObjects,
             final Class<T> cls,
             final String sheetName,
             final String fileName) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcel(domainObjects, cls, sheetName, fileName);
+        return helper.toExcel(domainObjects, cls, sheetName, fileName);
     }
 
     @Override
@@ -89,14 +75,14 @@ public class ExcelServiceDefault implements ExcelService {
             final String sheetName,
             final String fileName,
             final InputStream in) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcel(domainObjects, cls, sheetName, fileName, in);
+        return helper.toExcel(domainObjects, cls, sheetName, fileName, in);
     }
 
     @Override
     public <T> Blob toExcel(
             final WorksheetContent worksheetContent,
             final String fileName) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcel(worksheetContent, fileName);
+        return helper.toExcel(worksheetContent, fileName);
     }
 
     @Override
@@ -104,14 +90,14 @@ public class ExcelServiceDefault implements ExcelService {
             final WorksheetContent worksheetContent,
             final String fileName,
             final InputStream in) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcel(worksheetContent, fileName, in);
+        return helper.toExcel(worksheetContent, fileName, in);
     }
 
     @Override
     public Blob toExcel(
             final List<WorksheetContent> worksheetContents,
             final String fileName) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcel(worksheetContents, fileName);
+        return helper.toExcel(worksheetContents, fileName);
     }
 
     @Override
@@ -119,7 +105,7 @@ public class ExcelServiceDefault implements ExcelService {
             final List<WorksheetContent> worksheetContents,
             final String fileName,
             final InputStream in) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcel(worksheetContents, fileName, in);
+        return helper.toExcel(worksheetContents, fileName, in);
     }
 
     @Override
@@ -127,7 +113,7 @@ public class ExcelServiceDefault implements ExcelService {
             final List<T> domainObjects,
             final Class<T> cls,
             final String fileName) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcelPivot(domainObjects, cls, fileName);
+        return helper.toExcelPivot(domainObjects, cls, fileName);
     }
 
     @Override
@@ -136,14 +122,14 @@ public class ExcelServiceDefault implements ExcelService {
             final Class<T> cls,
             final String sheetName,
             final String fileName) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcelPivot(domainObjects, cls, sheetName, fileName);
+        return helper.toExcelPivot(domainObjects, cls, sheetName, fileName);
     }
 
     @Override
     public <T> Blob toExcelPivot(
             final WorksheetContent worksheetContent,
             final String fileName) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.toExcelPivot(worksheetContent, fileName);
+        return helper.toExcelPivot(worksheetContent, fileName);
     }
 
     @Override
@@ -151,17 +137,9 @@ public class ExcelServiceDefault implements ExcelService {
             final List<WorksheetContent> worksheetContents,
             final String fileName) throws ExcelServiceDefault.Exception {
 
-        return excelServiceImpl.toExcelPivot(worksheetContents, fileName);
+        return helper.toExcelPivot(worksheetContents, fileName);
     }
 
-    /**
-     * Returns a list of objects for each line in the spreadsheet, of the specified type.
-     *
-     * <p>
-     *     If the class is a view model then the objects will be properly instantiated, with the correct
-     *     view model memento); otherwise the objects will be simple transient objects.
-     * </p>
-     */
     @Override
     public <T> List<T> fromExcel(
             final Blob excelBlob,
@@ -183,14 +161,14 @@ public class ExcelServiceDefault implements ExcelService {
     public <T> List<T> fromExcel(
             final Blob excelBlob,
             final WorksheetSpec worksheetSpec) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.fromExcel(excelBlob, worksheetSpec);
+        return helper.fromExcel(excelBlob, worksheetSpec);
     }
 
     @Override
     public List<List<?>> fromExcel(
             final Blob excelBlob,
             final List<WorksheetSpec> worksheetSpecs) throws ExcelServiceDefault.Exception {
-        return excelServiceImpl.fromExcel(excelBlob, worksheetSpecs);
+        return helper.fromExcel(excelBlob, worksheetSpecs);
     }
 
     @Override
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/_CellMarshaller.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_CellMarshaller.java
similarity index 99%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/_CellMarshaller.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_CellMarshaller.java
index ce14470..7030673 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/_CellMarshaller.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_CellMarshaller.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.service;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -272,7 +272,7 @@ final class _CellMarshaller {
         anchor.setRow1(row.getRowNum());
         anchor.setRow2(row.getRowNum()+3);
 
-        Drawing drawing = sheet.createDrawingPatriarch();
+        Drawing<?> drawing = sheet.createDrawingPatriarch();
         Comment comment1 = drawing.createCellComment(anchor);
 
         RichTextString commentRtf = creationHelper.createRichTextString(commentText);
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/_ExcelConverter.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_ExcelConverter.java
similarity index 99%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/_ExcelConverter.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_ExcelConverter.java
index 58fbeae..60afcb7 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/_ExcelConverter.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_ExcelConverter.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.service;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
@@ -65,7 +65,6 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.subdomains.excel.applib.dom.AggregationType;
 import org.apache.isis.subdomains.excel.applib.dom.ExcelMetaDataEnabled;
-import org.apache.isis.subdomains.excel.applib.dom.ExcelServiceDefault;
 import org.apache.isis.subdomains.excel.applib.dom.HyperLink;
 import org.apache.isis.subdomains.excel.applib.dom.PivotColumn;
 import org.apache.isis.subdomains.excel.applib.dom.PivotDecoration;
@@ -74,6 +73,9 @@ import org.apache.isis.subdomains.excel.applib.dom.PivotValue;
 import org.apache.isis.subdomains.excel.applib.dom.RowHandler;
 import org.apache.isis.subdomains.excel.applib.dom.WorksheetContent;
 import org.apache.isis.subdomains.excel.applib.dom.WorksheetSpec;
+import org.apache.isis.subdomains.excel.applib.util.Mode;
+import org.apache.isis.subdomains.excel.applib.util.PivotUtils;
+import org.apache.isis.subdomains.excel.applib.util.SheetPivoter;
 
 import lombok.ToString;
 import lombok.val;
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelServiceImpl.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_ExcelServiceHelper.java
similarity index 88%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelServiceImpl.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_ExcelServiceHelper.java
index 2016055..bb80c8b 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelServiceImpl.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/service/_ExcelServiceHelper.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.service;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,19 +33,16 @@ import org.apache.isis.applib.value.Blob;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.subdomains.excel.applib.dom.ExcelServiceDefault;
 import org.apache.isis.subdomains.excel.applib.dom.PivotColumn;
 import org.apache.isis.subdomains.excel.applib.dom.PivotRow;
 import org.apache.isis.subdomains.excel.applib.dom.PivotValue;
 import org.apache.isis.subdomains.excel.applib.dom.WorksheetContent;
 import org.apache.isis.subdomains.excel.applib.dom.WorksheetSpec;
+import org.apache.isis.subdomains.excel.applib.util.ExcelFileBlobConverter;
 
 import lombok.SneakyThrows;
 
-/**
- * @since 2.0 {@index}
- */
-public class ExcelServiceImpl {
+class _ExcelServiceHelper {
 
     private final ExcelFileBlobConverter excelFileBlobConverter = new ExcelFileBlobConverter();
 
@@ -63,7 +60,7 @@ public class ExcelServiceImpl {
      *
      * @param sheetName - must be 31 chars or less
      */
-    public <T> Blob toExcel(
+    <T> Blob toExcel(
             final List<T> domainObjects,
             final Class<T> cls,
             final String sheetName,
@@ -78,7 +75,7 @@ public class ExcelServiceImpl {
      * @param sheetName - must be 31 chars or less
      * @param in - an existing excel workbook to which this sheet will be appended
      */
-    public <T> Blob toExcel(
+    <T> Blob toExcel(
             final List<T> domainObjects,
             final Class<T> cls,
             final String sheetName,
@@ -91,7 +88,7 @@ public class ExcelServiceImpl {
      * As {@link #toExcel(List, Class, String, String)}, but with the domain objects, class and sheet name provided using a
      * {@link WorksheetContent}.
      */
-    public <T> Blob toExcel(WorksheetContent worksheetContent, final String fileName) {
+    <T> Blob toExcel(final WorksheetContent worksheetContent, final String fileName) {
         return toExcel(Collections.singletonList(worksheetContent), fileName);
     }
 
@@ -99,14 +96,14 @@ public class ExcelServiceImpl {
      * As {@link #toExcel(List, Class, String, String)}, but with the domain objects, class and sheet name provided using a
      * {@link WorksheetContent} and with an input stream.
      */
-    public <T> Blob toExcel(WorksheetContent worksheetContent, final String fileName, final InputStream in) {
+    <T> Blob toExcel(final WorksheetContent worksheetContent, final String fileName, final InputStream in) {
         return toExcel(Collections.singletonList(worksheetContent), fileName, in);
     }
 
     /**
      * As {@link #toExcel(WorksheetContent, String)}, but with multiple sheets.
      */
-    public Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName) {
+    Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName) {
         try {
             final File file = newExcelConverter().appendSheet(worksheetContents, new XSSFWorkbook());
             return excelFileBlobConverter.toBlob(fileName, file);
@@ -118,7 +115,7 @@ public class ExcelServiceImpl {
     /**
      * As {@link #toExcel(WorksheetContent, String)}, but with multiple sheets and an input stream.
      */
-    public Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName, final InputStream in) {
+    Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName, final InputStream in) {
         try {
             final File file = newExcelConverter().appendSheet(worksheetContents, new XSSFWorkbook(in));
             return excelFileBlobConverter.toBlob(fileName, file);
@@ -148,14 +145,14 @@ public class ExcelServiceImpl {
      *     </li>
      * </ul>
      */
-    public <T> Blob toExcelPivot(
+    <T> Blob toExcelPivot(
             final List<T> domainObjects,
             final Class<T> cls,
             final String fileName) throws ExcelServiceDefault.Exception {
         return toExcelPivot(domainObjects, cls, null, fileName);
     }
 
-    public <T> Blob toExcelPivot(
+    <T> Blob toExcelPivot(
             final List<T> domainObjects,
             final Class<T> cls,
             final String sheetName,
@@ -163,11 +160,11 @@ public class ExcelServiceImpl {
         return toExcelPivot(new WorksheetContent(domainObjects, new WorksheetSpec(cls, sheetName)), fileName);
     }
 
-    public <T> Blob toExcelPivot(WorksheetContent worksheetContent, final String fileName) {
+    <T> Blob toExcelPivot(final WorksheetContent worksheetContent, final String fileName) {
         return toExcelPivot(Collections.singletonList(worksheetContent), fileName);
     }
 
-    public <T> Blob toExcelPivot(final List<WorksheetContent> worksheetContents, final String fileName) {
+    <T> Blob toExcelPivot(final List<WorksheetContent> worksheetContents, final String fileName) {
         try {
             final File file = newExcelConverter().appendPivotSheet(worksheetContents);
             return excelFileBlobConverter.toBlob(fileName, file);
@@ -191,7 +188,7 @@ public class ExcelServiceImpl {
      *  @param sheetName - must be 30 characters or less
      *
      */
-    public <T> List<T> fromExcel(
+    <T> List<T> fromExcel(
             final Blob excelBlob,
             final Class<T> cls,
             final String sheetName) throws ExcelServiceDefault.Exception {
@@ -203,7 +200,7 @@ public class ExcelServiceImpl {
      * As {@link #fromExcel(Blob, Class, String)}, but specifying the class name and sheet name by way of a
      * {@link WorksheetSpec}.
      */
-    public <T> List<T> fromExcel(
+     <T> List<T> fromExcel(
             final Blob excelBlob,
             final WorksheetSpec worksheetSpec) throws ExcelServiceDefault.Exception {
         final List<List<?>> listOfList =
@@ -215,7 +212,7 @@ public class ExcelServiceImpl {
      * As {@link #fromExcel(Blob, WorksheetSpec)}, but reading multiple sheets (and returning a list of lists of
      * domain objects).
      */
-    public List<List<?>> fromExcel(
+    List<List<?>> fromExcel(
             final Blob excelBlob,
             final List<WorksheetSpec> worksheetSpecs) throws ExcelServiceDefault.Exception {
         try {
@@ -225,14 +222,14 @@ public class ExcelServiceImpl {
         }
     }
 
+    // -- HELPER
+
     @SneakyThrows
     private _ExcelConverter newExcelConverter() {
         return new _ExcelConverter(specificationLoader, objectManager, bookmarkService, serviceInjector);
     }
 
-
-    // //////////////////////////////////////
-
+    // -- DEPENDENCIES
 
     @javax.inject.Inject
     BookmarkService bookmarkService;
@@ -246,5 +243,4 @@ public class ExcelServiceImpl {
     @javax.inject.Inject
     ObjectManager objectManager;
 
-
 }
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationList.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/AnnotationList.java
similarity index 96%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationList.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/AnnotationList.java
index a66b74b..1f4283c 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationList.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/AnnotationList.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationTriplet.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/AnnotationTriplet.java
similarity index 96%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationTriplet.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/AnnotationTriplet.java
index 33fcbba..aa1f767 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationTriplet.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/AnnotationTriplet.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 /**
  * @since 2.0 {@index}
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelFileBlobConverter.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/ExcelFileBlobConverter.java
similarity index 95%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelFileBlobConverter.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/ExcelFileBlobConverter.java
index 5681ca0..d8adf8e 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/ExcelFileBlobConverter.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/ExcelFileBlobConverter.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -29,7 +29,7 @@ import org.apache.poi.util.IOUtils;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.subdomains.excel.applib.dom.ExcelService;
-import org.apache.isis.subdomains.excel.applib.dom.ExcelServiceDefault;
+import org.apache.isis.subdomains.excel.applib.service.ExcelServiceDefault;
 
 import lombok.val;
 
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/Mode.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/Mode.java
similarity index 94%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/Mode.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/Mode.java
index 24e7421..bd15cf6 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/Mode.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/Mode.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 /**
  * @since 2.0 {@index}
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/PivotUtils.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/PivotUtils.java
similarity index 98%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/PivotUtils.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/PivotUtils.java
index 412dbca..80784b0 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/PivotUtils.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/PivotUtils.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.util.List;
 
diff --git a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/SheetPivoter.java b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/SheetPivoter.java
similarity index 99%
rename from subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/SheetPivoter.java
rename to subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/SheetPivoter.java
index c3828ca..b02e54f 100644
--- a/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/dom/util/SheetPivoter.java
+++ b/subdomains/excel/applib/src/main/java/org/apache/isis/subdomains/excel/applib/util/SheetPivoter.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -35,7 +35,7 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellReference;
 
 import org.apache.isis.subdomains.excel.applib.dom.AggregationType;
-import org.apache.isis.subdomains.excel.applib.dom.ExcelServiceDefault;
+import org.apache.isis.subdomains.excel.applib.service.ExcelServiceDefault;
 
 import lombok.val;
 
diff --git a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationListTest.java b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/AnnotationListTest.java
similarity index 90%
rename from subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationListTest.java
rename to subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/AnnotationListTest.java
index 2d2883a..c2113da 100644
--- a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationListTest.java
+++ b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/AnnotationListTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.util.Arrays;
 import java.util.List;
@@ -24,6 +24,9 @@ import java.util.List;
 import org.assertj.core.api.Assertions;
 import org.junit.Test;
 
+import org.apache.isis.subdomains.excel.applib.util.AnnotationList;
+import org.apache.isis.subdomains.excel.applib.util.AnnotationTriplet;
+
 public class AnnotationListTest {
 
 
diff --git a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationTripletTest.java b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/AnnotationTripletTest.java
similarity index 95%
rename from subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationTripletTest.java
rename to subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/AnnotationTripletTest.java
index a6ba754..320b73f 100644
--- a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/AnnotationTripletTest.java
+++ b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/AnnotationTripletTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -25,6 +25,8 @@ import java.util.List;
 import org.assertj.core.api.Assertions;
 import org.junit.Test;
 
+import org.apache.isis.subdomains.excel.applib.util.AnnotationTriplet;
+
 public class AnnotationTripletTest {
 
     @Test
diff --git a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/PivotUtilsTest.java b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/PivotUtilsTest.java
similarity index 98%
rename from subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/PivotUtilsTest.java
rename to subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/PivotUtilsTest.java
index 8351f0c..6c4bd94 100644
--- a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/PivotUtilsTest.java
+++ b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/PivotUtilsTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.util.Arrays;
 import java.util.List;
@@ -30,6 +30,8 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.assertj.core.api.Assertions;
 import org.junit.Test;
 
+import org.apache.isis.subdomains.excel.applib.util.PivotUtils;
+
 public class PivotUtilsTest {
 
     @Test
diff --git a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/SheetPivoterTest.java b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/SheetPivoterTest.java
similarity index 99%
rename from subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/SheetPivoterTest.java
rename to subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/SheetPivoterTest.java
index 05331d6..9500fd3 100644
--- a/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/dom/util/SheetPivoterTest.java
+++ b/subdomains/excel/applib/src/test/java/org/apache/isis/subdomains/excel/applib/util/SheetPivoterTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.subdomains.excel.applib.dom.util;
+package org.apache.isis.subdomains.excel.applib.util;
 
 import java.util.Arrays;
 import java.util.List;
@@ -34,6 +34,8 @@ import org.junit.rules.ExpectedException;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.apache.isis.subdomains.excel.applib.util.SheetPivoter;
+
 import lombok.val;
 
 public class SheetPivoterTest {
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java
index 0bfe79d..92d943c 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/dom/pivot/ExcelPivotByCategoryAndSubcategoryMenu.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.value.Blob;
-import org.apache.isis.subdomains.excel.applib.dom.ExcelServiceDefault;
+import org.apache.isis.subdomains.excel.applib.service.ExcelServiceDefault;
 import org.apache.isis.subdomains.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem;
 
 @DomainService(
diff --git a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoFixture_extending_ExcelFixture2.java b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoFixture_extending_ExcelFixture2.java
index d7ee3ea..4dc998b 100644
--- a/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoFixture_extending_ExcelFixture2.java
+++ b/subdomains/excel/fixture/src/main/java/org/apache/isis/subdomains/excel/fixtures/demoapp/demomodule/fixturescripts/DemoFixture_extending_ExcelFixture2.java
@@ -21,7 +21,7 @@ package org.apache.isis.subdomains.excel.fixtures.demoapp.demomodule.fixturescri
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.subdomains.excel.applib.dom.WorksheetSpec;
-import org.apache.isis.subdomains.excel.applib.dom.util.Mode;
+import org.apache.isis.subdomains.excel.applib.util.Mode;
 import org.apache.isis.subdomains.excel.fixtures.demoapp.demomodule.fixturehandlers.demotodoitem.DemoToDoItemRowHandler2;
 import org.apache.isis.subdomains.excel.testing.ExcelFixture2;
 
diff --git a/subdomains/excel/integtests/src/test/java/org/apache/isis/subdomains/excel/integtests/tests/ExcelModuleDemoUploadService_IntegTest.java b/subdomains/excel/integtests/src/test/java/org/apache/isis/subdomains/excel/integtests/tests/ExcelModuleDemoUploadService_IntegTest.java
index 9ae84a9..4269103 100644
--- a/subdomains/excel/integtests/src/test/java/org/apache/isis/subdomains/excel/integtests/tests/ExcelModuleDemoUploadService_IntegTest.java
+++ b/subdomains/excel/integtests/src/test/java/org/apache/isis/subdomains/excel/integtests/tests/ExcelModuleDemoUploadService_IntegTest.java
@@ -30,7 +30,7 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.commons.internal.resources._Resources;
-import org.apache.isis.subdomains.excel.applib.dom.util.ExcelFileBlobConverter;
+import org.apache.isis.subdomains.excel.applib.util.ExcelFileBlobConverter;
 import org.apache.isis.subdomains.excel.fixtures.demoapp.demomodule.fixturehandlers.excelupload.ExcelUploadServiceForDemoToDoItem;
 import org.apache.isis.subdomains.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItem;
 import org.apache.isis.subdomains.excel.fixtures.demoapp.todomodule.dom.ExcelDemoToDoItemMenu;
diff --git a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
index ce8a0b6..9e3a25d 100644
--- a/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
+++ b/subdomains/excel/testing/src/main/java/org/apache/isis/subdomains/excel/testing/ExcelFixture.java
@@ -42,7 +42,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.subdomains.excel.applib.IsisModuleSubdomainsExcelApplib;
 import org.apache.isis.subdomains.excel.applib.dom.ExcelService;
-import org.apache.isis.subdomains.excel.applib.dom.util.ExcelServiceImpl;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureResultList;
 import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript;
 
@@ -65,6 +64,7 @@ public class ExcelFixture extends FixtureScript {
     public final static String LOGICAL_TYPE_NAME = IsisModuleSubdomainsExcelApplib.NAMESPACE + ".ExcelFixture";
 
     @Inject SpecificationLoader specLoader;
+    @Inject ExcelService excelService;
 
     private final List<Class<?>> classes;
 
@@ -147,16 +147,13 @@ public class ExcelFixture extends FixtureScript {
     @Override
     protected void execute(final ExecutionContext ec) {
 
-        final ExcelServiceImpl excelServiceImpl = new ExcelServiceImpl();
-        serviceInjector.injectServicesInto(excelServiceImpl);
-
         if (blob == null){
             byte[] bytes = getBytes();
             blob = new Blob("unused", ExcelService.XSLX_MIME_TYPE, bytes);
         }
 
         for (Class<?> cls : classes) {
-            final List<?> rowObjects = excelServiceImpl.fromExcel(blob, cls, cls.getSimpleName());
+            final List<?> rowObjects = excelService.fromExcel(blob, cls, cls.getSimpleName());
             Object previousRow = null;
             for (final Object rowObj : rowObjects) {
                 final List<Object> createdObjects = create(rowObj, ec, previousRow);