source: trunk/zoo-project/zoo-services/utils/registry/service.c @ 730

Last change on this file since 730 was 676, checked in by djay, 10 years ago

Move createRegistry function to server_internal. Add the utils/registry service.

  • Property svn:keywords set to Id
File size: 4.8 KB
Line 
1/**
2 * Author : Gérald FENOY
3 *
4 * Copyright 2015 GeoLabs SARL. All rights reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24
25#include "service.h"
26#include "service_internal.h"
27#include "server_internal.h"
28#include "response_print.h"
29
30extern "C" {
31#include <libxml/tree.h>
32#include <libxml/parser.h>
33#include <libxml/xpath.h>
34#include <libxml/xpathInternals.h>
35
36#include <libxslt/xslt.h>
37#include <libxslt/xsltInternals.h>
38#include <libxslt/transform.h>
39#include <libxslt/xsltutils.h>
40
41#include <dirent.h>
42
43  /**
44   * GetFromRegistry ZOO Service :
45   * This service is used in the ZOO-Project to browse the profiles registry.
46   */
47#ifdef WIN32
48  __declspec(dllexport)
49#endif
50  int GetFromRegistry(maps*& conf,maps*& inputs,maps*& outputs){
51    const char *params[4 + 1];
52    int xmlLoadExtDtdDefaultValue;
53    map* tmpMap=NULL,*tmpMmap=NULL, *tmpTmap=NULL;
54
55    map* reg = getMapFromMaps (conf, "main", "registry");
56    registry* zooRegistry=NULL;
57    if(reg!=NULL){
58      int saved_stdout = dup (fileno (stdout));
59      dup2 (fileno (stderr), fileno (stdout));
60      createRegistry (conf,&zooRegistry,reg->value);
61      dup2 (saved_stdout, fileno (stdout));
62      close(saved_stdout);
63    }else{
64      setMapInMaps(conf,"lenv","message",_ss("No registry defined"));
65      return SERVICE_FAILED;
66    }
67    tmpMap=getMapFromMaps(inputs,"id","value");
68    if(strstr(tmpMap->value,"/")==NULL){
69      setMapInMaps(conf,"lenv","message",_ss("Unable to parse your registry identifier"));
70      return SERVICE_FAILED;
71    }
72    char* tmp=zStrdup(tmpMap->value);
73    char* tmp1=zStrdup(strstr(tmpMap->value,"/")+1);
74    tmp[strlen(tmp)-strlen(tmp1)-1]=0;
75    service* inherited=getServiceFromRegistry(zooRegistry,tmp,tmp1);
76    if(inherited!=NULL){
77      dumpService(inherited);
78      xmlDocPtr doc = xmlNewDoc (BAD_CAST "1.0");
79      xmlNodePtr n = printWPSHeader(doc,conf,"DescribeProcess",
80                                    root_nodes[1][1],"2.0.0",1);
81      setMapInMaps(conf,"main","rversion","2.0.0");
82      printDescribeProcessForProcess(zooRegistry,conf,n,inherited);
83      setMapInMaps(conf,"main","rversion","1.0.0");
84
85
86      xmlNodePtr n1 = xmlFirstElementChild(xmlFirstElementChild(n));
87
88
89      xmlDocPtr doc1 = xmlNewDoc (BAD_CAST "1.0");
90      int vid=1;
91      char *tmp=(char*) malloc((86+strlen("DescribeProcess")+1)*sizeof(char));
92      sprintf(tmp,schemas[vid][4],schemas[vid][2],schemas[vid][3],"DescribeProcess");
93      xmlNewProp(n1,BAD_CAST "xsi:schemaLocation",BAD_CAST tmp);
94      free(tmp);
95
96      n1->ns=xmlCopyNamespaceList(n->ns);
97      n1->nsDef=xmlCopyNamespaceList(n->nsDef);
98     
99      xmlDocSetRootElement(doc1, n1);
100     
101      xmlChar *xmlbuff;
102      int buffersize;
103      xmlDocDumpFormatMemoryEnc(doc1, &xmlbuff, &buffersize, "utf-8", 1);
104      setMapInMaps(outputs,"Result","value",(char*)xmlbuff);
105      xmlFree(xmlbuff);
106      xmlFreeDoc(doc);
107      xmlFreeDoc(doc1);
108      return SERVICE_SUCCEEDED;
109    }else{
110      if(strcasecmp(tmp,"concept")==0){
111        char *file_path=(char*)malloc((strlen(reg->value)+strlen(tmpMap->value)+5)*sizeof(char));
112        sprintf(file_path,"%s/%s.txt",reg->value,tmpMap->value);
113        FILE* f=fopen(file_path,"r");
114        if(f!=NULL){
115          fseek(f, 0, SEEK_END);
116          long count = ftell(f);
117          fseek(f, 0, SEEK_SET);
118          setMapInMaps(outputs,"Result","value","");
119          map* tmpMap=getMapFromMaps(outputs,"Result","value");
120          free(tmpMap->value);
121          tmpMap->value=(char*) malloc((count+1)*sizeof(char)); 
122          fread(tmpMap->value,1,count,f);
123          tmpMap->value[count]=0;
124          fclose(f);
125          setMapInMaps(outputs,"Result","mimeType","text/plain");
126          return SERVICE_SUCCEEDED;
127        }else{
128          setMapInMaps(conf,"lenv","message",_ss("Unable to access this item in the registry."));
129          return SERVICE_FAILED;
130        }
131      }
132      setMapInMaps(conf,"lenv","message",_ss("Unable to access this item in the registry."));
133      return SERVICE_FAILED;
134    }
135    return SERVICE_SUCCEEDED;
136  }
137
138}
Note: See TracBrowser for help on using the repository browser.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png