FORS Pipeline Reference Manual  5.0.9
fors_recipe.c
1 /* $Id: fors_recipe.c,v 1.3 2010-09-14 07:38:16 cizzo Exp $
2  *
3  * This file is part of the FORS Data Reduction Pipeline
4  * Copyright (C) 2002-2010 European Southern Observatory
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 /*
22  * $Author: cizzo $
23  * $Date: 2010-09-14 07:38:16 $
24  * $Revision: 1.3 $
25  * $Name: not supported by cvs2svn $
26  */
27 
28 #ifdef HAVE_CONFIG_H
29 #include <config.h>
30 #endif
31 
32 #include <fors_recipe_impl.h>
33 #include <fors_dfs.h>
34 #include <fors_utils.h>
35 
36 #include <cpl.h>
37 
38 static int fors_recipe_create(cpl_plugin *);
39 static int fors_recipe_exec(cpl_plugin *);
40 static int fors_recipe_destroy(cpl_plugin *);
41 
62 int cpl_plugin_get_info(cpl_pluginlist *list)
63 {
64  cpl_recipe *recipe = cpl_calloc(1, sizeof *recipe );
65  cpl_plugin *plugin = &recipe->interface;
66 
67  if (FORS_BINARY_VERSION != fors_get_version_binary())
68  {
69  cpl_msg_error(cpl_func,
70  "I am fors_recipe version %d, but I am linking "
71  "against the FORS library version %d. "
72  "This will not work. "
73  "Please remove all previous installations "
74  "of the " PACKAGE_NAME " and try again.",
75  FORS_BINARY_VERSION, fors_get_version_binary());
76  return 1;
77  }
78 
79  cpl_plugin_init(plugin,
80  CPL_PLUGIN_API,
81  FORS_BINARY_VERSION,
82  CPL_PLUGIN_TYPE_RECIPE,
83  fors_recipe_name,
84  fors_recipe_description_short,
85  fors_recipe_description,
86  fors_recipe_author,
87  fors_recipe_email,
88  fors_license,
92 
93  cpl_pluginlist_append(list, plugin);
94 
95  return 0;
96 }
97 
98 
109 static int fors_recipe_create(cpl_plugin *plugin)
110 {
111  cpl_recipe *recipe;
112 
113  if (cpl_error_get_code() != CPL_ERROR_NONE) {
114  cpl_msg_error(cpl_func,
115  "CPL error code is set (%s), "
116  "refusing to create recipe fors_recipe",
117  cpl_error_get_message());
118  return 1;
119  }
120 
121  /*
122  * Check that the plugin is part of a valid recipe
123  */
124 
125  if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) {
126  recipe = (cpl_recipe *)plugin;
127  }
128  else {
129  return 1;
130  }
131 
132  /*
133  * Create the parameters list in the cpl_recipe object
134  */
135 
136  recipe->parameters = cpl_parameterlist_new();
137 
138  fors_recipe_define_parameters(recipe->parameters);
139 
140  if (cpl_error_get_code() != CPL_ERROR_NONE) {
141  cpl_msg_error(cpl_func,
142  "Could not create fors_recipe parameters");
143  return 1;
144  }
145 
146  return 0;
147 }
148 
149 
158 static int fors_recipe_exec(cpl_plugin *plugin)
159 {
160  cpl_recipe *recipe;
161  cpl_errorstate initial_errorstate = cpl_errorstate_get();
162 
163  if (cpl_error_get_code() != CPL_ERROR_NONE) {
164  cpl_msg_error(cpl_func,
165  "CPL error code is set (%s), "
166  "refusing to execute recipe fors_recipe",
167  cpl_error_get_message());
168  return 1;
169  }
170 
171  if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) {
172  recipe = (cpl_recipe *)plugin;
173  }
174  else {
175  cpl_msg_error(cpl_func,
176  "Plugin is not a recipe");
177  return 1;
178  }
179 
180  if (recipe->frames == NULL) {
181  cpl_msg_error(cpl_func,
182  "Null frameset");
183  return 1;
184  }
185 
186  if (recipe->parameters == NULL) {
187  cpl_msg_error(cpl_func,
188  "Null parameter list");
189  return 1;
190  }
191 
192  fors_begin(recipe->frames,
193  fors_recipe_description_short);
194 
195  fors_recipe(recipe->frames, recipe->parameters);
196 
197  return fors_end(recipe->frames, initial_errorstate);
198 }
199 
200 
209 static int fors_recipe_destroy(cpl_plugin *plugin)
210 {
211  cpl_recipe *recipe;
212 
213  if (cpl_plugin_get_type(plugin) == CPL_PLUGIN_TYPE_RECIPE) {
214  recipe = (cpl_recipe *)plugin;
215  }
216  else {
217  return -1;
218  }
219 
220  cpl_parameterlist_delete(recipe->parameters);
221 
222  return 0;
223 }
224 
int fors_end(const cpl_frameset *frames, cpl_errorstate before_exec)
End recipe execution.
Definition: fors_dfs.c:219
void fors_begin(cpl_frameset *frames, const char *description_short)
Start recipe execution.
Definition: fors_dfs.c:191
static int fors_recipe_exec(cpl_plugin *)
Execute the plugin instance given by the interface.
Definition: fors_recipe.c:158
static int fors_recipe_create(cpl_plugin *)
Setup the recipe options.
Definition: fors_recipe.c:109
int cpl_plugin_get_info(cpl_pluginlist *list)
Build the list of available plugins, for this module.
Definition: fors_recipe.c:62
int fors_get_version_binary(void)
Get FORS library binary version number.
Definition: fors_utils.c:107
static int fors_recipe_destroy(cpl_plugin *)
Destroy what has been created by the 'create' function.
Definition: fors_recipe.c:209
Definition: list.c:74