[RICPLT-1703] - Reset Request + rmr_service refactoring (disabled)

Signed-off-by: rh362j <ronen.hasid@intl.att.com>
Change-Id: I939041928c0fa18d2682262ce920710b99cf0539
diff --git a/E2Manager/controllers/controller.go b/E2Manager/controllers/controller.go
index 07b3ec2..a0c7a15 100644
--- a/E2Manager/controllers/controller.go
+++ b/E2Manager/controllers/controller.go
@@ -24,22 +24,28 @@
 	"e2mgr/models"
 	"e2mgr/providers"
 	"e2mgr/rNibWriter"
+	"e2mgr/services"
 	"encoding/json"
 	"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 	"github.com/julienschmidt/httprouter"
+	"io"
 	"net/http"
+	"time"
 )
 
+const (
+	ParamRanName = "ranName"
+)
 type Controller struct {
 	logger         *logger.Logger
 	handlerProvider *providers.IncomingRequestHandlerProvider
 	rmrResponseChannel chan<- *models.NotificationResponse
 }
 
-func NewController(logger *logger.Logger, rNibReaderProvider func() reader.RNibReader, rNibWriterProvider func() rNibWriter.RNibWriter,
+func NewController(logger *logger.Logger, rmrService *services.RmrService, rNibReaderProvider func() reader.RNibReader, rNibWriterProvider func() rNibWriter.RNibWriter,
 	config *configuration.Configuration, rmrResponseChannel chan<- *models.NotificationResponse) *Controller {
 
-	provider := providers.NewIncomingRequestHandlerProvider(logger, config, rNibWriterProvider, rNibReaderProvider)
+	provider := providers.NewIncomingRequestHandlerProvider(logger, rmrService, config, rNibWriterProvider, rNibReaderProvider)
 	return &Controller{
 		logger: logger,
 		handlerProvider: provider,
@@ -52,9 +58,32 @@
 	c.handleRequest(writer, &r.Header, providers.ShutdownRequest,nil, false, http.StatusNoContent)
 }
 
-//TODO create struct to input parameters
+func (c *Controller) X2ResetHandler(writer http.ResponseWriter, r *http.Request, params httprouter.Params){
+	startTime := time.Now()
+	request:= models.ResetRequest{}
+	ranName:= params.ByName(ParamRanName)
+	if !c.extractJsonBody(r.Body, &request, writer){
+		return
+	}
+	request.RanName = ranName
+	request.StartTime = startTime
+	c.handleRequest(writer, &r.Header, providers.ResetRequest, request, false, http.StatusNoContent)
+}
+
+func (c *Controller) extractJsonBody(body io.Reader, request models.Request, writer http.ResponseWriter) bool{
+	decoder := json.NewDecoder(body)
+	if err:= decoder.Decode(request); err != nil {
+		if err != nil {
+			c.logger.Errorf("[Client -> E2 Manager] #controller.extractJsonBody - unable to extract json body - error: %s", err)
+			c.handleErrorResponse(e2managererrors.NewRequestValidationError(), writer)
+			return false
+		}
+	}
+	return true
+}
+
 func (c *Controller) handleRequest(writer http.ResponseWriter, header *http.Header, requestName providers.IncomingRequest,
-	request *models.Request, validateHeader bool, httpStatusResponse int) {
+	request models.Request, validateHeader bool, httpStatusResponse int) {
 
 	c.logger.Infof("[Client -> E2 Manager] #controller.handleRequest - request: %v", requestName) //TODO print request if exist
 
@@ -113,6 +142,19 @@
 			e2Error, _ := err.(*e2managererrors.HeaderValidationError)
 			errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
 			httpError = http.StatusUnsupportedMediaType
+		case *e2managererrors.WrongStateError:
+			e2Error, _ := err.(*e2managererrors.WrongStateError)
+			errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
+			httpError = http.StatusBadRequest
+		case *e2managererrors.RequestValidationError:
+			e2Error, _ := err.(*e2managererrors.RequestValidationError)
+			errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
+			httpError = http.StatusBadRequest
+		case *e2managererrors.RmrError:
+			e2Error, _ := err.(*e2managererrors.RmrError)
+			errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}
+			httpError = http.StatusInternalServerError
+
 		default:
 			e2Error, _ := err.(*e2managererrors.InternalError)
 			errorResponseDetails = models.ErrorResponse{Code: e2Error.Err.Code, Message: e2Error.Err.Message}