<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://zine.net.pl/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>.NET to go</title><link>http://zine.net.pl/blogs/yoshi/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>WPF to Go: sposoby na zachowanie proporcji kontrolek</title><link>http://zine.net.pl/blogs/yoshi/archive/2008/05/11/wpf-to-go-sposoby-na-zachowanie-proporcji-kontrolek.aspx</link><pubDate>Sun, 11 May 2008 06:43:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:953</guid><dc:creator>yoshi</dc:creator><slash:comments>0</slash:comments><comments>http://zine.net.pl/blogs/yoshi/comments/953.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/yoshi/commentrss.aspx?PostID=953</wfw:commentRss><description>&lt;P&gt;Męczyłem się wczoraj z różnymi sposobami żeby kontrolka zachowywała ustalone proporcje. Sposobów w sumie będzie kilka, ale chyba tylko jeden wydaje mi utrzymywalny i daje efekt taki jakiego można się spodziewać. A więc dzisiaj będzie o "aspect ratio".&lt;BR&gt;&lt;BR&gt;Jeszcze słowem wstępu. Zmieniłem nazwę cyklu na WPF to Go (głównie żeby pasował do nazwy bloga na &lt;A href="http://zine.net/blogs/yoshi" target=_blank&gt;zine.net&lt;/A&gt;)&amp;nbsp;oraz pozbyłem się numeracji odcinków, żeby nie wprowadzać zamieszania. W międzyczasie dwa "odcinki" cyklu pojawiły się na spotkaniach &lt;A href="http://wg.net.pl/" target=_blank&gt;warszawskiej grupy .NET&lt;/A&gt;&amp;nbsp;(WG.NET): wykład o RoutedEvents, oraz godzinna klepanina kodu pt: zróbmy własny custom Panel (układanie kontrolek a'la wachlarz kart na ręku). RoutedEvents posiadam w wersji screencastowej ale bez dźwięku, który leży gdzieś tam i czeka na obrobienie przez życzliwą duszę (jeżeli masz doświadczenie w edycji audio i video zgłoś się do WG.NET - potrzebujemy Cię !!). Custom Panel najprawdopodobniej wrzucę tutaj jak tylko znajdę czas i natchnienie ;). Ok to zaczynamy.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Post widoczny również na &lt;A href="http://2-many.net/post/2008/05/WPF-to-Go-sposoby-na-zachowanie-proporcji-kontrolek.aspx"&gt;[2-many.net]&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Potrzebowałem aby Grid tudzież inna kontrolka zachowayała proporcje np aby boki miały długości w propocjach 3/2. Po kilku minutach znalazłem kontrolkę &lt;STRONG&gt;Viewbox&lt;/STRONG&gt;. Marzenie: w Viewboxa wrzucamy co nam się podoba (sztuk jeden)&amp;nbsp;i ustawiamy właściwość Stretch, która mówi czy zagnieżdżony element będzie zachowywał proporcje (Uniform) czy np. wypełniał całą dostępną przestrzeń (Fill) itp. Wygląda to mniej więcej tak&lt;BR&gt;&lt;/P&gt;&lt;FONT color=#a31515 size=3&gt;&lt;FONT color=#a31515 size=3&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Viewbox&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt; Stretch&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="Uniform"&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;
&lt;P&gt;&lt;FONT color=#008000&gt;&lt;FONT color=#008000&gt;&lt;FONT size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Jaka tam kontrolka --&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Viewbox&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=3&gt;&lt;FONT color=#0000ff size=3&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;Niestety jest jeden minus: to co jest w Viewboxie musi mieć wprost podane wymiary: Width i Height. Kłóci się to dla mnie z ideą WPF'a gdzie powinno się unikać takich manewrów. Ale spróbować warto. Wrzuciłem w Viewboxa Grida z ustawionymi rozmiarami 300 / 200, włączyłem gridline'y (&lt;STRONG&gt;ShowGridLines="True"&lt;/STRONG&gt;) i nacisnąłem F5. Zobaczyłem to:&lt;BR&gt;
&lt;DIV style="TEXT-ALIGN:center;"&gt;&lt;IMG height=355 alt="" src="http://2-many.net/image.axd?picture=WPFToGoAspectRatio-ViewBox.jpg" width=399&gt; &lt;/DIV&gt;&lt;BR&gt;&lt;STRONG&gt;Viewbox&lt;/STRONG&gt; powiększa / pomniejsza nie tylko kontrolkę, ale wszystko inne co ma rozmiar np: border'y, gridline'y i zapewne też paddingi i marginy. Słabe...&lt;BR&gt;&lt;BR&gt;Podejście drugie: odziedziczę jakiś tam mój panel po Gridzie, w metodzie &lt;STRONG&gt;MeasureOverride&lt;/STRONG&gt;&amp;nbsp; ustawię jeden z rozmiarów "na sztywno" na podstawie drugiego rozmiaru i jakiego DependencyProperty (właściwości) takiego jak "AspectRatio". Do moich celów by wystarczyło (przyjąłem że Grid ma być wyższy niż szerszy, więc Width byłoby wyliczane). Coś mi jednak mówiło, że musi być prostsza metoda... mam za każdym dziedziczyć kontrolkę kiedy chcę zrobić jakąś mini rzecz? To na pewno się da zrobić w XAML'u...&lt;BR&gt;&lt;BR&gt;Oczywiście,&amp;nbsp; że się da ;) Do pomocy przyszedł DataBinding i Convertery. Nie będę się teraz rozpisywał o DataBindingu bo przyjdzie na to czas - jest banalnie prosty. Może wyglądać mniej więcej tak:&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#a31515 size=3&gt;&lt;FONT color=#a31515 size=3&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Grid&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="PlayersLayout"&lt;/FONT&gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Width&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Binding&lt;/FONT&gt;&lt;/FONT&gt; &lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RelativeSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;={&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;RelativeSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt; self&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;},&lt;/FONT&gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Path&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;=ActualHeight,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mode&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;=OneWay&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=1&gt;}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=3&gt;&lt;FONT color=#0000ff size=3&gt;&lt;FONT size=1&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;BR&gt;&lt;STRONG&gt;RelativeSource&lt;/STRONG&gt; w Bindingu może wskazywać na dowolny element potomny czy poprzedzający w hierarchi kontrolek (np można użyć &lt;STRONG&gt;FindAncestor&lt;/STRONG&gt; zamiast self, który będzie szukać przodka). Użyłem &lt;STRONG&gt;self&lt;/STRONG&gt; czyli właśiwość Width będzie powiązana z inną właściwością Grid'a - podaje się ją jako &lt;STRONG&gt;Path&lt;/STRONG&gt; (w tym przypadku &lt;STRONG&gt;ActualHeight&lt;/STRONG&gt;). Bindowanie jest tylko w jedna stronę (tak na wszelki wypadek i żeby WPF się za bardzo nie męczył. Tym samym udało się spowodować że kontrolka zachowuje proporcje 1:1. W Path niestety nie można wpisać np &lt;STRONG&gt;ActualHeight * 2&lt;/STRONG&gt; ;) Do pomocy przychodzi interfejs &lt;STRONG&gt;IValueConverter&lt;/STRONG&gt;. &lt;BR&gt;&lt;BR&gt;Czasem zdarzy się że oprócz tego, że chcemy się zbindować do jakiejś wartości, będziemy ją chcieli przekonwertować (najprostszy przykład przekonwertować np typy). W tym celu należy zaimplementować IValueConverter z dwiema metodami &lt;STRONG&gt;Convert&lt;/STRONG&gt; i &lt;STRONG&gt;ConvertBack:&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;
&lt;DIV style="FONT-SIZE:11pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;[&lt;SPAN style="COLOR:#2b91af;"&gt;ValueConversion&lt;/SPAN&gt;(&lt;SPAN style="COLOR:blue;"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#2b91af;"&gt;Double&lt;/SPAN&gt;), &lt;SPAN style="COLOR:blue;"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#2b91af;"&gt;Double&lt;/SPAN&gt;))]&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;AspectRatioConverter&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;IValueConverter&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;{&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/SPAN&gt; IValueConverter Members&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; Convert(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; value, &lt;SPAN style="COLOR:#2b91af;"&gt;Type&lt;/SPAN&gt; targetType, &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; parameter, &lt;SPAN style="COLOR:#2b91af;"&gt;CultureInfo&lt;/SPAN&gt; culture)&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:#2b91af;"&gt;Double&lt;/SPAN&gt; num = (&lt;SPAN style="COLOR:#2b91af;"&gt;Double&lt;/SPAN&gt;)value;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (parameter != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;)&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; num /= System.&lt;SPAN style="COLOR:#2b91af;"&gt;Convert&lt;/SPAN&gt;.ToDouble(parameter, &lt;SPAN style="COLOR:#2b91af;"&gt;NumberFormatInfo&lt;/SPAN&gt;.InvariantInfo);&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; num;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; ConvertBack(&lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; value, &lt;SPAN style="COLOR:#2b91af;"&gt;Type&lt;/SPAN&gt; targetType, &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;object&lt;/SPAN&gt; parameter, &lt;SPAN style="COLOR:#2b91af;"&gt;CultureInfo&lt;/SPAN&gt; culture)&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:#2b91af;"&gt;Double&lt;/SPAN&gt; num = (&lt;SPAN style="COLOR:#2b91af;"&gt;Double&lt;/SPAN&gt;)value;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;if&lt;/SPAN&gt; (parameter != &lt;SPAN style="COLOR:blue;"&gt;null&lt;/SPAN&gt;)&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; num *= System.&lt;SPAN style="COLOR:#2b91af;"&gt;Convert&lt;/SPAN&gt;.ToDouble(parameter);&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR:blue;"&gt;return&lt;/SPAN&gt; num;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;SPAN style="COLOR:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;}&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/DIV&gt;&lt;BR&gt;Tak naprawdę wszystko co robią te metody to biorą jeden obiekt, mnożą go dzielą przez parametr i zwracają. Atrybut &lt;STRONG&gt;ValueConversion&lt;/STRONG&gt; nie jest niezbędny, ale zaleca się stosowanie go, aby inni wiedzieli jak go stosować i/lub podpowiadało nam VS&amp;nbsp;(w końcu metody przyjmują gołe obiekty). Najważniejsze w tym kodzie jest chyba ta linijka i NumberFormatInfo.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT size=1&gt;num /= System.&lt;SPAN style="COLOR:#2b91af;"&gt;Convert&lt;/SPAN&gt;.ToDouble(parameter, &lt;SPAN style="COLOR:#2b91af;"&gt;NumberFormatInfo&lt;/SPAN&gt;.InvariantInfo);&lt;/FONT&gt;&lt;/STRONG&gt; &lt;BR&gt;&lt;BR&gt;Oczywiście kiedy parametr w XAMLu przekazałem jako cyfrę 1.5 dostałem wyjątkiem FormatException (w końcu w Polsce używa się przecinka a nie kropki). Zmiana na przecinek oczywiście spowodowała, że rozwiązanie się nie kompilowało. Trzeba przekazać NumberFormatInfo.InvariantInfo (chociaż podejrzewałem że będzie przekazywany InvariantCulture domyślnie... widać nie).&lt;BR&gt;&lt;BR&gt;Żeby użyć naszego konwertera w XAMLu trzeba się trochę nagimnastykować. Trzeba stworzyć jego instancję i jakoś wykorzystać w XAML'u - służą do tego Resource'y (znowu&amp;nbsp; wybiegam trochę z cyklem ale co tam ;)). Najprościej będzie zrobić to np: w oknie, w którym Converter będzie użyty:&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;&lt;FONT size=1&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;&lt;FONT size=1&gt;Window&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;
&lt;P&gt;&lt;FONT size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=1&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;
&lt;P&gt;&lt;FONT size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;x&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;
&lt;P&gt;&lt;FONT size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;Class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="Zombiaki.App.MainWin"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;
&lt;P&gt;&lt;FONT size=1&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="Window"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT size=2&gt;xmlns&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;zombiaki&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="clr-namespace:Zombiaki.UI;assembly=Zombiaki.UI"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Window.Resources&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT size=2&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;zombiaki&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;AspectRatioConverter&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;Key&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="aspectRatio" /&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Window.Resources&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=3&gt;&lt;FONT color=#0000ff size=3&gt;&lt;FONT size=1&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;Po pierwsze należy zdefinować przestrzeń nazw xml'ową, wskazującą na przestrzeń nazw CLR'ową, a następnie przypisać jakiś klucz naszemu konwerterowi (Jeżeli ktoś się zastanawia co to za namespace: Zombiaki... to jest już inna historia, o której opowiadałem w czwartek na spotkaniu WG.NET ;)). Teraz w naszym Gridzie można zrobić tak (i w każdej innej kontrolce):&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#a31515 size=3&gt;&lt;FONT color=#a31515 size=3&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Grid&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt; x&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;:&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;Name&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="PlayersLayout"&lt;/FONT&gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Width&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;="{&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;Binding&lt;/FONT&gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RelativeSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;={&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;RelativeSource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt; self&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;},&lt;/FONT&gt;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Path&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;=ActualHeight,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mode&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;=OneWay,&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Converter&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;={&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;StaticResource&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt; aspectRatio&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;},&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT size=1&gt;&lt;FONT color=#ff0000&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConverterParameter&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;/FONT&gt;1&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;.&lt;/FONT&gt;&lt;/FONT&gt;2&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=1&gt;}"&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;&lt;FONT size=1&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;BR&gt;Do Bindigu dodajemy elementy &lt;STRONG&gt;Converter&lt;/STRONG&gt; (wskazujący na &lt;STRONG&gt;StaticResource&lt;/STRONG&gt;, który przed chwilą zdefiniowaliśmy) oraz &lt;STRONG&gt;ConverterParameter&lt;/STRONG&gt;, czyli nasz aspect ratio. &lt;BR&gt;&lt;BR&gt;Trochę wyprzedziłem cykl opowiadając o DataBindigu i Resource'ach - wydaje mi się jednak że jest to na tyle proste, że można się w tym połapać. Convertery są bardzo proste i bardzo potężne. W połączeniu z DataBindigiem dają nam naprawdę dużo możliwości. Zachęcam do eksperymentowania. &lt;img src="http://zine.net.pl/aggbug.aspx?PostID=953" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/WPF/default.aspx">WPF</category></item><item><title>WPF to Go: DependencyProperty</title><link>http://zine.net.pl/blogs/yoshi/archive/2008/02/17/pocz-tki-w-wpf-cz-2-dependencyproperty.aspx</link><pubDate>Sun, 17 Feb 2008 18:24:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:804</guid><dc:creator>yoshi</dc:creator><slash:comments>5</slash:comments><comments>http://zine.net.pl/blogs/yoshi/comments/804.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/yoshi/commentrss.aspx?PostID=804</wfw:commentRss><description>&lt;P&gt;&lt;IMG style="FLOAT:left;" src="http://zine.net.pl/photos/posts_pictures/images/805/original.aspx"&gt;Druga część serii o WPF trochę się opóźniła. Z Agnieszką reanimowaliśmy naszego &lt;A href="http://2-many.net"&gt;bloga&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Tym razem druga część cyklu&amp;nbsp;w postaci screencasta - z tego właśnie powodu umieściłem go na naszym prywatnym blogu, aby nie "zabić"&amp;nbsp;zine'a, który jakby nie patrzeć stoi koleżeńsko na darmowym hostingu. &lt;/P&gt;
&lt;P&gt;Temat screencasta: DependencyProperty. Czekam na komentarze i wybaczcie mój brak profesjonalizmu w tego typu prezentacjach :)&lt;/P&gt;
&lt;P&gt;Screencast do obejrzenia tutaj:&amp;nbsp;&lt;A href="http://2-many.net/post/2008/02/Poczatki-z-WPF-czesc-2-DependencyProperty.aspx"&gt;[http://2-many.net/post/2008/02/Poczatki-z-WPF-czesc-2-DependencyProperty.aspx]&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Załączniki: &lt;A href="http://zine.net.pl/files/folders/808/download.aspx"&gt;[FontSizeSample]&lt;/A&gt; | &lt;A href="http://zine.net.pl/files/folders/809/download.aspx"&gt;[SecurityFields]&lt;/A&gt;&lt;/P&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=804" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/WPF/default.aspx">WPF</category></item><item><title>WPF to Go część 1</title><link>http://zine.net.pl/blogs/yoshi/archive/2008/01/16/pocz-tki-z-wpf-cz-1.aspx</link><pubDate>Wed, 16 Jan 2008 21:10:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:737</guid><dc:creator>yoshi</dc:creator><slash:comments>1</slash:comments><comments>http://zine.net.pl/blogs/yoshi/comments/737.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/yoshi/commentrss.aspx?PostID=737</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;Minął długi czas odkąd cokolwiek pisałem na tym blogu. Nowy rok sprzyja postanowieniom, więc czas wcielić w życie pomysł, który kołatał mi się od dłuższego czasu po głowie. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;Szukając odskoczni od codziennej pracy z aplikacjami webowymi, postanowiłem poduczyć się trochę programowania aplikacji desktopowych za pomocą książki Charles’a Petzolda „Application = Code + Markup” (którą polecam). Zapraszam zatem do cyklu (mam nadzieję, że w miarę regularnego) artykułów o moich początkach z WPF.&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;WPF – tak w zasadzie to po co?&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;Windows Presentation Foundation &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;weszło w .NET 3.0 (trochę więcej o wpf na np.: &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa663364.aspx"&gt;&lt;FONT face=Calibri size=3&gt;http://msdn2.microsoft.com/en-us/library/aa663364.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;). Po co było wprowadzać coś nowego, jeżeli Windows Forms działały i miały się dobrze? XAML pozwala na odseparowanie designu aplikacji, od jego zachowania i programistycznych „bebechów”. Zdecydowany plus…, ale XAML mógł być równie dobrze dodany do Windows Forms. Po co więc nowe kontrolki, namespace’y, itd.? MS doszedł do wniosku (moim zdaniem słusznego), że to co było wcześniej jest niewystarczające dla tworzenia atrakcyjnie wyglądających (czy wręcz „fajerwerkowych”) aplikacji windowsowych. Oczywiście takie programy da się tworzyć bez WPF, ale nakład pracy w celu uzyskania takich samych efektów byłby naprawdę duży. WPF ma służyć głównie tworzeniu świetnie wyglądających aplikacji i ma w tym zadaniu pomagać programistom najlepiej jak można.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;Programowanie aplikacji tak, aby wyglądały dobrze u większości użytkowników wcale nie jest takie proste. Jeszcze kilka lat temu rozdzielczości ekranów spotykane u użytkowników były co najwyżej 2, 3 różne. Teraz mamy monitory do 20-kilku cali, panoramiczne, nie panoramiczne, laptopy duże, małe. Ta sama aplikacja może wyglądać całkowicie inaczej na dwóch różnych komputerach. Taka mała powtórka z rozrywki z tworzenia stron internetowych. Developerzy webowi mają do dyspozycji cssy, em-y, divy, itp., itd. i dają sobie radę tymi narzędziami. A co mamy dla windowsów?&lt;/FONT&gt;&lt;/P&gt;
&lt;H3 class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;Jeżeli nie piksele to co?&lt;/H3&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;Jak zaczynać to oczywiście od aplikacji Hello World :) Na jakiś czas nie będę sięgał do xaml’a i designera z Visual Studio czy Expression Blend’a. Pierwszy powód to taki, że uważam, iż warto wiedzieć, jak poradzić sobie bez xaml’a - czysto programistycznie i bez designerów (albo przynajmniej rozumieć, co nam maszyna wygenerowała). Drugi powód jest prosty… jestem jeszcze za „zielony” :) i po prostu uczę się w takiej kolejności jak w książce (najpierw „Code” potem „Markup”).&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Chciałem wyświetlić okno z tytułem Hello World, powiedzmy o wielkości 288x192, na środku ekranu. &lt;SPAN style="mso-ansi-language:EN-US;"&gt;Taki kod:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;DIV style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Title = &lt;SPAN style="COLOR:#a31515;"&gt;"Hello world!"&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Width = 320;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Height = 240;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Top = (&lt;SPAN style="COLOR:#2b91af;"&gt;SystemParameters&lt;/SPAN&gt;.WorkArea.Height - &lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Height) / 2&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; + &lt;SPAN style="COLOR:#2b91af;"&gt;SystemParameters&lt;/SPAN&gt;.WorkArea.Top;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Left = (&lt;SPAN style="COLOR:#2b91af;"&gt;SystemParameters&lt;/SPAN&gt;.WorkArea.Width - &lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Width) / 2&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; + &lt;SPAN style="COLOR:#2b91af;"&gt;SystemParameters&lt;/SPAN&gt;.WorkArea.Left;&lt;/P&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;Jeden rzut oka na intellisense w VS i widać że coś jest nie tak. Width i Height są podawane jako double a nie jako int. Odpowiedź jest prosta. Większość rozmiarów w WPF nie jest podawana w pikselach. Wysokość i szerokość podawana jest w niezależnych jednostkach. Jedna taka jednostka jest równa 1/96 cala (stąd podane przeze mnie rozmiary okna 288x192 to tak naprawdę 3 cale na 2 cale). Jeżeli w Windowsie jest ustawione skalowanie DPI na 96, wówczas podane wymiary będą równały się ilościom pikseli na ekranie. Podejście takie pozwala na uniezależnienie się od tego na jakim ekranie (czy urządzeniu) będzie wyświetlana aplikacja. Wbrew pozorom to już jest „problemem”. Dario&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;może potwierdzić. Dostał laptopa o rozdzielczości „Full HD” i nic na nim nie widział :) Zwiększenie DPI pomogło, ale niektóre aplikacje po prostu się „rozjechały”.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0cm 0cm 10pt;"&gt;&lt;SPAN style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:'Calibri','sans-serif';mso-ansi-language:PL;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Jeszcze jedno wyjaśnienie do kodu: aby wycentrować okno aplikacji użyłem użyłem &lt;SPAN style="COLOR:#2b91af;"&gt;SystemParameters&lt;/SPAN&gt;.WorkArea&lt;SPAN style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:'Calibri','sans-serif';mso-ansi-language:PL;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;, które zwraca prostokąt odpowiadający dostępnemu obszarowi dla aplikacji (ekran minus wszystkie taskbary, sidebary itp.).&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;H3&gt;Kolory&lt;/H3&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Takich nowośći w WPF jest więcej. Kolejna to – kolory. Przyzwyczajeni jesteśmy do podawania kolorów w skali RGB, czyli każdy ze składników w skali od 0 do 255. W WPF jest jeszcze możliwość podawania składowych czerwonego, zielonego i niebieskiego w liczbach rzeczywistych. Ta skala nazywa się scRGB – 0 scRGB odpowiada 0 w RGB, a 1 scRGB – 255 RGB. To co mi się podoba to bardziej naturalne (przynajmniej dla mnie) odwzorowanie skali kolorów tzn: 0.5-0.5-0.5 w skali scRGB jest subiektywnie w połowie między białym a czarnym – natomiast 127-127-127 RGB już nie bardzo :) scRGB ma lepiej odwzorowywać nieliniowość (trudne słowo) percepcji (jeszcze trudniejsze słowo) jasności i kolorów. Lepiej zobrazuje to pewnie poniższa tabela z książki Charles’a Petzolda:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;TABLE class=MsoTableLightShadingAccent4 style="BORDER-RIGHT:medium none;BORDER-TOP:medium none;BORDER-LEFT:medium none;BORDER-BOTTOM:medium none;BORDER-COLLAPSE:collapse;mso-border-top-alt:solid #8064A2 1.0pt;mso-border-top-themecolor:accent4;mso-border-bottom-alt:solid #8064A2 1.0pt;mso-border-bottom-themecolor:accent4;mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;" cellSpacing=0 cellPadding=0&gt;

&lt;TR style="mso-yfti-irow:-1;mso-yfti-firstrow:yes;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#8064a2 1pt solid;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#8064a2 1pt solid;BACKGROUND-COLOR:transparent;mso-border-top-themecolor:accent4;mso-border-bottom-themecolor:accent4;"&gt;
&lt;P style="mso-yfti-cnfc:5;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;scR/G/B&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#8064a2 1pt solid;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#8064a2 1pt solid;BACKGROUND-COLOR:transparent;mso-border-top-themecolor:accent4;mso-border-bottom-themecolor:accent4;"&gt;
&lt;P style="mso-yfti-cnfc:1;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;R/G/B&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:0;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:68;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;&amp;lt;= 0&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:64;"&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:1;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P style="mso-yfti-cnfc:4;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.1&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;89&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:2;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:68;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.2&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:64;"&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;124&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:3;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P style="mso-yfti-cnfc:4;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.3&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;149&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:4;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:68;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.4&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:64;"&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;170&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:5;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P style="mso-yfti-cnfc:4;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.5&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;188&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:6;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:68;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.6&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:64;"&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;203&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:7;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P style="mso-yfti-cnfc:4;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.7&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;218&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:8;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:68;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.8&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:64;"&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;231&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:9;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P style="mso-yfti-cnfc:4;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;0.9&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#f0f0f0;BACKGROUND-COLOR:transparent;"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;243&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="mso-yfti-irow:10;mso-yfti-lastrow:yes;"&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#8064a2 1pt solid;mso-border-bottom-themecolor:accent4;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:68;"&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;&amp;gt;= 1.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-RIGHT:#f0f0f0;PADDING-RIGHT:5.4pt;BORDER-TOP:#f0f0f0;PADDING-LEFT:5.4pt;BACKGROUND:#dfd8e8;PADDING-BOTTOM:0cm;BORDER-LEFT:#f0f0f0;WIDTH:230.3pt;PADDING-TOP:0cm;BORDER-BOTTOM:#8064a2 1pt solid;mso-border-bottom-themecolor:accent4;mso-background-themecolor:accent4;mso-background-themetint:63;"&gt;
&lt;P style="mso-yfti-cnfc:64;"&gt;&lt;SPAN style="FONT-SIZE:11pt;COLOR:#5f497a;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;mso-themecolor:accent4;mso-themeshade:191;"&gt;255&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Jak łatwo zauważyć w pierwszym i ostatnim wierszu są znaki większości i mniejszości. Jak się okazuje można podawać poszczególne składowe jako liczby ujemne i większe od 1 (w końcu mogą to być liczby rzeczywiste). Takie podejście ma umożliwić zdefiniowanie kolorów na inne urządzenia niż monitory, urządzenia które mogą wyświetlać więcej kolorów niż monitory. Trochę trudno mi to sobie wyobrazić, ale możliwość jest.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;W ramach zabawy WPF’em i przeglądania przykładów z książki zmodyfikowałem jeden z podanych tam programów. Tło aplikacji miało się zmieniać w zależności od położenia kursora względem środka okna. Poszczególne składowe koloru w skali scRGB.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Pominę fragment z obliczaniem odległości kursora od środka ekranu – matematykę miałem dawno ;) Najważniejsze linie kodu to.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;MARGIN-LEFT:36pt;TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;1.&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Ustawienia jako tła aplikacji SolidColorBrush&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;
&lt;P style="MARGIN:0px;"&gt;brush = &lt;SPAN style="COLOR:blue;"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;SolidColorBrush&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#2b91af;"&gt;Colors&lt;/SPAN&gt;.White);&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Background = brush;&lt;/P&gt;&lt;/DIV&gt;
&lt;P style="BACKGROUND:white;MARGIN-LEFT:36pt;TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;2.&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Zamiana właściwości Color tła oraz podmiana tytułu na pasku aplikacji&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;DIV style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:Courier New;"&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;float&lt;/SPAN&gt; scrgb = (&lt;SPAN style="COLOR:blue;"&gt;float&lt;/SPAN&gt;)(vectMouse.Length / ellipse.Length);&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;brush.Color = &lt;SPAN style="COLOR:#2b91af;"&gt;Color&lt;/SPAN&gt;.FromScRgb(1, scrgb, scrgb, scrgb);&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;this&lt;/SPAN&gt;.Title = &lt;SPAN style="COLOR:#2b91af;"&gt;String&lt;/SPAN&gt;.Format(&lt;SPAN style="COLOR:#a31515;"&gt;"scRGB: {0:F}"&lt;/SPAN&gt;, scrgb);&lt;/P&gt;&lt;/DIV&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Metoda FromScRGB jako pierwszy parametr przyjmuje wartość kanału Alpha czyli przezroczystości. Pełny kod tej małej aplikacji do ściągnięcia poniżej. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Najpiękniejsze jest to że po zamianie właściwości Color nic już nie muszę robić. Żadnego odświeżania czy odmalowywania okna – wszystko dzieje się „automagicznie” i wraz z poruszaniem myszką zmienia się szarość tła okna. &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;Dzieje się tak dzięki eventowi Changed, o którym pewnie kiedyś napiszę więcej. &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;W pasku tytułu okna pojawia się wyliczona wartość scRGB – zobaczcie, że po wejściu w jeden z rogów pojawi się liczba &amp;gt; 1. Niestety tło aplikacji bielsze już nie będzie :) (nawet jak potraktujemy je wiodącym proszkiem do prania ;) ).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;To by było na tyle tym razem. &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;Dla ciekawskich dorzucam jeszcze kod innej aplikacji, gdzie jako tło jest RadialBrush, a środek gradientu porusza się za myszką.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Źródła (razem z exe'kami):&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;MARGIN-LEFT:36pt;TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;1.&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Prosta aplikacja HelloWorld – &lt;A href="http://zine.net.pl/files/folders/734/download.aspx"&gt;[źródła]&lt;o:p&gt;&lt;/o:p&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;MARGIN-LEFT:36pt;TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;2.&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Tło aplikacji zmienia odcień pomiędzy kolorami białym i czarnym w zależności od położenia myszy – &lt;A href="http://zine.net.pl/files/folders/735/download.aspx"&gt;[źródła]&lt;o:p&gt;&lt;/o:p&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="BACKGROUND:white;MARGIN-LEFT:36pt;TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;mso-fareast-language:EN-US;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;3.&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-ascii-theme-font:minor-latin;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:'Times New Roman';mso-bidi-theme-font:minor-bidi;mso-fareast-language:EN-US;"&gt;Okrągły gradient w tle&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;porusza się za kursorem myszy –&lt;A href="http://zine.net.pl/files/folders/736/download.aspx"&gt; [źródła]&lt;o:p&gt;&lt;/o:p&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=737" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Firefox, DOM i textNode revisited</title><link>http://zine.net.pl/blogs/yoshi/archive/2007/04/06/firefox-dom-i-textnode-revisited.aspx</link><pubDate>Fri, 06 Apr 2007 12:29:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:92</guid><dc:creator>yoshi</dc:creator><slash:comments>3</slash:comments><comments>http://zine.net.pl/blogs/yoshi/comments/92.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/yoshi/commentrss.aspx?PostID=92</wfw:commentRss><description>Jeżeli ktoś czytał mój poprzedni wpis w blogu to wie, że ostatnio mocowałem się z firefoxem i javascript'em. Myślałem, że to koniec moich kłopotów. Ale miałem jeszcze jeden problem z opisywanym wcześniej firstChild. Ale od początku.&lt;br&gt;&lt;br&gt;Taki xml&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;table&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;tr&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;td&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;cos&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;td&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;tr&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;table&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;będzie w d DOM Insectorze widziany tak:&lt;br&gt;1. Element table&lt;br&gt;2. TextNode reprezentujący białe znaki&lt;br&gt;3. Element tr&lt;br&gt;4. TextNode reprezentujący białe znaki&lt;br&gt;5. Element td &lt;br&gt;... itd.&lt;br&gt;&lt;br&gt;W momencie kiedy dla elementu table będziemy chcieli wyciągnąć właściwość firstChild dostaniemy: w IE element tr, w Firefoxie TextNode.&lt;br&gt;&lt;br&gt;Problemu nie będzie jeżeli powyższy xml/html będzie wyglądał np. tak:&lt;br&gt;&lt;br&gt;&amp;lt;table&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;lt;tr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;lt;td&amp;gt;cos&amp;lt;/td&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;&amp;lt;/tr&lt;br&gt;&amp;gt;&amp;lt;/table&amp;gt;&lt;br&gt;&lt;br&gt;Lekko 'obrzydliwe'. Można też całkowicie wyrzucić białe znaki i znaki nowej linii.&lt;br&gt;&lt;br&gt;Więc jak szybko przejść do szukanego elementu w js? Wystarczy zawołać:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;tableEl.firstChild.nextSibling&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;który przejdzie do kolejnego elementu.&lt;br&gt;&lt;br&gt;Ale nie mamy pewności, że kolejnym elementem na pewno będzie szukany przez nas &amp;lt;tr&amp;gt; (może jakiś komentarz się trafi). Jak rozpoznać że dany element jest textNode'm. Pierwsze moje podejście było jak poniżej:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (tableEl.firstChild.construcor == Text)&lt;/span&gt;&lt;/code&gt; &lt;br&gt;&lt;br&gt;(lub też Element jak kto woli). Trafiłem chwilę później na ciekawą listę. Okazuje się, że każdy element ma właściwość nodeType:&lt;br&gt;&lt;br&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; Element Node&lt;br&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp; Attribute Node&lt;br&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp; Text Node&lt;br&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp; CDATA Section Node&lt;br&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp; Entity Reference Node&lt;br&gt;6&amp;nbsp;&amp;nbsp;&amp;nbsp; Entity Node&lt;br&gt;7&amp;nbsp;&amp;nbsp;&amp;nbsp; Processing Instruction Node&lt;br&gt;8&amp;nbsp;&amp;nbsp;&amp;nbsp; Comment Node&lt;br&gt;9&amp;nbsp;&amp;nbsp;&amp;nbsp; Document Node&lt;br&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp; Document Type Node&lt;br&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp; Document Fragment Node&lt;br&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp; Notation Node&lt;br&gt;&lt;br&gt;Ponieważ operacje robiłem w pętli, wystarczyło coś takiego:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;        &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;for&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;var&lt;/span&gt; k &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; thisRow.nextSibling; k !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; null; k &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; k.nextSibling)&lt;br /&gt;{&lt;br /&gt;     &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;// jeżeli to nie Element to idziemy dalej&lt;/span&gt;&lt;br /&gt;     &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;if&lt;/span&gt; (k.nodeType !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; 1) &lt;br /&gt;          &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;continue&lt;/span&gt;;&lt;br /&gt;     &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;/* tutaj robię co trzeba */&lt;/span&gt;&lt;br /&gt; }&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Mam nadzieję, że komuś się przyda&lt;br&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=92" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/Firefox/default.aspx">Firefox</category><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/DOM/default.aspx">DOM</category></item><item><title>IE Javascript vs Firefox Javascript</title><link>http://zine.net.pl/blogs/yoshi/archive/2007/04/02/IE-Javascript-vs-Firefox-Javascript.aspx</link><pubDate>Mon, 02 Apr 2007 11:00:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:83</guid><dc:creator>yoshi</dc:creator><slash:comments>1</slash:comments><comments>http://zine.net.pl/blogs/yoshi/comments/83.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/yoshi/commentrss.aspx?PostID=83</wfw:commentRss><description>Ostatnimi dniami spędziłem trochę czasu, na udrażnianiu aplikacji 'IE-specific' tak aby działała pod Firefoxem (o Operze na razie postanowiłem zapomnieć ;))&lt;br&gt;&lt;br&gt;Nie mówię tutaj o samym wyglądzie, css-ach itp. - to jest odrębna historia i już wiele o tym napisano. Ja męczyłem się głównie z javąscript. Ponieważ aplikacja była pisana z myślą tylko i wyłącznie o IE, autor/rzy używali specyficznych dla IE właściwości i metod - przyznaję przydatnych, ale oczywiście całkowicie niezgodnych ze wszystkimi standardami. W końcu zabrałem się za przepisanie tego kodu, tak aby działał pod IE - dużo ciekawych rzeczy się dowiedziałem i znalazłem parę ciekawych artykułów, którymi chciałem się podzielić.&lt;br&gt;&lt;br&gt;AJAX - takie modne ostatnio hasło to oczywiście nic innego niż JS i Xml po HTTP. Dzisiaj chyba mało kto wyłącza skrypty js w swojej przeglądarce (z drugiej strony zrobię kiedyś test i zobaczę ile serwisów przestanie chodzić ;)) Pierwszą rzeczą na jaką się natknąłem było właśnie wysyłanie Xml po HTTP.&lt;br&gt;&lt;br&gt;W IE użylibyśmy takiego kodu: &lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;ActiveXObject&lt;/span&gt;(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;"Microsoft.XMLHTTP"&lt;/span&gt;);&lt;/span&gt;&lt;/code&gt;. Żadna inna przeglądarka sama z siebie nie wspiera ActiveX - w Firefoxie należy użyć: &lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new XMLHttpRequest();&lt;/span&gt;&lt;/code&gt;. Co ciekawe w IE 7 też jest już to możliwe.&lt;br&gt;&lt;br&gt;Ale DOM, DOM'owi nierówny i Microsoft dorzucił od siebie kilka metod i właściwości, których nie znajdziemy w Firefoxie np. właściwości xml. Jak się można domyślić, właściwość ta przechowuje string'ową wersję dokumentu Xml.&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;var&lt;/span&gt; dom &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; new &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;ActiveXObject&lt;/span&gt;(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;"Microsoft.XMLHTTP"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;alert(dom.xml); &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;// to zadziała tylko pod IE&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;W Mozilli należy użyć XmlSerializer'a&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;            &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;var&lt;/span&gt; s &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; new XMLSerializer();&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;var&lt;/span&gt; str &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; s.serializeToString(dom);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Najwięcej grzebania miałem chyba przy event'ach, a raczej obiektem Event. Na początku zdarzenia w przeglądarce, to było tylko wywołanie jakiegoś kodu js, przy kliknięciu, najechaniu itp. Netscape dorzucił obiekt event, gdzie mamy dostęp do różnych ciekawych informacji. Warunek jest taki, że obiekt event musi być przekazany do funkcji jako parametr&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;td&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;onclick&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;="zrobCos(event)"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;...&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;td&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Microsoft 'wrzucił' event do obiektu window, tak więc mamy do niego dostęp zawsze i z każdego miejsca. Więc po co się trudzić i w zdarzeniach przekazywać dodatkowy parametr jeżeli będziemy mogli mieć do niego zawsze dostęp poprzez window.event. Na tym nie koniec rozbieżności, bo w Event'ie MS jest dużo więcej (albo inaczej ponazywane metody itd) np: ustawienie właściwości returnValue na false w IE spowoduje, że domyślny kod związany z tym zdarzeniem nie zostanie wykonany. W Mozilli należy samemu wywołać funkcję preventDefault() (podobnie jest z cancelBuble - w Mozilli nazywa się to stopPropagation() - poniżej w linkach możecie znaleźć całą listę rozbieżności pomiędzy tymi dwoma przeglądarkami).&lt;br&gt;&lt;br&gt;W momencie kiedy uporałem się z eventem, większość funkcjonalności zaczęła działać w obu przeglądarkach. To są naprawdę drobnostki, ale znalezienie ich zajęło mi kilka godzin (największy js miał kilka tysięcy linii kodu, a wiecie jak jest z debuggowaniem js'ów ;) )&lt;br&gt;&lt;br&gt;Kolejne zadanie - naprawienie AJAX'owego podmieniania kontrolek html'owych. Dla utrudnienia, zostało użyte własne rozwiązanie bazujące na podmianie właściwości outerHTML kontenera (np. jakiegoś div'a) z kontrolkami. No i oczywiście outerHTML jest IE specific (swoją drogą zaimplementowanie obsługi innerHTML w FF zostało wywalczone przez developerów). Tutaj z pomocą przyszła mi bardzo ciekawa strona http://webfx.eae.net/dhtml/ieemu/htmlmodel.html - jak się okazuje w FF każdy obiekt jest obiektem JS, czyli możemy dostać się do jego konstruktora, prototypu, w tym i do obiektu document (wolałem takie rozwiązanie niż zmieniać funkcję tak, żeby działała na innerHTML co na pewno odbiłoby się też na zmianach w layoucie). Żeby outerHTML zadziałał wystarczy zdefiniować odpowiedni setter i getter dla prototypu HTMLElement:&lt;br&gt;&lt;br&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;HTMLElement.&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;prototype&lt;/span&gt;.__defineSetter__(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;"outerHTML"&lt;/span&gt;, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;function&lt;/span&gt; (sHTML) { &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;/* tu ciało funkcji */&lt;/span&gt; });&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;br&gt;Warto zajrzeć na tę stronę - dostępna jest biblioteka IEEmu, która sprawia, że praktycznie wszystko działa w FF jak w IE - Event'y też.&lt;br&gt;Kolejna rzecz natomiast bardzo mnie zaskoczyła. Wydawało mi się, że wszystko już będzie działać w momencie kiedy mogłem dostać się do outerHTML. Po kolejnej sesji debuggowania, okazało się że: &lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;resp.documentElement.firstChild&lt;/span&gt;&lt;/code&gt; (gdzie resp to oczywiście jakiś obiekt DOM) w FF jest elementem typu Text (spodziewałem się jakiegoś elementu, zresztą serializacja do string'a nie pokazywała nic dziwnego). Cytując za http://developer.mozilla.org/pl/docs/DOM:element.firstChild :&lt;br&gt;&lt;br&gt;"Przeglądarki oparte o Gecko wstawiają do dokumentu węzły tekstowe
reprezentujące białe znaki w kodzie. Dlatego pierwsze dziecko elementu
może odnosić się do wstawionego węzła tekstowego, a nie elementu
określonego przez następny znacznik w źródle strony.".&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;Tak więc dla Firefoxa musiałem wywołać &lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;resp.documentElement.firstChild.nextSibling&lt;/span&gt;&lt;/code&gt;. Zadziałało :)&lt;br&gt;&lt;br&gt;Prawdopodobnie część z tych rzeczy jest oczywista dla kogoś kto pracuje dużo pod FF i IE - ja natomiast od dłuższego czasu spędzałem czas przy IE. Mam nadzieję, że ten artykuł pomoże komuś w walce z pisaniem aplikacji webowych na różne przeglądarki. Teraz obiecane linki:&lt;br&gt;&lt;br&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://developer.mozilla.org/pl/docs/DOM:element.firstChild"&gt;http://developer.mozilla.org/pl/docs/DOM:element.firstChild&lt;/a&gt; - dokumentacja dotycząca firstChild elemntów DOM&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.reloco.com.ar/mozilla/compat.html"&gt;http://www.reloco.com.ar/mozilla/compat.html&lt;/a&gt; - Making your web page compatible with Firefox - element po elemencie wymienione różnie między IE i Firefoxem&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javascriptkit.com/domref/domevent.shtml"&gt;http://www.javascriptkit.com/domref/domevent.shtml&lt;/a&gt; - trochę jeszcze więcej o event'ach w przeglądarkach&lt;/li&gt;&lt;li&gt;&lt;a href="http://webfx.eae.net/dhtml/ieemu/"&gt;http://webfx.eae.net/dhtml/ieemu/&lt;/a&gt; - emulacja IE w Firefoxie - gorąco polecam&lt;/li&gt;&lt;li&gt;&lt;a href="http://getfirebug.com/"&gt;http://getfirebug.com/&lt;/a&gt; - świetna wtyczka do Firefoxa - podgląda cssów, debuggowanie js, wszystko czego dusza zapragnie dla web developera pod FF.&lt;/li&gt;&lt;li&gt;&lt;a href="http://hopka.pl/z773"&gt;http://hopka.pl/z773&lt;/a&gt; - debuggowanie JS by Ziemowitem Skowroński.&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=83" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/Javascript/default.aspx">Javascript</category><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/przegl_0501_darki/default.aspx">przeglądarki</category><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/AJAX/default.aspx">AJAX</category></item><item><title>Sooda – proste i potężne narzędzie O/RM</title><link>http://zine.net.pl/blogs/yoshi/archive/2007/01/28/sooda-proste-i-pot-ne-narz-dzie-o-rm.aspx</link><pubDate>Sun, 28 Jan 2007 19:32:00 GMT</pubDate><guid isPermaLink="false">0de27b5c-4a0c-4e7a-8e19-9d082c99f8a3:49</guid><dc:creator>yoshi</dc:creator><slash:comments>1</slash:comments><comments>http://zine.net.pl/blogs/yoshi/comments/49.aspx</comments><wfw:commentRss>http://zine.net.pl/blogs/yoshi/commentrss.aspx?PostID=49</wfw:commentRss><description>&lt;h2&gt;Trochę teorii&lt;/h2&gt;

&lt;p class="MsoNormal"&gt;Dla tych, którzy nie spotkali się jeszcze z pojęciem O/RM
krótkie wyjaśnienie. Skrót oznacza Object-relational mapping. Narzędzia tej
klasy służą do odwzorowania relacyjnej bazy danych, na bliższe każdemu
programiście obiekty. Mapowanie odbywa się najczęsciej jako odworowanie definicji
klas na strukturę tabel, a każdy rekord takich tabel reprezentowany jest przez
konkretny obiekt. Jest kilka powodów, dla których warto zastanowić się nad
takim rozwiązaniem. W rozwiązaniach nie korzystających z O/RM, musimy używać
dwóch zupełnie różnych języków programowania, a kod, gdzie język obiektowy
przeplata się z SQL’em, jest ciężki do utrzymania i rozwijania, &lt;span&gt;&amp;nbsp;&lt;/span&gt;nie wspominając o debuggowaniu.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Narzędzia klasy O/RM pozwalają uprościć i
zautomatyzować proces rozwijania i utrzymywania aplikacji bazodanych.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Jednym z takich rozwiązań jest Sooda – Simple
Object Oriented Data Access, autorstwa Jarka Kowalskiego. &lt;/p&gt;

&lt;p class="MsoNormal"&gt;Sooda oparta jest na mechanizmie generacji kodu (o tym trochę
więcej za chwilę). W naturalny sposób odwzorowuje obiekty na tabele, wspiera
również kolekcje mapując je na relacje 1-N i M-N, dodatkowo umożliwiając
dziedziczenie i polimorfizm. Pozwala także osiągnąć wysoką wydajność, m.in poprzez
zaawansowane cache’owanie obiektów,&lt;span&gt;&amp;nbsp; &lt;/span&gt;"leniwe
ładowanie" (ang. lazy loading), itp. Cała konfiguracja natomiast przechowywana
jest w jednym miejscu, co jest dużą zaletą przy np. zapoznawaniu się z
aplikacją opartą na Soodzie.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Do tej pory największą bolączką Soody, był brak kompletnej
dokumentacji. Od paru dni na stronie domowej Soody, jest kompletna i bardzo
szczegółowa dokumentacja – link możecie znaleźć na końcu artykułu. Mam nadzieję, że
artykuł ten szczegółowo wyjaśni jak skonfigurować aplikację, żeby zaczęła
korzystać z Soody i krok po kroku wprowadzi Was w świat O/RM. Ponieważ
najlepiej uczyć się na przykładzie, stworzymy prostą ‘Wypożyczalnię Video’.
Osoby obecne na pierwszym spotkaniu Warszawskiej Grupie .NET&lt;span&gt;&amp;nbsp; &lt;/span&gt;z pewnością pamiętają ten przykład. Zacznijmy
więc od początku. &lt;/p&gt;

&lt;h2&gt;Konfiguracja aplikacji&lt;/h2&gt;

&lt;p class="MsoNormal"&gt;Na początek przyda nam się plik instalacyjny Soody, lub też
źródła (odpowiednie adresy na końcu). Mając przykładową bazę
danych:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;a href="http://zine.hostedwindows.pl/photos/posts_pictures/picture44.aspx" target="_blank"&gt;&lt;img src="http://zine.hostedwindows.pl/photos/posts_pictures/images/44/640x389.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;chcielibyśmy otrzymać strukturę klas odpowiadającą naszej
bazie danych taką, jak przedstawia nam diagram klas:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;a href="http://zine.hostedwindows.pl/photos/posts_pictures/picture45.aspx" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://zine.hostedwindows.pl/photos/posts_pictures/picture45.aspx" target="_blank"&gt;&lt;img src="http://zine.hostedwindows.pl/photos/posts_pictures/images/45/591x345.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Podczas
konfiguracji projektu będziemy korzystać z aplikacji SoodaStubGen, dostępnej w
pakiecie instalacyjnym Soody. Ten mały program ma za zadanie z dwóch plików
konfiguracyjnych *.soodaproject i schematu bazy danych w pliku XML, wygenerować
klasy odpowiadające naszej bazie. Użyteczną funkcją tego programu, jest to, że
potrafi zaktualizować projekt Visual Studio, dodając do odpowiedniego pliku
*.csproj wygenerowane pliki. Kod wygenerowany przez Soodę (może to być C#,
VB.NET, Boo i &lt;u&gt;teoretycznie&lt;/u&gt; każdy język wspierający generację kodu ze
struktur CodeDom) znajduje się głównie w tzw. Stubs’ach – zachęcam do
zerknięcia, co w tym pliku się znajduje. Dodatkowo SoodaStubGen generuje puste
klasy, w których będziemy umieszczać naszą logikę biznesową. Powyżej opisany
schemat tworzenia kodu wygląda mniej więcej tak:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;a href="http://zine.hostedwindows.pl/photos/posts_pictures/picture48.aspx" target="_blank"&gt;&lt;img src="http://zine.hostedwindows.pl/photos/posts_pictures/images/48/600x380.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Najwięcej pracy będziemy mieli przy tworzeniu pliku
SoodaSchema.xml, odpowiedzialnego za odwzorowanie klas na tabele w bazie danych.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Pierwszą rzeczą jaką musimy umieścić w tym
pliku, jest definicja źródła danych – w tej chwili jedynym wspieranym źródłem
jest relacyjna baza danych. Aby zdefiniować źródło danych należy na początku
pliku SoodaSchema.xml dodać element:&lt;br&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:maroon;"&gt;datasource&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:red;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;default&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Sooda.Sql.SqlDataSource&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Podstawową tabelą, którą będziemy używać w naszej
wypożyczalni jest tabela Video. Zmapujmy więc ją na interesującą nas
klasę tak jak poniżej &lt;span&gt;&lt;/span&gt;(pełne
mapowanie na końcu artykułu):&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Title&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Category&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoCategory&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;prefetch&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Status&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoStatus&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;prefetch&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;RentedOutTo&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;rented_out_to&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Customer&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;RentedDate&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;rented_date&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DateTime&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ReturnedDate&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;returned_date&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DateTime&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DirectedBy&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;director&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Artist&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;prefetch&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;YearOfProduction&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;year_of_production&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt; Podstawowym elementem jest &lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;class&lt;/span&gt; oparty na jednej lub
wielu tabelach (możliwe jest również oparcie wielu klas na jednej tabeli) w
bazie danych o nazwie „Video” (&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:maroon;"&gt;table&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:red;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;).&lt;/span&gt;&lt;/span&gt;
Każdej kolumnie w tabeli odpowiada jedna właściwość:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:maroon;"&gt;field&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:red;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;RentedDate&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;rented_date&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DateTime&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Każda taka właściwość&lt;span&gt;&amp;nbsp;
&lt;/span&gt;ma oznaczony typ, zazwyczaj taki jak typ w bazie danych, nazwę –
niekoniecznie taką samą i atrybut mówiący czy kolumna może być pusta. Poniżej wymieniono
najczęściej spotykane typy pól (są też inne np. typ Image – zachęcam do lektury
dokumentacji)&lt;/p&gt;

&lt;p class="ListParagraphCxSpPierwsze" style="margin-left:38.25pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;String
- dodatkowo należy wyspecyfikować parametr&lt;/span&gt; &lt;span style="font-size:10pt;font-family:'Courier New';color:red;"&gt;size&lt;/span&gt; &lt;span style="font-size:11pt;font-family:Calibri;"&gt;dla właściwości&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="ListParagraphCxSpDrugie" style="margin-left:38.25pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;Integer
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="ListParagraphCxSpDrugie" style="margin-left:38.25pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;DateTime&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="ListParagraphCxSpNazwisko" style="margin-left:38.25pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;BooleanAsInteger
– bardzo ciekawy typ, w bazie danych reprezentowany jako int (o wartości 1 lub
0), natomiast właściwość będzie przedstawiona jako typ boolean.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Przynajmniej jedna z właściwości musi być kluczem głównym (&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"). &lt;/span&gt;Sooda
wspiera również złożone klucze główne.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;Jak łatwo na pełnym mapowaniu część właściwości ma zdefiniowany
parametr &lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:red;"&gt;references.&lt;/span&gt; Użycie
go, spowoduje wygenerowanie właściwości&lt;span&gt;&amp;nbsp;
&lt;/span&gt;będącej referencją do innej klasy – czyli tak naprawdę klucza obcego np.
&lt;span&gt;&amp;nbsp;&lt;/span&gt;w klasie Video, właściwość Status jest
tak naprawdę referencją do klasy VideoStatus. &lt;/p&gt;

&lt;p class="MsoNormal"&gt;Sooda wspiera również kolekcje jeden do wielu i wiele do wielu.
Te pierwsze definiuje się poprzez element:&lt;/p&gt;

&lt;p class="ListParagraph" style="text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;collectionOneToMany&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt; -&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt; &lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;reprezentowana jako referencja i kolekcja (np.
dla klasy Video zdefiniowana jest kolekcja przetrzymująca hisorię wypożyczeń
(VideoHistory)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormalCxSpPierwsze" style="margin:0cm 0cm 0.0001pt 36pt;text-indent:-18pt;line-height:normal;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;·&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;collectionManyToMany&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;gt;&lt;/span&gt; -&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt; &lt;/span&gt;reprezentowana
jako para kolekcji - dla Video jest to kolekcja aktorów, przypisanych do filmu
(Actors2Video). W odróżeniu od klas, relacja jest przedstawiona w pliku
mapującym, jako &lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;relation&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;gt;&lt;/span&gt;, gdzie klucze główne są referencjami &lt;/p&gt;

&lt;p class="MsoNormalCxSpDrugie" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Przypuśćmy, że chcielibyśmy, aby&lt;span&gt;&amp;nbsp; &lt;/span&gt;w naszej aplikacji oprócz danych klientów,
przetrzymywać również dane pracowników, którzy mogliby wypożyczać filmy po
specjalnych cenach. Aby nie dublować funkcjonalności w dwóch różnych obiektach
(klient i pracownik). Najrozsądniejszym rozwiązaniem jest dziedziczenie klasy
pracownik z klasy klient, lub stworzenie klasy abstrakcyjnej, z której
dziedziczyłyby te dwie. Sooda wspomaga nas przy takich zadaniach, umożliwiając
zdefinowanie pola (selektora), które będzie używane do odróżniania konkretnych
podklas danej klasy. Najlepiej to zrozumieć na przykładzie naszej aplikacji.
Klasa Person ma zdefniowany selektor: &lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:red;"&gt;subclassSelectorField&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;Type&lt;/span&gt;". &lt;/span&gt;Na podstawie wartości pola Type,
rekord z bazy danych będzie zwrócony jako obiekt tej, albo innej klasy. Klasy Customer
i Employee dziedziczą z&lt;span&gt;&amp;nbsp; &lt;/span&gt;klasy Person (&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:red;"&gt;inheritFrom&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;"&lt;span style="color:blue;"&gt;Person&lt;/span&gt;&lt;/span&gt;") na
podstawie różnych wartości pola Type (wartość zdefiniowana przez atrybut&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt; &lt;span style="color:red;"&gt;subclassSelectorValue &lt;/span&gt;&lt;/span&gt;klasy).
Klasa , która nie ma zdefinowanego subclassSelectorValue, będzie klasą
abstrakcyjną.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Ostatnią rzeczą, o której chciałbym wspomnieć , są obiekty
wyróźnione. Prawdziwą udręką podczas rozwijania aplikacji jest moment, gdy
podczas przeglądania zapytania do bazy danych, nie pamiętamy co oznacza wartość
1 czy 2 w polu Status – trzeba przegrzebywać się przez ustalenia, dokumentację,
czasem przeglądać zawartość bazy danych. Obiekty wyróżnione mają nam w tym
pomóc. Wystarczy zdefiniować dla klasy odpowiednie elementy &lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:maroon;"&gt;const&lt;/span&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';color:blue;"&gt;&amp;gt; &lt;/span&gt;mówiące, że rekord z tabeli, np. VideoStatus &lt;span&gt;&amp;nbsp;&lt;/span&gt;o kluczu głównym 1 oznacza film wypożyczony
(RentedOut). &lt;span&gt;&amp;nbsp;&lt;/span&gt;Od tej pory będzie można
poprzez proste wywołanie w kodzie, wyciągnąć ten rekord, w celu użycia go w
zapytaniu, porównaniu, itp – ale o tym za chwilę. &lt;/p&gt;

&lt;h2&gt;Generowanie kodu&lt;/h2&gt;

&lt;p class="MsoNormal"&gt;Mamy już więc&lt;span&gt;&amp;nbsp; &lt;/span&gt;plik
mapujący. W tym momencie będziemy potrzebować SoodaStubGen.exe. Zadaniem tego
programu jest wygenerowanie na podstawie przygotowanego przez nas pliku,
odpowiednich klas, z właściwościami, kolekcjami, obiektami wyróżnionymi itp.
oraz wygenerowanie pustych klas, w których umieszczać będziemy całą funkcjonalność.
SoodaStubGen ma wiele parametrów wywołania. Zamiast podawania długiej komendy
łatwiej&lt;span&gt;&amp;nbsp; &lt;/span&gt;będzie przygotować plik
*.soodaproject – mały pliku xml, w którym zostaną umieszczone te parametry. Dzięki
niemu będzie nam łatwiej przekonfigurowywać aplikację. Zawartość przykładowego
pliku wygląda np tak:&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:maroon;"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;utf-8&lt;/span&gt;"&lt;span style="color:blue;"&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;sooda-project&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://www.sooda.org/schemas/SoodaProject.xsd&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;schema-file&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;SoodaSchema.xml&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;schema-file&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;c#&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;language&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;output-namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;VideoRental&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;output-namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;output-path&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;.&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;output-path&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;nullable-representation&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;SqlType&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;nullable-representation&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;not-null-representation&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Raw&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;not-null-representation&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;with-indexers&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;false&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;with-indexers&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;with-typed-queries&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;with-typed-queries&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;embedded-schema-type&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Binary&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;embedded-schema-type&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;external-projects&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;project&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;vs2005&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;file&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoRental.csproj&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;external-projects&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;sooda-project&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt; Najważniejsze z&lt;span&gt;&amp;nbsp; &lt;/span&gt;parametrów:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;schema-file – nazwa pliku mapującego;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;language – język w którym kod zostanie
wygenerowany (C# jest moim zdaniem najlepszym rozwiązaniem, gdyż tylko ten
język pozwala na zastosowanie zapytań typowanych, o których za chwilkę opowiem);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;output-namespace – przestrzeń nazw dla
wygenerowanych klas;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;output-path – miejsce, w którym pliki zostaną
zapisane;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;nullable-representation – reprezentacja
właściwości mogących przyjmować wartość NULL. Możliwe jest użycie:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:'Courier New';"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:11pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; o&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;Boxed – w tym przypadku tracimy informacje o
typie, a właściwości będą zwracane jako typ object,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;











&lt;p class="ListParagraphCxSpDrugie" style="margin-left:72pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:'Courier New';"&gt;&lt;span&gt;o&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;SqlType – użycie specjalnych typów z
przestrzeni nazw System.Data.SqlTypes,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="ListParagraphCxSpDrugie" style="margin-left:72pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:'Courier New';"&gt;&lt;span&gt;o&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;Raw – dane są przetrzymywane jako
‘standardowe’ typy,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="ListParagraphCxSpDrugie" style="margin-left:72pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:'Courier New';"&gt;&lt;span&gt;o&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;Nullable – użyte będą typy Nullable z .NET 2.0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="ListParagraphCxSpDrugie" style="margin-left:72pt;text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:'Courier New';"&gt;&lt;span&gt;o&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;RawWithIsNull – rozszerzenie opcji Raw. Dla
każdej właściwości zostaną wygenerowane metody IsNull zwracające wartość prawda
/ fałsz. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;not-null-representation – podobnie jak wyżej,
tym razem dla właściwości nienullowalnych;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;with-indexers – włącza lub wyłącza, indeksery
dla wygenerowanych list;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;with-typed-queries – włącza lub wyłącza
używanie zapytań typowanych;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:11pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;external-projects – pozwala zaktualizować
pliki projektów VS2005 i VS2003 o wygenerowane pliki&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;







&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Teraz musimy uruchomić SoodaStubGen podając jako parametr
nazwę naszego pliku *.soodaproject. Zalecane jest ustawienie w projekcie Visual
Studio w &lt;i&gt;pre-build-event command line&lt;/i&gt;
wywołania SoodaStubGen np. w ten sposób:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span&gt;$(SolutionDir)\Sooda\SoodaStubGen.exe
$(ProjectDir)VideoRental.soodaproject&lt;/span&gt;&lt;/i&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Spowodouje to wywołanie SoodaStubGen z podktalogu Sooda, a
jako parametr należy podajć plik VideoRental.soodaproject z katalogu projektu Wygenerowanie
w ten sposób kodu, spowoduje wyświetlenie ostrzeżenia w Visual Studio, że plik
projektu został zmieniony i należy go ponownie załadować. Dwie rzeczy, na które
warto zwrócić uwagę:&lt;/p&gt;

&lt;p class="ListParagraphCxSpPierwsze" style="text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;&lt;span&gt;1.&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;SoodaStubGen
rozpoznaje, czy plik mapujący się zmienił – wówczas generuje jeszcze raz plik /
pliki szkieletowe. Nie rozpoznaje jednak czy zmienił się plik *.soodaproj. W
przypadku, gdy zmienimy coś w tym pliku, najlepiej jest zapisać plik
mapującytak, aby zmieniła się data ostatniej modyfikacji pliku.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="ListParagraphCxSpNazwisko" style="text-indent:-18pt;"&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;&lt;span&gt;2.&lt;span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;font-size-adjust:none;font-stretch:normal;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:Calibri;"&gt;SoodaStubGen
potrafi dodawać nowo wygenerowane pliki do pliku projektu Visual Studio –
jednak, co jest oczywiste, nie potrafi tych plików usuwać, w momencie gdy
zrezygnujemy z jakiejś klasy lub zmienimy jej nazwę. Wówczas musimy taki plik
usunąć ręcznie.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Zostały nam jeszcze dwie rzeczy do zrobienia - zdefiniowane connectionString
i wskazanie, z jakiego schematu mapowania będzie korzystać Sooda. Wskazanie
łańcucha połączeniowego może być zrobione na wiele sposobów - najprostszym
będzie wykorzystanie pliku konfiguracyjnego App.config, lub specjalnego pliku
Sooda.config.xml. W pierwszym przypadku wystarczy App.config uzupełnić o
poniższą zawartość:&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&amp;lt;!-- Wersja dla App.config --&amp;gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;default.connectionString&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integrated Security=true;Server=.;Database=MyDatabase&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;add&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;default.sqlDialect&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;mssql&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;appSettings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&amp;lt;!-- Wersja dla Sooda.config.xml --&amp;gt;
&lt;/div&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Integrated Security=true;Server=.;Database=MyDatabase&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;connectionString&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;sqlDialect&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mssql&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;sqlDialect&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;default&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p class="MsoNormal"&gt;W drugim przypadku możemy wszystkie Soodowe
ustawienia trzymać w oddzielnym pliku xml. Aby go użyć, należy w pliku
AssemblyInfo.cs dodać tę linijkę:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;[assembly: &lt;span style="color:teal;"&gt;SoodaConfig&lt;/span&gt;(XmlConfigFileName
= &lt;span style="color:maroon;"&gt;"Sooda.config.xml"&lt;/span&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Na Rysunku powyżej pokazana jest przykładowa zawartość tego pliku,
ustawiająca connectionString. W samej konfiguracji możemy definiować jeszcze
wiele parametrów dla naszej aplikacji, jak dialekt sql (specyficzne dla silnika
bazodanego generowanie sql'a), rodzaj bazy danych, itp. Wskazanie schematu
mapowania jest potrzebne dla prawidłowego działania Soody. Znów mamy możliwość
zrobienia tego na kilka sposobów. Ponownie najprościej będzie dodać do
AssemblyInfo.cs tę linijkę:&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;line-height:115%;font-family:'Courier New';"&gt;[assembly: &lt;span style="color:teal;"&gt;SoodaStubAssembly&lt;/span&gt;(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(MojaPrzestrzenNazw.&lt;span style="color:teal;"&gt;_DatabaseSchema&lt;/span&gt;))]&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;Programowanie z użyciem Soody&lt;/h2&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;W momencie wygenerowania
klas, pozostaje nam tylko zakodowanie funkcjonalności naszej aplikacji. Na
początku może zróbmy coś prostego:&lt;span&gt;&amp;nbsp; &lt;/span&gt;wypiszmy
na ekran wszystkie filmy video, które mamy w bazie(skrypt zakładający bazę i
wypełniający ją przykładowymi danymi znajdziecie pod jednym z linków podanych na końcu). W tym celu użyjemy metody, którą posiadają wszystkie obiekty
Soodowe: GetList. Po pierwsze, aby używać Soody, musimy stworzyć transakcję –
wszystkie obiekty żyją tylko w obrębie transakcji, wszelkie operacje na
obiektach po jej zakończeniu mogą skutkować wyjątkiem. Utworzenie transakcji
jest proste – wystarczy użyć poniższej składni:&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; (&lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt;
t = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt;())
{ &lt;span style="color:green;"&gt;/* nasz kod */ &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Jak więc z tabeli Video pobrać
wszystkie rekordy i wypisać np tytuł razem z rokiem produkcji? Nic prostszego:&lt;/p&gt;









&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;br&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; (&lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt;
t = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // SQL:
select * from Video;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;VideoList&lt;/span&gt;
list = &lt;span style="color:teal;"&gt;Video&lt;/span&gt;.GetList(&lt;span style="color:blue;"&gt;true&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;













&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:teal;"&gt;Video&lt;/span&gt; v &lt;span style="color:blue;"&gt;in&lt;/span&gt; list)&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="color:teal;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:maroon;"&gt;"Tytuł
{0}, Rok produkcji: {1}\n"&lt;/span&gt;,&lt;span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;v.Title, v.YearOfProduction);&lt;o:p&gt;&lt;/o:p&gt;&lt;span&gt;&lt;br&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;br&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;





&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Wykorzystaliśmy tutaj
właśnie metodę GetList. Przekazany parametr &lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;true&lt;/span&gt; pobierze wszystkie rekordy bez jakiegokolwiek zawężania listy.
Każda klasa Soodowa ma odpowiadającą mu klasę KlasaList, posiadającą
standardowe metody spotykane w listach, takie jak Add, Remove, Contains, a
także kilka innych użytecznych metod.&lt;br&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Załóżmy, że chcielibyśmy
zawęzić nasze poszukiwania do filmów wypożyczonych, które mają w tytule
‘Harry’. Wystarczy znów użyć metody GetList, tym razem jako parametr podając
wyrażenie zawężające listę:&lt;/p&gt;







&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;text-indent:35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;br&gt;VideoList&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt; list = &lt;span style="color:teal;"&gt;Video&lt;/span&gt;.GetList(&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VideoField&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;.Title.Like(&lt;span style="color:maroon;"&gt;"Harry%"&lt;/span&gt;) &amp;amp;&amp;amp;&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; VideoField&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.Status
== &lt;span style="color:teal;"&gt;VideoStatus&lt;/span&gt;.RentedOut);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Jako parametr użyliśmy
tutaj zapytań typowanych (dostępnych tylko dla języka C#). Podobnie jak w
przypadku list, tak i tutaj, dla każdej klasy generowane są dodatkowe
KlasaField – używane właśnie w tego rodzaju zapytaniach. Budowanie zapytania,
wygląda jak budowanie zwykłego warunku logicznego. Co ciekawe, w dowolny sposób
możemy przechodzić po właściwościach obiektów, np.warunek:&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;VideoField&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.Status == &lt;span style="color:teal;"&gt;VideoStatus&lt;/span&gt;.RentedOut &lt;/span&gt;(zwróćcie uwagę na
użycie obiektu wyróżnionego VideoStatus.RentedOut)&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;można również zapisać w
ten sposób:&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;VideoField&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.Status.Name == &lt;span style="color:maroon;"&gt;"Rented Out"&lt;/span&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;W przypadku zapytań
typowanych w bonusie dostajemy IntelliSense w VS podczas budowania zapytań
(przy dostępie do metod i właściwości, IntelliSense jest oczywiście dostępny
dla każdego języka), a także jak sama nazwa wskazuje kontrolę typów na poziomie
kompilacji. W innych językach, które wspiera Sooda, jak też i C#, można użyć
zapytań nietypowanych:&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;// do zapytań nietypowanych używamy SoodaWhereClause&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:teal;"&gt;VideoList&lt;/span&gt; list = &lt;span style="color:teal;"&gt;Video&lt;/span&gt;.GetList(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;SoodaWhereClause&lt;/span&gt;(&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:maroon;"&gt;"Title like {0} and Status == {1}"&lt;/span&gt;,&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:maroon;"&gt;"HarryPotter"&lt;/span&gt;, &lt;span style="color:teal;"&gt;VideoStatus&lt;/span&gt;.Available)&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;);&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;





&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Zróbmy coś więcej.
Wypiszmy wszystkie filmy, w których gra Emma Watson. Można zrobić to na dwa
sposoby. Pierwszy sposób to pobranie odpowiedniego obiektu typu Artist i
wyświetlenie wszystkich filmów z kolekcji powiązanej z tą aktorką. Problem jest
taki, że w tym momencie w pliku mapującym dla klasy Artist nie mamy
zdefiniowanej takiej kolekcji. Musimy dodać tę definicję kolekcji do klasy&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; Artist:&lt;o:p&gt;&lt;br&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:maroon;"&gt;collectionManyToMany&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt; &lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:red;"&gt;name&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;=&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;"&lt;span style="color:blue;"&gt;Videos&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;relation&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Actor2Video&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;masterField&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Po skompilowaniu
projektu, możemy użyć następującego kodu:&lt;/p&gt;





&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:blue;"&gt;using&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt; (&lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt;
t = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt;())&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:green;"&gt;// Szukamy Emmy Watson&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:teal;"&gt;Artist&lt;/span&gt; emmaWatson = &lt;span style="color:teal;"&gt;Artist&lt;/span&gt;.LoadSingleObject(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin:0cm 0cm 0.0001pt 35.4pt;text-indent:35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;ArtistField&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.Name == &lt;span style="color:maroon;"&gt;"Emma Watson"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:teal;"&gt;Video&lt;/span&gt;
v &lt;span style="color:blue;"&gt;in&lt;/span&gt; emmaWatson.Videos)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:green;"&gt;// wypisanie Danych&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;LoadSingleObject pobiera
z bazy danych pojedynczy obiekt. Jeżeli żaden obiekt nie będzie odpowiadał
podanym warunkom, zostanie zwrócony null, jeżeli więcej niż jeden - zostanie zgłoszony
wyjątek. Drugim sposobem jest pobranie tych obiektów typu&lt;span&gt;&amp;nbsp; &lt;/span&gt;Video, które w kolecji aktorów, zawierają
szukanego przez nas artystę:&lt;/p&gt;











&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;text-indent:35.4pt;line-height:normal;"&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;br&gt;Artist&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt; emmaWatson = &lt;span style="color:teal;"&gt;Artist&lt;/span&gt;.LoadSingleObject(&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArtistField&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;.Name == &lt;span style="color:maroon;"&gt;"Emma Watson"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;br&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt;VideoList&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';color:teal;"&gt; list = &lt;span style="color:teal;"&gt;Video&lt;/span&gt;.GetList(&lt;o:p&gt;&lt;/o:p&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VideoField&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Courier New';"&gt;.Actors.Contains(emmaWatson));&lt;o:p&gt;&lt;br&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Niżej można zobaczyć
jeszcze bardziej rozbudowane zawężenie listy:&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:teal;"&gt;VideoList&lt;/span&gt; list = &lt;span style="color:teal;"&gt;Video&lt;/span&gt;.GetList(&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:teal;"&gt;VideoField&lt;/span&gt;.YearOfProduction &amp;gt;= 2000&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp; &lt;span style="color:teal;"&gt;VideoField&lt;/span&gt;.YearOfProduction &amp;lt;= 2004&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp; &lt;span style="color:teal;"&gt;VideoField&lt;/span&gt;.Status == &lt;span style="color:teal;"&gt;VideoStatus&lt;/span&gt;.RentedOut&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp; &lt;span style="color:teal;"&gt;VideoField&lt;/span&gt;.RentedOutTo.Email.Like(&lt;span style="color:maroon;"&gt;"%@customer.com"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp; &lt;span style="color:teal;"&gt;VideoField&lt;/span&gt;.DirectedBy.Name.Like(&lt;span style="color:maroon;"&gt;"Chris%"&lt;/span&gt;)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp; &lt;span style="color:teal;"&gt;VideoField&lt;/span&gt;.History.Count &amp;gt; 1);&lt;/p&gt;
&lt;/div&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span&gt;&lt;/span&gt;Dużo mówimy tu o pobieraniu obiektów, a co z
tworzeniem nowych? Chcemy dodać nowy film, razem z aktorami. Nic prostszego –
wystarczy stworzyć tylko obiekt w transakcji Soodowej, a następnie taką
transakcje zapisąc, przy użyciu metody Commit(), &lt;span&gt;&amp;nbsp;&lt;/span&gt;tak jak tutaj:&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt; t = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;SoodaTransaction&lt;/span&gt;())&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:teal;"&gt;Artist&lt;/span&gt; emmaWatson = &lt;span style="color:teal;"&gt;Artist&lt;/span&gt;.LoadSingleObject(&lt;span style="color:teal;"&gt;ArtistField&lt;/span&gt;.Name == &lt;span style="color:maroon;"&gt;"Emma Watson"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:teal;"&gt;Video&lt;/span&gt; v = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;Video&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.Title = &lt;span style="color:maroon;"&gt;"Harry Potter i Czara Ognia"&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.Status = &lt;span style="color:teal;"&gt;VideoStatus&lt;/span&gt;.Available;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.YearOfProduction = 2005;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v.Actors.Add(emmaWatson);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// ten warunek zwróci nam właśnie utworzony film&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:teal;"&gt;VideoList&lt;/span&gt; v = v.GetList(&lt;span style="color:teal;"&gt;VideoField&lt;/span&gt;.Title == &lt;span style="color:maroon;"&gt;"Harry Potter i Czara Ognia"&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// commitujemy transakcję&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.Commit();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;} &lt;/p&gt;
&lt;/div&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span&gt; &lt;/span&gt;Bardzo interesujące jest to, że przed zapisaniem
transakcji , możemy utworzony obiekt już pobrać. Z pewnością część z Was zauważyła,
że nie podajemy jawnie klucza głównego dla tego filmu. Sooda domyślnie sama
generuje poprawne klucze główne, przechowując je w specjalnej tabeli KeyGen o
strukturze takiej jak na tutaj:&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;a href="http://zine.hostedwindows.pl/photos/posts_pictures/picture46.aspx" target="_blank"&gt;&lt;img src="http://zine.hostedwindows.pl/photos/posts_pictures/images/46/original.aspx" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;Uaktualnienie rekordu, jest równie proste
– wystarczy nadać nowe wartości właściwościom.&lt;span&gt;&amp;nbsp;
&lt;/span&gt;Natomiast aby usunąć biekt należy wywołać metodę MarkForDelete(). &lt;span style="font-size:10pt;font-family:'Courier New';"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;Krótkie podsumowanie&lt;/h2&gt;

&lt;p class="MsoNormal"&gt;Nie zdołaliśmy nawet zacząć się przekopywać przez
funkcjonalność drzemiącą w Soodzie. Nie wykorzystaliśmy np. triggerów – metod
pełniących tę samą funkcję co triggery w bazie danych. Zainteresowanych, a mam
nadzieję, że tacy będą po przeczytaniu tego artykułu, odsyłam do dokumentacji.
Na sam koniec chciałem przedstawić pomocnika, który ma automatycznie tworzyć
plik mapujący, plik konfiguracyjny *.soodaproj i zaktualizowanie projektu
Visual Studio. Po zainstalowaniu Soody 1.0 w Menu Start, będziemy mogli dodać
Soodę do projektu Visual Studio 2005. Po wybraniu tej opcji, uruchomi się mały
wizard, prowadzący nas za rękę po konfiguracji Soody&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://zine.hostedwindows.pl/photos/posts_pictures/picture47.aspx" target="_blank"&gt;&lt;/a&gt;&lt;a href="http://zine.hostedwindows.pl/photos/posts_pictures/picture47.aspx" target="_blank"&gt;&lt;img src="http://zine.hostedwindows.pl/photos/posts_pictures/images/47/592x443.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Po co więc ten rozbudowany artykuł? Program nie wygeneruje pliku
mapującego z dziedziczeniem, czy obiektami wyróżnionymi – a z pewnością warto
wiedzieć jak ten plik zmieniać. Życzę miłej zabawy i pracy z Soodą. Nie
zniechęcajcie się – czas poświęcony na konfigurację aplikacji i&lt;span&gt;&amp;nbsp; &lt;/span&gt;poznanie Soody zostanie Wam zwrócony z nawiązką
podczas tworzenia aplikacji.&lt;/p&gt;&lt;p style="font-weight:bold;" class="MsoNormal"&gt;Użyteczne linki:&lt;/p&gt;&lt;p style="font-weight:bold;" class="MsoNormal"&gt;&lt;span style="font-weight:normal;"&gt;1. Strona domowa Soody z pełną dokumentacją i plikami instalacyjnymi: http://sooda.org&lt;/span&gt;&lt;br style="font-weight:normal;"&gt;&lt;span style="font-weight:normal;"&gt;2. Prezentacja Jarka Kowalskiego na temat Soody razem z przykładowym kodem: http://svn.sooda.org/repos/sooda/trunk/presentations/&lt;/span&gt;&lt;br style="font-weight:normal;"&gt;&lt;span style="font-weight:normal;"&gt;3. Repozytorium Soody: http://svn.sooda.org/repos/sooda/ &lt;/span&gt;&lt;/p&gt;&lt;p style="font-weight:bold;" class="MsoNormal"&gt;Pełny schemat mapowania:&lt;/p&gt;&lt;div style="background:white none repeat scroll 0% 50%;font-family:Courier New;font-size:10pt;color:black;-moz-background-clip:-moz-initial;-moz-background-origin:-moz-initial;-moz-background-inline-policy:-moz-initial;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;schema&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://www.sooda.org/schemas/SoodaSchema.xsd&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;datasource&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;default&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Sooda.Sql.SqlDataSource&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Title&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Category&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoCategory&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;prefetch&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Status&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoStatus&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;prefetch&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;RentedOutTo&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;rented_out_to&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Customer&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;RentedDate&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;rented_date&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DateTime&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ReturnedDate&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;returned_date&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DateTime&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DirectedBy&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;director&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Artist&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;prefetch&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;YearOfProduction&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;year_of_production&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;collectionOneToMany&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;History&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoHistory&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;foreignField&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;collectionManyToMany&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Actors&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;relation&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Actor2Video&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;masterField&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;0&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Person&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span style="color:red;"&gt;subclassSelectorField&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Type&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Person&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Type&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Name&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span style="color:red;"&gt;inheritFrom&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Person&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span style="color:red;"&gt;subclassSelectorValue&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Employee&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Login&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Edward&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Admin&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Customer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span style="color:red;"&gt;inheritFrom&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Person&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;/span&gt;&lt;span style="color:red;"&gt;subclassSelectorValue&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Customer&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Email&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Address&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoHistory&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoHistory&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;52&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;53&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;video_id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;54&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Person&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;person_id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Person&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;onDelete&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Cascade&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;55&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;TimeStamp&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;time_stamp&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;DateTime&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;56&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ActionType&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;action_type&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoHistoryActionType&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;57&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Comment&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;58&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;59&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;60&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;61&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoCategory&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;62&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoCategory&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;63&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;64&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Name&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;65&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;66&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;67&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;68&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoStatus&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;69&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoStatus&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;70&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;71&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Name&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;72&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;73&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;RentedOut&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;74&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Available&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;75&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Damaged&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;3&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;76&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Lost&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;4&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;77&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;78&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;79&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoHistoryActionType&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;VideoHistoryActionType&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;81&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;82&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Name&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;83&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;84&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;RentedOut&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;85&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Returned&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;86&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Lost&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;3&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;87&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Damaged&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;4&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;88&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Created&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;5&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;89&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Deactivated&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;6&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;90&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;91&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;92&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Artist&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;93&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Artist&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;94&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;primaryKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;true&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;95&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Name&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;String&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;nullable&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;false&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;96&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;97&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ChuckNorris&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;98&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ValKilmer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;99&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;const&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;OmarSharif&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;key&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;3&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;100&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;101&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;102&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;relation&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Actor2Video&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;103&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Actor2Video&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;104&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Actor&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;actor_id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Artist&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;105&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;field&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;dbcolumn&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;video_id&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Integer&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;references&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Video&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;106&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;107&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;relation&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;108&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;109&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;schema&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p style="font-weight:bold;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://zine.net.pl/aggbug.aspx?PostID=49" width="1" height="1"&gt;</description><category domain="http://zine.net.pl/blogs/yoshi/archive/tags/Sooda/default.aspx">Sooda</category></item></channel></rss>