# HG changeset patch # User dwinter # Date 1357835893 -3600 # Node ID 6d286ce1a64f19a6598a61ec9273b88880376a33 # Parent f198c86dd1f631dd652d9410e7dbb1730c2d9c67 inline refresh diff -r f198c86dd1f6 -r 6d286ce1a64f WebContent/mmpa/index.html --- a/WebContent/mmpa/index.html Wed Jan 09 14:37:39 2013 +0100 +++ b/WebContent/mmpa/index.html Thu Jan 10 17:38:13 2013 +0100 @@ -10,11 +10,19 @@ -Spatio Temporal Interface 3 +Spatio Temporal Interface 4 + diff -r f198c86dd1f6 -r 6d286ce1a64f WebContent/mmpa/mmpa.js --- a/WebContent/mmpa/mmpa.js Wed Jan 09 14:37:39 2013 +0100 +++ b/WebContent/mmpa/mmpa.js Thu Jan 10 17:38:13 2013 +0100 @@ -46,4 +46,16 @@ $("#restrictionChoiceSpecies").load("/m/restricted?path="+kml1+"&newRestriction=http%3A%2F%2Flocalhost%2Fm%2Fxpath%2F%2F%2Fspecies%2Ftext%28%29&select=%20distinct%20cast%28xpath%28%27//species/text%28%29%27,%20data%29%20as%20text[]%29%20AS%20name"); -}); \ No newline at end of file +}); + + +function callKML(kml,title){ + this.loadKml(kml,title); + //this.STICore.retrieveKML(1,kml); +}; + +function callKMLs(kml1,kml2){ + this.loadKml(kml1,"applicants"); + this.loadKml(kml2,"research"); + +}; diff -r f198c86dd1f6 -r 6d286ce1a64f eventsRestService.py --- a/eventsRestService.py Wed Jan 09 14:37:39 2013 +0100 +++ b/eventsRestService.py Thu Jan 10 17:38:13 2013 +0100 @@ -31,25 +31,23 @@ url1=urllib.quote_plus(APPLICANT_FILE_NAME) ret+=""" - applicants
- """%(E4D_URL,url1) + applicants
+ + """%(url1) + url2=urllib.quote_plus(RESEARCH_FILE_NAME) ret+=""" - research
- """%(E4D_URL,url2) + research
+ """%(url2) + ret+= """ - both
- """%(E4D_URL,url1,url2) + both
+ """%(url1,url2) + return ret @@ -283,10 +281,9 @@ url=urllib.quote_plus("%sxpath///applicant/name/text()?q=%s"%(BASE_URL,x)) ret+=""" - e4D
- """%(E4D_URL,url) + e4D
+ """%(url,x) + return ret class species: @@ -340,10 +337,8 @@ url=urllib.quote_plus("%sxpath///species/text()?q=%s"%(BASE_URL,x)) ret+=""" - e4D
- """%(E4D_URL,url) + e4D
+ """%(url,x) return ret diff -r f198c86dd1f6 -r 6d286ce1a64f eventsRestService_orig.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eventsRestService_orig.py Thu Jan 10 17:38:13 2013 +0100 @@ -0,0 +1,351 @@ +import web +import eventsDB2kml +import harvestDataFromEvents +import urllib +import urlparse + +urls = ( + '/xpath/(.*)', 'xpath', + '/xpathSearch', 'xpathSearch', + '/sqlSearch', 'sqlSearch', + '/sql', 'sql', + '/species', 'species', + '/applicants', 'applicants', + '/locations','locations', + '/restricted', 'restricted' +) +app = web.application(urls, globals()) + +#E4D_URL="http://localhost/mmpa/" +E4D_URL="http://localhost/~dwinter/mmpa/events2kml/mmpa/" +BASE_URL="http://localhost/m/" + +APPLICANT_FILE_NAME="http://localhost/outApplicants.xml" +RESEARCH_FILE_NAME="http://localhost/outResearch.xml" +class locations: + + def GET(self): + + ret="" + + url1=urllib.quote_plus(APPLICANT_FILE_NAME) + ret+=""" + + applicants
+ """%(E4D_URL,url1) + + + url2=urllib.quote_plus(RESEARCH_FILE_NAME) + ret+=""" + + research
+ """%(E4D_URL,url2) + + ret+= """ + both
+ """%(E4D_URL,url1,url2) + + return ret + +class restricted: + def GET(self): + x=web.input() + pathes=x.get("path") + print pathes + select=x.get("select") + newRestriction=x.get("newRestriction") + + if select is None: + select="data" + + + + #path kann meherer abfragen enthalten durch | getrennt + + splittedPath = pathes.split("|") + print splittedPath + queriesArray=[] + for xlinkPath in splittedPath: + url = urllib.unquote_plus(xlinkPath); + + + qs=urlparse.urlparse(url).query + + queries=urlparse.parse_qsl(qs) + q="" + for query in queries: + if query[0]=='q': + q=query[1] + + + + + + url= urlparse.urlparse(url).path + + pathSplitted=url.split("xpath/") + if len(pathSplitted)>1: + path=pathSplitted[1] + queriesArray.append((path,q)) + print queriesArray + + + + db = eventsDB2kml.DBQuery() + + if newRestriction is None: # keine weiteren Einschaenkungen dann erzeugen das kml file + res= ""+ db.searchXPaths(queriesArray)+"" + + + + hv=harvestDataFromEvents.EventKMLTransformer() + + + #x,cnt=hv.readString(res, ".//research_location/place_information", 0) + x,cnt=hv.readString(res, ".//place_information", 0) + + + + s = hv.toKML(x) + + return s + + + #sonst suche nach restriction suche muss eine liste von werten ergeben die sich mit der REstriction versteht, dh. restriction =wert wird dann in die Links eingebaut + # e.g. man such nach name d.h + # select=%20distinct%20cast%28xpath%28%27//applicant/name/text%28%29%27,%20data%29%20as%20text[]%29%20AS%20name + # dann muss die Restriction darauf passen i.a. wird die Restriction dem xpath im Suchstring entsprechen, + # newRestriction=http%3A%2F%2Flocalhost%2Fm%2Fxpath%2F%2F%2Fapplicant%2Fnam%2Ftext%28%29% + + newRestriction=urllib.unquote_plus(newRestriction) + + vals = db.searchXPaths(queriesArray,select,True) + + + ret="" + + + #berechen den neuer link = alter path ergaenzt um neue restriction + for val in vals: + val=val[0] # result ist immer ein tuple + # mehr als ein Treffer pro eintrag + for v in val: + newQuery="" + splittedPath.append(newRestriction+"?q="+v) + splittedPathQuoted=[urllib.quote_plus(x) for x in splittedPath] + + pathNew="|".join(splittedPathQuoted) + urlNew=urllib.quote_plus("""%srestricted?path=%s"""%(BASE_URL,pathNew)) + ret+="""%s
"""%(E4D_URL,urlNew,v) + return ret + +class sqlSearch: + def GET(self): + x=web.input() + sql=x.get("sql") + p=x.get("xpathPlace") + output=x.get("output") + + + + url="%ssql?q=%s&p=%s"%(BASE_URL,urllib.quote_plus(sql),p) + + if output=="sql": + raise web.seeother(url) + + url=urllib.quote_plus(url) + + + + url="""%s?kml1=%s&source1=1"""%(E4D_URL,url) + raise web.seeother(url) + + +class xpathSearch: + def GET(self): + x=web.input() + path=x.get("path") + value=x.get("value") + + url="%sxpath/%s?q=%s"%(BASE_URL,path,value) + + url=urllib.quote_plus(url) + + + + url="""%s?kml1=%s&source1=1"""%(E4D_URL,url) + raise web.seeother(url) + +class sql: + def GET(self): + x = web.input() + q= x.get("q") + p= x.get("p") + db = eventsDB2kml.DBQuery() + res= ""+db.sql(q)+"" + + + + hv=harvestDataFromEvents.EventKMLTransformer() + + + #x,cnt=hv.readString(res, ".//research_location/place_information", 0) + x,cnt=hv.readString(res, p, 0) + + + + s = hv.toKML(x) + + return s + + +class xpath: + + def GET(self, path): + + if not path: + return "" + + x = web.input() + q= x.get("q") + + db = eventsDB2kml.DBQuery() + res= ""+db.searchXPath(path, q)+"" + + + + hv=harvestDataFromEvents.EventKMLTransformer() + + + #x,cnt=hv.readString(res, ".//research_location/place_information", 0) + x,cnt=hv.readString(res, ".//place_information", 0) + + + + s = hv.toKML(x) + + return s + +class applicants: + + def GET(self): + db = eventsDB2kml.DBQuery() + + + x = web.input() + where= x.get("where") + + whereClause="" + +#Beispiel: +#select distinct +# +#cast (xpath('//name/text()',data) as text[]) AS name +# +#from locations +# where +# 'Astrophytum asterius' = ANY (cast (xpath('//species/text()', data) as text[])) ; + + if where!="" and where is not None: + whereClause="where %s"%where + + q=""" + select + cast(xpath('//applicant/name/text()', data) as text[]) AS name + from locations + %s + """%whereClause + + res=db.query(q) + #hole alle species + spec=set() + + for r in res: + + l=r[0] + for x in l: + spec.add(x) + + ret="" + spList=[x for x in spec] + + spList.sort() + for x in spList: + + ret+="""%s"""%(BASE_URL,x,x) + + url=urllib.quote_plus("%sxpath///applicant/name/text()?q=%s"%(BASE_URL,x)) + ret+=""" + + e4D
+ """%(E4D_URL,url) + + return ret +class species: + + def GET(self): + db = eventsDB2kml.DBQuery() + + x = web.input() + where= x.get("where") + + whereClause="" + +# Beispiel: +#select +# +#cast (xpath('//species/text()',data) as text[]) AS name +# +#from locations +# where +# 'Anna George' = ANY (cast (xpath('//name/text()', data) as text[])) ; +# + if where!="" and where is not None: + whereClause="where %s"%where + + q=""" + select distinct + cast(xpath('//species/text()', data) as text[]) AS name + from locations + %s + """%whereClause + + + res=db.query(q) + #hole alle species + spec=set() + + for r in res: + + l=r[0] + for x in l: + spec.add(x) + + ret="" + spList=[x for x in spec] + + spList.sort() + for x in spList: + + ret+="""%s"""%(BASE_URL,x,x) + + url=urllib.quote_plus("%sxpath///species/text()?q=%s"%(BASE_URL,x)) + ret+=""" + + e4D
+ """%(E4D_URL,url) + + return ret + +if __name__ == "__main__": + app.run() \ No newline at end of file