From 187ea6a7d293bb26ba68d9511c77afc9475b003f Mon Sep 17 00:00:00 2001 From: rds <rds> Date: Wed, 5 Nov 2008 14:44:45 +0000 Subject: [PATCH] Add export_context --- src/zmapView/zmapViewRemoteReceive.c | 80 +++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/src/zmapView/zmapViewRemoteReceive.c b/src/zmapView/zmapViewRemoteReceive.c index 42ad3538a..4b714bf2e 100755 --- a/src/zmapView/zmapViewRemoteReceive.c +++ b/src/zmapView/zmapViewRemoteReceive.c @@ -27,9 +27,9 @@ * * Exported functions: See XXXXXXXXXXXXX.h * HISTORY: - * Last edited: Apr 30 12:18 2008 (rds) + * Last edited: Nov 5 14:28 2008 (rds) * Created: Tue Jul 10 21:02:42 2007 (rds) - * CVS info: $Id: zmapViewRemoteReceive.c,v 1.15 2008-04-30 11:19:56 rds Exp $ + * CVS info: $Id: zmapViewRemoteReceive.c,v 1.16 2008-11-05 14:44:45 rds Exp $ *------------------------------------------------------------------- */ @@ -58,6 +58,8 @@ typedef enum ZMAPVIEW_REMOTE_LIST_WINDOWS, ZMAPVIEW_REMOTE_NEW_WINDOW, + ZMAPVIEW_REMOTE_DUMP_CONTEXT, + /* ...but above here */ ZMAPVIEW_REMOTE_UNKNOWN }ZMapViewValidXRemoteActions; @@ -76,6 +78,9 @@ typedef struct GList *feature_list; GData *styles; + + char *filename; + char *format; }RequestDataStruct, *RequestData; typedef struct @@ -96,6 +101,7 @@ static char *view_post_execute(char *command_text, gpointer user_data, int *stat static void delete_failed_make_message(gpointer list_data, gpointer user_data); static void drawNewFeatures(ZMapView view, RequestData input_data, ResponseData output_data); static void getChildWindowXID(ZMapView view, RequestData input_data, ResponseData output_data); +static void viewDumpContextToFile(ZMapView view, RequestData input_data, ResponseData output_data); static gboolean sanityCheckContext(ZMapView view, RequestData input_data, ResponseData output_data); static void draw_failed_make_message(gpointer list_data, gpointer user_data); static gint matching_unique_id(gconstpointer list_data, gconstpointer user_data); @@ -115,6 +121,7 @@ static gboolean setupStyles(ZMapFeatureContext context, static gboolean xml_zmap_start_cb(gpointer user_data, ZMapXMLElement zmap_element, ZMapXMLParser parser); static gboolean xml_featureset_start_cb(gpointer user_data, ZMapXMLElement zmap_element, ZMapXMLParser parser); static gboolean xml_feature_start_cb(gpointer user_data, ZMapXMLElement zmap_element, ZMapXMLParser parser); +static gboolean xml_export_start_cb(gpointer user_data, ZMapXMLElement zmap_element, ZMapXMLParser parser); static gboolean xml_subfeature_end_cb(gpointer user_data, ZMapXMLElement zmap_element, ZMapXMLParser parser); static gboolean xml_return_true_cb(gpointer user_data, ZMapXMLElement zmap_element, ZMapXMLParser parser); @@ -124,6 +131,7 @@ static gboolean xml_return_true_cb(gpointer user_data, ZMapXMLElement zmap_eleme static ZMapXMLObjTagFunctionsStruct view_starts_G[] = { { "zmap", xml_zmap_start_cb }, { "client", zMapXRemoteXMLGenericClientStartCB }, + { "export", xml_export_start_cb }, { "featureset", xml_featureset_start_cb }, { "feature", xml_feature_start_cb }, {NULL, NULL} @@ -139,6 +147,7 @@ static char *actions_G[ZMAPVIEW_REMOTE_UNKNOWN + 1] = { NULL, "find_feature", "create_feature", "delete_feature", "single_select", "multiple_select", "unselect", "register_client", "list_windows", "new_window", + "export_context", NULL }; @@ -262,6 +271,9 @@ static char *view_execute_command(char *command_text, gpointer user_data, int *s case ZMAPVIEW_REMOTE_LIST_WINDOWS: getChildWindowXID(view, &input_data, &output_data); break; + case ZMAPVIEW_REMOTE_DUMP_CONTEXT: + viewDumpContextToFile(view, &input_data, &output_data); + break; case ZMAPVIEW_REMOTE_UNHIGHLIGHT_FEATURE: case ZMAPVIEW_REMOTE_HIGHLIGHT_FEATURE: case ZMAPVIEW_REMOTE_HIGHLIGHT2_FEATURE: @@ -372,6 +384,50 @@ static void getChildWindowXID(ZMapView view, RequestData input_data, ResponseDat return ; } +static void viewDumpContextToFile(ZMapView view, RequestData input_data, ResponseData output_data) +{ + GIOChannel *file = NULL; + GError *error = NULL; + char *filepath = NULL; + + filepath = input_data->filename; + + if(!(file = g_io_channel_new_file(filepath, "w", &error))) + { + output_data->code = ZMAPXREMOTE_UNAVAILABLE; + output_data->handled = FALSE; + if(error) + g_string_append(output_data->messages, error->message); + } + else + { + char *format = NULL; + gboolean result = FALSE; + + format = input_data->format; + + if(format && g_ascii_strcasecmp(format, "gff") == 0) + result = zMapGFFDump(view->features, file, &error); + else + result = zMapFeatureContextDump(view->features, file, &error); + + if(!result) + { + output_data->code = ZMAPXREMOTE_INTERNAL; + output_data->handled = FALSE; + if(error) + g_string_append(output_data->messages, error->message); + } + else + { + output_data->code = ZMAPXREMOTE_OK; + output_data->handled = TRUE; + } + } + + return ; +} + static gboolean sanityCheckContext(ZMapView view, RequestData input_data, ResponseData output_data) { gboolean features_are_sane = TRUE; @@ -726,6 +782,7 @@ static gboolean xml_zmap_start_cb(gpointer user_data, case ZMAPVIEW_REMOTE_LIST_WINDOWS: case ZMAPVIEW_REMOTE_REGISTER_CLIENT: case ZMAPVIEW_REMOTE_NEW_WINDOW: + case ZMAPVIEW_REMOTE_DUMP_CONTEXT: break; default: xml_data->common.action = ZMAPVIEW_REMOTE_INVALID; @@ -1130,6 +1187,25 @@ static gboolean xml_feature_start_cb(gpointer user_data, ZMapXMLElement feature_ return FALSE; } +static gboolean xml_export_start_cb(gpointer user_data, ZMapXMLElement export_element, ZMapXMLParser parser) +{ + ZMapXRemoteParseCommandData xml_data = (ZMapXRemoteParseCommandData)user_data; + RequestData request_data = (RequestData)(xml_data->user_data); + ZMapXMLAttribute attr = NULL; + /* <export filename="" format="" /> */ + + if((attr = zMapXMLElementGetAttributeByName(export_element, "filename"))) + request_data->filename = g_quark_to_string(zMapXMLAttributeGetValue(attr)); + else + zMapXMLParserRaiseParsingError(parser, "filename is a required attribute for export."); + + if((attr = zMapXMLElementGetAttributeByName(export_element, "format"))) + request_data->format = g_quark_to_string(zMapXMLAttributeGetValue(attr)); + else + request_data->format = "gff"; + + return FALSE; +} static gboolean xml_subfeature_end_cb(gpointer user_data, ZMapXMLElement sub_element, -- GitLab