/* 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 MVCOverview {
 /* 11 inches x 96 DPI is 1056 pixels wide */
 size="11,11";
 node [shape=box];

 subgraph cluster0 {
  color="white";

  AppEngine
   [shape=record style=filled fillcolor=lightgrey color=black
    label="{{ <DatastoreAPI> Datastore API | <UsersAPI> Users API | <DjangoForms> 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];
 20 -> 13 [style=invis];
 13 -> 12 [style=invis];
 12 -> 11 [style=invis];
 11 -> 10 [style=invis];

 SoCViews -> AppEngine:DjangoForms;
 SoCControllers -> AppEngine:UsersAPI;
 SoCModels -> AppEngine:DatastoreAPI;
 
 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="A Melange Web Application";
  style=filled;
  color=black;
  fillcolor=lightgrey;
  node [shape=box style=filled color=black fillcolor=white];

  AppController [label="Application-specific Controller" shape=diamond];
  AppViews [label="Application-unique Views"];
  AppTemplates
   [label="Application Django Templates" shape=ellipse style=solid color=white];
  AppModels [label="Application-unique Models"];
  AppEntities
   [label="Application Entities" shape=parallelogram style=solid color=white];
  
  22 [style=invis];
  21 [style=invis];
  20 [style=invis];

  { rank=same;
    "22"; "AppViews";  "AppTemplates";
  };

  { rank=same;
    "21";
  };
    
  { rank=same;
    "20"; "AppModels"; "AppController"; "AppEntities"; 
  };
 };

 22 -> 21 [style=invis];
 21 -> 20 [style=invis];

 AppModels -> SoCModels;
 AppViews -> SoCViews;
 AppController -> SoCControllers;

 AppViews -> AppModels;
 AppModels -> AppViews [style=dashed constraint=false];
 AppViews -> AppController [style=dashed];
 AppController -> AppViews [constraint=false];
 AppController -> AppModels [constraint=false];
 AppViews -> AppTemplates [constraint=false];
 AppModels -> AppEntities;
}
