public function execute()
    {
        $inputProvider      = $this->environment->getInputProvider();
        $palettesDefinition = $this->definition->getPalettesDefinition();
        $isSubmitted        = ($inputProvider->getValue('FORM_SUBMIT') === $this->definition->getName());
        $isAutoSubmit       = ($inputProvider->getValue('SUBMIT_TYPE') === 'auto');
        $widgetManager      = new WidgetManager($this->environment, $this->model);

        $this->dispatcher->dispatch(PreEditModelEvent::NAME, new PreEditModelEvent($this->environment, $this->model));

        $this->enforceModelRelationship();

        // Pass 1: Get the palette for the values stored in the model.
        $palette = $palettesDefinition->findPalette($this->model);

        $propertyValues = $this->processInput($widgetManager);
        if ($isSubmitted && $propertyValues) {
            // Pass 2: Determine the real palette we want to work on if we have some data submitted.
            $palette = $palettesDefinition->findPalette($this->model, $propertyValues);

            // Update the model - the model might add some more errors to the propertyValueBag via exceptions.
            $this->environment->getController()->updateModelFromPropertyBag($this->model, $propertyValues);
        }

        $fieldSets = $this->buildFieldSet($widgetManager, $palette, $propertyValues);

        $buttons = $this->getEditButtons();

        if ((!$isAutoSubmit) && $isSubmitted && empty($this->errors)) {
            $this->doPersist();
            $this->handleSubmit($buttons);
        }

        $template = new ViewTemplate('dcfe_general_edit');
        $template->setData(
            [
                'fieldsets'   => $fieldSets,
                'subHeadline' => $this->getHeadline(),
                'table'       => $this->definition->getName(),
                'enctype'     => 'multipart/form-data',
                'error'       => $this->errors,
                'editButtons' => $buttons
            ]
        );

        return $template->parse();
    }