Index: /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py
===================================================================
--- /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 8393)
+++ /main/waeup.kofa/trunk/src/waeup/kofa/interfaces.py	(revision 8394)
@@ -22,5 +22,5 @@
 from datetime import datetime
 from hurry.file.interfaces import IFileRetrieval
-from hurry.workflow.interfaces import IWorkflow, IWorkflowInfo
+from hurry.workflow.interfaces import IWorkflowInfo
 from zc.sourcefactory.basic import BasicSourceFactory
 from zope import schema
@@ -30,5 +30,5 @@
 from zope.component.interfaces import IObjectEvent
 from zope.container.interfaces import INameChooser
-from zope.interface import Interface, Attribute, implements
+from zope.interface import Interface, Attribute
 from zope.schema.interfaces import IObject
 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
@@ -218,5 +218,6 @@
     APP_CATS_DICT = Attribute("Dict of application categories")
     SEMESTER_DICT = Attribute("Dict of semesters or trimesters")
-    INT_PHONE_PREFIXES = Attribute("Dict of international phone number prefixes")
+    INT_PHONE_PREFIXES = Attribute(
+        "Dict of international phone number prefixes")
 
     def sendContactForm(
@@ -274,5 +275,6 @@
         """Mangle `value` extracted from `obj` or suobjects thereof.
 
-        This is called by export before actually writing to the result file.
+        This is called by export before actually writing to the result
+        file.
         """
 
@@ -280,5 +282,6 @@
         """Export iterables as rows in a CSV file.
 
-        If `filepath` is not given, a string with the data should be returned.
+        If `filepath` is not given, a string with the data should be
+        returned.
 
         What kind of iterables are acceptable depends on the specific
@@ -289,5 +292,6 @@
         """Export all items in `site` as CSV file.
 
-        if `filepath` is not given, a string with the data should be returned.
+        if `filepath` is not given, a string with the data should be
+        returned.
         """
 
@@ -616,7 +620,47 @@
     """A data center.
 
-    TODO : declare methods, at least those needed by pages.
-    """
-    pass
+    A data center manages files (uploads, downloads, etc.).
+
+    Beside providing the bare paths needed to keep files, it also
+    provides some helpers to put results of batch processing into
+    well-defined final locations (with well-defined filenames).
+
+    The main use-case is managing of site-related files, i.e. files
+    for import, export etc.
+
+    DataCenters are _not_ meant as storages for object-specific files
+    like passport photographs and similar.
+
+    It is up to the datacenter implementation how to organize data
+    (paths) inside its storage path.
+    """
+    storage = schema.Bytes(
+        title = u'Path to directory where everything is kept.'
+        )
+
+    deleted_path = schema.Bytes(
+        title = u'Path were data about deleted objects should be stored.'
+        )
+
+    def getFiles(sort='name'):
+        """Get a list of files stored in `storage` sorted by basename.
+        """
+    def setStoragePath(path, move=False, overwrite=False):
+        """Set the path where to store files.
+
+        If `move` is True, move over files from the current location
+        to the new one.
+
+        If `overwrite` is also True, overwrite any already existing
+        files of same name in target location.
+
+        Triggers a DataCenterStorageMovedEvent.
+        """
+
+    def distProcessedFiles(successful, source_path, finished_file,
+                           pending_file, mode='create', move_orig=True):
+        """Distribute processed files over final locations.
+        """
+
 
 class IDataCenterFile(Interface):
@@ -1054,5 +1098,7 @@
     identifier = schema.TextLine(
         title = _(u'Unique Identifier'),
-        description = _(u'User Name, Student or Applicant Id, Matriculation or Registration Number'),
+        description = _(
+            u'User Name, Student or Applicant Id, Matriculation or '
+            u'Registration Number'),
         required = True,
         readonly = False,
