/**
  * Updates an existing WFS feature type in the database.
  * 
  * @return Boolean
  * @param $aWfsFeatureType WfsFeatureType
  */
 private static function updateFeatureType($aWfsFeatureType)
 {
     $aWfsFeatureType->id = WfsToDb::getFeatureTypeId($aWfsFeatureType);
     $sql = "UPDATE wfs_featuretype SET ";
     $sql .= "featuretype_title = \$1,";
     $sql .= "featuretype_abstract = \$2,";
     $sql .= "featuretype_srs = \$3 ";
     $sql .= "WHERE featuretype_id = \$4";
     $v = array($aWfsFeatureType->title, $aWfsFeatureType->summary, $aWfsFeatureType->srs, $aWfsFeatureType->id);
     $t = array('s', 's', 's', 'i');
     $e = new mb_exception("UPDATING FT (FT: {$aWfsFeatureType->id})");
     $res = db_prep_query($sql, $v, $t);
     if (!$res) {
         $e = new mb_exception("Error while updating WFS feature type in database.");
         return false;
     }
     // update existing WFS feature type elements
     $featureTypeElementNameArray = array();
     for ($i = 0; $i < count($aWfsFeatureType->elementArray); $i++) {
         $currentElement = $aWfsFeatureType->elementArray[$i];
         array_push($featureTypeElementNameArray, $currentElement);
         if (WfsToDb::featureTypeElementExists($aWfsFeatureType, $currentElement->name)) {
             if (!WfsToDb::updateFeatureTypeElement($aWfsFeatureType->id, $currentElement)) {
                 return false;
             }
         } else {
             if (!WfsToDb::insertFeatureTypeElement($aWfsFeatureType->id, $currentElement)) {
                 return false;
             }
         }
     }
     // delete obsolete WFS feature type elements
     $v = array($aWfsFeatureType->id);
     $t = array("i");
     $sql = "DELETE FROM wfs_element WHERE fkey_featuretype_id = \$1";
     $sql_in = "";
     for ($i = 0; $i < count($featureTypeElementNameArray); $i++) {
         if ($i > 0) {
             $sql_in .= ", ";
         }
         $sql_in .= "\$" . ($i + 2);
         array_push($v, $featureTypeElementNameArray[$i]->name);
         array_push($t, "s");
     }
     if ($sql_in !== "") {
         $sql .= " AND element_name NOT IN (" . $sql_in . ")";
     }
     $res = db_prep_query($sql, $v, $t);
     if (!$res) {
         $e = new mb_exception("Error while deleting obsolete WFS feature type element in database.");
         return false;
     }
     // delete all namespaces of this WFS feature type
     $sql = "DELETE FROM wfs_featuretype_namespace WHERE ";
     $sql .= "fkey_wfs_id = \$1 AND fkey_featuretype_id = \$2";
     $v = array($aWfsFeatureType->wfs->id, $aWfsFeatureType->id);
     $t = array("i", "i");
     $res = db_prep_query($sql, $v, $t);
     if (!$res) {
         $e = new mb_exception("Error while deleting WFS feature type namespaces from the database.");
         return false;
     }
     // insert feature type namespaces
     for ($i = 0; $i < count($aWfsFeatureType->namespaceArray); $i++) {
         $namespace = $aWfsFeatureType->namespaceArray[$i];
         if (!WfsToDb::insertFeatureTypeNamespace($aWfsFeatureType->wfs->id, $aWfsFeatureType->id, $namespace)) {
             $e = new mb_exception("Error while inserting WFS feature type namespaces into the database.");
             return false;
         }
     }
     // update categories for feature type
     $types = array("md_topic", "inspire", "custom");
     foreach ($types as $cat) {
         $sql = "DELETE FROM wfs_featuretype_{$cat}_category WHERE fkey_featuretype_id = \$1";
         $v = array($aWfsFeatureType->id);
         $t = array('i');
         $res = db_prep_query($sql, $v, $t);
         if (!$res) {
             $e = new mb_exception("Error while deleting old categories for WFS feature type in the database.");
             return false;
         }
         $attr = "featuretype_{$cat}_category_id";
         $k = $aWfsFeatureType->{$attr};
         if ($aWfsFeatureType->{$attr} && count($k) > 0) {
             for ($j = 0; $j < count($k); $j++) {
                 if ($k[$j] != "") {
                     $sql = "INSERT INTO wfs_featuretype_{$cat}_category (fkey_featuretype_id, fkey_{$cat}_category_id) VALUES (\$1, \$2)";
                     $v = array($aWfsFeatureType->id, $k[$j]);
                     $t = array('i', 'i');
                     $res = db_prep_query($sql, $v, $t);
                     if (!$res) {
                         $e = new mb_exception("Error while inserting WFS feature type categories into the database.");
                         return false;
                     }
                 }
             }
         }
     }
     // update keywords
     $sql = "DELETE FROM wfs_featuretype_keyword WHERE fkey_featuretype_id = \$1";
     $v = array($aWfsFeatureType->id);
     $t = array('i');
     $res = db_prep_query($sql, $v, $t);
     $k = $aWfsFeatureType->featuretype_keyword;
     //		var_dump($k);
     for ($j = 0; $j < count($k); $j++) {
         $keyword_id = "";
         while ($keyword_id == "") {
             $sql = "SELECT keyword_id FROM keyword WHERE UPPER(keyword) = UPPER(\$1)";
             $v = array($k[$j]);
             $t = array('s');
             $res = db_prep_query($sql, $v, $t);
             $row = db_fetch_array($res);
             //print_r($row);
             if ($row) {
                 $keyword_id = $row["keyword_id"];
             } else {
                 $sql_insertKeyword = "INSERT INTO keyword (keyword)";
                 $sql_insertKeyword .= "VALUES (\$1)";
                 $v1 = array($k[$j]);
                 $t1 = array('s');
                 $res_insertKeyword = db_prep_query($sql_insertKeyword, $v1, $t1);
                 if (!$res_insertKeyword) {
                     $e = new mb_exception("Error while inserting keywords into the database.");
                     return false;
                 }
             }
         }
         // check if featuretype/keyword combination already exists
         $sql_fiKeywordExists = "SELECT * FROM wfs_featuretype_keyword WHERE fkey_featuretype_id = \$1 AND fkey_keyword_id = \$2";
         $v = array($aWfsFeatureType->id, $keyword_id);
         $t = array('i', 'i');
         $res_fiKeywordExists = db_prep_query($sql_fiKeywordExists, $v, $t);
         $row = db_fetch_array($res_fiKeywordExists);
         //print_r($row);
         if (!$row) {
             $sql1 = "INSERT INTO wfs_featuretype_keyword (fkey_keyword_id,fkey_featuretype_id)";
             $sql1 .= "VALUES (\$1,\$2)";
             $v1 = array($keyword_id, $aWfsFeatureType->id);
             $t1 = array('i', 'i');
             $res1 = db_prep_query($sql1, $v1, $t1);
             if (!$res1) {
                 $e = new mb_exception("Error while inserting wfs_featuretype_keywords into the database.");
                 return false;
             }
         }
     }
     return true;
 }