<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.1.8" icons="true" automaticImage="PNG" always-add-relationships="false" generalizations="true" 
  realizations="true" associations="true" dependencies="false" nesting-relationships="true">  
  <class id="1" language="java" name="com.iluwatar.common.BaseEntity" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/common/BaseEntity.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="106" width="131" x="327" y="-200"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <class id="2" language="java" name="com.iluwatar.spell.SpellDaoImpl" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/spell/SpellDaoImpl.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="106" width="171" x="553" y="53"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <class id="3" language="java" name="com.iluwatar.magic.MagicServiceImpl" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/magic/MagicServiceImpl.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="178" width="339" x="1174" y="53"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <class id="4" language="java" name="com.iluwatar.spellbook.SpellbookDaoImpl" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/spellbook/SpellbookDaoImpl.java" binary="false" 
    corner="BOTTOM_RIGHT">    
    <position height="106" width="199" x="764" y="53"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <class id="5" language="java" name="com.iluwatar.spellbook.Spellbook" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/spellbook/Spellbook.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="322" width="203" x="257" y="379"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <interface id="6" language="java" name="com.iluwatar.spellbook.SpellbookDao" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/spellbook/SpellbookDao.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="88" width="199" x="935" y="379"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </interface>  
  <class id="7" language="java" name="com.iluwatar.common.DaoBaseImpl" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/common/DaoBaseImpl.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="213" width="182" x="968" y="-200"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <interface id="8" language="java" name="com.iluwatar.wizard.WizardDao" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/wizard/WizardDao.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="88" width="183" x="1516" y="379"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </interface>  
  <interface id="9" language="java" name="com.iluwatar.spell.SpellDao" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/spell/SpellDao.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="88" width="171" x="724" y="379"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </interface>  
  <class id="10" language="java" name="com.iluwatar.wizard.WizardDaoImpl" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/wizard/WizardDaoImpl.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="106" width="183" x="1553" y="53"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <interface id="11" language="java" name="com.iluwatar.common.Dao" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/common/Dao.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="160" width="131" x="1003" y="53"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </interface>  
  <class id="12" language="java" name="com.iluwatar.spell.Spell" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/spell/Spell.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="268" width="192" x="25" y="53"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <interface id="13" language="java" name="com.iluwatar.magic.MagicService" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/magic/MagicService.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="160" width="302" x="1174" y="379"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </interface>  
  <class id="14" language="java" name="com.iluwatar.wizard.Wizard" project="service-layer" 
    file="/service-layer/src/main/java/com/iluwatar/wizard/Wizard.java" binary="false" corner="BOTTOM_RIGHT">    
    <position height="286" width="235" x="257" y="53"/>    
    <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
      sort-features="false" accessors="true" visibility="true">      
      <attributes public="true" package="true" protected="true" private="true" static="true"/>      
      <operations public="true" package="true" protected="true" private="true" static="true"/>    
    </display>  
  </class>  
  <generalization id="15">    
    <bendpoint x="522" y="53"/>    
    <end type="SOURCE" refId="5"/>    
    <end type="TARGET" refId="1"/>  
  </generalization>  
  <association id="16">    
    <end type="SOURCE" refId="3" navigable="false">      
      <attribute id="17" name="wizardDao"/>      
      <multiplicity id="18" minimum="0" maximum="1"/>    
    </end>    
    <end type="TARGET" refId="8" navigable="true"/>    
    <display labels="true" multiplicity="true"/>  
  </association>  
  <generalization id="19">    
    <end type="SOURCE" refId="6"/>    
    <end type="TARGET" refId="11"/>  
  </generalization>  
  <generalization id="20">    
    <end type="SOURCE" refId="10"/>    
    <end type="TARGET" refId="7"/>  
  </generalization>  
  <generalization id="21">    
    <end type="SOURCE" refId="14"/>    
    <end type="TARGET" refId="1"/>  
  </generalization>  
  <realization id="22">    
    <end type="SOURCE" refId="4"/>    
    <end type="TARGET" refId="6"/>  
  </realization>  
  <generalization id="23">    
    <end type="SOURCE" refId="8"/>    
    <end type="TARGET" refId="11"/>  
  </generalization>  
  <association id="24">    
    <end type="SOURCE" refId="3" navigable="false">      
      <attribute id="25" name="spellbookDao"/>      
      <multiplicity id="26" minimum="0" maximum="1"/>    
    </end>    
    <end type="TARGET" refId="6" navigable="true"/>    
    <display labels="true" multiplicity="true"/>  
  </association>  
  <generalization id="27">    
    <end type="SOURCE" refId="9"/>    
    <end type="TARGET" refId="11"/>  
  </generalization>  
  <generalization id="28">    
    <end type="SOURCE" refId="4"/>    
    <end type="TARGET" refId="7"/>  
  </generalization>  
  <association id="29">    
    <end type="SOURCE" refId="5" navigable="false">      
      <attribute id="30" name="spells"/>      
      <multiplicity id="31" minimum="0" maximum="2147483647"/>    
    </end>    
    <end type="TARGET" refId="12" navigable="true"/>    
    <display labels="true" multiplicity="true"/>  
  </association>  
  <association id="32">    
    <end type="SOURCE" refId="12" navigable="false">      
      <attribute id="33" name="spellbook"/>      
      <multiplicity id="34" minimum="0" maximum="1"/>    
    </end>    
    <end type="TARGET" refId="5" navigable="true"/>    
    <display labels="true" multiplicity="true"/>  
  </association>  
  <generalization id="35">    
    <end type="SOURCE" refId="12"/>    
    <end type="TARGET" refId="1"/>  
  </generalization>  
  <association id="36">    
    <end type="SOURCE" refId="14" navigable="false">      
      <attribute id="37" name="spellbooks"/>      
      <multiplicity id="38" minimum="0" maximum="2147483647"/>    
    </end>    
    <end type="TARGET" refId="5" navigable="true"/>    
    <display labels="true" multiplicity="true"/>  
  </association>  
  <realization id="39">    
    <end type="SOURCE" refId="10"/>    
    <end type="TARGET" refId="8"/>  
  </realization>  
  <association id="40">    
    <end type="SOURCE" refId="3" navigable="false">      
      <attribute id="41" name="spellDao"/>      
      <multiplicity id="42" minimum="0" maximum="1"/>    
    </end>    
    <end type="TARGET" refId="9" navigable="true"/>    
    <display labels="true" multiplicity="true"/>  
  </association>  
  <generalization id="43">    
    <end type="SOURCE" refId="2"/>    
    <end type="TARGET" refId="7"/>  
  </generalization>  
  <realization id="44">    
    <end type="SOURCE" refId="2"/>    
    <end type="TARGET" refId="9"/>  
  </realization>  
  <association id="45">    
    <end type="SOURCE" refId="5" navigable="false">      
      <attribute id="46" name="wizards"/>      
      <multiplicity id="47" minimum="0" maximum="2147483647"/>    
    </end>    
    <end type="TARGET" refId="14" navigable="true"/>    
    <display labels="true" multiplicity="true"/>  
  </association>  
  <realization id="48">    
    <end type="SOURCE" refId="3"/>    
    <end type="TARGET" refId="13"/>  
  </realization>  
  <realization id="49">    
    <end type="SOURCE" refId="7"/>    
    <end type="TARGET" refId="11"/>  
  </realization>  
  <classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" 
    sort-features="false" accessors="true" visibility="true">    
    <attributes public="true" package="true" protected="true" private="true" static="true"/>    
    <operations public="true" package="true" protected="true" private="true" static="true"/>  
  </classifier-display>  
  <association-display labels="true" multiplicity="true"/>
</class-diagram>