From da9eb999c163b46c487816ef0496ebc7c9006f81 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Thu, 9 Apr 2020 17:16:38 +0200 Subject: [PATCH] Serialization --- .../libreoffice/metadata/MetadataElement.java | 27 +++--------- .../metadata/MetadataElementFactory.java | 43 +++++++++++++++++++ .../libreoffice/metadata/OutlineElement.java | 17 ++++++-- 3 files changed, 62 insertions(+), 25 deletions(-) create mode 100644 source/pro/litvinovg/libreoffice/metadata/MetadataElementFactory.java diff --git a/source/pro/litvinovg/libreoffice/metadata/MetadataElement.java b/source/pro/litvinovg/libreoffice/metadata/MetadataElement.java index d5164b4..34edabe 100644 --- a/source/pro/litvinovg/libreoffice/metadata/MetadataElement.java +++ b/source/pro/litvinovg/libreoffice/metadata/MetadataElement.java @@ -1,15 +1,11 @@ package pro.litvinovg.libreoffice.metadata; -import static pro.litvinovg.libreoffice.metadata.MetadataElement.METADATA_PREFIX; +import java.io.Serializable; -public class MetadataElement { - - public static final String METADATA_START = "## Metadata Editor extension. Outline metadata folllows: "; - public static String METADATA_PREFIX = "##"; - public static String METADATA_END = "## Metadata Editor extension. Outline metadata ends."; - +public class MetadataElement implements Serializable{ + private static final long serialVersionUID = 1L; private String name; private String value; @@ -17,11 +13,7 @@ public class MetadataElement { this.name = name; this.value = value; } - public MetadataElement(String encodedPair) { - //TODO: Parse encoded pair - this.name = ""; - this.value = ""; - } + public String getName() { return name; } @@ -29,15 +21,6 @@ public class MetadataElement { public String getValue() { return value; } - public static boolean isValidMetadataString(String cursorContent) { - if (!cursorContent.startsWith(METADATA_PREFIX) || - cursorContent.equals(METADATA_START) || - cursorContent.equals(METADATA_END)){ - return false; - } - String data = cursorContent.substring(cursorContent.lastIndexOf(METADATA_PREFIX)); - - return true; - } + } diff --git a/source/pro/litvinovg/libreoffice/metadata/MetadataElementFactory.java b/source/pro/litvinovg/libreoffice/metadata/MetadataElementFactory.java new file mode 100644 index 0000000..ff3963f --- /dev/null +++ b/source/pro/litvinovg/libreoffice/metadata/MetadataElementFactory.java @@ -0,0 +1,43 @@ +package pro.litvinovg.libreoffice.metadata; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Base64; + +public class MetadataElementFactory { + public static final String METADATA_START = "## Metadata Editor extension. Outline metadata folllows: "; + public static String METADATA_PREFIX = "##"; + public static String METADATA_END = "## Metadata Editor extension. Outline metadata ends."; + + + public static boolean isValidMetadataString(String cursorContent) { + if (!cursorContent.startsWith(METADATA_PREFIX) || + cursorContent.equals(METADATA_START) || + cursorContent.equals(METADATA_END)){ + return false; + } + String data = cursorContent.substring(cursorContent.lastIndexOf(METADATA_PREFIX)); + + return true; + } + + + public static MetadataElement fromString(String string) throws IOException, ClassNotFoundException { + byte [] data = Base64.getDecoder().decode( string ); + ObjectInputStream ois = new ObjectInputStream( new ByteArrayInputStream( data ) ); + Object object = ois.readObject(); + ois.close(); + return (MetadataElement) object; + } + + private static String toString( MetadataElement object ) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream( baos ); + oos.writeObject( object ); + oos.close(); + return Base64.getEncoder().encodeToString(baos.toByteArray()); + } +} diff --git a/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java b/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java index f22e7b9..21ffb42 100644 --- a/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java +++ b/source/pro/litvinovg/libreoffice/metadata/OutlineElement.java @@ -1,5 +1,6 @@ package pro.litvinovg.libreoffice.metadata; +import java.io.IOException; import java.util.ArrayList; import com.sun.star.text.XParagraphCursor; @@ -7,7 +8,7 @@ import com.sun.star.text.XText; import com.sun.star.text.XTextCursor; import com.sun.star.text.XTextRange; import com.sun.star.uno.UnoRuntime; -import static pro.litvinovg.libreoffice.metadata.MetadataElement.*; +import static pro.litvinovg.libreoffice.metadata.MetadataElementFactory.*; public class OutlineElement { @@ -52,8 +53,18 @@ public class OutlineElement { metadataElements = metadataTempElements; return; } - if (MetadataElement.isValidMetadataString(cursorContent)) { - metadataTempElements.add(new MetadataElement(cursorContent)); + if (MetadataElementFactory.isValidMetadataString(cursorContent)) { + MetadataElement metadataElement = null; + try { + metadataElement = MetadataElementFactory.fromString(cursorContent); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + return; + } catch (IOException e) { + e.printStackTrace(); + return; + } + metadataTempElements.add(metadataElement); } else { //If reading fails exit immediately return;