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);
});
}
}