import logging
from gettext import gettext as _

class FileType:
    def __init__(self, formats):
        self._formats = formats

    def get_name(self):
        raise NotImplementedError

    def get_icon(self):
        raise NotImplementedError

    def get_preview(self):
        raise NotImplementedError

    def get_activity(self):
        raise NotImplementedError
        
    def matches_mime_type(cls, mime_type):
        raise NotImplementedError
    matches_mime_type = classmethod(matches_mime_type)

class TextFileType(FileType):

    _types = set(['text/plain', 'UTF8_STRING', 'STRING'])

    def get_name(self):
        return _('Text snippet')

    def get_icon(self):
        return 'theme:activity-xbook'

    def get_preview(self):
        for format, data in self._formats.iteritems():
            if format in TextFileType._types:
                text = str(data.get_data())
                if len(text) < 50:
                    return text
                else:
                    return text[0:49] + "..."

        return ''

    def get_activity(self):
        return ''
        
    def matches_mime_type(cls, mime_type):
        return mime_type in cls._types
    matches_mime_type = classmethod(matches_mime_type)

class ImageFileType(FileType):

    _types = set(['image/jpeg', 'image/gif', 'image/png', 'image/tiff'])

    def get_name(self):
        return _('Image')

    def get_icon(self):
        return 'theme:activity-sketch'

    def get_preview(self):
        return ''

    def get_activity(self):
        return ''
        
    def matches_mime_type(cls, mime_type):
        return mime_type in cls._types
    matches_mime_type = classmethod(matches_mime_type)

class UriFileType(FileType):
    
    _types = set(['_NETSCAPE_URL'])
    
    def get_name(self):
        return _('Web Page')

    def get_icon(self):
        return 'theme:activity-web'

    def get_preview(self):
        for format, data in self._formats.iteritems():
            if format in UriFileType._types:
                string = data.get_data()
                title = string.split("\n")[1]
                return title
        
        return ''

    def get_activity(self):
        return ''

    def matches_mime_type(cls, mime_type):
        return mime_type in cls._types
    matches_mime_type = classmethod(matches_mime_type)

class PdfFileType(FileType):
    
    _types = set(['application/pdf'])
    
    def get_name(self):
        return _('PDF file')

    def get_icon(self):
        return 'theme:activity-xbook'

    def get_preview(self):
        return ''

    def get_activity(self):
        return 'org.laptop.sugar.Xbook'
        
    def matches_mime_type(cls, mime_type):
        return mime_type in cls._types
    matches_mime_type = classmethod(matches_mime_type)

class MsWordFileType(FileType):
    
    _types = set(['application/msword'])
    
    def get_name(self):
        return _('MS Word file')

    def get_icon(self):
        return 'theme:activity-abiword'

    def get_preview(self):
        return ''

    def get_activity(self):
        return 'org.laptop.AbiWordActivity'
        
    def matches_mime_type(cls, mime_type):
        return mime_type in cls._types
    matches_mime_type = classmethod(matches_mime_type)

class RtfFileType(FileType):
    
    _types = set(['application/rtf', 'text/rtf'])
    
    def get_name(self):
        return _('RTF file')

    def get_icon(self):
        return 'theme:activity-abiword'

    def get_preview(self):
        return ''

    def get_activity(self):
        return 'org.laptop.AbiWordActivity'
        
    def matches_mime_type(cls, mime_type):
        return mime_type in cls._types
    matches_mime_type = classmethod(matches_mime_type)

class OOTextFileType(FileType):
    
    _types = set(['application/vnd.oasis.opendocument.text'])
    
    def get_name(self):
        return _('OpenOffice text file')

    def get_icon(self):
        return 'theme:activity-abiword'

    def get_preview(self):
        return ''

    def get_activity(self):
        return 'org.laptop.AbiWordActivity'
        
    def matches_mime_type(cls, mime_type):
        return mime_type in cls._types
    matches_mime_type = classmethod(matches_mime_type)

class UnknownFileType(FileType):
    def get_name(self):
        return _('Object')

    def get_icon(self):
        return 'theme:stock-missing'

    def get_preview(self):
        return ''

    def get_activity(self):
        return ''
        
    def matches_mime_type(cls, mime_type):
        return true
    matches_mime_type = classmethod(matches_mime_type)

class TypeRegistry:
    def __init__(self):
        self._types = []
        self._types.append(PdfFileType)
        self._types.append(MsWordFileType)
        self._types.append(RtfFileType)
        self._types.append(OOTextFileType)
        self._types.append(UriFileType)
        self._types.append(ImageFileType)
        self._types.append(TextFileType)
    
    def get_type(self, formats):
        for file_type in self._types:
            for format, data in formats.iteritems():
                if file_type.matches_mime_type(format):
                    return file_type(formats)

        return UnknownFileType(formats)
    
_type_registry = None
def get_instance():
    global _type_registry
    if not _type_registry:
        _type_registry = TypeRegistry()
    return _type_registry

@@ -698,38 +698,35 @@
 turn 'theme:
-activity-xbook
+object-text
 '%0A%0A    def g
@@ -1443,23 +1443,20 @@
 eme:
-activity-sketch
+object-image
 '%0A%0A 
@@ -1872,20 +1872,19 @@
 eme:
-activity-web
+object-link
 '%0A%0A 
@@ -2519,22 +2519,19 @@
 eme:
-activity-xbook
+object-text
 '%0A%0A 
@@ -2977,32 +2977,27 @@
  'theme:
-activity-abiword
+object-text
 '%0A%0A    d
@@ -3445,32 +3445,27 @@
  'theme:
-activity-abiword
+object-text
 '%0A%0A    d
@@ -3944,24 +3944,19 @@
 eme:
-activity-abiword
+object-text
 '%0A%0A 

Use the new icons for object types.