/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.apache.heron.api.serializer;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Map;

public class JavaSerializer implements IPluggableSerializer {

  @Override
  public void initialize(Map<String, Object> config) {
  }

  @Override
  public byte[] serialize(Object object) {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
      ObjectOutputStream oos = new ObjectOutputStream(bos);
      oos.writeObject(object);
      oos.flush();
    } catch (IOException e) {
      throw new RuntimeException("Failed to serialize object: " + object.toString(), e);
    }
    return bos.toByteArray();
  }

  @Override
  public Object deserialize(byte[] input) {
    ByteArrayInputStream bis = new ByteArrayInputStream(input);
    try {
      ObjectInputStream ois = new ObjectInputStream(bis);
      return ois.readObject();
    } catch (IOException | ClassNotFoundException e) {
      throw new RuntimeException(e);
    }
  }
}

@@ -1226,32 +1226,37 @@
 t object) %7B%0A    
+try (
 ByteArrayOutputS
@@ -1295,31 +1295,24 @@
 tream();%0A   
- try %7B%0A
       Object
@@ -1357,17 +1357,19 @@
 eam(bos)
-;
+) %7B
 %0A      o
@@ -1407,24 +1407,56 @@
 os.flush();%0A
+      return bos.toByteArray();%0A
     %7D catch 
@@ -1461,32 +1461,33 @@
 h (IOException e
+x
 ) %7B%0A      throw 
@@ -1560,16 +1560,17 @@
 ing(), e
+x
 );%0A    %7D
@@ -1574,38 +1574,8 @@
   %7D%0A
-    return bos.toByteArray();%0A
   %7D%0A
@@ -1635,16 +1635,21 @@
 ) %7B%0A    
+try (
 ByteArra
@@ -1708,14 +1708,8 @@
     
-try %7B%0A
     
@@ -1760,17 +1760,19 @@
 eam(bis)
-;
+) %7B
 %0A      r
@@ -1846,16 +1846,17 @@
 eption e
+x
 ) %7B%0A    
@@ -1885,16 +1885,17 @@
 eption(e
+x
 );%0A    %7D

refactor JavaSerializer for closing input/output stream