bug fix for storing Resource.data for documents; starting text transformation for full-text indexing

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1384 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-10-04 08:56:23 +00:00
parent d765f90103
commit 2467793b66
2 changed files with 61 additions and 31 deletions

View file

@ -146,6 +146,9 @@ class EditObject(FormController):
prefix = 'form.' prefix = 'form.'
conceptPrefix = 'assignments.' conceptPrefix = 'assignments.'
old = None
selected = None
def update(self): def update(self):
self.updateFields(self.view.virtualTargetObject) self.updateFields(self.view.virtualTargetObject)
return True return True
@ -168,27 +171,31 @@ class EditObject(FormController):
continue continue
value = form[k] value = form[k]
if fn.startswith(self.conceptPrefix) and value: if fn.startswith(self.conceptPrefix) and value:
self.assignConcepts(obj, fn[len(self.conceptPrefix):], value) self.collectConcepts(fn[len(self.conceptPrefix):], value)
else: else:
setattr(adapted, fn, value) setattr(adapted, fn, value)
if self.old or self.selected:
self.assignConcepts(obj)
notify(ObjectModifiedEvent(obj)) notify(ObjectModifiedEvent(obj))
def assignConcepts(self, obj, fieldName, value): def collectConcepts(self, fieldName, value):
old = [] if self.old is None: self.old = []
selected = [] if self.selected is None: self.selected = []
for v in value: for v in value:
if fieldName == 'old': if fieldName == 'old':
old.append(v) self.old.append(v)
elif fieldName == 'selected': elif fieldName == 'selected':
selected.append(v) self.selected.append(v)
for v in old:
if v not in selected: def assignConcepts(self, obj):
for v in self.old:
if v not in self.selected:
c, p = v.split(':') c, p = v.split(':')
concept = util.getObjectForUid(c) concept = util.getObjectForUid(c)
predicate = util.getObjectForUid(p) predicate = util.getObjectForUid(p)
obj.deassignConcept(concept, [predicate]) obj.deassignConcept(concept, [predicate])
for v in selected: for v in self.selected:
if v not in old: if v not in self.old:
c, p = v.split(':') c, p = v.split(':')
concept = util.getObjectForUid(c) concept = util.getObjectForUid(c)
predicate = util.getObjectForUid(p) predicate = util.getObjectForUid(p)

View file

@ -42,6 +42,7 @@ from zope.event import notify
from cybertools.relation.registry import getRelations from cybertools.relation.registry import getRelations
from cybertools.relation.interfaces import IRelatable from cybertools.relation.interfaces import IRelatable
from cybertools.text.interfaces import ITextTransform
from cybertools.typology.interfaces import IType, ITypeManager from cybertools.typology.interfaces import IType, ITypeManager
from interfaces import IBaseResource, IResource from interfaces import IBaseResource, IResource
@ -58,8 +59,21 @@ from view import TargetRelation
_ = MessageFactory('loops') _ = MessageFactory('loops')
class ResourceManager(BTreeContainer):
implements(IResourceManager, ILoopsContained)
def getLoopsRoot(self):
return zapi.getParent(self)
def getViewManager(self):
return self.getLoopsRoot().getViewManager()
class Resource(Image, Contained): class Resource(Image, Contained):
# TODO: remove dependency on Image
implements(IBaseResource, IResource, IResourceManagerContained, IRelatable, ISized) implements(IBaseResource, IResource, IResourceManagerContained, IRelatable, ISized)
proxyInterface = IMediaAssetView proxyInterface = IMediaAssetView
@ -155,6 +169,8 @@ class Resource(Image, Contained):
return '%i Bytes' % self.getSize() return '%i Bytes' % self.getSize()
# Document and MediaAsset are legacy classes, will become obsolete
class Document(Resource): class Document(Resource):
implements(IDocument) implements(IDocument)
@ -165,7 +181,7 @@ class Document(Resource):
self.title = title self.title = title
_data = u'' _data = u''
def setData(self, data): self._data = data def setData(self, data): self._data = data.replace('\r', '')
def getData(self): return self._data def getData(self): return self._data
data = property(getData, setData) data = property(getData, setData)
@ -175,19 +191,7 @@ class MediaAsset(Resource):
implements(IMediaAsset) implements(IMediaAsset)
class ResourceManager(BTreeContainer): # type adapters
implements(IResourceManager, ILoopsContained)
def getLoopsRoot(self):
return zapi.getParent(self)
def getViewManager(self):
return self.getLoopsRoot().getViewManager()
# adapters and similar stuff
class FileAdapter(ResourceAdapterBase): class FileAdapter(ResourceAdapterBase):
""" A type adapter for providing file functionality for resources. """ A type adapter for providing file functionality for resources.
@ -197,7 +201,20 @@ class FileAdapter(ResourceAdapterBase):
_schemas = list(IFile) + list(IBaseResource) _schemas = list(IFile) + list(IBaseResource)
class TextDocumentAdapter(ResourceAdapterBase): class DocumentAdapter(ResourceAdapterBase):
""" Common base class for all resource types with a text-like
data attribute.
"""
# let the adapter handle the data attribute:S
_attributes = ResourceAdapterBase._attributes + ('data',)
def setData(self, data): self.context._data = data.replace('\r', '')
def getData(self): return self.context._data
data = property(getData, setData)
class TextDocumentAdapter(DocumentAdapter):
""" A type adapter for providing text document functionality for resources. """ A type adapter for providing text document functionality for resources.
""" """
@ -205,14 +222,16 @@ class TextDocumentAdapter(ResourceAdapterBase):
_schemas = list(IDocument) + list(IBaseResource) _schemas = list(IDocument) + list(IBaseResource)
class NoteAdapter(ResourceAdapterBase): class NoteAdapter(DocumentAdapter):
""" A type adapter for providing note functionality for resources. """ A note is a short text document with an associated link.
""" """
implements(INote) implements(INote)
_schemas = list(INote) + list(IBaseResource) _schemas = list(INote) + list(IBaseResource)
# other adapters
class DocumentWriteFileAdapter(object): class DocumentWriteFileAdapter(object):
implements(IWriteFile) implements(IWriteFile)
@ -254,10 +273,14 @@ class IndexAttributes(object):
ti = IType(context).typeInterface ti = IType(context).typeInterface
if ti is not None: if ti is not None:
adapted = ti(context) adapted = ti(context)
#transform = component.queryAdapter( transform = component.queryAdapter(
# adapted, ITextTransform, name=context.contentType) adapted, ITextTransform, name=context.contentType)
#if transform is not None: if transform is not None:
# return transform() rfa = component.queryAdapter(IReadFile, adapted)
if rfa is None:
return transform(StringIO(context.data))
else:
return transform(rfa)
if not context.contentType.startswith('text'): if not context.contentType.startswith('text'):
return u'' return u''
data = context.data data = context.data