@startuml

/' diagram meta data start
config=StructureConfiguration;
{
  "projectClassification": {
    "searchMode": "OpenProject", // OpenProject, AllProjects
    "includedProjects": "",
    "pathEndKeywords": "*.impl",
    "isClientPath": "",
    "isClientName": "",
    "isTestPath": "",
    "isTestName": "",
    "isMappingPath": "",
    "isMappingName": "",
    "isDataAccessPath": "",
    "isDataAccessName": "",
    "isDataStructurePath": "",
    "isDataStructureName": "",
    "isInterfaceStructuresPath": "",
    "isInterfaceStructuresName": "",
    "isEntryPointPath": "",
    "isEntryPointName": "",
    "treatFinalFieldsAsMandatory": false
  },
  "graphRestriction": {
    "classPackageExcludeFilter": "",
    "classPackageIncludeFilter": "",
    "classNameExcludeFilter": "",
    "classNameIncludeFilter": "",
    "methodNameExcludeFilter": "",
    "methodNameIncludeFilter": "",
    "removeByInheritance": "", // inheritance/annotation based filtering is done in a second step
    "removeByAnnotation": "",
    "removeByClassPackage": "", // cleanup the graph after inheritance/annotation based filtering is done
    "removeByClassName": "",
    "cutMappings": false,
    "cutEnum": true,
    "cutTests": true,
    "cutClient": true,
    "cutDataAccess": true,
    "cutInterfaceStructures": true,
    "cutDataStructures": true,
    "cutGetterAndSetter": true,
    "cutConstructors": true
  },
  "graphTraversal": {
    "forwardDepth": 3,
    "backwardDepth": 3,
    "classPackageExcludeFilter": "",
    "classPackageIncludeFilter": "",
    "classNameExcludeFilter": "",
    "classNameIncludeFilter": "",
    "methodNameExcludeFilter": "",
    "methodNameIncludeFilter": "",
    "hideMappings": false,
    "hideDataStructures": false,
    "hidePrivateMethods": true,
    "hideInterfaceCalls": true, // indirection: implementation -> interface (is hidden) -> implementation
    "onlyShowApplicationEntryPoints": false, // root node is included
    "useMethodCallsForStructureDiagram": "ForwardOnly" // ForwardOnly, BothDirections, No
  },
  "details": {
    "aggregation": "GroupByClass", // ByClass, GroupByClass, None
    "showClassGenericTypes": true,
    "showMethods": true,
    "showMethodParameterNames": true,
    "showMethodParameterTypes": true,
    "showMethodReturnType": true,
    "showPackageLevels": 2,
    "showDetailedClassStructure": true
  },
  "rootClass": "bks2101.kuraga.firstProject.models.Group",
  "extensionCallbackMethod": "" // qualified.class.name#methodName - signature: public static String method(String)
}
diagram meta data end '/



digraph g {
    rankdir="TB"
    splines=polyline
    

'nodes 
subgraph cluster_1120103501 { 
   	label=kuraga
	labeljust=l
	fillcolor="#ececec"
	style=filled
   
   subgraph cluster_1316873052 { 
   	label=firstProject
	labeljust=l
	fillcolor="#d8d8d8"
	style=filled
   
   Curator299579752[
	label=<<TABLE BORDER="1" CELLBORDER="0" CELLPADDING="4" CELLSPACING="0">
<TR><TD ALIGN="LEFT" >(C)Curator</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >-   email: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   first_name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   groups: Set&lt;Group&gt; [0..*]</TD></TR>
<TR><TD ALIGN="LEFT" >-   id: Long [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   last_name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   meetings: Set&lt;Meeting&gt; [0..*]</TD></TR>
<TR><TD ALIGN="LEFT" >-   personal_data: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   supervisor: Supervisor [0..1]</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >+ AddMeetings(meeting: Meeting)</TD></TR>
<TR><TD ALIGN="LEFT" >+ builder(): CuratorBuilder</TD></TR>
</TABLE>>
	style=filled
	margin=0
	shape=plaintext
	fillcolor="#FFFFFF"
];

Group299579752[
	label=<<TABLE BORDER="1" CELLBORDER="0" CELLPADDING="4" CELLSPACING="0">
<TR><TD ALIGN="LEFT" >(C)Group</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >-   curator: Curator [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   faculty_name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   id: Long [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   meetings: Set&lt;Meeting&gt; [0..*]</TD></TR>
<TR><TD ALIGN="LEFT" >-   name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   students: Set&lt;Student&gt; [0..*]</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >+ AddMeeting(meeting: Meeting)</TD></TR>
<TR><TD ALIGN="LEFT" ># canEqual(other: Object): boolean</TD></TR>
</TABLE>>
	style=filled
	margin=0
	shape=plaintext
	fillcolor="#FFFFFF"
];

Meeting299579752[
	label=<<TABLE BORDER="1" CELLBORDER="0" CELLPADDING="4" CELLSPACING="0">
<TR><TD ALIGN="LEFT" >(C)Meeting</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >-   curator: Curator [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   date: Date [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   group: Group [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   id: Long [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   location: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   topic: String [0..1]</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >+ builder(): MeetingBuilder</TD></TR>
</TABLE>>
	style=filled
	margin=0
	shape=plaintext
	fillcolor="#FFFFFF"
];

Student299579752[
	label=<<TABLE BORDER="1" CELLBORDER="0" CELLPADDING="4" CELLSPACING="0">
<TR><TD ALIGN="LEFT" >(C)Student</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >-   email: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   first_name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   group: Group [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   id: Long [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   last_name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   personal_data: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   vk_id: String [0..1]</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >+ builder(): StudentBuilder</TD></TR>
</TABLE>>
	style=filled
	margin=0
	shape=plaintext
	fillcolor="#FFFFFF"
];

Supervisor299579752[
	label=<<TABLE BORDER="1" CELLBORDER="0" CELLPADDING="4" CELLSPACING="0">
<TR><TD ALIGN="LEFT" >(C)Supervisor</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >-   curators: Set&lt;Curator&gt; [0..*]</TD></TR>
<TR><TD ALIGN="LEFT" >-   email: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   first_name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   id: Long [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   last_name: String [0..1]</TD></TR>
<TR><TD ALIGN="LEFT" >-   personal_data: String [0..1]</TD></TR>
<HR/>
<TR><TD ALIGN="LEFT" >+ addCurator(curator: Curator)</TD></TR>
<TR><TD ALIGN="LEFT" >+ deleteCurator(curator: Curator)</TD></TR>
</TABLE>>
	style=filled
	margin=0
	shape=plaintext
	fillcolor="#FFFFFF"
];
} 
} 

'edges    
Curator299579752 -> Group299579752[label="groups
[0..*]"];
Curator299579752 -> Meeting299579752[label="meetings
[0..*]"];
Curator299579752 -> Supervisor299579752[label="supervisor
[0..1]"];
Group299579752 -> Curator299579752[label="curator
[0..1]"];
Group299579752 -> Meeting299579752[label="meetings
[0..*]"];
Group299579752 -> Student299579752[label="students
[0..*]"];
Meeting299579752 -> Curator299579752[label="curator
[0..1]"];
Meeting299579752 -> Group299579752[label="group
[0..1]"];
Student299579752 -> Group299579752[label="group
[0..1]"];
Supervisor299579752 -> Curator299579752[label="curators
[0..*]"];
    
}
@enduml