/**
  * Saves a node.
  *
  * @param AmNav_NodeModel $node
  *
  * @throws Exception
  * @return bool|AmNav_NodeModel
  */
 public function saveNode(AmNav_NodeModel $node)
 {
     $isNewNode = !$node->id;
     // Node data
     if ($node->id) {
         $nodeRecord = AmNav_NodeRecord::model()->findById($node->id);
         if (!$nodeRecord) {
             throw new Exception(Craft::t('No node exists with the ID “{id}”.', array('id' => $node->id)));
         }
     } else {
         $nodeRecord = new AmNav_NodeRecord();
     }
     // Set attributes
     $nodeRecord->setAttributes($node->getAttributes(), false);
     if ($isNewNode) {
         $nodeRecord->order = $this->_getNewOrderNumber($node->navId, $node->parentId, $node->locale);
     }
     // Validate
     $nodeRecord->validate();
     $node->addErrors($nodeRecord->getErrors());
     // Save node
     if (!$node->hasErrors()) {
         if ($nodeRecord->save()) {
             return AmNav_NodeModel::populateModel($nodeRecord);
         }
     }
     return false;
 }