--- /dev/null
+/*
+ * Copyright (c) 2018-2019. Developed by Hedgecode.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.hedgecode.chess.qrcode.zip;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.zip.Deflater;
+import java.util.zip.DeflaterOutputStream;
+
+import org.hedgecode.chess.qrcode.ChessQRCodeConstants;
+import org.hedgecode.chess.qrcode.ChessQRCodeException;
+
+/**
+ *
+ *
+ * @author Dmitry Samoshin aka gotty
+ */
+public class ZipContentDeflater {
+
+ public static String deflate(String contents) throws ChessQRCodeException {
+ byte[] bytes = contents.getBytes(
+ ChessQRCodeConstants.CHARSET
+ );
+ if (bytes.length > ZipContentUtils.getMaxContentLength()) {
+ throw new ChessQRCodeException(
+ ChessQRCodeException.Type.PARSE, "zip.max.length.error"
+ );
+ }
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ DeflaterOutputStream zout = new DeflaterOutputStream(
+ bout, new Deflater(Deflater.BEST_COMPRESSION)
+ );
+ try {
+ try {
+ zout.write(bytes);
+ } finally {
+ zout.close();
+ bout.close();
+ }
+ } catch (IOException e) {
+ throw new ChessQRCodeException(
+ ChessQRCodeException.Type.PARSE, "zip.deflate.write.error", e.getMessage()
+ );
+ }
+ return ZipContentUtils.base64Encode(
+ ZipContentUtils.concat(
+ bytes.length,
+ bout.toByteArray()
+ )
+ );
+ }
+
+
+ public static void main(String[] args) throws ChessQRCodeException {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < 10; ++i) {
+ sb.append(i).append("bla-bla-bla").append(i);
+ }
+ String zipContents = ZipContentDeflater.deflate(sb.toString());
+ System.out.println("Zip Contents: " + zipContents);
+ System.out.println("Zip length: " + zipContents.length());
+ String contents = ZipContentInflater.inflate(zipContents);
+ System.out.println("Unzip Contents: " + contents);
+ System.out.println("Unziip length: " + contents.length());
+ System.out.println("Equals: " + sb.toString().equals(contents));
+ }
+
+}