Showcase

  • Colección de gadgets disponible POR USUARIO
    • Datos a guardar: id y url (en Internet)
  • Cada gadget tiene asociado un objeto XHtml y un Template cuando está en la paleta (
  • Un objeto XHTML guarda en la base de datos el código XHTML asociado al gadget (copia local)
  • Un objeto Template guarda en la base de datos la información del template en forma de datos del modelo y no todo el código del templata

Dragboard

  • Cada objeto gadget tendrá, en general, una serie de propiedades. Algunas de estas podrán ser editadas por el usuario que lo instancia, otras, en cambio, sólo podrán ser modificadas por el autor y en la mayoría de los casos esto se traducirá en una nueva versión del gadget, o incluso en un gadget completamente nuevo. Siendo esto así, podemos distinguir distintas entidades:
  • Gadget, será el objeto que se crea al agregar un gadget desde el catálogo general (Catalog) a la paleta del usuario (Palette). Deberán mantenerse almacenados los atributos no modificables del gadget como campos de la entidad en lugar del XML cacheado, tarea que estimo perteneciente al ámbito de Catalog.
    • Gadget.
      • id = AutonumericField(primary_key=True)
      • uri = CharField(maxlength=500)
      • title = CharField(maxlength=250)
      • content = TextField()
      • last_update = DateTimeField()
      • author = CharField(maxlength=250)
      • web = TextField(maxlength=500)
      • description = CharField( maxlength=250)
      • version = CharField(maxlength=150)
      • tags = CharField(maxlength=250)
      • shared = BooleanField(default=False) # En principio, este campo permitiría que un usuario pudiese tener una versión local del gadget y compartirlo con el resto.
      • importer = ForeignKey(User.id)
  • Desde la paleta, el usuario arrastra un gadget a su panel o pizarra de gadgets (Dragboard), lo que se traduce como la instanciación de un objeto Gadget. Esto puede ser resuelto mediante la creación de un objeto Preference que almacene las preferencias editables, de manera que la información no editable siempre resida en el mismo sitio y no haya redundancia de datos. Esto plantea un problema en el momento en que un usuario añade un gadget a su paleta antes de instanciarlo ¿dónde deben almacenarse las preferencias editables? Lo más lógico, para aprovechar la estructura, sería utilizar Preference, y asignar un identificador de usuario no válido (Null), pero esta solución puede antojarse inadecuada según qué casos, así que puede optarse por utilizar la misma estructura de datos que se usará para Preference, pero replicada y sin campo User para que sirva tan sólo a las preferencias del gadget. En principio, optaríamos por la primera solución, externalizando los tipos de datos que se podrán guardar por cada preferencia.
    • Preference, faltarían aun campos por definir.
      • user = ForeignKey(User, null=True)
      • gadget = ForeignKey(Gadget)
      • data_name = CharField(maxlength=250)
      • data_scope = CharField(maxlength=250) #Este campo podría reproducir el ámbito de aplicación: preferencia de usuario, del gadget, layout, etc.
      • data_type = ForeignKey(ContentType) # Referencia interna a uno de los tipos de datos
      • data_id = PositiveIntegerField() # Identificador el tipo en sí al que está referido
      • data = GenericForeignKey('data_type', 'data_id')
    • TextType.
      • text = TextField()
      • length = PositiveIntegerField()
    • NumberType.
      • number = FloatField()
    • BooelanType.
      • boolean = BooleanField()
    • GeoType.
      • latitude = DecimalField(max_digits=9, decimal_places=6)
      • longitude = DecimalField(max_digits=9, decimal_places=6)
    • ListType.
      • length = PositiveIntegerField()
      • ListItemType.
        • list_type = ForeignKey(ListType)
        • item = CharField()
  • La posición de cada gadget se almacenará como una propiedad más de la instancia, en este caso, como una propiedad más que sólo podrá ser modificada por la plataforma. El valor de este atributo será una cadena que codifique la posición respecto al dragboard, un layout y una celda.
    • CellType.
      • position = CharField(maxlength=250) # Almacenará la posición codificada.
    • LayoutType.
      • grid = CharField(maxlength=250) # Almacenará la configuración de la cuadrícula.

Wiring

  • Lista de canales
    • Nombre de canal
    • Friend Code (o tipo de datos del canal)
    • Lista de entradas al canal ((eventos, idInstancia) y canales)
    • Lista de salidas del canal ((slots, idInstancia) y canales)

Datos Globales

  • Usuarios
    • login (identificador)
    • name

VarManager?

Se encarga de la persistencia de todas las variables!!!

  • Variables persistentes de los IGadgets
  • Preferencias de usuario de los IGadgets
  • Valor de las variables Event
  • Valor de las variables Slot