/* Copyright 2008 Google Inc. This work is licensed under a Creative Commons Attribution 2.5 License. For information, see: http://creativecommons.org/licenses/by/2.5/ For the actual license text, see: http://creativecommons.org/licenses/by/2.5/legalcode */ digraph MelangeOverview { /* 13 inches x 96 DPI is 1248 pixels wide */ size="13,13"; node [shape=box]; subgraph cluster0 { color="white"; AppEngine [shape=record style=filled fillcolor=lightgrey color=black label="{{ Datastore API | Users API | Django Forms }| Google App Engine}"] 00 [style=invis]; /* manually assigned "level" ranks to produce an easier-to-read graph */ { rank=same; "00"; "AppEngine"; }; }; /* invisible "level" graph to enable assigned of levels to groups of nodes */ 01 [style=invis]; 01 -> 00 [style=invis]; 10 -> 01 [style=invis]; subgraph cluster1 { label="SoC Framework"; node [shape=box style=filled fillcolor=lightgrey color=black]; SoCModels [label="Common Models (Person, Work, Group, Program, etc.)"]; SoCViews [label="Common Views (Models, Actions, Reports, etc.)"]; SoCTemplates [label="Base Django Templates" shape=ellipse style=solid]; SoCControllers [label="Generic Controllers (Auth, Membership, Attach, etc.)" shape=diamond]; 12 [style=invis]; 11 [style=invis]; 10 [style=invis]; { rank=same; "12"; "SoCViews"; }; { rank=same; "10"; "SoCControllers"; "SoCModels"; }; }; 13 [style=invis]; 30 -> 13 [style=invis]; 20 -> 13 [style=invis]; 13 -> 12 [style=invis]; 12 -> 11 [style=invis]; 11 -> 10 [style=invis]; SoCModels -> AppEngine:DatastoreAPI; SoCViews -> AppEngine:DjangoForms; SoCControllers -> AppEngine:UsersAPI; SoCViews -> SoCModels; SoCViews -> SoCTemplates [constraint=false]; SoCModels -> SoCViews [style=dashed constraint=false]; SoCViews -> SoCControllers [style=dashed]; SoCControllers -> SoCViews [constraint=false]; SoCControllers -> SoCModels [constraint=false]; subgraph cluster2 { label="GSoC Melange Web Application"; style=filled; color=black; fillcolor=lightgrey; node [shape=box style=filled color=black fillcolor=white]; GSoCController [label="GSoC-specific Controller" shape=diamond]; GSoCViews [label="GSoC-only Views"]; GSoCTemplates [label="GSoC Django Templates" shape=ellipse style=solid color=white]; GSoCModels [label="GSoC-only Models"]; GSoCEntities [label="GSoC Entities" shape=parallelogram style=solid color=white]; 22 [style=invis]; 21 [style=invis]; 20 [style=invis]; { rank=same; "22"; "GSoCViews"; "GSoCTemplates"; }; { rank=same; "21"; }; { rank=same; "20"; "GSoCModels"; "GSoCController"; "GSoCEntities"; }; }; 22 -> 21 [style=invis]; 21 -> 20 [style=invis]; GSoCModels -> SoCModels; GSoCViews -> SoCViews; GSoCController -> SoCControllers; GSoCViews -> GSoCModels; GSoCModels -> GSoCViews [style=dashed constraint=false]; GSoCViews -> GSoCController [style=dashed]; GSoCController -> GSoCViews [constraint=false]; GSoCController -> GSoCModels [constraint=false]; GSoCViews -> GSoCTemplates [constraint=false]; GSoCModels -> GSoCEntities; subgraph cluster3 { label="GHOP Melange Web Application"; style=filled; color=black; fillcolor=lightgrey; node [shape=box style=filled color=black fillcolor=white]; GHOPController [label="GHOP-specific Controller" shape=diamond]; GHOPViews [label="GHOP-only Views"]; GHOPTemplates [label="GHOP Django Templates" shape=ellipse style=solid color=white]; GHOPModels [label="GHOP-only Models"]; GHOPEntities [label="GHOP Entities" shape=parallelogram style=solid color=white]; 32 [style=invis]; 31 [style=invis]; 30 [style=invis]; { rank=same; "32"; "GHOPViews"; "GHOPTemplates"; }; { rank=same; "31"; }; { rank=same; "30"; "GHOPModels"; "GHOPController"; "GHOPEntities"; }; }; 32 -> 31 [style=invis]; 31 -> 30 [style=invis]; GHOPModels -> SoCModels; GHOPViews -> SoCViews; GHOPController -> SoCControllers; GHOPViews -> GHOPModels; GHOPModels -> GHOPViews [style=dashed constraint=false]; GHOPViews -> GHOPController [style=dashed]; GHOPController -> GHOPViews [constraint=false]; GHOPController -> GHOPModels [constraint=false]; GHOPViews -> GHOPTemplates [constraint=false color=white]; GHOPModels -> GHOPEntities; }