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/06/12 14:54:52 UTC

[isis] branch master updated: ISIS-2738: fixes build, also ZipWriter to prove more convenience

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 90a0e46  ISIS-2738: fixes build, also ZipWriter to prove more convenience
90a0e46 is described below

commit 90a0e469638be9677131f2987f71a92fef278976
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jun 12 16:54:39 2021 +0200

    ISIS-2738: fixes build, also ZipWriter to prove more convenience
---
 .../isis/applib/mixins/dto/Dto_downloadXsd.java    |  3 +-
 .../services/metamodel/MetaModelServiceMenu.java   |  9 ++--
 .../org/apache/isis/applib/util/ZipWriter.java     | 50 ++++++++++++++++++++--
 .../java/org/apache/isis/applib/value/Blob.java    |  2 +-
 .../services/layout/LayoutServiceDefault.java      |  2 +-
 5 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
index 7678a7d..f31edb2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.applib.mixins.dto;
 
-import java.nio.charset.StandardCharsets;
 import java.util.Map;
 
 import javax.inject.Inject;
@@ -110,7 +109,7 @@ public class Dto_downloadXsd {
             val namespaceUri = entry.getKey();
             val schemaText = entry.getValue();
             zipWriter.nextEntry(zipEntryNameFor(namespaceUri), outputStream->{
-                outputStream.write(schemaText.getBytes(StandardCharsets.UTF_8));
+                outputStream.writeCharactersUtf8(schemaText);
             });
         }
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
index d049042..0206a55 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServiceMenu.java
@@ -43,7 +43,6 @@ import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
 import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
-import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.schema.metamodel.v2.MetamodelDto;
 
@@ -271,7 +270,7 @@ public class MetaModelServiceMenu {
             @ParameterLayout(named="Metamodel (Zipped XML)", 
             describedAs="Metamodel from a previous export, to compare the current with.")
             @Parameter(fileAccept=".zip", optionality = Optionality.MANDATORY)
-            Blob rightZippedMetamodelBlob
+            Blob zippedMetamodelBlob
             
             ) throws IOException {
 
@@ -290,9 +289,11 @@ public class MetaModelServiceMenu {
 
         final MetamodelDto leftMetamodelDto =  metaModelService.exportMetaModel(config);
 
-        final String xml = rightZippedMetamodelBlob
+        final String xml = zippedMetamodelBlob
                 .unZip(CommonMimeType.XML)
-                .digest(inputStream->_Strings.read(inputStream, UTF_8));
+                .toClob(UTF_8)
+                .getChars()
+                .toString();
         
         final MetamodelDto rightMetamodelDto =  jaxbService.fromXml(MetamodelDto.class, xml);
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/util/ZipWriter.java b/api/applib/src/main/java/org/apache/isis/applib/util/ZipWriter.java
index 057cd8d..a4cd208 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/util/ZipWriter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/util/ZipWriter.java
@@ -21,13 +21,21 @@ package org.apache.isis.applib.util;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
+import javax.annotation.Nullable;
+
+import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 import lombok.AccessLevel;
+import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
+import lombok.Value;
 import lombok.val;
 
 /**
@@ -55,9 +63,43 @@ import lombok.val;
 @RequiredArgsConstructor(staticName = "of", access = AccessLevel.PRIVATE)
 public class ZipWriter {
 
+    @Value(staticConstructor = "of")
+    public static class ZipOutputStreamWrapper {
+        private final @NonNull ZipOutputStream zipOutputStream;
+        
+        public void writeCharactersUtf8(final @Nullable CharSequence chars) throws IOException {
+            writeCharacters(chars, StandardCharsets.UTF_8);
+        }
+        
+        public void writeCharacters(
+                final @Nullable CharSequence chars, 
+                final @NonNull Charset charset) throws IOException {
+            if(chars==null 
+                    || chars.length()==0) {
+                return; // no-op
+            }
+            zipOutputStream.write(_Strings.toBytes(chars.toString(), charset));
+        }
+        
+        public void writeBytes(final @Nullable byte bytes[]) throws IOException {
+            if(_NullSafe.isEmpty(bytes)) {
+                return; // no-op
+            }
+            zipOutputStream.write(bytes);
+        }
+
+        public void writeBytes(final @Nullable byte bytes[], int off, int len) throws IOException {
+            if(_NullSafe.isEmpty(bytes)) {
+                return; // no-op
+            }
+            zipOutputStream.write(bytes, off, len);
+        }
+        
+    }
+    
     @FunctionalInterface
     public interface OnZipEntry {
-        public void accept(ZipOutputStream outputStream) throws IOException;
+        public void accept(ZipOutputStreamWrapper writer) throws IOException;
     }
 
     public static ZipWriter newInstance() {
@@ -67,11 +109,13 @@ public class ZipWriter {
     public static ZipWriter ofFailureMessage(String failureMessage) {
         val baos = new ByteArrayOutputStream();
         val zos = new ZipOutputStream(baos);
-        return new ZipWriter(baos, zos, failureMessage);
+        val writer = new ZipOutputStreamWrapper(zos);
+        return new ZipWriter(baos, zos, writer, failureMessage);
     }
 
     private final ByteArrayOutputStream baos;
     private final ZipOutputStream zos;
+    private final ZipOutputStreamWrapper writer;
     private final String failureMessage;
     private byte[] zippedBytes;
 
@@ -88,7 +132,7 @@ public class ZipWriter {
         }
         try {
             zos.putNextEntry(new ZipEntry(zipEntryName));
-            onZipEntry.accept(zos);
+            onZipEntry.accept(writer);
             zos.flush();
             zos.closeEntry();
         } catch (final IOException e) {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
index 91aec24..c51a892 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
@@ -213,7 +213,7 @@ public final class Blob implements NamedWithMimeType {
     
     public Blob zip() {
         val zipWriter = ZipWriter.newInstance();
-        zipWriter.nextEntry(getName(), outputStream->outputStream.write(getBytes()));
+        zipWriter.nextEntry(getName(), outputStream->outputStream.writeBytes(getBytes()));
         return Blob.of(getName()+".zip", CommonMimeType.ZIP, zipWriter.toBytes());
     }
     
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
index 8e103f5..95f22eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/layout/LayoutServiceDefault.java
@@ -116,7 +116,7 @@ public class LayoutServiceDefault implements LayoutService {
                                     Marshaller.JAXB_SCHEMA_LOCATION,
                                     grid.getTnsAndSchemaLocation()
                                     ));
-                    writer.write(xmlString);
+                    writer.writeCharactersUtf8(xmlString);
                 });
             }
         }