summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Pouzenc <ludovic@pouzenc.fr>2014-11-30 17:32:42 +0100
committerLudovic Pouzenc <ludovic@pouzenc.fr>2015-04-14 07:44:59 +0200
commiteada699293bd10cc3b544bf15ebef6be06bce6eb (patch)
treed791ae9acb4142b4dd233e3a6f58495cebeefc68
parent3396b5beb6127098c6c9cac5fd3102efd208bbd3 (diff)
downloadsssync-eada699293bd10cc3b544bf15ebef6be06bce6eb.tar.gz
sssync-eada699293bd10cc3b544bf15ebef6be06bce6eb.tar.bz2
sssync-eada699293bd10cc3b544bf15ebef6be06bce6eb.zip
Adding class diagram about data handling.
Removing ugly auto-generated inheritance diagram.
-rw-r--r--doc/diagrams/data.plant35
-rw-r--r--doc/diagrams/data.svg1
-rw-r--r--doc/diagrams/inheritance.plant28
-rw-r--r--doc/diagrams/inheritance.svg1
4 files changed, 36 insertions, 29 deletions
diff --git a/doc/diagrams/data.plant b/doc/diagrams/data.plant
new file mode 100644
index 0000000..7e98f4e
--- /dev/null
+++ b/doc/diagrams/data.plant
@@ -0,0 +1,35 @@
+@startuml
+abstract class AbstractMVDataReader {
+ #String dataSourceName
+ +void remove()
+ +String getDataSourceName()
+}
+
+interface MVDataReader {
+ String getDataSourceName()
+}
+
+interface "Iterator<MVDataEntry>" as Iterator_MVDataEntry_ {
+}
+
+
+interface "Iterable<MVDataEntry>" as Iterable_MVDataEntry_ {
+}
+
+class MVDataEntry {
+ -String key
+ -HashMultimap<String,String> attrValPairs
+ +MVDataEntry(String key)
+ +Set<String> getValues(String attr)
+ +Set<String> getChangedAttributes(MVDataEntry original)
+ +void mergeValues(boolean appendMode, MVDataEntry[] entries)
+}
+interface "Comparable<MVDataEntry>" as Comparable_MVDataEntry_ {
+}
+
+Comparable_MVDataEntry_ <|.. MVDataEntry
+Iterable_MVDataEntry_ <|.. MVDataReader
+Iterable_MVDataEntry_ .up.> MVDataEntry
+Iterator_MVDataEntry_ <|.. MVDataReader
+MVDataReader <|.. AbstractMVDataReader
+@enduml \ No newline at end of file
diff --git a/doc/diagrams/data.svg b/doc/diagrams/data.svg
new file mode 100644
index 0000000..58bba56
--- /dev/null
+++ b/doc/diagrams/data.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="627pt" style="width:504px;height:627px;" version="1.1" viewBox="0 0 504 627" width="504pt"><defs><filter height="300%" id="f1" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#FEFECE" filter="url(#f1)" height="86.4141" style="stroke: #A80036; stroke-width: 1.5;" width="188" x="104" y="532"/><ellipse cx="126.65" cy="548" fill="#A9DCDF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M126.7594,543.3438 L125.6031,548.4219 L127.9313,548.4219 L126.7594,543.3438 Z M125.275,541.1094 L128.2594,541.1094 L131.6188,553.5 L129.1656,553.5 L128.4,550.4375 L125.1188,550.4375 L124.3688,553.5 L121.9313,553.5 L125.275,541.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="139" x="142.35" y="552.1543">AbstractMVDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="105" x2="291" y1="564" y2="564"/><polygon fill="none" points="115,570.9023,119,574.9023,115,578.9023,111,574.9023" style="stroke: #B38D22; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="135" x="124" y="578.2104">String dataSourceName</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="105" x2="291" y1="584.8047" y2="584.8047"/><ellipse cx="115" cy="596.707" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="77" x="124" y="599.0151">void remove()</text><ellipse cx="115" cy="609.5117" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="162" x="124" y="611.8198">String getDataSourceName()</text><rect fill="#FEFECE" filter="url(#f1)" height="60.8047" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="111" y="410.5"/><ellipse cx="150.3" cy="426.5" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M146.2219,422.2656 L146.2219,420.1094 L153.6125,420.1094 L153.6125,422.2656 L151.1438,422.2656 L151.1438,430.3438 L153.6125,430.3438 L153.6125,432.5 L146.2219,432.5 L146.2219,430.3438 L148.6906,430.3438 L148.6906,422.2656 L146.2219,422.2656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="88" x="169.7" y="430.6543">MVDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="112" x2="284" y1="442.5" y2="442.5"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="112" x2="284" y1="450.5" y2="450.5"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="162" x="117" y="464.7104">String getDataSourceName()</text><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="6" y="302"/><ellipse cx="21" cy="318" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M16.9219,313.7656 L16.9219,311.6094 L24.3125,311.6094 L24.3125,313.7656 L21.8438,313.7656 L21.8438,321.8438 L24.3125,321.8438 L24.3125,324 L16.9219,324 L16.9219,321.8438 L19.3906,321.8438 L19.3906,313.7656 L16.9219,313.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="143" x="35" y="322.1543">Iterator&lt;MVDataEntry&gt;</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="180" y1="334" y2="334"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="180" y1="342" y2="342"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="176" x="215" y="302"/><ellipse cx="230" cy="318" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M225.9219,313.7656 L225.9219,311.6094 L233.3125,311.6094 L233.3125,313.7656 L230.8438,313.7656 L230.8438,321.8438 L233.3125,321.8438 L233.3125,324 L225.9219,324 L225.9219,321.8438 L228.3906,321.8438 L228.3906,313.7656 L225.9219,313.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="144" x="244" y="322.1543">Iterable&lt;MVDataEntry&gt;</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="216" x2="390" y1="334" y2="334"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="216" x2="390" y1="342" y2="342"/><rect fill="#FEFECE" filter="url(#f1)" height="124.8281" style="stroke: #A80036; stroke-width: 1.5;" width="384" x="111" y="116.5"/><ellipse cx="258.75" cy="132.5" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M261.7188,138.1406 Q261.1406,138.4375 260.5,138.5859 Q259.8594,138.7344 259.1563,138.7344 Q256.6563,138.7344 255.3359,137.0859 Q254.0156,135.4375 254.0156,132.3125 Q254.0156,129.1875 255.3359,127.5313 Q256.6563,125.875 259.1563,125.875 Q259.8594,125.875 260.5078,126.0313 Q261.1563,126.1875 261.7188,126.4844 L261.7188,129.2031 Q261.0938,128.625 260.5,128.3516 Q259.9063,128.0781 259.2813,128.0781 Q257.9375,128.0781 257.25,129.1484 Q256.5625,130.2188 256.5625,132.3125 Q256.5625,134.4063 257.25,135.4766 Q257.9375,136.5469 259.2813,136.5469 Q259.9063,136.5469 260.5,136.2734 Q261.0938,136 261.7188,135.4219 L261.7188,138.1406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="80" x="279.25" y="136.6543">MVDataEntry</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="112" x2="494" y1="148.5" y2="148.5"/><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="119" y="157.4023"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="56" x="131" y="162.7104">String key</text><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="119" y="170.207"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="239" x="131" y="175.5151">HashMultimap&lt;String,String&gt; attrValPairs</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="112" x2="494" y1="182.1094" y2="182.1094"/><ellipse cx="122" cy="194.0117" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="135" x="131" y="196.3198">MVDataEntry(String key)</text><ellipse cx="122" cy="206.8164" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="195" x="131" y="209.1245">Set&lt;String&gt; getValues(String attr)</text><ellipse cx="122" cy="219.6211" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="321" x="131" y="221.9292">Set&lt;String&gt; getChangedAttributes(MVDataEntry original)</text><ellipse cx="122" cy="232.4258" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="358" x="131" y="234.7339">void mergeValues(boolean appendMode, MVDataEntry[] entries)</text><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="201" x="203" y="8"/><ellipse cx="218" cy="24" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M213.9219,19.7656 L213.9219,17.6094 L221.3125,17.6094 L221.3125,19.7656 L218.8438,19.7656 L218.8438,27.8438 L221.3125,27.8438 L221.3125,30 L213.9219,30 L213.9219,27.8438 L216.3906,27.8438 L216.3906,19.7656 L213.9219,19.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="169" x="232" y="28.1543">Comparable&lt;MVDataEntry&gt;</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="204" x2="403" y1="40" y2="40"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="204" x2="403" y1="48" y2="48"/><path d="M303,76.415 C303,88.976 303,102.888 303,116.309 " fill="none" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="none" points="296,76.274,303,56.274,310,76.274,296,76.274" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M267.212,365.196 C253.745,379.946 238.641,396.489 225.986,410.349 " fill="none" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="none" points="262.334,360.158,280.989,350.108,272.673,369.597,262.334,360.158" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M303,247.012 C303,266.635 303,286.783 303,301.819 " fill="none" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="303,241.768,299,250.768,303,246.768,307,250.768,303,241.768" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M128.788,365.196 C142.255,379.946 157.359,396.489 170.014,410.349 " fill="none" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="none" points="123.327,369.597,115.011,350.108,133.666,360.158,123.327,369.597" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M198,492.039 C198,505.206 198,519.2466 198,531.9614 " fill="none" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="none" points="191,491.742,198,471.742,205,491.742,191,491.742" style="stroke: #A80036; stroke-width: 1.0;"/></g></svg> \ No newline at end of file
diff --git a/doc/diagrams/inheritance.plant b/doc/diagrams/inheritance.plant
deleted file mode 100644
index 5b763e6..0000000
--- a/doc/diagrams/inheritance.plant
+++ /dev/null
@@ -1,28 +0,0 @@
-@startuml
-abstract class data.io.AbstractMVDataReader
-abstract class sync.AbstractSyncTask
-interface data.io.MVDataReader
-interface data.io.MVDataWriter
-interface java.io.Closeable
-interface java.lang.Comparable
-interface java.lang.Iterable
-interface java.util.Iterator
-interface java.util.concurrent.Callable
-data.io.AbstractMVDataReader --|> data.io.MVDataReader
-sync.AbstractSyncTask --|> java.util.concurrent.Callable
-data.MVDataEntry --|> java.lang.Comparable
-data.filters.MVDataCombiner --|> data.io.AbstractMVDataReader
-data.io.ConnectionsHolder --|> java.io.Closeable
-data.io.SafeDataReader --|> data.io.AbstractMVDataReader
-data.io.csv.CSVDataReader --|> data.io.AbstractMVDataReader
-data.io.ldap.LDAPConnectionWrapper --|> java.io.Closeable
-data.io.ldap.LDAPFlatDataReader --|> data.io.AbstractMVDataReader
-data.io.ldap.LDAPFlatDataWriter --|> data.io.MVDataWriter
-data.io.sql.SQLConnectionWrapper --|> java.io.Closeable
-data.io.sql.SQLRelDataReader --|> data.io.AbstractMVDataReader
-data.io.stub.StubDataReader --|> data.io.AbstractMVDataReader
-data.io.stub.StubDataWriter --|> data.io.MVDataWriter
-sync.BasicSyncTask --|> sync.AbstractSyncTask
-data.io.MVDataReader --|> java.lang.Iterable
-data.io.MVDataReader --|> java.util.Iterator
-@enduml
diff --git a/doc/diagrams/inheritance.svg b/doc/diagrams/inheritance.svg
deleted file mode 100644
index 4004ae8..0000000
--- a/doc/diagrams/inheritance.svg
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="627pt" style="width:1706px;height:627px;" version="1.1" viewBox="0 0 1706 627" width="1706pt"><defs><filter height="300%" id="f1" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><polygon fill="#FFFFFF" filter="url(#f1)" points="523,148,582,148,589,170.2969,1023,170.2969,1023,496,523,496,523,148" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="523" x2="589" y1="170.2969" y2="170.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="53" x="526" y="163.9951">data.io</text><polygon fill="#FFFFFF" filter="url(#f1)" points="1514,24,1557,24,1564,46.2969,1684,46.2969,1684,248,1514,248,1514,24" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="1514" x2="1564" y1="46.2969" y2="46.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="37" x="1517" y="39.9951">sync</text><polygon fill="#FFFFFF" filter="url(#f1)" points="1275,272,1331,272,1338,294.2969,1395,294.2969,1395,372,1275,372,1275,272" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="1275" x2="1338" y1="294.2969" y2="294.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="50" x="1278" y="287.9951">java.io</text><polygon fill="#FFFFFF" filter="url(#f1)" points="329,520,404,520,411,542.2969,576,542.2969,576,620,329,620,329,520" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="329" x2="411" y1="542.2969" y2="542.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="69" x="332" y="535.9951">java.lang</text><polygon fill="#FFFFFF" filter="url(#f1)" points="600,520,666,520,673,542.2969,708,542.2969,708,620,600,620,600,520" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="600" x2="673" y1="542.2969" y2="542.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="60" x="603" y="535.9951">java.util</text><polygon fill="#FFFFFF" filter="url(#f1)" points="1529,272,1688,272,1695,294.2969,1699,294.2969,1699,372,1529,372,1529,272" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="1529" x2="1695" y1="294.2969" y2="294.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="1532" y="287.9951">java.util.concurrent</text><polygon fill="#FFFFFF" filter="url(#f1)" points="324,396,364,396,371,418.2969,468,418.2969,468,496,324,496,324,396" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="324" x2="371" y1="418.2969" y2="418.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="34" x="327" y="411.9951">data</text><polygon fill="#FFFFFF" filter="url(#f1)" points="22,148,113,148,120,170.2969,192,170.2969,192,248,22,248,22,148" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="22" x2="120" y1="170.2969" y2="170.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="85" x="25" y="163.9951">data.filters</text><polygon fill="#FFFFFF" filter="url(#f1)" points="337,148,428,148,435,170.2969,499,170.2969,499,248,337,248,337,148" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="337" x2="435" y1="170.2969" y2="170.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="85" x="340" y="163.9951">data.io.csv</text><polygon fill="#FFFFFF" filter="url(#f1)" points="663,24,760,24,767,46.2969,1263,46.2969,1263,124,663,124,663,24" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="663" x2="767" y1="46.2969" y2="46.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="91" x="666" y="39.9951">data.io.ldap</text><polygon fill="#FFFFFF" filter="url(#f1)" points="1047,148,1134,148,1141,170.2969,1440,170.2969,1440,248,1047,248,1047,148" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="1047" x2="1141" y1="170.2969" y2="170.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="81" x="1050" y="163.9951">data.io.sql</text><polygon fill="#FFFFFF" filter="url(#f1)" points="226,24,325,24,332,46.2969,557,46.2969,557,124,226,124,226,24" style="stroke: #000000; stroke-width: 2.0;"/><line style="stroke: #000000; stroke-width: 2.0;" x1="226" x2="332" y1="46.2969" y2="46.2969"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="93" x="229" y="39.9951">data.io.stub</text><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="171" x="539" y="308"/><ellipse cx="554" cy="324" fill="#A9DCDF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M554.1094,319.3438 L552.9531,324.4219 L555.2813,324.4219 L554.1094,319.3438 Z M552.625,317.1094 L555.6094,317.1094 L558.9688,329.5 L556.5156,329.5 L555.75,326.4375 L552.4688,326.4375 L551.7188,329.5 L549.2813,329.5 L552.625,317.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="139" x="568" y="328.1543">AbstractMVDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="540" x2="709" y1="340" y2="340"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="540" x2="709" y1="348" y2="348"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="120" x="564" y="432"/><ellipse cx="579" cy="448" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M574.9219,443.7656 L574.9219,441.6094 L582.3125,441.6094 L582.3125,443.7656 L579.8438,443.7656 L579.8438,451.8438 L582.3125,451.8438 L582.3125,454 L574.9219,454 L574.9219,451.8438 L577.3906,451.8438 L577.3906,443.7656 L574.9219,443.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="88" x="593" y="452.1543">MVDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="565" x2="683" y1="464" y2="464"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="565" x2="683" y1="472" y2="472"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="115" x="893" y="184"/><ellipse cx="908" cy="200" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M903.9219,195.7656 L903.9219,193.6094 L911.3125,193.6094 L911.3125,195.7656 L908.8438,195.7656 L908.8438,203.8438 L911.3125,203.8438 L911.3125,206 L903.9219,206 L903.9219,203.8438 L906.3906,203.8438 L906.3906,195.7656 L903.9219,195.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="83" x="922" y="204.1543">MVDataWriter</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="894" x2="1007" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="894" x2="1007" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="708" y="184"/><ellipse cx="723" cy="200" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M725.9688,205.6406 Q725.3906,205.9375 724.75,206.0859 Q724.1094,206.2344 723.4063,206.2344 Q720.9063,206.2344 719.5859,204.5859 Q718.2656,202.9375 718.2656,199.8125 Q718.2656,196.6875 719.5859,195.0313 Q720.9063,193.375 723.4063,193.375 Q724.1094,193.375 724.7578,193.5313 Q725.4063,193.6875 725.9688,193.9844 L725.9688,196.7031 Q725.3438,196.125 724.75,195.8516 Q724.1563,195.5781 723.5313,195.5781 Q722.1875,195.5781 721.5,196.6484 Q720.8125,197.7188 720.8125,199.8125 Q720.8125,201.9063 721.5,202.9766 Q722.1875,204.0469 723.5313,204.0469 Q724.1563,204.0469 724.75,203.7734 Q725.3438,203.5 725.9688,202.9219 L725.9688,205.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="737" y="204.1543">ConnectionsHolder</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="709" x2="858" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="709" x2="858" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="135" x="539" y="184"/><ellipse cx="554" cy="200" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M556.9688,205.6406 Q556.3906,205.9375 555.75,206.0859 Q555.1094,206.2344 554.4063,206.2344 Q551.9063,206.2344 550.5859,204.5859 Q549.2656,202.9375 549.2656,199.8125 Q549.2656,196.6875 550.5859,195.0313 Q551.9063,193.375 554.4063,193.375 Q555.1094,193.375 555.7578,193.5313 Q556.4063,193.6875 556.9688,193.9844 L556.9688,196.7031 Q556.3438,196.125 555.75,195.8516 Q555.1563,195.5781 554.5313,195.5781 Q553.1875,195.5781 552.5,196.6484 Q551.8125,197.7188 551.8125,199.8125 Q551.8125,201.9063 552.5,202.9766 Q553.1875,204.0469 554.5313,204.0469 Q555.1563,204.0469 555.75,203.7734 Q556.3438,203.5 556.9688,202.9219 L556.9688,205.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="103" x="568" y="204.1543">SafeDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="540" x2="673" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="540" x2="673" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="1530" y="184"/><ellipse cx="1545" cy="200" fill="#A9DCDF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1545.1094,195.3438 L1543.9531,200.4219 L1546.2813,200.4219 L1545.1094,195.3438 Z M1543.625,193.1094 L1546.6094,193.1094 L1549.9688,205.5 L1547.5156,205.5 L1546.75,202.4375 L1543.4688,202.4375 L1542.7188,205.5 L1540.2813,205.5 L1543.625,193.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="107" x="1559" y="204.1543">AbstractSyncTask</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1531" x2="1668" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1531" x2="1668" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="123" x="1538" y="60"/><ellipse cx="1553" cy="76" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1555.9688,81.6406 Q1555.3906,81.9375 1554.75,82.0859 Q1554.1094,82.2344 1553.4063,82.2344 Q1550.9063,82.2344 1549.5859,80.5859 Q1548.2656,78.9375 1548.2656,75.8125 Q1548.2656,72.6875 1549.5859,71.0313 Q1550.9063,69.375 1553.4063,69.375 Q1554.1094,69.375 1554.7578,69.5313 Q1555.4063,69.6875 1555.9688,69.9844 L1555.9688,72.7031 Q1555.3438,72.125 1554.75,71.8516 Q1554.1563,71.5781 1553.5313,71.5781 Q1552.1875,71.5781 1551.5,72.6484 Q1550.8125,73.7188 1550.8125,75.8125 Q1550.8125,77.9063 1551.5,78.9766 Q1552.1875,80.0469 1553.5313,80.0469 Q1554.1563,80.0469 1554.75,79.7734 Q1555.3438,79.5 1555.9688,78.9219 L1555.9688,81.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="91" x="1567" y="80.1543">BasicSyncTask</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1539" x2="1660" y1="92" y2="92"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1539" x2="1660" y1="100" y2="100"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="88" x="1291" y="308"/><ellipse cx="1306" cy="324" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1301.9219,319.7656 L1301.9219,317.6094 L1309.3125,317.6094 L1309.3125,319.7656 L1306.8438,319.7656 L1306.8438,327.8438 L1309.3125,327.8438 L1309.3125,330 L1301.9219,330 L1301.9219,327.8438 L1304.3906,327.8438 L1304.3906,319.7656 L1301.9219,319.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="56" x="1320" y="328.1543">Closeable</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1292" x2="1378" y1="340" y2="340"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1292" x2="1378" y1="348" y2="348"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="103" x="345" y="556"/><ellipse cx="360" cy="572" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M355.9219,567.7656 L355.9219,565.6094 L363.3125,565.6094 L363.3125,567.7656 L360.8438,567.7656 L360.8438,575.8438 L363.3125,575.8438 L363.3125,578 L355.9219,578 L355.9219,575.8438 L358.3906,575.8438 L358.3906,567.7656 L355.9219,567.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="71" x="374" y="576.1543">Comparable</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="346" x2="447" y1="588" y2="588"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="346" x2="447" y1="596" y2="596"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="78" x="482" y="556"/><ellipse cx="497" cy="572" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M492.9219,567.7656 L492.9219,565.6094 L500.3125,565.6094 L500.3125,567.7656 L497.8438,567.7656 L497.8438,575.8438 L500.3125,575.8438 L500.3125,578 L492.9219,578 L492.9219,575.8438 L495.3906,575.8438 L495.3906,567.7656 L492.9219,567.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="46" x="511" y="576.1543">Iterable</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="483" x2="559" y1="588" y2="588"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="483" x2="559" y1="596" y2="596"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="77" x="616" y="556"/><ellipse cx="631" cy="572" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M626.9219,567.7656 L626.9219,565.6094 L634.3125,565.6094 L634.3125,567.7656 L631.8438,567.7656 L631.8438,575.8438 L634.3125,575.8438 L634.3125,578 L626.9219,578 L626.9219,575.8438 L629.3906,575.8438 L629.3906,567.7656 L626.9219,567.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="45" x="645" y="576.1543">Iterator</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="617" x2="692" y1="588" y2="588"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="617" x2="692" y1="596" y2="596"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="78" x="1560" y="308"/><ellipse cx="1575" cy="324" fill="#B4A7E5" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1570.9219,319.7656 L1570.9219,317.6094 L1578.3125,317.6094 L1578.3125,319.7656 L1575.8438,319.7656 L1575.8438,327.8438 L1578.3125,327.8438 L1578.3125,330 L1570.9219,330 L1570.9219,327.8438 L1573.3906,327.8438 L1573.3906,319.7656 L1570.9219,319.7656 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="46" x="1589" y="328.1543">Callable</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1561" x2="1637" y1="340" y2="340"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1561" x2="1637" y1="348" y2="348"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="112" x="340" y="432"/><ellipse cx="355" cy="448" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M357.9688,453.6406 Q357.3906,453.9375 356.75,454.0859 Q356.1094,454.2344 355.4063,454.2344 Q352.9063,454.2344 351.5859,452.5859 Q350.2656,450.9375 350.2656,447.8125 Q350.2656,444.6875 351.5859,443.0313 Q352.9063,441.375 355.4063,441.375 Q356.1094,441.375 356.7578,441.5313 Q357.4063,441.6875 357.9688,441.9844 L357.9688,444.7031 Q357.3438,444.125 356.75,443.8516 Q356.1563,443.5781 355.5313,443.5781 Q354.1875,443.5781 353.5,444.6484 Q352.8125,445.7188 352.8125,447.8125 Q352.8125,449.9063 353.5,450.9766 Q354.1875,452.0469 355.5313,452.0469 Q356.1563,452.0469 356.75,451.7734 Q357.3438,451.5 357.9688,450.9219 L357.9688,453.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="80" x="369" y="452.1543">MVDataEntry</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="341" x2="451" y1="464" y2="464"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="341" x2="451" y1="472" y2="472"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="38" y="184"/><ellipse cx="53" cy="200" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M55.9688,205.6406 Q55.3906,205.9375 54.75,206.0859 Q54.1094,206.2344 53.4063,206.2344 Q50.9063,206.2344 49.5859,204.5859 Q48.2656,202.9375 48.2656,199.8125 Q48.2656,196.6875 49.5859,195.0313 Q50.9063,193.375 53.4063,193.375 Q54.1094,193.375 54.7578,193.5313 Q55.4063,193.6875 55.9688,193.9844 L55.9688,196.7031 Q55.3438,196.125 54.75,195.8516 Q54.1563,195.5781 53.5313,195.5781 Q52.1875,195.5781 51.5,196.6484 Q50.8125,197.7188 50.8125,199.8125 Q50.8125,201.9063 51.5,202.9766 Q52.1875,204.0469 53.5313,204.0469 Q54.1563,204.0469 54.75,203.7734 Q55.3438,203.5 55.9688,202.9219 L55.9688,205.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="107" x="67" y="204.1543">MVDataCombiner</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39" x2="176" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39" x2="176" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="353" y="184"/><ellipse cx="368" cy="200" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M370.9688,205.6406 Q370.3906,205.9375 369.75,206.0859 Q369.1094,206.2344 368.4063,206.2344 Q365.9063,206.2344 364.5859,204.5859 Q363.2656,202.9375 363.2656,199.8125 Q363.2656,196.6875 364.5859,195.0313 Q365.9063,193.375 368.4063,193.375 Q369.1094,193.375 369.7578,193.5313 Q370.4063,193.6875 370.9688,193.9844 L370.9688,196.7031 Q370.3438,196.125 369.75,195.8516 Q369.1563,195.5781 368.5313,195.5781 Q367.1875,195.5781 366.5,196.6484 Q365.8125,197.7188 365.8125,199.8125 Q365.8125,201.9063 366.5,202.9766 Q367.1875,204.0469 368.5313,204.0469 Q369.1563,204.0469 369.75,203.7734 Q370.3438,203.5 370.9688,202.9219 L370.9688,205.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="99" x="382" y="204.1543">CSVDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="354" x2="483" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="354" x2="483" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="187" x="1061" y="60"/><ellipse cx="1076" cy="76" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1078.9688,81.6406 Q1078.3906,81.9375 1077.75,82.0859 Q1077.1094,82.2344 1076.4063,82.2344 Q1073.9063,82.2344 1072.5859,80.5859 Q1071.2656,78.9375 1071.2656,75.8125 Q1071.2656,72.6875 1072.5859,71.0313 Q1073.9063,69.375 1076.4063,69.375 Q1077.1094,69.375 1077.7578,69.5313 Q1078.4063,69.6875 1078.9688,69.9844 L1078.9688,72.7031 Q1078.3438,72.125 1077.75,71.8516 Q1077.1563,71.5781 1076.5313,71.5781 Q1075.1875,71.5781 1074.5,72.6484 Q1073.8125,73.7188 1073.8125,75.8125 Q1073.8125,77.9063 1074.5,78.9766 Q1075.1875,80.0469 1076.5313,80.0469 Q1077.1563,80.0469 1077.75,79.7734 Q1078.3438,79.5 1078.9688,78.9219 L1078.9688,81.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="155" x="1090" y="80.1543">LDAPConnectionWrapper</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1062" x2="1247" y1="92" y2="92"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1062" x2="1247" y1="100" y2="100"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="161" x="679" y="60"/><ellipse cx="694" cy="76" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M696.9688,81.6406 Q696.3906,81.9375 695.75,82.0859 Q695.1094,82.2344 694.4063,82.2344 Q691.9063,82.2344 690.5859,80.5859 Q689.2656,78.9375 689.2656,75.8125 Q689.2656,72.6875 690.5859,71.0313 Q691.9063,69.375 694.4063,69.375 Q695.1094,69.375 695.7578,69.5313 Q696.4063,69.6875 696.9688,69.9844 L696.9688,72.7031 Q696.3438,72.125 695.75,71.8516 Q695.1563,71.5781 694.5313,71.5781 Q693.1875,71.5781 692.5,72.6484 Q691.8125,73.7188 691.8125,75.8125 Q691.8125,77.9063 692.5,78.9766 Q693.1875,80.0469 694.5313,80.0469 Q695.1563,80.0469 695.75,79.7734 Q696.3438,79.5 696.9688,78.9219 L696.9688,81.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="129" x="708" y="80.1543">LDAPFlatDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="680" x2="839" y1="92" y2="92"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="680" x2="839" y1="100" y2="100"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="874" y="60"/><ellipse cx="889" cy="76" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M891.9688,81.6406 Q891.3906,81.9375 890.75,82.0859 Q890.1094,82.2344 889.4063,82.2344 Q886.9063,82.2344 885.5859,80.5859 Q884.2656,78.9375 884.2656,75.8125 Q884.2656,72.6875 885.5859,71.0313 Q886.9063,69.375 889.4063,69.375 Q890.1094,69.375 890.7578,69.5313 Q891.4063,69.6875 891.9688,69.9844 L891.9688,72.7031 Q891.3438,72.125 890.75,71.8516 Q890.1563,71.5781 889.5313,71.5781 Q888.1875,71.5781 887.5,72.6484 Q886.8125,73.7188 886.8125,75.8125 Q886.8125,77.9063 887.5,78.9766 Q888.1875,80.0469 889.5313,80.0469 Q890.1563,80.0469 890.75,79.7734 Q891.3438,79.5 891.9688,78.9219 L891.9688,81.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="121" x="903" y="80.1543">LDAPFlatDataWriter</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="875" x2="1026" y1="92" y2="92"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="875" x2="1026" y1="100" y2="100"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="179" x="1246" y="184"/><ellipse cx="1261" cy="200" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1263.9688,205.6406 Q1263.3906,205.9375 1262.75,206.0859 Q1262.1094,206.2344 1261.4063,206.2344 Q1258.9063,206.2344 1257.5859,204.5859 Q1256.2656,202.9375 1256.2656,199.8125 Q1256.2656,196.6875 1257.5859,195.0313 Q1258.9063,193.375 1261.4063,193.375 Q1262.1094,193.375 1262.7578,193.5313 Q1263.4063,193.6875 1263.9688,193.9844 L1263.9688,196.7031 Q1263.3438,196.125 1262.75,195.8516 Q1262.1563,195.5781 1261.5313,195.5781 Q1260.1875,195.5781 1259.5,196.6484 Q1258.8125,197.7188 1258.8125,199.8125 Q1258.8125,201.9063 1259.5,202.9766 Q1260.1875,204.0469 1261.5313,204.0469 Q1262.1563,204.0469 1262.75,203.7734 Q1263.3438,203.5 1263.9688,202.9219 L1263.9688,205.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="147" x="1275" y="204.1543">SQLConnectionWrapper</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1247" x2="1424" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1247" x2="1424" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="149" x="1063" y="184"/><ellipse cx="1078" cy="200" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1080.9688,205.6406 Q1080.3906,205.9375 1079.75,206.0859 Q1079.1094,206.2344 1078.4063,206.2344 Q1075.9063,206.2344 1074.5859,204.5859 Q1073.2656,202.9375 1073.2656,199.8125 Q1073.2656,196.6875 1074.5859,195.0313 Q1075.9063,193.375 1078.4063,193.375 Q1079.1094,193.375 1079.7578,193.5313 Q1080.4063,193.6875 1080.9688,193.9844 L1080.9688,196.7031 Q1080.3438,196.125 1079.75,195.8516 Q1079.1563,195.5781 1078.5313,195.5781 Q1077.1875,195.5781 1076.5,196.6484 Q1075.8125,197.7188 1075.8125,199.8125 Q1075.8125,201.9063 1076.5,202.9766 Q1077.1875,204.0469 1078.5313,204.0469 Q1079.1563,204.0469 1079.75,203.7734 Q1080.3438,203.5 1080.9688,202.9219 L1080.9688,205.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="1092" y="204.1543">SQLRelDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1064" x2="1211" y1="216" y2="216"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1064" x2="1211" y1="224" y2="224"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="242" y="60"/><ellipse cx="257" cy="76" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M259.9688,81.6406 Q259.3906,81.9375 258.75,82.0859 Q258.1094,82.2344 257.4063,82.2344 Q254.9063,82.2344 253.5859,80.5859 Q252.2656,78.9375 252.2656,75.8125 Q252.2656,72.6875 253.5859,71.0313 Q254.9063,69.375 257.4063,69.375 Q258.1094,69.375 258.7578,69.5313 Q259.4063,69.6875 259.9688,69.9844 L259.9688,72.7031 Q259.3438,72.125 258.75,71.8516 Q258.1563,71.5781 257.5313,71.5781 Q256.1875,71.5781 255.5,72.6484 Q254.8125,73.7188 254.8125,75.8125 Q254.8125,77.9063 255.5,78.9766 Q256.1875,80.0469 257.5313,80.0469 Q258.1563,80.0469 258.75,79.7734 Q259.3438,79.5 259.9688,78.9219 L259.9688,81.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="271" y="80.1543">StubDataReader</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="243" x2="377" y1="92" y2="92"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="243" x2="377" y1="100" y2="100"/><rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="128" x="413" y="60"/><ellipse cx="428" cy="76" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M430.9688,81.6406 Q430.3906,81.9375 429.75,82.0859 Q429.1094,82.2344 428.4063,82.2344 Q425.9063,82.2344 424.5859,80.5859 Q423.2656,78.9375 423.2656,75.8125 Q423.2656,72.6875 424.5859,71.0313 Q425.9063,69.375 428.4063,69.375 Q429.1094,69.375 429.7578,69.5313 Q430.4063,69.6875 430.9688,69.9844 L430.9688,72.7031 Q430.3438,72.125 429.75,71.8516 Q429.1563,71.5781 428.5313,71.5781 Q427.1875,71.5781 426.5,72.6484 Q425.8125,73.7188 425.8125,75.8125 Q425.8125,77.9063 426.5,78.9766 Q427.1875,80.0469 428.5313,80.0469 Q429.1563,80.0469 429.75,79.7734 Q430.3438,79.5 430.9688,78.9219 L430.9688,81.6406 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="96" x="442" y="80.1543">StubDataWriter</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="414" x2="540" y1="92" y2="92"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="414" x2="540" y1="100" y2="100"/><path d="M624,356.203 C624,371.992 624,393.07 624,411.786 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="631,411.858,624,431.858,617,411.858,631,411.858" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1599,232.203 C1599,247.992 1599,269.07 1599,287.786 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1606,287.858,1599,307.858,1592,287.858,1606,287.858" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M396,480.203 C396,495.992 396,517.07 396,535.786 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="403,535.858,396,555.8582,389,535.858,403,535.858" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M148.894,232.202 C165.32,240.815 184.611,249.883 203,256 C307.554,290.779 432.315,310.771 518.749,321.436 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="519.738,314.504,538.768,323.823,518.08,328.405,519.738,314.504" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M820.433,232.171 C836.571,241.338 856.061,250.811 875,256 C938.532,273.408 957.719,255.18 1023,264 C1110.06,275.763 1208.89,299.019 1271.56,315.033 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1273.36,308.267,1290.96,320.056,1269.85,321.821,1273.36,308.267" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M609.513,232.203 C611.805,247.992 614.865,269.07 617.582,287.786 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="624.55,287.06,620.496,307.858,610.695,289.071,624.55,287.06" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M458.208,232.203 C489.118,250.809 532.227,276.758 566.74,297.533 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="570.368,291.547,583.894,307.858,563.148,303.541,570.368,291.547" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1247.35,89.716 C1321.21,96.418 1415.8,110.605 1440,140 C1472.77,179.804 1463.45,210.085 1440,256 C1430.37,274.864 1413.62,290.13 1396.3,301.895 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1399.73,308.001,1379.02,312.495,1392.41,296.068,1399.73,308.001" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M678.596,106.949 C641.84,116.443 597.541,126.501 557,132 C544.881,133.644 345.49,131.196 337,140 C301.213,177.112 305.555,215.144 337,256 C359.486,285.216 446.457,305.511 518.825,317.733 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="520.161,310.858,538.783,320.967,517.921,324.678,520.161,310.858" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M950,108.203 C950,123.992 950,145.07 950,163.786 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="957,163.858,950,183.858,943,163.858,957,163.858" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1335,232.203 C1335,247.992 1335,269.07 1335,287.786 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1342,287.858,1335,307.858,1328,287.858,1342,287.858" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1086.2,232.088 C1066.76,240.584 1044.17,249.604 1023,256 C925.299,285.514 810.535,305.948 729.232,318.136 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="730.117,325.081,709.313,321.057,728.085,311.229,730.117,325.081" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M300.334,108.112 C287.539,144.4 270.281,213.335 304,256 C330.576,289.627 436.025,309.95 518.703,321.009 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="519.683,314.077,538.633,323.558,517.907,327.964,519.683,314.077" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M541.293,104.231 C576.801,114.478 621.916,125.995 663,132 C686.324,135.409 853.172,131.101 875,140 C890.617,146.367 905.063,157.514 917.023,168.963 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="922.452,164.513,931.201,183.812,912.327,174.182,922.452,164.513" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1599,108.203 C1599,123.992 1599,145.07 1599,163.786 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1606,163.858,1599,183.858,1592,163.858,1606,163.858" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M603.896,480.203 C589.717,497.272 570.404,520.523 553.987,540.2879 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="559.217,544.9462,541.053,555.8582,548.448,536.0007,559.217,544.9462" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M629.856,480.203 C633.717,496.163 638.885,517.527 643.45,536.3922 " fill="none" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="650.26,534.773,648.159,555.8582,636.652,538.0651,650.26,534.773" style="stroke: #A80036; stroke-width: 1.0;"/></g></svg> \ No newline at end of file