/* 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 SoCOverview {
 /* 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";
  style=filled;
  color=black;
  fillcolor=lightgrey;
  node [shape=box style=filled color=black fillcolor=white];

  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 color=white];
  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];
 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];
}
