SEBA-261
refactor to support serialize/deserialize

Change-Id: Icdc0bc2bb06a9d1c3240c0f46e1de02953a0b017
diff --git a/models/abstract/ChassisUtils.go b/models/abstract/ChassisUtils.go
index 5e38890..0cacf79 100644
--- a/models/abstract/ChassisUtils.go
+++ b/models/abstract/ChassisUtils.go
@@ -19,7 +19,7 @@
 /*
 GenerateChassis - constructs a new AbstractOLT Chassis
 */
-func GenerateChassis(CLLI string, rack int, shelf int) *Chassis {
+func GenerateChassis(CLLI string, rack int, shelf int) Chassis {
 	chassis := Chassis{CLLI: CLLI, Rack: rack, Shelf: shelf}
 
 	var slots [16]Slot
@@ -28,7 +28,7 @@
 	}
 
 	chassis.Slots = slots
-	return &chassis
+	return chassis
 }
 
 func generateSlot(n int, c *Chassis) Slot {
diff --git a/models/abstract/chassis.go b/models/abstract/chassis.go
index 06e0002..9b62c8c 100644
--- a/models/abstract/chassis.go
+++ b/models/abstract/chassis.go
@@ -18,7 +18,6 @@
 
 import (
 	"errors"
-	"fmt"
 )
 
 const MAX_SLOTS int = 16
@@ -64,7 +63,6 @@
 	return nextPort, nil
 }
 func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
-	fmt.Printf("chassis.ActivateONT(slot:%d,portNumber:%d,ontNumber:%d,serialNumber:%s\n", slotNumber, portNumber, ontNumber, serialNumber)
 	err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
 	return err
 }
diff --git a/models/abstract/port.go b/models/abstract/port.go
index e626e7c..1af3d6e 100644
--- a/models/abstract/port.go
+++ b/models/abstract/port.go
@@ -29,8 +29,8 @@
 	Number int
 	// DeviceID string
 	Onts     [64]Ont
-	PhysPort *physical.PONPort
-	Parent   *Slot `json:"-"`
+	PhysPort *physical.PONPort `json:"-"`
+	Parent   *Slot             `json:"-"`
 }
 
 /*
@@ -50,7 +50,6 @@
 }
 func (port *Port) provisionOnt(ontNumber int, serialNumber string) error {
 
-	fmt.Printf("My Number:%d abstract.port.provisionOnt(ontNumber:%d,serialNumber:%s\n", port.Number, ontNumber, serialNumber)
 	slot := port.Parent
 	chassis := *slot.Parent
 	baseID := fmt.Sprintf("%d/%d/%d/%d:%d.1.1", chassis.Rack, chassis.Shelf, slot.Number, port.Number, ontNumber)
diff --git a/models/abstract/serialize.go b/models/abstract/serialize.go
new file mode 100644
index 0000000..8781d2d
--- /dev/null
+++ b/models/abstract/serialize.go
@@ -0,0 +1,45 @@
+/*
+ Copyright 2017 the original author or authors.
+
+ 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 abstract
+
+import (
+	"encoding/json"
+)
+
+func (chassis *Chassis) Serialize() ([]byte, error) {
+	return json.Marshal(chassis)
+}
+
+func (chassis *Chassis) Deserialize(jsonData []byte) error {
+	err := json.Unmarshal(jsonData, chassis)
+
+	for i := 0; i < len(chassis.Slots); i++ {
+		var slot *Slot
+		slot = &chassis.Slots[i]
+		slot.Parent = chassis
+		for j := 0; j < len(slot.Ports); j++ {
+			var port *Port
+			port = &slot.Ports[j]
+			port.Parent = slot
+			for k := 0; k < len(port.Onts); k++ {
+				port.Onts[k].Parent = port
+			}
+		}
+	}
+
+	return err
+}