home *** CD-ROM | disk | FTP | other *** search
- package netscape.util;
-
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.FilterOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
-
- public class FormattingSerializer extends Serializer {
- private final int MAX_SIZE_FOR_SMALL_EXPRESSION = 80;
- private int indentationLength = 4;
- private int tabLevel = 0;
- private int nextCharIndex = 0;
-
- public FormattingSerializer(OutputStream var1) {
- super(var1);
- }
-
- public void setIndentationLength(int var1) {
- this.indentationLength = var1;
- }
-
- public int indentationLength() {
- return this.indentationLength;
- }
-
- public void writeComment(String var1, boolean var2) throws IOException {
- int var3 = var1.length();
- byte var4;
- if (var2) {
- var4 = 7;
- } else {
- var4 = 4;
- }
-
- if (var3 + var4 <= 80 - this.nextCharIndex && var1.indexOf(10) == -1) {
- if (var2) {
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(42);
- this.writeCommentCharacter(32);
- } else {
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(32);
- }
-
- for(int var7 = 0; var7 < var3; ++var7) {
- this.writeCommentCharacter(var1.charAt(var7));
- }
-
- if (var2) {
- this.writeCommentCharacter(32);
- this.writeCommentCharacter(42);
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(10);
- } else {
- this.writeCommentCharacter(10);
- }
- } else {
- if (var2) {
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(42);
- this.writeCommentCharacter(10);
- this.writeCommentCharacter(32);
- this.writeCommentCharacter(42);
- this.writeCommentCharacter(32);
- } else {
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(32);
- }
-
- for(int var6 = 0; var6 < var3; ++var6) {
- char var5 = var1.charAt(var6);
- if (var5 == '\n') {
- this.writeCommentCharacter(10);
- if (var2) {
- this.writeCommentCharacter(32);
- this.writeCommentCharacter(42);
- this.writeCommentCharacter(32);
- } else {
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(32);
- }
- } else {
- this.writeCommentCharacter(var5);
- }
- }
-
- if (var2) {
- this.writeCommentCharacter(10);
- this.writeCommentCharacter(32);
- this.writeCommentCharacter(42);
- this.writeCommentCharacter(47);
- this.writeCommentCharacter(10);
- } else {
- this.writeCommentCharacter(10);
- }
- }
- }
-
- private final void increaseTabLevel() {
- ++this.tabLevel;
- }
-
- private final void decreaseTabLevel() {
- --this.tabLevel;
- }
-
- private final void insertNewLine() throws IOException {
- this.writeCharacter(10);
- int var1 = 0;
-
- for(int var2 = this.tabLevel * this.indentationLength(); var1 < var2; ++var1) {
- this.writeCharacter(32);
- }
-
- }
-
- private final void writeCharacter(int var1) throws IOException {
- super.writeOutput(var1);
- if (var1 == 10) {
- this.nextCharIndex = 0;
- } else {
- ++this.nextCharIndex;
- }
- }
-
- private final void writeCommentCharacter(int var1) throws IOException {
- if (var1 >= 32 && var1 < 127) {
- this.writeCharacter(var1);
- } else {
- switch (var1) {
- case 9:
- case 10:
- case 13:
- this.writeCharacter(var1);
- default:
- }
- }
- }
-
- private final int serializedStringFitsIn(String var1, int var2) {
- if (var1 != null && var1.length() != 0) {
- int var4;
- if ((var4 = var1.length()) > var2) {
- return var4;
- } else {
- int var5;
- if (((Serializer)this).stringRequiresQuotes(var1)) {
- var5 = 2;
- } else {
- var5 = 0;
- }
-
- for(int var3 = 0; var3 < var4; ++var3) {
- char var6 = var1.charAt(var3);
- if (var6 < 255) {
- if (var6 >= '#' && var6 <= '~' && var6 != '\\') {
- ++var5;
- } else {
- switch (var6) {
- case '\t':
- case '\n':
- case '\r':
- case '"':
- case '\\':
- var5 += 2;
- break;
- case ' ':
- case '!':
- ++var5;
- break;
- default:
- var5 += 4;
- }
- }
- } else {
- var5 += 6;
- }
-
- if (var5 > var2) {
- return var5;
- }
- }
-
- return var5;
- }
- } else {
- return 2;
- }
- }
-
- private final int serializedHashtableFitsIn(Hashtable var1, int var2) {
- int var9 = 2;
- Enumeration var4 = var1.keys();
-
- while(var4.hasMoreElements()) {
- Object var5 = var4.nextElement();
- ++var9;
- var9 += this.serializedObjectFitsIn(var5, var2 - var9);
- if (var9 > var2) {
- return var9;
- }
-
- int var8 = var9 + 3;
- var9 = var8 + this.serializedObjectFitsIn(var1.get(var5), var2 - var8);
- ++var9;
- if (var9 > var2) {
- return var9;
- }
- }
-
- return var9;
- }
-
- private final int serializedArrayFitsIn(Object[] var1, int var2) {
- int var3 = 3;
- int var4 = 0;
-
- for(int var5 = var1.length; var4 < var5; ++var4) {
- ++var3;
- var3 += this.serializedObjectFitsIn(var1[var4], var2 - var3);
- if (var3 > var2) {
- return var3;
- }
-
- if (var4 < var5 - 1) {
- ++var3;
- }
- }
-
- return var3;
- }
-
- private final int serializedVectorFitsIn(Vector var1, int var2) {
- int var3 = 3;
- int var4 = 0;
-
- for(int var5 = var1.count(); var4 < var5; ++var4) {
- ++var3;
- var3 += this.serializedObjectFitsIn(var1.elementAt(var4), var2 - var3);
- if (var3 > var2) {
- return var3;
- }
-
- if (var4 < var5 - 1) {
- ++var3;
- }
- }
-
- return var3;
- }
-
- private final int serializedNullFitsIn() {
- return 1;
- }
-
- private final int serializedObjectFitsIn(Object var1, int var2) {
- if (var1 instanceof String) {
- return this.serializedStringFitsIn((String)var1, var2);
- } else if (var1 instanceof Hashtable) {
- return this.serializedHashtableFitsIn((Hashtable)var1, var2);
- } else if (var1 instanceof Object[]) {
- return this.serializedArrayFitsIn(var1, var2);
- } else if (var1 instanceof Vector) {
- return this.serializedVectorFitsIn((Vector)var1, var2);
- } else {
- return var1 == null ? this.serializedNullFitsIn() : this.serializedStringFitsIn(var1.toString(), var2);
- }
- }
-
- private final boolean canFitExpressionOnLine(Object var1) {
- int var2 = 80 - this.nextCharIndex;
- return this.serializedObjectFitsIn(var1, var2) <= var2;
- }
-
- private final void formatVector(Vector var1) throws IOException {
- int var2 = var1.count();
- if (this.canFitExpressionOnLine(var1)) {
- this.writeCharacter(40);
-
- for(int var4 = 0; var4 < var2; ++var4) {
- this.writeCharacter(32);
- this.formatObject(var1.elementAt(var4));
- if (var4 < var2 - 1) {
- this.writeCharacter(44);
- }
- }
-
- this.writeCharacter(32);
- this.writeCharacter(41);
- } else {
- this.writeCharacter(40);
- this.increaseTabLevel();
-
- for(int var3 = 0; var3 < var2; ++var3) {
- this.insertNewLine();
- this.formatObject(var1.elementAt(var3));
- if (var3 < var2 - 1) {
- this.writeCharacter(44);
- }
- }
-
- this.decreaseTabLevel();
- this.insertNewLine();
- this.writeCharacter(41);
- }
- }
-
- private final void formatArray(Object[] var1) throws IOException {
- int var2 = var1.length;
- if (this.canFitExpressionOnLine(var1)) {
- this.writeCharacter(91);
-
- for(int var4 = 0; var4 < var2; ++var4) {
- this.writeCharacter(32);
- this.formatObject(var1[var4]);
- if (var4 < var2 - 1) {
- this.writeCharacter(44);
- }
- }
-
- this.writeCharacter(32);
- this.writeCharacter(93);
- } else {
- this.writeCharacter(91);
- this.increaseTabLevel();
-
- for(int var3 = 0; var3 < var2; ++var3) {
- this.insertNewLine();
- this.formatObject(var1[var3]);
- if (var3 < var2 - 1) {
- this.writeCharacter(44);
- }
- }
-
- this.decreaseTabLevel();
- this.insertNewLine();
- this.writeCharacter(93);
- }
- }
-
- private final void formatHashtable(Hashtable var1) throws IOException {
- Enumeration var3 = var1.keys();
- int var9 = 0;
- int var10 = 0;
- int var2 = var1.count();
- String[] var6 = new String[var2];
- Object[] var8 = new Object[var2];
- var3 = var1.keys();
-
- for(int var11 = 0; var11 < var2; ++var11) {
- Object var7 = var3.nextElement();
- if (var7 instanceof String) {
- var6[var10++] = (String)var7;
- } else {
- var8[var9++] = var7;
- }
- }
-
- if (var10 > 0) {
- Sort.sortStrings(var6, 0, var10, true, false);
- System.arraycopy(var6, 0, var8, var9, var10);
- }
-
- if (this.canFitExpressionOnLine(var1)) {
- this.writeCharacter(123);
-
- for(int var16 = 0; var16 < var2; ++var16) {
- this.writeCharacter(32);
- Object var13 = var8[var16];
- Object var14 = var1.get(var13);
- this.formatObject(var13);
- this.writeCharacter(32);
- this.writeCharacter(61);
- this.writeCharacter(32);
- this.formatObject(var14);
- this.writeCharacter(59);
- }
-
- this.writeCharacter(125);
- } else {
- this.writeCharacter(123);
- this.increaseTabLevel();
-
- for(int var15 = 0; var15 < var2; ++var15) {
- Object var4 = var8[var15];
- Object var5 = var1.get(var4);
- this.insertNewLine();
- this.formatObject(var4);
- this.writeCharacter(32);
- this.writeCharacter(61);
- this.writeCharacter(32);
- this.formatObject(var5);
- this.writeCharacter(59);
- }
-
- this.decreaseTabLevel();
- this.insertNewLine();
- this.writeCharacter(125);
- }
- }
-
- private final void formatObject(Object var1) throws IOException {
- if (var1 instanceof String) {
- ((Serializer)this).serializeString((String)var1);
- } else if (var1 instanceof Hashtable) {
- this.formatHashtable((Hashtable)var1);
- } else if (var1 instanceof Object[]) {
- this.formatArray(var1);
- } else if (var1 instanceof Vector) {
- this.formatVector((Vector)var1);
- } else if (var1 == null) {
- ((Serializer)this).serializeNull();
- } else {
- ((Serializer)this).serializeString(var1.toString());
- }
- }
-
- public void writeObject(Object var1) throws IOException {
- this.formatObject(var1);
- }
-
- public static String serializeObject(Object var0) {
- Object var1 = null;
- String var6;
- if (var0 == null) {
- var6 = null;
- } else {
- ByteArrayOutputStream var2 = new ByteArrayOutputStream(256);
- FormattingSerializer var3 = new FormattingSerializer(var2);
-
- try {
- var3.writeObject(var0);
- ((Serializer)var3).flush();
- } catch (IOException var5) {
- }
-
- var6 = var2.toString();
-
- try {
- ((FilterOutputStream)var3).close();
- ((OutputStream)var2).close();
- } catch (IOException var4) {
- }
-
- Object var7 = null;
- Object var8 = null;
- }
-
- return var6;
- }
-
- public static byte[] formatBytes(byte[] var0) {
- ByteArrayInputStream var1 = new ByteArrayInputStream(var0);
- Object var2 = Deserializer.readObject(var1);
- if (var2 != null) {
- ByteArrayOutputStream var3 = new ByteArrayOutputStream();
- FormattingSerializer var4 = new FormattingSerializer(var3);
-
- try {
- var4.writeObject(var2);
- ((Serializer)var4).flush();
- } catch (IOException var5) {
- return null;
- }
-
- return var3.toByteArray();
- } else {
- return null;
- }
- }
-
- public static boolean writeObject(OutputStream var0, Object var1) {
- try {
- FormattingSerializer var2 = new FormattingSerializer(var0);
- var2.writeObject(var1);
- ((Serializer)var2).flush();
- return true;
- } catch (IOException var3) {
- return false;
- }
- }
- }
-