seba-343 - added preprovision api

Change-Id: I5760e059154e2966ea2545b48306fce78cbe4daf
diff --git a/models/abstract/chassis.go b/models/abstract/chassis.go
index 2b3231b..929f247 100644
--- a/models/abstract/chassis.go
+++ b/models/abstract/chassis.go
@@ -63,6 +63,41 @@
 
 	return nextPort, nil
 }
+func (chassis *Chassis) PreProvisonONT(slotNumber int, portNumber int, ontNumber int, cTag uint32, sTag uint32, nasPortID string, circuitID string, techProfile string, speedProfile string) error {
+	if slotNumber > len(chassis.Slots) {
+		errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
+		return errors.New(errorMsg)
+	}
+	if portNumber > 16 {
+		errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
+		return errors.New(errorMsg)
+	}
+	if ontNumber > 64 {
+		errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
+		return errors.New(errorMsg)
+	}
+
+	err := chassis.Slots[slotNumber-1].Ports[portNumber-1].preProvisionOnt(ontNumber, cTag, sTag, nasPortID, circuitID, techProfile, speedProfile)
+	return err
+}
+func (chassis *Chassis) ActivateSerial(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
+	if slotNumber > len(chassis.Slots) {
+		errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
+		return errors.New(errorMsg)
+	}
+	if portNumber > 16 {
+		errorMsg := fmt.Sprintf("Invalid port Number %d ", portNumber)
+		return errors.New(errorMsg)
+	}
+	if ontNumber > 64 {
+		errorMsg := fmt.Sprintf("Invalid ont Number %d ", ontNumber)
+		return errors.New(errorMsg)
+	}
+
+	err := chassis.Slots[slotNumber-1].Ports[portNumber-1].activateSerial(ontNumber, serialNumber)
+	return err
+
+}
 func (chassis *Chassis) ActivateONTFull(slotNumber int, portNumber int, ontNumber int, serialNumber string, cTag uint32, sTag uint32, nasPortID string, circuitID string) error {
 	if slotNumber > len(chassis.Slots) {
 		errorMsg := fmt.Sprintf("Invalid slot Number %d ", slotNumber)
diff --git a/models/abstract/port.go b/models/abstract/port.go
index efb3054..da1e966 100644
--- a/models/abstract/port.go
+++ b/models/abstract/port.go
@@ -65,6 +65,30 @@
 	err := phyPort.ActivateOnt(ontNumber, ont.Svlan, ont.Cvlan, serialNumber, nasPortID, circuitID)
 	return err
 }
+func (port *Port) preProvisionOnt(ontNumber int, cTag uint32, sTag uint32, nasPortID string, circuitID string, techProfile string, speedProfile string) error {
+	slot := port.Parent
+
+	if port.PhysPort == nil {
+		chassis := slot.Parent
+		err := UnprovisonedPortError{oltNum: slot.Number, clli: chassis.CLLI, portNum: port.Number}
+		return &err
+	}
+	phyPort := port.PhysPort
+	err := phyPort.PreProvisionOnt(ontNumber, sTag, cTag, nasPortID, circuitID, techProfile, speedProfile)
+	return err
+}
+func (port *Port) activateSerial(ontNumber int, serialNumber string) error {
+	slot := port.Parent
+
+	if port.PhysPort == nil {
+		chassis := slot.Parent
+		err := UnprovisonedPortError{oltNum: slot.Number, clli: chassis.CLLI, portNum: port.Number}
+		return &err
+	}
+	phyPort := port.PhysPort
+	err := phyPort.ActivateSerial(ontNumber, serialNumber)
+	return err
+}
 func (port *Port) provisionOntFull(ontNumber int, serialNumber string, cTag uint32, sTag uint32, nasPortID string, circuitID string) error {
 	slot := port.Parent