Index: hierarchical_select.features.inc
===================================================================
RCS file: hierarchical_select.features.inc
diff -N hierarchical_select.features.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ hierarchical_select.features.inc	26 Dec 2010 12:47:42 -0000
@@ -0,0 +1,96 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Integration with the features module.
+ */
+
+/**
+ * Implementation of hook_features_export().
+ */
+function hierarchical_select_features_export($data, &$export, $module_name) {
+  // Add hierarchical_select dependency
+  $export['dependencies']['hierarchical_select'] = 'hierarchical_select';
+
+  // Retrieve dependencies from all information items
+  $dependencies = array();
+  foreach (module_implements('hierarchical_select_config_info') as $module) {
+    $configs = module_invoke($module, 'hierarchical_select_config_info');
+    foreach ($configs as $config_id => $config) {
+      $dependencies[$config_id] = $module;
+    }
+  }
+
+  // Add features and dependencies
+  foreach ($data as $config_id) {
+    $export['features']['hierarchical_select'][$config_id] = $config_id;
+    if (isset($dependencies[$config_id])) {
+      $module = $dependencies[$config_id];
+      $export['dependencies'][$module] = $module;
+    }
+  }
+
+  return array();
+}
+
+/**
+ * Implementation of hook_features_export_options().
+ */
+function hierarchical_select_features_export_options() {
+  // Retrieve all information items
+  $info_items = array();
+  foreach (module_implements('hierarchical_select_config_info') as $module) {
+    $info_items = array_merge_recursive($info_items, module_invoke($module, 'hierarchical_select_config_info'));
+  }
+
+  // Process the retrieved information into options
+  $options = array();
+  foreach ($info_items as $id => $item) {
+    $config_id = $item['config_id'];
+    $options[$config_id] = $item['hierarchy type'] .': '. check_plain($item['hierarchy']) .' - '. $item['context type'] . (!empty($item['context']) ? ': ' . $item['context'] : '');
+  }
+
+  return $options;
+}
+
+/**
+ * Implementation of hook_features_export_render().
+ */
+function hierarchical_select_features_export_render($module, $data) {
+  module_load_include('inc', 'hierarchical_select', 'includes/common');
+  module_load_include('inc', 'hierarchical_select', 'hierarchical_select.admin');
+
+  $code = array();
+  $code[] = '$configs = array();';
+  foreach ($data as $config_id) {
+    $config = hierarchical_select_common_config_get($config_id);
+    $config['config_id'] = $config_id;
+
+    $code[] = _hierarchical_select_create_export_code($config);
+    $code[] = "\$configs['{$config_id}'] = \$config;";
+  }
+  $code[] = "return \$configs;";
+  $code = implode("\n", $code);
+
+  return array('hierarchical_select_default_configs' => $code);
+}
+
+/**
+ * Implementation of hook_features_revert().
+ */
+function hierarchical_select_features_revert($module) {
+  hierarchical_select_features_rebuild($module);
+}
+
+/**
+ * Implementation of hook_features_rebuild().
+ */
+function hierarchical_select_features_rebuild($module) {
+  $configs = module_invoke($module, 'hierarchical_select_default_configs');
+  if (!empty($configs)) {
+    foreach ($configs as $config_id => $config) {
+      hierarchical_select_common_config_set($config_id, $config);
+    }
+  }
+}
Index: hierarchical_select.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/hierarchical_select/hierarchical_select.module,v
retrieving revision 1.197
diff -u -p -r1.197 hierarchical_select.module
--- hierarchical_select.module	8 Oct 2010 16:04:55 -0000	1.197
+++ hierarchical_select.module	26 Dec 2010 12:47:44 -0000
@@ -273,6 +273,20 @@ function hierarchical_select_simpletest(
   return array_keys($tests);
 }
 
+/**
+ * Implementation of hook_features_api().
+ */
+function hierarchical_select_features_api() {
+  return array(
+    'hierarchical_select' => array(
+      'name' => t('Hierarchical select configs'),
+      'feature_source' => TRUE,
+      'default_hook' => 'hierarchical_select_default_configs',
+      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+      'file' => drupal_get_path('module', 'hierarchical_select') .'/hierarchical_select.features.inc',
+    ),
+  );
+}
 
 //----------------------------------------------------------------------------
 // Menu system callbacks.
