]> git.llucax.com Git - software/bife/bife-all.git/commitdiff
- Added cache capabilities to the Parser (activated by default).
authorLeandro Lucarella <llucax@gmail.com>
Sat, 21 Jun 2003 20:22:56 +0000 (20:22 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sat, 21 Jun 2003 20:22:56 +0000 (20:22 +0000)
- Added a list of required files to Root (and getRequiredFiles() method).
- Now Parser::parseFile() and Parser::parseString() must return both a Root
  widget.
- Updated UML diagram.
- Updated ROADMAP.
- Updated version numbers to future release.

Doxyfile
Makefile
doc/ROADMAP
doc/bife.xmi
examples/index.php
src/BIFE/Album.php
src/BIFE/Parser.php
src/BIFE/Root.php
src/HTML/Template/HIT.php

index 448b4a718e5906b9b43dc794174fedbcf65eecd5..19e035a0d6642a0fc05ce2a3fb809b19e5c05cf5 100644 (file)
--- a/Doxyfile
+++ b/Doxyfile
@@ -30,7 +30,7 @@
 # General configuration options
 #---------------------------------------------------------------------------
 PROJECT_NAME           = "BIFE - Build It FastEr"
-PROJECT_NUMBER         = 0.8
+PROJECT_NUMBER         = 0.10
 OUTPUT_DIRECTORY       = doc/api
 OUTPUT_LANGUAGE        = English
 EXTRACT_ALL            = YES
index 70f738349daae4ee521863aab40716f766a4892f..407e37900a4c232ac71890b81c4713da4d0714e3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -25,7 +25,7 @@
 # $Id$
 #
 
-VERSION=0.8
+VERSION=0.10
 PHP_FILES=src/BIFE/*.php
 META_FILES=xmi2code.config xmi2code.tpl.php Makefile Doxyfile package.xml
 DOC_FILES=doc/bife.xmi
index f506a639d9e3a9796dc0018fdffdaf8f2012ddcf..8b4ec378abcd2a02d392f7734a34198a19ec69ca 100644 (file)
@@ -3,9 +3,9 @@ $Id$
 Version 0.10
 ============
 
-    - Add XML file caching.
+    - Add XML file caching (done!).
     - Make a way to put all classes in a package together in a single file to
-      avoid overhead in require_once calls.
+      avoid overhead in require_once calls (to be reviewed).
     - Make a Core Package with the core classes (Parser, Widget, Container,
       Root, Fallback).
     - Make a Basic (or Generic?) Package with simple implementations of all
index bd9743dd7617e9ee96ab06821b3c85346a7fe142..b8a9ac74e0edf69fa4048aa01406bdd44d50f67a 100644 (file)
@@ -5,11 +5,11 @@
    <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
    <XMI.exporterVersion>1.1</XMI.exporterVersion>
   </XMI.documentation>
-  <XMI.model xmi.name="bife" href="/home/llucar/public_html/bife/doc/bife.xmi" />
+  <XMI.model xmi.name="bife" href="/home/luca/website/www/test/bife/doc/bife.xmi" />
   <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
  </XMI.header>
  <XMI.content>
-  <docsettings viewid="132" documentation="Parse XML data getting widgets." uniqueid="147" />
+  <docsettings viewid="132" documentation="Parse XML data getting widgets." uniqueid="150" />
   <umlobjects>
    <UML:Class stereotype="" package="BIFE" xmi.id="3" abstract="1" documentation="Base widget class." name="Widget" static="0" scope="200" >
     <UML:Operation stereotype="" package="" xmi.id="126" type="void" abstract="0" documentation="Constructor." name="BIFE_Widget" static="0" scope="200" >
@@ -108,9 +108,11 @@ Returns an array of associative arrays with this keys:
    <UML:Class stereotype="" package="BIFE" xmi.id="25" abstract="0" documentation="This is the XML Parser." name="Parser" static="0" scope="200" >
     <UML:Operation stereotype="" package="" xmi.id="30" type="void" abstract="0" documentation="Constructor." name="BIFE_Parser" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="''" type="string" abstract="0" documentation="Fallback class name (none if empty)." name="fallback" static="0" scope="200" />
+     <UML:Parameter stereotype="" package="" xmi.id="2" value="'/tmp'" type="string" abstract="0" documentation="XML cache directory. Empty is no caching will be done." name="cache" static="0" scope="200" />
     </UML:Operation>
     <UML:Operation stereotype="" package="" xmi.id="31" type="void" abstract="0" documentation="Constructor." name="__construct" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="''" type="string" abstract="0" documentation="Fallback class name (none if empty)." name="fallback" static="0" scope="200" />
+     <UML:Parameter stereotype="" package="" xmi.id="2" value="'/tmp'" type="string" abstract="0" documentation="XML cache directory. Empty is no caching will be done." name="cache" static="0" scope="200" />
     </UML:Operation>
     <UML:Operation stereotype="" package="" xmi.id="32" type="void" abstract="0" documentation="Destructor." name="__destruct" static="0" scope="200" />
     <UML:Operation stereotype="" package="" xmi.id="33" type="void" abstract="0" documentation="XML parser start of element handler." name="startElement" static="0" scope="200" >
@@ -130,16 +132,17 @@ Returns an array of associative arrays with this keys:
      <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="string" abstract="0" documentation="XML string to parse." name="data" static="0" scope="200" />
      <UML:Parameter stereotype="" package="" xmi.id="2" value="true" type="bool" abstract="0" documentation="Indicates if is the last string to parse." name="final" static="0" scope="200" />
     </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="37" type="&amp;BIFE_Widget" abstract="0" documentation="Parse a XML file with a complete and valid XML document." name="parseFile" static="0" scope="200" >
+    <UML:Operation stereotype="" package="" xmi.id="37" type="&amp;BIFE_Root" abstract="0" documentation="Parse a XML file with a complete and valid XML document." name="parseFile" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="string" abstract="0" documentation="Filename to parse." name="filename" static="0" scope="200" />
     </UML:Operation>
-    <UML:Operation stereotype="" package="" xmi.id="74" type="&amp;BIFE_Widget" abstract="0" documentation="Parse a XML string with a complete and valid XML document." name="parseString" static="0" scope="200" >
+    <UML:Operation stereotype="" package="" xmi.id="74" type="&amp;BIFE_Root" abstract="0" documentation="Parse a XML string with a complete and valid XML document." name="parseString" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="string" abstract="0" documentation="XML data to parse." name="data" static="0" scope="200" />
     </UML:Operation>
-    <UML:Attribute stereotype="" package="" xmi.id="26" value="" type="BIFE_Widget" abstract="0" documentation="Top level widget." name="root" static="0" scope="200" />
+    <UML:Attribute stereotype="" package="" xmi.id="26" value="" type="BIFE_Root" abstract="0" documentation="Top level widget." name="root" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="27" value="" type="resource" abstract="0" documentation="XML parser resource." name="parser" static="0" scope="200" />
     <UML:Attribute stereotype="" package="" xmi.id="29" value="" type="array" abstract="0" documentation="BIFE widgets stack." name="stack" static="0" scope="200" />
-    <UML:Attribute stereotype="" package="" xmi.id="84" value="" type="string" abstract="0" documentation="" name="fallback" static="0" scope="200" />
+    <UML:Attribute stereotype="" package="" xmi.id="84" value="''" type="string" abstract="0" documentation="Fallback class to use in case that a widget class is not found." name="fallback" static="0" scope="200" />
+    <UML:Attribute stereotype="" package="" xmi.id="148" value="'/tmp'" type="string" abstract="0" documentation="XML cache directory. Empty if no cahching must be done (for current dir use '.')." name="cache" static="0" scope="202" />
    </UML:Class>
    <UML:Class stereotype="" package="BIFE" xmi.id="61" abstract="1" documentation="Fallback widget to use when no specific widget is implemented." name="Fallback" static="0" scope="200" >
     <UML:Operation stereotype="" package="" xmi.id="62" type="void" abstract="0" documentation="Constructor." name="BIFE_Fallback" static="0" scope="200" >
@@ -172,6 +175,8 @@ Returns an array of associative arrays with this keys:
     <UML:Operation stereotype="" package="" xmi.id="88" type="void" abstract="0" documentation="Constructor." name="__construct" static="0" scope="200" >
      <UML:Parameter stereotype="" package="" xmi.id="1" value="" type="string" abstract="0" documentation="Attributes." name="attrs" static="0" scope="200" />
     </UML:Operation>
+    <UML:Operation stereotype="" package="" xmi.id="150" type="array" abstract="0" documentation="Gets required files." name="getRequiredFiles" static="0" scope="200" />
+    <UML:Attribute stereotype="" package="" xmi.id="149" value="array()" type="array" abstract="0" documentation="Root widget's required files." name="required" static="0" scope="202" />
    </UML:Class>
    <UML:Class stereotype="" package="BIFE" xmi.id="103" abstract="0" documentation="Photo widget." name="AlbumPhoto" static="0" scope="200" >
     <UML:Operation stereotype="" package="" xmi.id="106" type="void" abstract="0" documentation="Constructor." name="BIFE_AlbumPhoto" static="0" scope="200" >
@@ -249,235 +254,235 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
   <diagrams>
    <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="0" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="2" documentation="" type="402" showops="1" showpackage="1" name="Core Classes" localid="30000" showstereotype="0" showscope="1" font="Helvetica,9,-1,5,48,0,0,0,0,0" linecolor="#ff0000" >
     <widgets>
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="171" showattsigs="601" usesdiagramusefillcolour="0" x="80" linecolour="#ff0000" y="20" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="90" usefillcolor="1" showattributes="1" xmi.id="3" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="145" showattsigs="601" usesdiagramusefillcolour="0" x="91" linecolour="#ff0000" y="150" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="108" usefillcolor="1" showattributes="1" xmi.id="5" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="134" showattsigs="601" usesdiagramusefillcolour="0" x="31" linecolour="#ff0000" y="319" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="72" usefillcolor="1" showattributes="1" xmi.id="61" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="191" linecolour="#ff0000" y="319" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="63" usefillcolor="1" showattributes="1" xmi.id="85" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="155" showattsigs="601" usesdiagramusefillcolour="0" x="350" linecolour="#ff0000" y="80" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="252" usefillcolor="1" showattributes="1" xmi.id="25" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="148" showattsigs="601" usesdiagramusefillcolour="0" x="80" linecolour="#ff0000" y="20" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="75" usefillcolor="1" showattributes="1" xmi.id="3" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="127" showattsigs="601" usesdiagramusefillcolour="0" x="91" linecolour="#ff0000" y="150" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="90" usefillcolor="1" showattributes="1" xmi.id="5" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="118" showattsigs="601" usesdiagramusefillcolour="0" x="31" linecolour="#ff0000" y="319" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="60" usefillcolor="1" showattributes="1" xmi.id="61" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="168" showattsigs="601" usesdiagramusefillcolour="0" x="191" linecolour="#ff0000" y="319" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="75" usefillcolor="1" showattributes="1" xmi.id="85" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="156" showattsigs="601" usesdiagramusefillcolour="0" x="350" linecolour="#ff0000" y="80" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="225" usefillcolor="1" showattributes="1" xmi.id="25" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
     </widgets>
     <messages/>
     <associations>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="3" widgetaid="5" documentation="" type="500" >
       <linepath>
-       <startpoint startx="163" starty="150" />
-       <endpoint endx="165" endy="110" />
+       <startpoint startx="154" starty="150" />
+       <endpoint endx="154" endy="95" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="5" widgetaid="61" documentation="" type="500" >
       <linepath>
-       <startpoint startx="98" starty="319" />
-       <endpoint endx="139" endy="258" />
+       <startpoint startx="90" starty="319" />
+       <endpoint endx="133" endy="240" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="5" widgetaid="85" documentation="" type="500" >
       <linepath>
-       <startpoint startx="251" starty="319" />
-       <endpoint endx="187" endy="258" />
+       <startpoint startx="275" starty="319" />
+       <endpoint endx="175" endy="240" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="3" widgetaid="25" documentation="Parse XML getting widgets." type="512" >
-      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="340" linecolour="none" y="184" operation="" usesdiagramlinecolour="1" role="701" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
-      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="253" linecolour="none" y="67" operation="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
-      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="300" linecolour="none" y="135" operation="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="gets" font="helvetica,-1,12,0,50,0,0,0,0,0" />
+      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="340" linecolour="none" y="171" operation="" usesdiagramlinecolour="1" role="701" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
+      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="230" linecolour="none" y="59" operation="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
+      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="289" linecolour="none" y="124" operation="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="gets" font="helvetica,-1,12,0,50,0,0,0,0,0" />
       <linepath>
-       <startpoint startx="350" starty="206" />
-       <endpoint endx="251" endy="65" />
+       <startpoint startx="350" starty="192" />
+       <endpoint endx="228" endy="57" />
       </linepath>
      </UML:AssocWidget>
     </associations>
    </diagram>
    <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="0" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="113" documentation="Class diagram for the basic classes." type="402" showops="1" showpackage="1" name="Basic Classes" localid="30000" showstereotype="0" showscope="1" font="Helvetica,9,-1,5,48,0,0,0,0,0" linecolor="#ff0000" >
     <widgets>
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="56" linecolour="#ff0000" y="350" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="81" usefillcolor="1" showattributes="1" xmi.id="76" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="131" showattsigs="601" usesdiagramusefillcolour="1" x="265" linecolour="none" y="180" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="99" usefillcolor="1" showattributes="1" xmi.id="7" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="120" showattsigs="601" usesdiagramusefillcolour="1" x="345" linecolour="none" y="350" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="81" usefillcolor="1" showattributes="1" xmi.id="110" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="127" showattsigs="601" usesdiagramusefillcolour="0" x="499" linecolour="#ff0000" y="350" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="99" usefillcolor="1" showattributes="1" xmi.id="14" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="120" showattsigs="601" usesdiagramusefillcolour="1" x="205" linecolour="none" y="350" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="63" usefillcolor="1" showattributes="1" xmi.id="17" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="134" showattsigs="601" usesdiagramusefillcolour="0" x="50" linecolour="#ff0000" y="180" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="72" usefillcolor="1" showattributes="1" xmi.id="61" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="500" linecolour="#ff0000" y="180" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="63" usefillcolor="1" showattributes="1" xmi.id="85" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="145" showattsigs="601" usesdiagramusefillcolour="0" x="260" linecolour="#ff0000" y="30" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="108" usefillcolor="1" showattributes="1" xmi.id="5" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="107" showattsigs="601" usesdiagramusefillcolour="0" x="56" linecolour="#ff0000" y="350" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="67" usefillcolor="1" showattributes="1" xmi.id="76" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="117" showattsigs="601" usesdiagramusefillcolour="1" x="265" linecolour="none" y="180" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="82" usefillcolor="1" showattributes="1" xmi.id="7" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="107" showattsigs="601" usesdiagramusefillcolour="1" x="345" linecolour="none" y="350" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="67" usefillcolor="1" showattributes="1" xmi.id="110" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="109" showattsigs="601" usesdiagramusefillcolour="0" x="499" linecolour="#ff0000" y="350" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="82" usefillcolor="1" showattributes="1" xmi.id="14" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="107" showattsigs="601" usesdiagramusefillcolour="1" x="205" linecolour="none" y="350" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="52" usefillcolor="1" showattributes="1" xmi.id="17" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="118" showattsigs="601" usesdiagramusefillcolour="0" x="50" linecolour="#ff0000" y="180" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="60" usefillcolor="1" showattributes="1" xmi.id="61" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="168" showattsigs="601" usesdiagramusefillcolour="0" x="500" linecolour="#ff0000" y="180" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="75" usefillcolor="1" showattributes="1" xmi.id="85" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="127" showattsigs="601" usesdiagramusefillcolour="0" x="260" linecolour="#ff0000" y="30" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="90" usefillcolor="1" showattributes="1" xmi.id="5" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
     </widgets>
     <messages/>
     <associations>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="7" widgetaid="17" documentation="" type="500" >
       <linepath>
-       <startpoint startx="265" starty="350" />
-       <endpoint endx="308" endy="279" />
+       <startpoint startx="258" starty="350" />
+       <endpoint endx="304" endy="262" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="7" widgetaid="110" documentation="" type="500" >
       <linepath>
-       <startpoint startx="405" starty="350" />
-       <endpoint endx="352" endy="279" />
+       <startpoint startx="398" starty="350" />
+       <endpoint endx="343" endy="262" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="61" widgetaid="76" documentation="" type="500" >
       <linepath>
-       <startpoint startx="116" starty="350" />
-       <endpoint endx="117" endy="252" />
+       <startpoint startx="109" starty="350" />
+       <endpoint endx="109" endy="240" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="85" widgetaid="14" documentation="" type="500" >
       <linepath>
-       <startpoint startx="562" starty="350" />
-       <endpoint endx="560" endy="243" />
+       <startpoint startx="553" starty="350" />
+       <endpoint endx="584" endy="255" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="5" widgetaid="7" documentation="" type="500" >
       <linepath>
-       <startpoint startx="330" starty="180" />
-       <endpoint endx="332" endy="138" />
+       <startpoint startx="323" starty="180" />
+       <endpoint endx="323" endy="120" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="5" widgetaid="85" documentation="" type="500" >
       <linepath>
-       <startpoint startx="560" starty="180" />
-       <endpoint endx="405" endy="84" />
+       <startpoint startx="584" starty="180" />
+       <endpoint endx="387" endy="75" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="5" widgetaid="61" documentation="" type="500" >
       <linepath>
-       <startpoint startx="117" starty="180" />
-       <endpoint endx="260" endy="84" />
+       <startpoint startx="109" starty="180" />
+       <endpoint endx="260" endy="75" />
       </linepath>
      </UML:AssocWidget>
     </associations>
    </diagram>
    <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="0" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="114" documentation="" type="402" showops="1" showpackage="1" name="Album Classes" localid="30000" showstereotype="0" showscope="1" font="Helvetica,9,-1,5,48,0,0,0,0,0" linecolor="#ff0000" >
     <widgets>
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="171" showattsigs="601" usesdiagramusefillcolour="0" x="140" linecolour="#ff0000" y="20" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="90" usefillcolor="1" showattributes="1" xmi.id="3" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="169" showattsigs="601" usesdiagramusefillcolour="0" x="50" linecolour="#ff0000" y="190" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="171" usefillcolor="1" showattributes="1" xmi.id="20" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="160" showattsigs="601" usesdiagramusefillcolour="0" x="240" linecolour="#ff0000" y="190" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="81" usefillcolor="1" showattributes="1" xmi.id="103" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="148" showattsigs="601" usesdiagramusefillcolour="0" x="140" linecolour="#ff0000" y="20" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="75" usefillcolor="1" showattributes="1" xmi.id="3" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="144" showattsigs="601" usesdiagramusefillcolour="0" x="50" linecolour="#ff0000" y="190" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="142" usefillcolor="1" showattributes="1" xmi.id="20" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="142" showattsigs="601" usesdiagramusefillcolour="0" x="240" linecolour="#ff0000" y="190" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="67" usefillcolor="1" showattributes="1" xmi.id="103" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
     </widgets>
     <messages/>
     <associations>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="3" widgetaid="20" documentation="" type="500" >
       <linepath>
-       <startpoint startx="134" starty="190" />
-       <endpoint endx="197" endy="110" />
+       <startpoint startx="122" starty="190" />
+       <endpoint endx="189" endy="95" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="3" widgetaid="103" documentation="" type="500" >
       <linepath>
-       <startpoint startx="320" starty="190" />
-       <endpoint endx="254" endy="110" />
+       <startpoint startx="311" starty="190" />
+       <endpoint endx="238" endy="95" />
       </linepath>
      </UML:AssocWidget>
     </associations>
    </diagram>
    <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="0" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="116" documentation="" type="402" showops="1" showpackage="1" name="Menu Classes" localid="30000" showstereotype="0" showscope="1" font="Helvetica,9,-1,5,48,0,0,0,0,0" linecolor="#ff0000" >
     <widgets>
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="120" showattsigs="601" usesdiagramusefillcolour="0" x="141" linecolour="#ff0000" y="207" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="81" usefillcolor="1" showattributes="1" xmi.id="115" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="171" showattsigs="601" usesdiagramusefillcolour="0" x="120" linecolour="#ff0000" y="40" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="90" usefillcolor="1" showattributes="1" xmi.id="3" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="107" showattsigs="601" usesdiagramusefillcolour="0" x="141" linecolour="#ff0000" y="207" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="67" usefillcolor="1" showattributes="1" xmi.id="115" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="148" showattsigs="601" usesdiagramusefillcolour="0" x="120" linecolour="#ff0000" y="40" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#dcdcdc" height="75" usefillcolor="1" showattributes="1" xmi.id="3" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
     </widgets>
     <messages/>
     <associations>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="3" widgetaid="115" documentation="" type="500" >
       <linepath>
-       <startpoint startx="201" starty="207" />
-       <endpoint endx="205" endy="130" />
+       <startpoint startx="194" starty="207" />
+       <endpoint endx="194" endy="115" />
       </linepath>
      </UML:AssocWidget>
     </associations>
    </diagram>
    <diagram snapgrid="0" showattsig="0" fillcolor="#ffffc0" showgrid="1" showopsig="0" usefillcolor="1" snapx="10" snapy="10" showatts="0" xmi.id="128" documentation="" type="402" showops="0" showpackage="1" name="_All Classes" localid="30000" showstereotype="0" showscope="1" font="Helvetica,9,-1,5,48,0,0,0,0,0" linecolor="#ff0000" >
     <widgets>
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="109" showattsigs="600" usesdiagramusefillcolour="1" x="265" linecolour="none" y="360" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="7" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="123" showattsigs="600" usesdiagramusefillcolour="1" x="260" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="5" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="104" showattsigs="600" usesdiagramusefillcolour="1" x="230" linecolour="none" y="120" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="3" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="101" showattsigs="600" usesdiagramusefillcolour="1" x="231" linecolour="none" y="30" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="25" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="112" showattsigs="600" usesdiagramusefillcolour="1" x="425" linecolour="none" y="360" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="61" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="86" showattsigs="600" usesdiagramusefillcolour="1" x="125" linecolour="none" y="360" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="85" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="98" showattsigs="600" usesdiagramusefillcolour="1" x="40" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="20" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="138" showattsigs="600" usesdiagramusefillcolour="1" x="400" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="103" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="90" showattsigs="600" usesdiagramusefillcolour="1" x="433" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="76" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="84" showattsigs="600" usesdiagramusefillcolour="1" x="335" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="110" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="90" showattsigs="600" usesdiagramusefillcolour="1" x="125" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="14" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="84" showattsigs="600" usesdiagramusefillcolour="1" x="225" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="17" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
-     <UML:ConceptWidget usesdiagramfillcolour="1" width="94" showattsigs="600" usesdiagramusefillcolour="1" x="150" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="28" usefillcolor="1" showattributes="0" xmi.id="115" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="96" showattsigs="600" usesdiagramusefillcolour="1" x="265" linecolour="none" y="360" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="7" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="106" showattsigs="600" usesdiagramusefillcolour="1" x="260" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="5" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="90" showattsigs="600" usesdiagramusefillcolour="1" x="230" linecolour="none" y="120" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="3" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="89" showattsigs="600" usesdiagramusefillcolour="1" x="231" linecolour="none" y="30" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="25" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="97" showattsigs="600" usesdiagramusefillcolour="1" x="425" linecolour="none" y="360" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="61" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="79" showattsigs="600" usesdiagramusefillcolour="1" x="125" linecolour="none" y="360" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="85" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="87" showattsigs="600" usesdiagramusefillcolour="1" x="40" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="20" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="121" showattsigs="600" usesdiagramusefillcolour="1" x="400" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="103" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="80" showattsigs="600" usesdiagramusefillcolour="1" x="433" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="76" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="75" showattsigs="600" usesdiagramusefillcolour="1" x="335" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="110" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="79" showattsigs="600" usesdiagramusefillcolour="1" x="125" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="14" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="76" showattsigs="600" usesdiagramusefillcolour="1" x="225" linecolour="none" y="450" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="17" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="1" width="84" showattsigs="600" usesdiagramusefillcolour="1" x="150" linecolour="none" y="250" showopsigs="600" usesdiagramlinecolour="1" fillcolour="none" height="25" usefillcolor="1" showattributes="0" xmi.id="115" showoperations="0" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,48,0,0,0,0,0" />
     </widgets>
     <messages/>
     <associations>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="5" indexb="3" widgetbid="3" widgetaid="5" documentation="" type="500" >
       <linepath>
-       <startpoint startx="321" starty="250" />
-       <endpoint endx="292" endy="148" />
+       <startpoint startx="313" starty="250" />
+       <endpoint endx="284" endy="145" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="4" indexb="2" widgetbid="5" widgetaid="7" documentation="" type="500" >
       <linepath>
-       <startpoint startx="319" starty="360" />
-       <endpoint endx="321" endy="278" />
+       <startpoint startx="313" starty="360" />
+       <endpoint endx="313" endy="275" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="4" indexb="3" widgetbid="5" widgetaid="61" documentation="" type="500" >
       <linepath>
-       <startpoint startx="481" starty="360" />
-       <endpoint endx="352" endy="278" />
+       <startpoint startx="473" starty="360" />
+       <endpoint endx="339" endy="275" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="4" indexb="1" widgetbid="5" widgetaid="85" documentation="" type="500" >
       <linepath>
-       <startpoint startx="168" starty="360" />
-       <endpoint endx="290" endy="278" />
+       <startpoint startx="164" starty="360" />
+       <endpoint endx="286" endy="275" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="5" indexb="1" widgetbid="3" widgetaid="20" documentation="" type="500" >
       <linepath>
-       <startpoint startx="89" starty="250" />
-       <endpoint endx="250" endy="148" />
+       <startpoint startx="83" starty="250" />
+       <endpoint endx="248" endy="145" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="5" indexb="4" widgetbid="3" widgetaid="103" documentation="" type="500" >
       <linepath>
-       <startpoint startx="469" starty="250" />
-       <endpoint endx="313" endy="148" />
+       <startpoint startx="460" starty="250" />
+       <endpoint endx="302" endy="145" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="61" widgetaid="76" documentation="" type="500" >
       <linepath>
-       <startpoint startx="478" starty="450" />
-       <endpoint endx="481" endy="388" />
+       <startpoint startx="473" starty="450" />
+       <endpoint endx="473" endy="385" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="2" widgetbid="7" widgetaid="110" documentation="" type="500" >
       <linepath>
-       <startpoint startx="377" starty="450" />
-       <endpoint endx="337" endy="388" />
+       <startpoint startx="372" starty="450" />
+       <endpoint endx="329" endy="385" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" widgetbid="7" widgetaid="17" documentation="" type="500" >
       <linepath>
-       <startpoint startx="267" starty="450" />
-       <endpoint endx="301" endy="388" />
+       <startpoint startx="263" starty="450" />
+       <endpoint endx="297" endy="385" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="85" widgetaid="14" documentation="" type="500" >
       <linepath>
-       <startpoint startx="170" starty="450" />
-       <endpoint endx="168" endy="388" />
+       <startpoint startx="164" starty="450" />
+       <endpoint endx="164" endy="385" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="5" indexb="2" widgetbid="3" widgetaid="115" documentation="" type="500" >
       <linepath>
-       <startpoint startx="197" starty="250" />
-       <endpoint endx="271" endy="148" />
+       <startpoint startx="192" starty="250" />
+       <endpoint endx="266" endy="145" />
       </linepath>
      </UML:AssocWidget>
      <UML:AssocWidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" widgetbid="3" widgetaid="25" documentation="" type="512" >
-      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="283" linecolour="none" y="60" operation="" usesdiagramlinecolour="1" role="701" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
-      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="272" linecolour="none" y="98" operation="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
-      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="281" linecolour="none" y="89" operation="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="gets" font="helvetica,-1,12,0,50,0,0,0,0,0" />
+      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="265" linecolour="none" y="57" operation="" usesdiagramlinecolour="1" role="701" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
+      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="265" linecolour="none" y="99" operation="" usesdiagramlinecolour="1" role="702" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="" font="helvetica,-1,12,0,50,0,0,0,0,0" />
+      <UML:FloatingTextWidget usesdiagramfillcolour="1" width="0" usesdiagramusefillcolour="1" x="275" linecolour="none" y="87" operation="" usesdiagramlinecolour="1" role="703" fillcolour="none" height="0" usefillcolor="1" seqnum="" xmi.id="-1" text="gets" font="helvetica,-1,12,0,50,0,0,0,0,0" />
       <linepath>
-       <startpoint startx="281" starty="58" />
-       <endpoint endx="282" endy="120" />
+       <startpoint startx="275" starty="55" />
+       <endpoint endx="275" endy="120" />
       </linepath>
      </UML:AssocWidget>
     </associations>
    </diagram>
    <diagram snapgrid="1" showattsig="1" fillcolor="#ffffc0" showgrid="1" showopsig="0" usefillcolor="1" snapx="10" snapy="10" showatts="1" xmi.id="132" documentation="" type="402" showops="1" showpackage="1" name="HIT Classes" localid="30000" showstereotype="0" showscope="1" font="Helvetica,9,-1,5,50,0,0,0,0,0" linecolor="#ff0000" >
     <widgets>
-     <UML:ConceptWidget usesdiagramfillcolour="0" width="181" showattsigs="601" usesdiagramusefillcolour="0" x="50" linecolour="#ff0000" y="40" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="234" usefillcolor="1" showattributes="1" xmi.id="130" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,50,0,0,0,0,0" />
+     <UML:ConceptWidget usesdiagramfillcolour="0" width="161" showattsigs="601" usesdiagramusefillcolour="0" x="50" linecolour="#ff0000" y="40" showopsigs="600" usesdiagramlinecolour="0" fillcolour="#ffffc0" height="195" usefillcolor="1" showattributes="1" xmi.id="130" showoperations="1" showpackage="1" showscope="1" showstereotype="0" font="Helvetica,9,-1,5,50,0,0,0,0,0" />
     </widgets>
     <messages/>
     <associations/>
@@ -504,7 +509,6 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
        <listitem open="0" type="815" id="108" label="render" />
       </listitem>
      </listitem>
-     <listitem open="1" type="807" id="128" label="_All Classes" />
      <listitem open="1" type="803" id="-1" label="Basic" >
       <listitem open="0" type="807" id="113" label="Basic Classes" />
       <listitem open="0" type="813" id="76" label="Copy" >
@@ -513,9 +517,9 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
        <listitem open="0" type="815" id="82" label="render" />
       </listitem>
       <listitem open="0" type="813" id="7" label="Generic" >
-       <listitem open="0" type="815" id="11" label="addContents" />
        <listitem open="0" type="815" id="10" label="BIFE_Generic" />
        <listitem open="0" type="815" id="51" label="__construct" />
+       <listitem open="0" type="815" id="11" label="addContents" />
        <listitem open="0" type="815" id="12" label="render" />
       </listitem>
       <listitem open="0" type="813" id="110" label="Link" >
@@ -524,9 +528,9 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
        <listitem open="0" type="815" id="142" label="getURL" />
       </listitem>
       <listitem open="0" type="813" id="14" label="Page" >
-       <listitem open="0" type="815" id="93" label="addContents" />
        <listitem open="0" type="815" id="15" label="BIFE_Page" />
        <listitem open="0" type="815" id="53" label="__construct" />
+       <listitem open="0" type="815" id="93" label="addContents" />
        <listitem open="0" type="815" id="90" label="render" />
       </listitem>
       <listitem open="0" type="813" id="17" label="Title" >
@@ -536,9 +540,9 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
      </listitem>
      <listitem open="1" type="803" id="-1" label="Core" >
       <listitem open="0" type="813" id="5" label="Container" >
-       <listitem open="0" type="815" id="6" label="addContents" />
        <listitem open="0" type="815" id="48" label="BIFE_Container" />
        <listitem open="0" type="815" id="50" label="__construct" />
+       <listitem open="0" type="815" id="6" label="addContents" />
        <listitem open="0" type="814" id="47" label="contents" />
        <listitem open="0" type="815" id="59" label="render" />
       </listitem>
@@ -548,17 +552,18 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
        <listitem open="0" type="815" id="63" label="__construct" />
        <listitem open="0" type="814" id="129" label="name" />
       </listitem>
-      <listitem open="0" type="813" id="25" label="Parser" >
+      <listitem open="1" type="813" id="25" label="Parser" >
        <listitem open="0" type="815" id="30" label="BIFE_Parser" />
-       <listitem open="0" type="815" id="35" label="characterData" />
        <listitem open="0" type="815" id="31" label="__construct" />
        <listitem open="0" type="815" id="32" label="__destruct" />
+       <listitem open="0" type="814" id="148" label="cache" />
+       <listitem open="0" type="815" id="35" label="characterData" />
        <listitem open="0" type="815" id="34" label="endElement" />
        <listitem open="0" type="814" id="84" label="fallback" />
        <listitem open="0" type="815" id="36" label="parse" />
        <listitem open="0" type="815" id="37" label="parseFile" />
-       <listitem open="0" type="814" id="27" label="parser" />
        <listitem open="0" type="815" id="74" label="parseString" />
+       <listitem open="0" type="814" id="27" label="parser" />
        <listitem open="0" type="814" id="26" label="root" />
        <listitem open="0" type="814" id="29" label="stack" />
        <listitem open="0" type="815" id="33" label="startElement" />
@@ -566,22 +571,24 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
       <listitem open="0" type="813" id="85" label="Root" >
        <listitem open="0" type="815" id="87" label="BIFE_Root" />
        <listitem open="0" type="815" id="88" label="__construct" />
+       <listitem open="0" type="815" id="150" label="getRequiredFiles" />
+       <listitem open="0" type="814" id="149" label="required" />
       </listitem>
       <listitem open="0" type="813" id="3" label="Widget" >
-       <listitem open="0" type="814" id="125" label="attrs" />
        <listitem open="0" type="815" id="126" label="BIFE_Widget" />
        <listitem open="0" type="815" id="127" label="__construct" />
+       <listitem open="0" type="814" id="125" label="attrs" />
        <listitem open="0" type="815" id="4" label="render" />
       </listitem>
      </listitem>
      <listitem open="1" type="803" id="-1" label="HIT" >
       <listitem open="0" type="813" id="130" label="HIT" >
+       <listitem open="0" type="815" id="136" label="HTML_Template_HIT" />
+       <listitem open="0" type="815" id="137" label="__construct" />
        <listitem open="0" type="814" id="147" label="buffer" />
        <listitem open="0" type="814" id="135" label="cache" />
-       <listitem open="0" type="815" id="137" label="__construct" />
        <listitem open="0" type="815" id="145" label="getBuffer" />
        <listitem open="0" type="814" id="134" label="group" />
-       <listitem open="0" type="815" id="136" label="HTML_Template_HIT" />
        <listitem open="0" type="815" id="138" label="parse" />
        <listitem open="0" type="815" id="144" label="parseBuffered" />
        <listitem open="0" type="815" id="146" label="popBuffer" />
@@ -599,6 +606,7 @@ Parse a template appending the results to an internal buffer. If $vars is an arr
       </listitem>
       <listitem open="1" type="807" id="116" label="Menu Classes" />
      </listitem>
+     <listitem open="1" type="807" id="128" label="_All Classes" />
     </listitem>
     <listitem open="1" type="802" id="-1" label="Use Case View" />
    </listitem>
index b7487283fbd367aec47edf4d64fe8ccb58f46d08..d00262c9e3f1eb50d651606d405862a88f24aa12 100644 (file)
@@ -39,6 +39,7 @@ require_once 'BIFE/Page.php';
 require_once 'BIFE/Title.php';
 require_once 'BIFE/Link.php';
 #require_once 'BIFE/Album.php';
+#require_once 'BIFE/AlbumPhoto.php';
 #require_once 'BIFE.php';
 
 $file = isset($_REQUEST['BIFE']) ? $_REQUEST['BIFE'] : 'index.xbf';
index a98c716214ad8343e45eb91db4a4b3655f8e1d31..52af679effbaa00ebbcf7509b29020a98f976929 100644 (file)
@@ -269,4 +269,4 @@ Returns an array of associative arrays with this keys:
 
 } // -X2C Class :Album
 
-?>
+?>
\ No newline at end of file
index 4598ea1cba7fc2003d80c5de2c2b9644970c3902..cf0b851cfdca4dfc8151a2b21a52196496253784 100644 (file)
@@ -36,7 +36,7 @@ class BIFE_Parser {
     /**
      * Top level widget.
      *
-     * @var    BIFE_Widget $root
+     * @var    BIFE_Root $root
      * @access public
      */
     var $root;
@@ -58,10 +58,20 @@ class BIFE_Parser {
     var $stack;
 
     /**
+     * Fallback class to use in case that a widget class is not found.
+     *
      * @var    string $fallback
      * @access public
      */
-    var $fallback;
+    var $fallback = '';
+
+    /**
+     * XML cache directory. Empty if no cahching must be done (for current dir use '.').
+     *
+     * @var    string $cache
+     * @access protected
+     */
+    var $cache = '/tmp';
 
     // ~X2C
 
@@ -70,13 +80,14 @@ class BIFE_Parser {
      * Constructor.
      *
      * @param  string $fallback Fallback class name (none if empty).
+     * @param  string $cache XML cache directory. Empty is no caching will be done.
      *
      * @return void
      * @access public
      */
-    function BIFE_Parser($fallback = '') // ~X2C
+    function BIFE_Parser($fallback = '', $cache = '/tmp') // ~X2C
     {
-        $this->__construct($fallback);
+        $this->__construct($fallback, $cache);
     }
     // -X2C
 
@@ -85,16 +96,18 @@ class BIFE_Parser {
      * Constructor.
      *
      * @param  string $fallback Fallback class name (none if empty).
+     * @param  string $cache XML cache directory. Empty is no caching will be done.
      *
      * @return void
      * @access public
      */
-    function __construct($fallback = '') // ~X2C
+    function __construct($fallback = '', $cache = '/tmp') // ~X2C
     {
         $this->stack    = array();
         $this->root     = null;
         $this->parser   = xml_parser_create();
         $this->fallback = $fallback;
+        $this->cache    = $cache;
         xml_set_object($this->parser, $this);
         xml_set_element_handler($this->parser, 'startElement', 'endElement');
         xml_set_character_data_handler($this->parser, 'characterData');
@@ -225,12 +238,23 @@ class BIFE_Parser {
      *
      * @param  string $filename Filename to parse.
      *
-     * @return &BIFE_Widget
+     * @return &BIFE_Root
      * @access public
      */
     function &parseFile($filename) // ~X2C
     {
-        if ($fp = @fopen($filename, "r")) {
+        if ($this->cache) {
+            $cache = $this->cache . '/' . 'bife_parser_cache' . strtr(realpath($filename), '/', '_');
+            if (@filemtime($cache) > @filemtime($filename)) {
+                // FIXME - replace with file_get_contents()
+                $file = file($cache);
+                foreach(unserialize(trim(array_shift($file))) as $required) {
+                    require_once $required;
+                }
+                return unserialize(join('', $file));
+            }
+        }
+        if ($fp = @fopen($filename, 'r')) {
             while ($data = fread($fp, 4096)) {
                 $this->parse($data, feof($fp));
             }
@@ -239,6 +263,12 @@ class BIFE_Parser {
                 E_USER_WARNING);
         }
         fclose($fp);
+        if ($this->cache) {
+            $fp = fopen($cache, 'w');
+            fputs($fp, serialize($this->root->getRequiredFiles()) . "\n");
+            fputs($fp, serialize($this->root));
+            fclose($fp);
+        }
         return $this->root;
     }
     // -X2C
@@ -250,7 +280,7 @@ class BIFE_Parser {
      *
      * @param  string $data XML data to parse.
      *
-     * @return &BIFE_Widget
+     * @return &BIFE_Root
      * @access public
      */
     function &parseString($data) // ~X2C
index 66f9cbc001da4d52d294bccb222e05cb75102595..f18f00829a0f2fc14dcaa689d848e16a2222ec89 100644 (file)
@@ -37,6 +37,14 @@ require_once 'BIFE/Container.php';
  * @access public
  */
 class BIFE_Root extends BIFE_Container {
+    /**
+     * Root widget's required files.
+     *
+     * @var    array $required
+     * @access protected
+     */
+    var $required = array();
+
     // ~X2C
 
     // +X2C Operation 87
@@ -68,6 +76,7 @@ class BIFE_Root extends BIFE_Container {
         if (@$attrs['USE']) {
             foreach (split(':', $attrs['USE']) as $require) {
                 require_once "BIFE/$require.php";
+                $this->required[] = "BIFE/$require.php";
             }
             unset($attrs['USE']);
         }
@@ -75,6 +84,19 @@ class BIFE_Root extends BIFE_Container {
     }
     // -X2C
 
+    // +X2C Operation 150
+    /**
+     * Gets required files.
+     *
+     * @return array
+     * @access public
+     */
+    function getRequiredFiles() // ~X2C
+    {
+        return $this->required;
+    }
+    // -X2C
+
 } // -X2C Class :Root
 
 ?>
\ No newline at end of file
index 6da0b7be5a858b03f9dadaf95a9d160afd536339..025707adf4e4e43015a5a66ccb76b813be23686e 100644 (file)
@@ -119,6 +119,7 @@ If $vars is an array, the {[keys]} are replaced with [values] ($val is ignored).
             $file = "{$this->root}/$name.tpl.html";
         }
         if (!isset($this->cache[$file])) {
+            // FIXME - replace join(file()) with file_get_contents().
             $this->cache[$file] = join('', file($file));
         }
         //if (!is_readable($file)) {