"""New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""
"""Echo collection provides the classes for the ECHO content web-site.
class ECHO_collection is the basis class for an ECHO collection.
class ECHO_resource contains information on ECHO resources (e.g. an Display environment for Metadata
class ECHO_externalLink contains information on externalLinks
"""
import string
import re
import os
import OFS.Image
from types import *
from OFS.Image import Image
from Globals import DTMLFile
from OFS.Folder import Folder
from OFS.SimpleItem import SimpleItem
from AccessControl import ClassSecurityInfo
from Globals import InitializeClass
from Globals import DTMLFile
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Products.PageTemplates.PageTemplate import PageTemplate
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
from Globals import Persistent, package_home
from Acquisition import Implicit
#from psycopg import libpq
from pyPgSQL import libpq
import xml.dom.minidom
import urllib
import xml.dom.minidom
from ECHO_graphicalOverview import javaHandler,javaScriptMain
import ECHO_helpers
#List of different types for the graphical linking viewer
viewClassificationListMaster=['view point','area']
def content_html(self,type):
"""template fuer content"""
#templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
#
#if templates:
# return templates[0][1]()
try:
obj=getattr(self,type+"_template")
return obj()
except:
pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
pt.content_type="text/html"
return pt()
def toList(field):
"""Einzelfeld in Liste umwandeln"""
if type(field)==StringType:
return [field]
else:
return field
def getText(nodelist):
rc = ""
for node in nodelist:
if node.nodeType == node.TEXT_NODE:
rc = rc + node.data
return rc
def readMetadata(url):
"""Methoden zum Auslesen der Metadateninformation zu einer Resource
Vorerst noch Typ bib"""
metadict={}
try:
geturl=""
for line in urllib.urlopen(url).readlines():
geturl=geturl+line
except:
return (None,"Cannot open: "+url)
try:
dom=xml.dom.minidom.parseString(geturl)
except:
return (None,"Cannot parse: "+url+"
"+geturl)
metanode=dom.getElementsByTagName('bib')
metadict['bib_type']='Book'
if len(metanode)==0:
metanode=dom.getElementsByTagName('archimedes')
metadict['bib_type']='Archimedes'
#print "HELLO"
if not len(metanode)==0:
metacontent=metanode[0].childNodes
try:
metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
except:
"""nothing"""
for node in metacontent:
try:
metadict[node.tagName.lower()]=getText(node.childNodes)
except:
"""nothing"""
#print metadict
return metadict,""
def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs,viewClassification=""):
"""Allegemeine Informationen zu einer ECHO Collection"""
self.viewClassification=viewClassification
self.label = label
self.title=title
self.description=description
self.contentType=contentType
self.responsible=responsible
self.credits=toList(credits)
self.weight=weight
coords=[]
#coordinates of for rectangles
#print "cs", coordstrs
if coordstrs:
for coordstr in coordstrs:
#print "cs", coordstr
try:
temco=coordstr.split(",")
except:
temco=[]
#temco.append(angle)
coords.append(temco)
self.coords=coords[0:]
class scientificClassification(SimpleItem,Persistent,Implicit):
"""outdated will be deleeted in the next versions: subclass"""
security=ClassSecurityInfo()
def __init__(self,context,science,practice):
self.context=context
self.science=science
self.practice=practice
self.id="scientific_Classification"
security.declarePublic('get_context')
def get_context(self):
return self.context
security.declarePublic('get_science')
def get_science(self):
return self.science
security.declarePublic('get_practice')
def get_practice(self):
return self.practice
class scientificInformation(Folder,Persistent,Implicit):
"""outdated will be deleted in the next versions: subclass scientificInformation"""
security=ClassSecurityInfo()
def __init__(self,source_type,period):
self.id="scientific_Information"
self.source_type=source_type
self.period=period
security.declarePublic('get_source_type')
def get_source_type(self):
return self.source_type
security.declarePublic('get_period')
def get_period(self):
return self.period
class ECHO_layoutTemplate(ZopePageTemplate):
"""Create a layout Template for different purposes"""
meta_type="ECHO_layoutTemplate"
def __init__(self, id, text=None, content_type=None,EchoType=None):
self.id = str(id)
self.ZBindings_edit(self._default_bindings)
if text is None:
self._default_content_fn = os.path.join(package_home(globals()),
'zpt/ECHO_%s_template_standard.zpt'%EchoType)
text = open(self._default_content_fn).read()
self.pt_edit(text, content_type)
"""change form"""
def manage_addECHO_layoutTemplateForm(self):
"""Form for adding"""
pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_layoutTemplate.zpt').__of__(self)
return pt()
from urllib import quote
def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
"Add a Page Template with optional file content."
if type(EchoType)==StringType:
EchoTypes=[EchoType]
else:
EchoTypes=EchoType
for singleType in EchoTypes:
id = str(singleType)+"_template"
if REQUEST is None:
self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
ob = getattr(self, id)
if title:
ob.pt_setTitle(title)
return ob
else:
file = REQUEST.form.get('file')
headers = getattr(file, 'headers', None)
if headers is None or not file.filename:
zpt = ECHO_layoutTemplate(id,EchoType=singleType)
else:
zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
self._setObject(id, zpt)
ob = getattr(self, id)
if title:
ob.pt_setTitle(title)
try:
u = self.DestinationURL()
except AttributeError:
u = REQUEST['URL1']
REQUEST.RESPONSE.redirect(u+'/manage_main')
return ''
class ECHO_resource(Folder):
"""ECHO Ressource"""
meta_type='ECHO_resource'
viewClassificationList=viewClassificationListMaster
getSubCols = ECHO_helpers.getSubCols
def getTitle(self):
"""title"""
return self.title.encode('utf-8')
def getLabel(self):
"""title"""
return self.label.encode('utf-8')
def content_html(self):
"""template fuer content"""
return content_html(self,'resource')
def getViewClassification(self):
if hasattr(self,'viewClassification'):
return self.viewClassification
else:
return ""
def getCredits(self):
"""Ausgabe der credits"""
if self.credits:
return self.credits
else:
return []
def __init__(self,id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords):
self.id = id
"""Festlegen der ID"""
self.label = label
self.link= link
self.metalink=metalink
self.title=title
self.weight=weight
self.credits=toList(credits)
self.description=description
self.contentType=contentType
self.responsible=responsible
if coords:
coordsnew=[ string.split(x,",") for x in coords]
else:
coordsnew=[]
self.coords=coordsnew
def getCoords(self):
try:
return [string.join(x,",") for x in self.coords]
except:
return []
def getContentType(self):
try:
return self.contentType
except:
return ""
def ECHO_resource_config(self):
"""Main configuration"""
if not hasattr(self,'weight'):
self.weight=""
if not hasattr(self,'coords'):
self.coords=[]
print "vorher",self.coords
pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_resource.zpt').__of__(self)
return pt()
def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,viewClassification="",coords=None,credits=None,RESPONSE=None):
"""Änderung der Properties"""
try:
coordsnew=[ string.split(x,",") for x in coords]
except:
coordsnew=[]
setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordsnew)
self.coords=coordsnew[0:]
self.link=link
self.metalink=metalink
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'ECHO_resource_config'},
{'label':'Metadata','action':'ECHO_getResourceMD'},
{'label':'Graphics','action':'ECHO_graphicEntry'},
)
def getOverview(self):
"""overview graphics"""
return self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])[0][1]
def ECHO_graphicEntry(self):
"""DO nothing"""
overview = self.aq_parent.ZopeFind(self.aq_parent,obj_ids=['overview'])
if overview:
pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_draw.zpt').__of__(self)
return pt()
else:
return "NO OVERVIEW GRAPHICS"
def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
"""Enter coords"""
coords=self.coords
temco=coordstr.split(",")
temco.append(angle)
coords.append(temco)
self.coords=coords[0:]
if RESPONSE is not None:
RESPONSE.redirect('ECHO_graphicEntry')
def ECHO_getResourceMD(self,template="yes"):
"""Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
(metadict, error)=readMetadata(self.metalink)
if not error=="": #Fehler beim Auslesen des Metafiles
return "ERROR:",error
for key in metadict.keys():#Hinzufügen der Felder
setattr(self,key,metadict[key].encode('ascii','replace'))
self.metadata=metadict.keys()
self.label=self.generate_label()
if template=="yes":
pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_resourceMD.zpt').__of__(self)
return pt()
def ECHO_getMD(self,item):
"""Ausgabe der MD"""
return getattr(self,item)
def index_html(self):
"""standard page"""
return self.REQUEST.RESPONSE.redirect(self.link)
def generate_label(self):
"""Erzeugt_standard_Label aus Template"""
pt=getattr(self,"label_template_"+self.bib_type)
return pt()
def manage_addECHO_resourceForm(self):
"""Form for adding a ressource"""
pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_resourceForm.zpt').__of__(self)
return pt()
def manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
"""addaresource"""
newObj=ECHO_resource(id,link,metalink,title,label,description,contentType,responsible,credits,weight,coords)
self._setObject(id,newObj)
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
class ECHO_externalLink(Folder):
"""Link zu einer externen Ressource"""
security=ClassSecurityInfo()
meta_type='ECHO_externalLink'
def getTitle(self):
"""title"""
return self.title.encode('utf-8')
def getLabel(self):
"""title"""
return self.label.encode('utf-8')
def content_html(self):
"""template fuer content"""
return content_html(self,'externalLink')
def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
self.id = id
"""Festlegen der ID"""
self.credits=toList(credits)
self.label = label
self.link= link
self.title=title
self.weight=weight
self.description=description
self.contentType=contentType
self.responsible=responsible
coordsnew=[ string.split(x,",") for x in coords]
self.coords=coordsnew
def ECHO_externalLink_config(self):
"""Main configuration"""
if not hasattr(self,'weight'):
self.weight=""
if not hasattr(self,'coords'):
self.coords=['']
#print "G",self.coords
pt=PageTemplateFile('Products/ECHO_content/zpt/ChangeECHO_externalLink.zpt').__of__(self)
return pt()
def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
"""Änderung der Properties"""
try:
coordsnew=[ string.split(x,",") for x in coords]
except:
coordsnew=[]
setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coords)
self.coords=coordsnew[0:]
self.link=link
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'ECHO_externalLink_config'},
)
def getCredits(self):
"""Ausgabe der credits"""
if self.credits:
return self.credits
else:
return []
def index_html(self):
"""standard page"""
return self.REQUEST.RESPONSE.redirect(self.link)
def manage_addECHO_externalLinkForm(self):
"""Form for external Links"""
pt=PageTemplateFile('Products/ECHO_content/zpt/AddECHO_externalLinkForm.zpt').__of__(self)
return pt()
def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
"""Add an external Link"""
newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
self._setObject(id,newObj)
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
class ECHO_collection(Folder, Persistent, Implicit):
"""ECHO Collection"""
security=ClassSecurityInfo()
meta_type='ECHO_collection'
def getTitle(self):
"""title"""
return self.title.encode('utf-8')
def getLabel(self):
"""title"""
return self.label.encode('utf-8')
def createRessourcesFromXMLForm(self):
"""form"""
pt=PageTemplateFile('Products/ECHO_content/zpt/createRessourcesFromXMLForm.zpt').__of__(self)
return pt()
def createRessourcesFromXML(self,fileupload):
"""read an XML file for generating resources"""
dom=xml.dom.minidom.parse(fileupload)
ret="
"+label+"
" manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","") return ret def getImageTag(self): """GetTag""" try: return self.imageTag except: return "" def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): """SSS""" try: manage_addECHO_resource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None) return "done" except: return None def getSecondaryLink(self): """secondary link""" try: return self.secondaryLink except: return "" def getSecondaryLinkTitle(self): """secondary link""" try: return self.secondaryLinkTitle except: return "" def getCollectionTreeXML(self): """Tree as XML""" def getCollection(object,depth=0): depth+=1 collections="" for entry in object.__dict__.keys(): element=getattr(object,entry) try: if element.meta_type in ["ECHO_collection","ECHO_group"]: collections+="