# 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