00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00030 #include "config.h"
00031
00032 #include <glib.h>
00033
00034 #include "perr.h"
00035 #include "duifield.h"
00036 #include "duifieldmap.h"
00037 #include "duifilter.h"
00038
00039
00040
00041 DuiFieldMap *
00042 dui_field_map_new (void)
00043 {
00044 DuiFieldMap *fm;
00045 fm = g_new0 (DuiFieldMap, 1);
00046 fm->source.type = DUI_FIELD_NONE;
00047 fm->target.type = DUI_FIELD_NONE;
00048 fm->filtername = NULL;
00049 fm->filter = NULL;
00050 return fm;
00051 }
00052
00053 void
00054 dui_field_map_destroy (DuiFieldMap *fm)
00055 {
00056 if (!fm) return;
00057 dui_field_clear (&fm->source);
00058 dui_field_clear (&fm->target);
00059
00060 g_free (fm->filtername);
00061 g_free (fm);
00062 }
00063
00064
00065
00066
00067 void
00068 dui_field_map_transfer_data (DuiFieldMap *fm)
00069 {
00070 DuiField *src, *tgt;
00071 const gchar * fieldval = NULL;
00072
00073 if (!fm) return;
00074
00075 src = &fm->source;
00076 tgt = &fm->target;
00077
00078 if (NULL == tgt->set_field_value) return;
00079 if (src->get_field_value)
00080 {
00081 fieldval = src->get_field_value (src);
00082 }
00083
00084
00085
00086 if (fm->filter) fieldval = dui_filter_apply (fm->filter, fieldval);
00087 if (!fieldval) fieldval = "";
00088 PINFO ("src=%s::\"%s\" val=\"%s\" tgt=%s::\"%s\"",
00089 src->type, src->fieldname, fieldval,
00090 tgt->type, tgt->fieldname);
00091 tgt->set_field_value (tgt, fieldval);
00092 }
00093
00094
00095
00096
00097 const gchar *
00098 dui_field_map_get_value (DuiFieldMap *fm)
00099 {
00100 DuiField *src;
00101 const gchar * fieldval = NULL;
00102
00103 if (!fm) return NULL;
00104 src = &fm->source;
00105
00106 if (src->get_field_value)
00107 {
00108 fieldval = src->get_field_value (src);
00109 }
00110
00111
00112
00113 PINFO ("src=%s:\"%s\" val=\"%s\"", src->type, src->fieldname, fieldval);
00114
00115 if (fm->filter) fieldval = dui_filter_apply (fm->filter, fieldval);
00116 return fieldval;
00117 }
00118
00119
00120
00121
00122 void
00123 dui_field_map_resolve (DuiFieldMap *fm)
00124 {
00125 if (!fm) return;
00126
00127 if (fm->filtername)
00128 {
00129 fm->filter = dui_filter_find_by_name (fm->filtername);
00130 }
00131 else
00132 {
00133 fm->filter = NULL;
00134 }
00135 }
00136
00137