diff options
author | Sumy Joseph | 2012-10-10 23:51:12 +0000 |
---|---|---|
committer | Roberto E. Escobar | 2012-10-10 23:51:12 +0000 |
commit | deeca56703b9059e6223bc94267ada8ba8c5b2f8 (patch) | |
tree | 8433529db57c3d891c1b8add4c1f551567add9c9 | |
parent | c7735b0e46808a8c006ce8f2f75808f120677259 (diff) | |
download | org.eclipse.osee-deeca56703b9059e6223bc94267ada8ba8c5b2f8.tar.gz org.eclipse.osee-deeca56703b9059e6223bc94267ada8ba8c5b2f8.tar.xz org.eclipse.osee-deeca56703b9059e6223bc94267ada8ba8c5b2f8.zip |
feature[bgz_391218]: Add project management burndown report
21 files changed, 6452 insertions, 0 deletions
diff --git a/plugins/org.eclipse.osee.reports.burndown/.classpath b/plugins/org.eclipse.osee.reports.burndown/.classpath new file mode 100644 index 00000000000..ad32c83a788 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/.classpath @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath> diff --git a/plugins/org.eclipse.osee.reports.burndown/.project b/plugins/org.eclipse.osee.reports.burndown/.project new file mode 100644 index 00000000000..8fb813712bc --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/.project @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.osee.reports.burndown</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> diff --git a/plugins/org.eclipse.osee.reports.burndown/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.reports.burndown/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..c90dccf37da --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/META-INF/MANIFEST.MF @@ -0,0 +1,29 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Burndown +Bundle-SymbolicName: org.eclipse.osee.reports.burndown;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Activator: org.eclipse.osee.reports.burndown.Activator +Bundle-Vendor: BOSCH +Require-Bundle: org.eclipse.ui, + org.eclipse.birt.report.viewer, + org.eclipse.birt.chart.engine, + org.eclipse.osee.ats, + org.eclipse.osee.framework.core, + org.eclipse.osee.framework.logging, + org.eclipse.osee.framework.skynet.core, + org.eclipse.osee.framework.ui.plugin, + org.eclipse.osee.framework.ui.swt, + org.eclipse.osee.framework.ui.skynet, + org.eclipse.osee.reports.efficiency, + org.eclipse.osee.reports.split, + org.eclipse.osee.ats.core.client, + org.eclipse.osee.ats.api, + org.eclipse.osee.ats.core, + org.eclipse.osee.framework.core.model, + org.eclipse.ui.forms +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-ActivationPolicy: lazy +Export-Package: org.eclipse.osee.reports.burndown.hours, + org.eclipse.osee.reports.burndown.issues, + org.eclipse.osee.reports.burndown.ui diff --git a/plugins/org.eclipse.osee.reports.burndown/build.properties b/plugins/org.eclipse.osee.reports.burndown/build.properties new file mode 100644 index 00000000000..bcaa80baf7d --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/build.properties @@ -0,0 +1,6 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + reports/ diff --git a/plugins/org.eclipse.osee.reports.burndown/plugin.xml b/plugins/org.eclipse.osee.reports.burndown/plugin.xml new file mode 100644 index 00000000000..eed550bec3f --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/plugin.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.4"?> +<plugin> + <extension + point="org.eclipse.osee.ats.AtsNavigateItem"> + <AtsNavigateItem + classname="org.eclipse.osee.reports.burndown.ui.ProjectModuleReports"> + </AtsNavigateItem> + </extension> + +</plugin> diff --git a/plugins/org.eclipse.osee.reports.burndown/reports/HourBurndown.rptdesign b/plugins/org.eclipse.osee.reports.burndown/reports/HourBurndown.rptdesign new file mode 100644 index 00000000000..cac6322463b --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/reports/HourBurndown.rptdesign @@ -0,0 +1,2713 @@ +<?xml version="1.0" encoding="UTF-8"?> +<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.22" id="1"> + <property name="createdBy">Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110913-1734></property> + <property name="units">in</property> + <property name="iconFile">/templates/blank_report.gif</property> + <property name="bidiLayoutOrientation">ltr</property> + <property name="imageDPI">72</property> + <data-sources> + <script-data-source name="Hour Burndown Data source" id="71"/> + <script-data-source name="Issue Burndown Data Source" id="98"/> + </data-sources> + <data-sets> + <script-data-set name="Hour Burndown Data Set" id="72"> + <list-property name="resultSetHints"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">HoursWorked</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">HoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">IdealHoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + </list-property> + <list-property name="columnHints"> + <structure> + <property name="columnName">Date</property> + <text-property name="displayName">Date</text-property> + </structure> + <structure> + <property name="columnName">HoursWorked</property> + <text-property name="displayName">Hours Worked</text-property> + </structure> + <structure> + <property name="columnName">HoursRemaining</property> + <text-property name="displayName">Hours Remaining</text-property> + </structure> + <structure> + <property name="columnName">IsActualData</property> + <text-property name="displayName">Is Actual Data ?</text-property> + </structure> + <structure> + <property name="columnName">IdealHoursRemaining</property> + <text-property name="displayName">Ideal Hours Remaining</text-property> + </structure> + <structure> + <property name="columnName">BurndownRate</property> + <text-property name="displayName">Burndown Rate</text-property> + </structure> + </list-property> + <structure name="cachedMetaData"> + <list-property name="resultSet"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">HoursWorked</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">HoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">IdealHoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + </list-property> + </structure> + <property name="dataSource">Hour Burndown Data source</property> + <method name="open"><![CDATA[importPackage(Packages.org.eclipse.core.runtime); + +myBundle = Platform.getBundle("org.eclipse.osee.reports.burndown"); + +count = 0; + +/* load data reader class */ +readerClass = myBundle.loadClass("org.eclipse.osee.reports.burndown.hours.HourBurndownModel"); + +/* create new instance of DataReader */ +readerInstance = readerClass.newInstance(); + +log = readerInstance.getLog(); +entries = log.getEntries();]]></method> + <method name="fetch"><![CDATA[ + +if(count < entries.size()){ +row["Date"] = entries.get(count).getDate(); +row["HoursWorked"] = entries.get(count).getHoursWorked(); +row["HoursRemaining"] = entries.get(count).getHoursRemaining(); +row["IsActualData"] = entries.get(count).isActualData(); +row["IdealHoursRemaining"] = entries.get(count).getIdealHoursRemaining(); +row["BurndownRate"] = entries.get(count).getBurndownRate(); +count++; +return true; +} + +return false; +]]></method> + </script-data-set> + <script-data-set name="Issue Burndown Data Set" id="99"> + <list-property name="resultSetHints"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date-time</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">IssuesClosed</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">IssuesRemaining</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IdealIssuesRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + </list-property> + <list-property name="columnHints"> + <structure> + <property name="columnName">Date</property> + <text-property name="displayName">Date</text-property> + </structure> + <structure> + <property name="columnName">IssuesClosed</property> + <text-property name="displayName">Issues Closed</text-property> + </structure> + <structure> + <property name="columnName">IssuesRemaining</property> + <text-property name="displayName">Issues Remaining</text-property> + </structure> + <structure> + <property name="columnName">IdealIssuesRemaining</property> + <text-property name="displayName">Ideal Issues Remaining</text-property> + </structure> + <structure> + <property name="columnName">BurndownRate</property> + <text-property name="displayName">Burndown rate</text-property> + </structure> + <structure> + <property name="columnName">IsActualData</property> + <text-property name="displayName">Is Actual Data</text-property> + </structure> + </list-property> + <structure name="cachedMetaData"> + <list-property name="resultSet"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date-time</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">IssuesClosed</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">IssuesRemaining</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IdealIssuesRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + </list-property> + </structure> + <property name="dataSource">Issue Burndown Data Source</property> + <method name="open"><![CDATA[importPackage(Packages.org.eclipse.core.runtime); + +myBundle = Platform.getBundle("org.eclipse.osee.reports.burndown"); + +count = 0; + +/* load data reader class */ +readerClass = myBundle.loadClass("org.eclipse.osee.reports.burndown.issues.IssueBurndownModel"); + +/* create new instance of DataReader */ +readerInstance = readerClass.newInstance(); + +log = readerInstance.getLog(); +entries = log.getEntries();]]></method> + <method name="fetch"><![CDATA[ + +if(count < entries.size()){ +row["Date"] = entries.get(count).getDate(); +row["IssuesClosed"] = entries.get(count).getIssuesClosed(); +row["IssuesRemaining"] = entries.get(count).getIssuesRemaining(); +row["IsActualData"] = entries.get(count).isActualData(); +row["IdealIssuesRemaining"] = entries.get(count).getIdealIssuesRemaining(); +row["BurndownRate"] = entries.get(count).getBurndownRate(); +count++; +return true; +} + +return false; +]]></method> + </script-data-set> + </data-sets> + <styles> + <style name="report" id="4"> + <property name="fontFamily">sans-serif</property> + <property name="fontSize">10pt</property> + </style> + <style name="crosstab-cell" id="5"> + <property name="borderBottomColor">#CCCCCC</property> + <property name="borderBottomStyle">solid</property> + <property name="borderBottomWidth">1pt</property> + <property name="borderLeftColor">#CCCCCC</property> + <property name="borderLeftStyle">solid</property> + <property name="borderLeftWidth">1pt</property> + <property name="borderRightColor">#CCCCCC</property> + <property name="borderRightStyle">solid</property> + <property name="borderRightWidth">1pt</property> + <property name="borderTopColor">#CCCCCC</property> + <property name="borderTopStyle">solid</property> + <property name="borderTopWidth">1pt</property> + </style> + <style name="crosstab" id="6"> + <property name="borderBottomColor">#CCCCCC</property> + <property name="borderBottomStyle">solid</property> + <property name="borderBottomWidth">1pt</property> + <property name="borderLeftColor">#CCCCCC</property> + <property name="borderLeftStyle">solid</property> + <property name="borderLeftWidth">1pt</property> + <property name="borderRightColor">#CCCCCC</property> + <property name="borderRightStyle">solid</property> + <property name="borderRightWidth">1pt</property> + <property name="borderTopColor">#CCCCCC</property> + <property name="borderTopStyle">solid</property> + <property name="borderTopWidth">1pt</property> + </style> + </styles> + <page-setup> + <simple-master-page name="Simple MasterPage" id="2"> + <page-footer> + <text id="3"> + <property name="contentType">html</property> + <text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property> + </text> + </page-footer> + </simple-master-page> + </page-setup> + <body> + <extended-item extensionName="Chart" id="97"> + <xml-property name="xmlRepresentation"><![CDATA[<model:ChartWithAxes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:attribute="http://www.birt.eclipse.org/ChartModelAttribute" xmlns:data="http://www.birt.eclipse.org/ChartModelData" xmlns:layout="http://www.birt.eclipse.org/ChartModelLayout" xmlns:model="http://www.birt.eclipse.org/ChartModel" xmlns:type="http://www.birt.eclipse.org/ChartModelType"> + <Version>2.5.1</Version> + <Type>Line Chart</Type> + <SubType>Overlay</SubType> + <Description> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Description> + <Block> + <Children xsi:type="layout:TitleBlock"> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>0.0</Width> + <Height>0.0</Height> + </Bounds> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Visible>true</Visible> + <Label> + <Caption> + <Value>Hour Burndown</Value> + <Font> + <Size>16.0</Size> + <Bold>true</Bold> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>true</Visible> + </Label> + </Children> + <Children xsi:type="layout:Plot"> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>0.0</Width> + <Height>0.0</Height> + </Bounds> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Visible>true</Visible> + <HorizontalSpacing>5</HorizontalSpacing> + <VerticalSpacing>5</VerticalSpacing> + <ClientArea> + <Outline> + <Style>Solid</Style> + <Thickness>0</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>0.0</Left> + <Bottom>0.0</Bottom> + <Right>0.0</Right> + </Insets> + </ClientArea> + </Children> + <Children xsi:type="layout:Legend"> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>0.0</Width> + <Height>0.0</Height> + </Bounds> + <Anchor>West</Anchor> + <Stretch>Both</Stretch> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Dash_Dotted</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </Outline> + <Visible>true</Visible> + <ClientArea> + <Outline> + <Style>Solid</Style> + <Thickness>0</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>2.0</Top> + <Left>2.0</Left> + <Bottom>2.0</Bottom> + <Right>2.0</Right> + </Insets> + </ClientArea> + <Text> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Text> + <Orientation>Horizontal</Orientation> + <Direction>Top_Bottom</Direction> + <Separator> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </Separator> + <Position>Below</Position> + <ItemType>Series</ItemType> + <Title> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Title> + <TitlePosition>Above</TitlePosition> + </Children> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>573.75</Width> + <Height>360.75</Height> + </Bounds> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Visible>true</Visible> + </Block> + <Dimension>Two_Dimensional</Dimension> + <Units>Points</Units> + <SeriesThickness>10.0</SeriesThickness> + <ExtendedProperties> + <Name>enable.area.alt</Name> + <Value>false</Value> + </ExtendedProperties> + <SampleData> + <BaseSampleData> + <DataSetRepresentation>01/05/2000,02/01/2000,04/12/2000,03/12/2000,02/29/2000</DataSetRepresentation> + </BaseSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>6,4,12,8,10</DataSetRepresentation> + <SeriesDefinitionIndex>0</SeriesDefinitionIndex> + </OrthogonalSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>12.0,8.0,24.0,16.0,20.0</DataSetRepresentation> + <SeriesDefinitionIndex>1</SeriesDefinitionIndex> + </OrthogonalSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>18.0,12.0,36.0,24.0,30.0</DataSetRepresentation> + <SeriesDefinitionIndex>2</SeriesDefinitionIndex> + </OrthogonalSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>24.0,16.0,48.0,32.0,40.0</DataSetRepresentation> + <SeriesDefinitionIndex>3</SeriesDefinitionIndex> + </OrthogonalSampleData> + <AncillarySampleData> + <DataSetRepresentation>Series 1</DataSetRepresentation> + </AncillarySampleData> + </SampleData> + <Interactivity/> + <EmptyMessage> + <Caption> + <Value>This chart contains no data.</Value> + <Font> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>64</Transparency> + <Red>127</Red> + <Green>127</Green> + <Blue>127</Blue> + </Background> + <Outline> + <Color> + <Transparency>128</Transparency> + <Red>127</Red> + <Green>127</Green> + <Blue>127</Blue> + </Color> + <Visible>true</Visible> + </Outline> + <Insets> + <Top>10.0</Top> + <Left>10.0</Left> + <Bottom>10.0</Bottom> + <Right>10.0</Right> + </Insets> + <Visible>false</Visible> + </EmptyMessage> + <Axes> + <Type>DateTime</Type> + <Title> + <Caption> + <Value>X-Axis Title</Value> + <Font> + <Size>14.0</Size> + <Bold>true</Bold> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Title> + <TitlePosition>Below</TitlePosition> + <AssociatedAxes> + <Type>Linear</Type> + <Title> + <Caption> + <Value>Y-Axis Title</Value> + <Font> + <Size>14.0</Size> + <Bold>true</Bold> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + <Rotation>90.0</Rotation> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Title> + <TitlePosition>Left</TitlePosition> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["HoursRemaining"]</Definition> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Hours Remaining</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Translucent>false</Translucent> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + </Series> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </SeriesDefinitions> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["HoursWorked"]</Definition> + <Grouping> + <Enabled>true</Enabled> + <GroupType>Text</GroupType> + <AggregateExpression>RunningSum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Hours Worked</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + <Curve>false</Curve> + </Series> + </SeriesDefinitions> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["IdealHoursRemaining"]</Definition> + <Grouping> + <Enabled>false</Enabled> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Ideal Line</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + </Series> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </SeriesDefinitions> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["BurndownRate"]</Definition> + <Grouping> + <Enabled>false</Enabled> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Burndown Rate</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + </Series> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </SeriesDefinitions> + <Orientation>Vertical</Orientation> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Visible>true</Visible> + </LineAttributes> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>true</Visible> + </Label> + <LabelPosition>Left</LabelPosition> + <MajorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>true</Visible> + </TickAttributes> + </MajorGrid> + <MinorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </TickAttributes> + </MinorGrid> + <Scale> + <MinorGridsPerUnit>5</MinorGridsPerUnit> + </Scale> + <Origin> + <Type>Min</Type> + <Value xsi:type="data:NumberDataElement"> + <Value>0.0</Value> + </Value> + </Origin> + <PrimaryAxis>true</PrimaryAxis> + <Percent>false</Percent> + </AssociatedAxes> + <AncillaryAxes> + <Type>Text</Type> + <Title> + <Caption> + <Value>Z-Axis Title</Value> + <Font> + <Size>14.0</Size> + <Bold>true</Bold> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Title> + <TitlePosition>Below</TitlePosition> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>166</Green> + <Blue>218</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>242</Red> + <Green>88</Green> + <Blue>106</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>232</Red> + <Green>172</Green> + <Blue>57</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <SeriesIdentifier></SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Outside</LabelPosition> + <Stacked>false</Stacked> + </Series> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </SeriesDefinitions> + <Orientation>Horizontal</Orientation> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Visible>true</Visible> + </LineAttributes> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>true</Visible> + </Label> + <LabelPosition>Below</LabelPosition> + <MajorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>true</Visible> + </TickAttributes> + </MajorGrid> + <MinorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </TickAttributes> + </MinorGrid> + <Scale> + <MinorGridsPerUnit>5</MinorGridsPerUnit> + </Scale> + <Origin> + <Type>Min</Type> + <Value xsi:type="data:NumberDataElement"> + <Value>0.0</Value> + </Value> + </Origin> + <PrimaryAxis>true</PrimaryAxis> + <Percent>false</Percent> + </AncillaryAxes> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["Date"]</Definition> + </DataDefinition> + <SeriesIdentifier></SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Outside</LabelPosition> + <Stacked>false</Stacked> + </Series> + <Grouping> + <Enabled>false</Enabled> + <GroupingUnit>Years</GroupingUnit> + <GroupingInterval>1.0</GroupingInterval> + <GroupType>DateTime</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + <Sorting>Ascending</Sorting> + <SortKey> + <Definition>row["Date"]</Definition> + </SortKey> + </SeriesDefinitions> + <Orientation>Horizontal</Orientation> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Visible>true</Visible> + </LineAttributes> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>true</Visible> + </Label> + <LabelPosition>Below</LabelPosition> + <MajorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>true</Visible> + </TickAttributes> + </MajorGrid> + <MinorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </TickAttributes> + </MinorGrid> + <Scale> + <MinorGridsPerUnit>2</MinorGridsPerUnit> + <ShowOutside>false</ShowOutside> + <MajorGridsStepNumber>1</MajorGridsStepNumber> + </Scale> + <Origin> + <Type>Min</Type> + <Value xsi:type="data:NumberDataElement"> + <Value>0.0</Value> + </Value> + </Origin> + <PrimaryAxis>true</PrimaryAxis> + <CategoryAxis>true</CategoryAxis> + <Percent>false</Percent> + </Axes> + <Orientation>Vertical</Orientation> + <UnitSpacing>50.0</UnitSpacing> + <Rotation> + <Angles> + <XAngle>-20.0</XAngle> + <YAngle>45.0</YAngle> + <ZAngle>0.0</ZAngle> + <Type>None</Type> + </Angles> + </Rotation> + <ReverseCategory>false</ReverseCategory> +</model:ChartWithAxes> +]]></xml-property> + <property name="outputFormat">SVG</property> + <property name="inheritColumns">true</property> + <property name="pageBreakAfter">always</property> + <structure name="toc"> + <expression name="expressionValue" type="javascript">"Hour Burndown"</expression> + </structure> + <property name="dataSet">Hour Burndown Data Set</property> + <property name="height">5.010416666666667in</property> + <property name="width">7.96875in</property> + <list-property name="boundDataColumns"> + <structure> + <property name="name">Date</property> + <expression name="expression" type="javascript">dataSetRow["Date"]</expression> + <property name="dataType">date</property> + </structure> + <structure> + <property name="name">HoursWorked</property> + <expression name="expression" type="javascript">dataSetRow["HoursWorked"]</expression> + <property name="dataType">float</property> + </structure> + <structure> + <property name="name">HoursRemaining</property> + <expression name="expression" type="javascript">dataSetRow["HoursRemaining"]</expression> + <property name="dataType">float</property> + </structure> + <structure> + <property name="name">IsActualData</property> + <expression name="expression" type="javascript">dataSetRow["IsActualData"]</expression> + <property name="dataType">boolean</property> + </structure> + <structure> + <property name="name">IdealHoursRemaining</property> + <expression name="expression" type="javascript">dataSetRow["IdealHoursRemaining"]</expression> + <property name="dataType">float</property> + </structure> + <structure> + <property name="name">BurndownRate</property> + <expression name="expression" type="javascript">dataSetRow["BurndownRate"]</expression> + <property name="dataType">float</property> + </structure> + </list-property> + </extended-item> + </body> +</report> diff --git a/plugins/org.eclipse.osee.reports.burndown/reports/IssueBurndown.rptdesign b/plugins/org.eclipse.osee.reports.burndown/reports/IssueBurndown.rptdesign new file mode 100644 index 00000000000..9a1ae23f7ef --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/reports/IssueBurndown.rptdesign @@ -0,0 +1,2306 @@ +<?xml version="1.0" encoding="UTF-8"?> +<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.21" id="1"> + <property name="createdBy">Eclipse BIRT Designer Version 2.6.0.v20100531 Build <2.6.0.v20100609-1613></property> + <property name="units">in</property> + <property name="iconFile">/templates/blank_report.gif</property> + <property name="bidiLayoutOrientation">ltr</property> + <property name="imageDPI">72</property> + <data-sources> + <script-data-source name="Hour Burndown Data source" id="71"/> + <script-data-source name="Issue Burndown Data Source" id="98"/> + </data-sources> + <data-sets> + <script-data-set name="Hour Burndown Data Set" id="72"> + <list-property name="resultSetHints"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">HoursWorked</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">HoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">IdealHoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + </list-property> + <list-property name="columnHints"> + <structure> + <property name="columnName">Date</property> + <text-property name="displayName">Date</text-property> + </structure> + <structure> + <property name="columnName">HoursWorked</property> + <text-property name="displayName">Hours Worked</text-property> + </structure> + <structure> + <property name="columnName">HoursRemaining</property> + <text-property name="displayName">Hours Remaining</text-property> + </structure> + <structure> + <property name="columnName">IsActualData</property> + <text-property name="displayName">Is Actual Data ?</text-property> + </structure> + <structure> + <property name="columnName">IdealHoursRemaining</property> + <text-property name="displayName">Ideal Hours Remaining</text-property> + </structure> + <structure> + <property name="columnName">BurndownRate</property> + <text-property name="displayName">Burndown Rate</text-property> + </structure> + </list-property> + <structure name="cachedMetaData"> + <list-property name="resultSet"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">HoursWorked</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">HoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">IdealHoursRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + </list-property> + </structure> + <property name="dataSource">Hour Burndown Data source</property> + <method name="open"><![CDATA[importPackage(Packages.org.eclipse.core.runtime); + +myBundle = Platform.getBundle("org.eclipse.osee.reports.burndown"); + +count = 0; + +/* load data reader class */ +readerClass = myBundle.loadClass("org.eclipse.osee.reports.burndown.hours.HourBurndownModel"); + +/* create new instance of DataReader */ +readerInstance = readerClass.newInstance(); + +log = readerInstance.getLog(); +entries = log.getEntries();]]></method> + <method name="fetch"><![CDATA[ + +if(count < entries.size()){ +row["Date"] = entries.get(count).getDate(); +row["HoursWorked"] = entries.get(count).getHoursWorked(); +row["HoursRemaining"] = entries.get(count).getHoursRemaining(); +row["IsActualData"] = entries.get(count).isActualData(); +row["IdealHoursRemaining"] = entries.get(count).getIdealHoursRemaining(); +row["BurndownRate"] = entries.get(count).getBurndownRate(); +count++; +return true; +} + +return false; +]]></method> + </script-data-set> + <script-data-set name="Issue Burndown Data Set" id="99"> + <list-property name="resultSetHints"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date-time</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">IssuesClosed</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">IssuesRemaining</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IdealIssuesRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + </list-property> + <list-property name="columnHints"> + <structure> + <property name="columnName">Date</property> + <text-property name="displayName">Date</text-property> + </structure> + <structure> + <property name="columnName">IssuesClosed</property> + <text-property name="displayName">Issues Closed</text-property> + </structure> + <structure> + <property name="columnName">IssuesRemaining</property> + <text-property name="displayName">Issues Remaining</text-property> + </structure> + <structure> + <property name="columnName">IdealIssuesRemaining</property> + <text-property name="displayName">Ideal Issues Remaining</text-property> + </structure> + <structure> + <property name="columnName">BurndownRate</property> + <text-property name="displayName">Burndown rate</text-property> + </structure> + <structure> + <property name="columnName">IsActualData</property> + <text-property name="displayName">Is Actual Data</text-property> + </structure> + </list-property> + <structure name="cachedMetaData"> + <list-property name="resultSet"> + <structure> + <property name="position">1</property> + <property name="name">Date</property> + <property name="dataType">date-time</property> + </structure> + <structure> + <property name="position">2</property> + <property name="name">IssuesClosed</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">3</property> + <property name="name">IssuesRemaining</property> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="position">4</property> + <property name="name">IdealIssuesRemaining</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">5</property> + <property name="name">BurndownRate</property> + <property name="dataType">float</property> + </structure> + <structure> + <property name="position">6</property> + <property name="name">IsActualData</property> + <property name="dataType">boolean</property> + </structure> + </list-property> + </structure> + <property name="dataSource">Issue Burndown Data Source</property> + <method name="open"><![CDATA[importPackage(Packages.org.eclipse.core.runtime); + +myBundle = Platform.getBundle("org.eclipse.osee.reports.burndown"); + +count = 0; + +/* load data reader class */ +readerClass = myBundle.loadClass("org.eclipse.osee.reports.burndown.issues.IssueBurndownModel"); + +/* create new instance of DataReader */ +readerInstance = readerClass.newInstance(); + +log = readerInstance.getLog(); +entries = log.getEntries();]]></method> + <method name="fetch"><![CDATA[ + +if(count < entries.size()){ +row["Date"] = entries.get(count).getDate(); +row["IssuesClosed"] = entries.get(count).getIssuesClosed(); +row["IssuesRemaining"] = entries.get(count).getIssuesRemaining(); +row["IsActualData"] = entries.get(count).isActualData(); +row["IdealIssuesRemaining"] = entries.get(count).getIdealIssuesRemaining(); +row["BurndownRate"] = entries.get(count).getBurndownRate(); +count++; +return true; +} + +return false; +]]></method> + </script-data-set> + </data-sets> + <styles> + <style name="report" id="4"> + <property name="fontFamily">sans-serif</property> + <property name="fontSize">10pt</property> + </style> + <style name="crosstab-cell" id="5"> + <property name="borderBottomColor">#CCCCCC</property> + <property name="borderBottomStyle">solid</property> + <property name="borderBottomWidth">1pt</property> + <property name="borderLeftColor">#CCCCCC</property> + <property name="borderLeftStyle">solid</property> + <property name="borderLeftWidth">1pt</property> + <property name="borderRightColor">#CCCCCC</property> + <property name="borderRightStyle">solid</property> + <property name="borderRightWidth">1pt</property> + <property name="borderTopColor">#CCCCCC</property> + <property name="borderTopStyle">solid</property> + <property name="borderTopWidth">1pt</property> + </style> + <style name="crosstab" id="6"> + <property name="borderBottomColor">#CCCCCC</property> + <property name="borderBottomStyle">solid</property> + <property name="borderBottomWidth">1pt</property> + <property name="borderLeftColor">#CCCCCC</property> + <property name="borderLeftStyle">solid</property> + <property name="borderLeftWidth">1pt</property> + <property name="borderRightColor">#CCCCCC</property> + <property name="borderRightStyle">solid</property> + <property name="borderRightWidth">1pt</property> + <property name="borderTopColor">#CCCCCC</property> + <property name="borderTopStyle">solid</property> + <property name="borderTopWidth">1pt</property> + </style> + </styles> + <page-setup> + <simple-master-page name="Simple MasterPage" id="2"> + <page-footer> + <text id="3"> + <property name="contentType">html</property> + <text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property> + </text> + </page-footer> + </simple-master-page> + </page-setup> + <body> + <extended-item extensionName="Chart" id="100"> + <xml-property name="xmlRepresentation"><![CDATA[<model:ChartWithAxes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:attribute="http://www.birt.eclipse.org/ChartModelAttribute" xmlns:data="http://www.birt.eclipse.org/ChartModelData" xmlns:layout="http://www.birt.eclipse.org/ChartModelLayout" xmlns:model="http://www.birt.eclipse.org/ChartModel" xmlns:type="http://www.birt.eclipse.org/ChartModelType"> + <Version>2.5.1</Version> + <Type>Line Chart</Type> + <SubType>Overlay</SubType> + <Block> + <Children xsi:type="layout:TitleBlock"> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>0.0</Width> + <Height>0.0</Height> + </Bounds> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Visible>true</Visible> + <Label> + <Caption> + <Value>Issue Burndown</Value> + <Font> + <Size>16.0</Size> + <Bold>true</Bold> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>true</Visible> + </Label> + </Children> + <Children xsi:type="layout:Plot"> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>0.0</Width> + <Height>0.0</Height> + </Bounds> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Visible>true</Visible> + <HorizontalSpacing>5</HorizontalSpacing> + <VerticalSpacing>5</VerticalSpacing> + <ClientArea> + <Outline> + <Style>Solid</Style> + <Thickness>0</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>0.0</Left> + <Bottom>0.0</Bottom> + <Right>0.0</Right> + </Insets> + </ClientArea> + </Children> + <Children xsi:type="layout:Legend"> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>0.0</Width> + <Height>0.0</Height> + </Bounds> + <Anchor>West</Anchor> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Dash_Dotted</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </Outline> + <Visible>true</Visible> + <ClientArea> + <Outline> + <Style>Solid</Style> + <Thickness>0</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>2.0</Top> + <Left>2.0</Left> + <Bottom>2.0</Bottom> + <Right>2.0</Right> + </Insets> + </ClientArea> + <Text> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Text> + <Orientation>Vertical</Orientation> + <Direction>Top_Bottom</Direction> + <Separator> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </Separator> + <Position>Below</Position> + <ItemType>Series</ItemType> + <Title> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Title> + <TitlePosition>Above</TitlePosition> + </Children> + <Bounds> + <Left>0.0</Left> + <Top>0.0</Top> + <Width>573.75</Width> + <Height>362.25</Height> + </Bounds> + <Insets> + <Top>3.0</Top> + <Left>3.0</Left> + <Bottom>3.0</Bottom> + <Right>3.0</Right> + </Insets> + <Row>-1</Row> + <Column>-1</Column> + <Rowspan>-1</Rowspan> + <Columnspan>-1</Columnspan> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Visible>true</Visible> + </Block> + <Dimension>Two_Dimensional</Dimension> + <Units>Points</Units> + <SeriesThickness>10.0</SeriesThickness> + <ExtendedProperties> + <Name>enable.area.alt</Name> + <Value>false</Value> + </ExtendedProperties> + <SampleData> + <BaseSampleData> + <DataSetRepresentation>01/05/2000,02/01/2000,04/12/2000,03/12/2000,02/29/2000</DataSetRepresentation> + </BaseSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>6,4,12,8,10</DataSetRepresentation> + <SeriesDefinitionIndex>0</SeriesDefinitionIndex> + </OrthogonalSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>12.0,8.0,24.0,16.0,20.0</DataSetRepresentation> + <SeriesDefinitionIndex>1</SeriesDefinitionIndex> + </OrthogonalSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>18.0,12.0,36.0,24.0,30.0</DataSetRepresentation> + <SeriesDefinitionIndex>2</SeriesDefinitionIndex> + </OrthogonalSampleData> + <OrthogonalSampleData> + <DataSetRepresentation>24.0,16.0,48.0,32.0,40.0</DataSetRepresentation> + <SeriesDefinitionIndex>3</SeriesDefinitionIndex> + </OrthogonalSampleData> + </SampleData> + <Interactivity/> + <EmptyMessage> + <Caption> + <Value>This chart contains no data.</Value> + <Font> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>64</Transparency> + <Red>127</Red> + <Green>127</Green> + <Blue>127</Blue> + </Background> + <Outline> + <Color> + <Transparency>128</Transparency> + <Red>127</Red> + <Green>127</Green> + <Blue>127</Blue> + </Color> + <Visible>true</Visible> + </Outline> + <Insets> + <Top>10.0</Top> + <Left>10.0</Left> + <Bottom>10.0</Bottom> + <Right>10.0</Right> + </Insets> + <Visible>false</Visible> + </EmptyMessage> + <Axes> + <Type>DateTime</Type> + <Title> + <Caption> + <Value>X-Axis Title</Value> + <Font> + <Size>14.0</Size> + <Bold>true</Bold> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Title> + <TitlePosition>Below</TitlePosition> + <AssociatedAxes> + <Type>Linear</Type> + <Title> + <Caption> + <Value>Y-Axis Title</Value> + <Font> + <Size>14.0</Size> + <Bold>true</Bold> + <Alignment> + <horizontalAlignment>Center</horizontalAlignment> + <verticalAlignment>Center</verticalAlignment> + </Alignment> + <Rotation>90.0</Rotation> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Title> + <TitlePosition>Left</TitlePosition> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>51</Red> + <Green>153</Green> + <Blue>102</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["IssuesClosed"]</Definition> + <Grouping> + <Enabled>true</Enabled> + <GroupType>Text</GroupType> + <AggregateExpression>RunningSum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Issues Closed</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + </Series> + </SeriesDefinitions> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>51</Red> + <Green>153</Green> + <Blue>102</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["IssuesRemaining"]</Definition> + <Grouping> + <Enabled>false</Enabled> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Issues Remaining</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + </Series> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </SeriesDefinitions> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>51</Red> + <Green>153</Green> + <Blue>102</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["IdealIssuesRemaining"]</Definition> + <Grouping> + <Enabled>false</Enabled> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Ideal Line</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + </Series> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </SeriesDefinitions> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>51</Red> + <Green>153</Green> + <Blue>102</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series xsi:type="type:LineSeries"> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["BurndownRate"]</Definition> + <Grouping> + <Enabled>false</Enabled> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </DataDefinition> + <SeriesIdentifier>Burndown Rate</SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Above</LabelPosition> + <Stacked>false</Stacked> + <Markers> + <Type>Box</Type> + <Size>4</Size> + <Visible>false</Visible> + <Outline> + <Visible>true</Visible> + </Outline> + </Markers> + <LineAttributes> + <Style>Solid</Style> + <Thickness>2</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <PaletteLineColor>true</PaletteLineColor> + </Series> + <Grouping> + <GroupType>Text</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + </SeriesDefinitions> + <Orientation>Vertical</Orientation> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Visible>true</Visible> + </LineAttributes> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>true</Visible> + </Label> + <LabelPosition>Left</LabelPosition> + <MajorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>true</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>true</Visible> + </TickAttributes> + </MajorGrid> + <MinorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </TickAttributes> + </MinorGrid> + <Scale> + <MinorGridsPerUnit>5</MinorGridsPerUnit> + </Scale> + <Origin> + <Type>Min</Type> + <Value xsi:type="data:NumberDataElement"> + <Value>0.0</Value> + </Value> + </Origin> + <PrimaryAxis>true</PrimaryAxis> + <Percent>false</Percent> + </AssociatedAxes> + <SeriesDefinitions> + <Query> + <Definition></Definition> + </Query> + <SeriesPalette> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>51</Red> + <Green>153</Green> + <Blue>102</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>204</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>64</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>170</Red> + <Green>85</Green> + <Blue>85</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>192</Red> + <Green>192</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>192</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>7</Red> + <Green>146</Green> + <Blue>94</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>192</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>64</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>80</Red> + <Green>240</Green> + <Blue>120</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>0</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>0</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>64</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>128</Red> + <Green>128</Green> + <Blue>128</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>64</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Entries> + <Entries xsi:type="attribute:ColorDefinition"> + <Transparency>255</Transparency> + <Red>255</Red> + <Green>128</Green> + <Blue>0</Blue> + </Entries> + </SeriesPalette> + <Series> + <Visible>true</Visible> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + <Visible>false</Visible> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>false</Visible> + </Label> + <DataDefinition> + <Definition>row["Date"]</Definition> + </DataDefinition> + <SeriesIdentifier></SeriesIdentifier> + <DataPoint> + <Components> + <Type>Orthogonal_Value</Type> + </Components> + <Separator>, </Separator> + </DataPoint> + <LabelPosition>Outside</LabelPosition> + <Stacked>false</Stacked> + </Series> + <Grouping> + <Enabled>false</Enabled> + <GroupingUnit>Years</GroupingUnit> + <GroupingInterval>1.0</GroupingInterval> + <GroupType>DateTime</GroupType> + <AggregateExpression>Sum</AggregateExpression> + </Grouping> + <Sorting>Ascending</Sorting> + <SortKey> + <Definition>row["Date"]</Definition> + </SortKey> + </SeriesDefinitions> + <Orientation>Horizontal</Orientation> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Visible>true</Visible> + </LineAttributes> + <Label> + <Caption> + <Value></Value> + <Font> + <Alignment/> + </Font> + </Caption> + <Background xsi:type="attribute:ColorDefinition"> + <Transparency>0</Transparency> + <Red>255</Red> + <Green>255</Green> + <Blue>255</Blue> + </Background> + <Outline> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>0</Red> + <Green>0</Green> + <Blue>0</Blue> + </Color> + </Outline> + <Insets> + <Top>0.0</Top> + <Left>2.0</Left> + <Bottom>0.0</Bottom> + <Right>3.0</Right> + </Insets> + <Visible>true</Visible> + </Label> + <LabelPosition>Below</LabelPosition> + <MajorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>196</Red> + <Green>196</Green> + <Blue>196</Blue> + </Color> + <Visible>true</Visible> + </TickAttributes> + </MajorGrid> + <MinorGrid> + <LineAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </LineAttributes> + <TickStyle>Across</TickStyle> + <TickAttributes> + <Style>Solid</Style> + <Thickness>1</Thickness> + <Color> + <Transparency>255</Transparency> + <Red>225</Red> + <Green>225</Green> + <Blue>225</Blue> + </Color> + <Visible>false</Visible> + </TickAttributes> + </MinorGrid> + <Scale> + <MinorGridsPerUnit>5</MinorGridsPerUnit> + </Scale> + <Origin> + <Type>Min</Type> + <Value xsi:type="data:NumberDataElement"> + <Value>0.0</Value> + </Value> + </Origin> + <PrimaryAxis>true</PrimaryAxis> + <CategoryAxis>true</CategoryAxis> + <Percent>false</Percent> + </Axes> + <Orientation>Vertical</Orientation> + <UnitSpacing>50.0</UnitSpacing> + <Rotation/> +</model:ChartWithAxes> +]]></xml-property> + <property name="outputFormat">SVG</property> + <property name="inheritColumns">true</property> + <property name="pageBreakAfter">always</property> + <structure name="toc"> + <expression name="expressionValue" type="javascript">"Issue Burndown"</expression> + </structure> + <property name="dataSet">Issue Burndown Data Set</property> + <property name="height">5.03125in</property> + <property name="width">7.96875in</property> + <list-property name="boundDataColumns"> + <structure> + <property name="name">Date</property> + <expression name="expression" type="javascript">dataSetRow["Date"]</expression> + <property name="dataType">date-time</property> + </structure> + <structure> + <property name="name">IssuesClosed</property> + <expression name="expression" type="javascript">dataSetRow["IssuesClosed"]</expression> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="name">IssuesRemaining</property> + <expression name="expression" type="javascript">dataSetRow["IssuesRemaining"]</expression> + <property name="dataType">integer</property> + </structure> + <structure> + <property name="name">IdealIssuesRemaining</property> + <expression name="expression" type="javascript">dataSetRow["IdealIssuesRemaining"]</expression> + <property name="dataType">float</property> + </structure> + <structure> + <property name="name">BurndownRate</property> + <expression name="expression" type="javascript">dataSetRow["BurndownRate"]</expression> + <property name="dataType">float</property> + </structure> + <structure> + <property name="name">IsActualData</property> + <expression name="expression" type="javascript">dataSetRow["IsActualData"]</expression> + <property name="dataType">boolean</property> + </structure> + </list-property> + </extended-item> + </body> +</report> diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/Activator.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/Activator.java new file mode 100644 index 00000000000..795675d1cbe --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/Activator.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown; + +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class Activator extends AbstractUIPlugin { + + /** + * The plug-in ID + */ + public static final String PLUGIN_ID = "org.eclipse.osee.reports.burndown"; //$NON-NLS-1$ + + // The shared instance + private static Activator plugin; + + /** + * The constructor + */ + public Activator() {} + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + @Override + public void start(final BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + @Override + public void stop(final BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownEntry.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownEntry.java new file mode 100644 index 00000000000..14df1ed32c8 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownEntry.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.hours; + +import java.util.Calendar; +import java.util.Date; + +/** + * Model class to store the data for a single date. + * + * @author Praveen Joseph + */ +public class HourBurndownEntry { + + private final Date date; + private double hoursWorked; + private double hoursRemaining; + private boolean actualData; + private double idealHoursRemaining; + private double burndownRate; + + /** + * @param date : Sets the Current date + */ + public HourBurndownEntry(final Date date) { + this.date = date; + Date currentTime = Calendar.getInstance().getTime(); + // The variable "actualData" is used to indicate if the data calculated is based on the actual work done on a given + // date, + // or if it is calculated based on assumptions (ie. If the date occurs sometime in the future). + + if (currentTime.after(date)) { + this.actualData = true; + } + else { + this.actualData = false; + } + } + + /** + * @param actualData : sets the current date + */ + public void setActualData(final boolean actualData) { + this.actualData = actualData; + } + + /** + * @param hoursRemaining : sets the hours remaining + */ + public void setHoursRemaining(final double hoursRemaining) { + this.hoursRemaining = hoursRemaining; + } + + /** + * @param hoursWorked : sets the hours worked + */ + public void setHoursWorked(final double hoursWorked) { + this.hoursWorked = hoursWorked; + } + + /** + * @return the hours remaining + */ + public double getHoursRemaining() { + return this.hoursRemaining; + } + + /** + * @return todays date + */ + public Date getDate() { + return this.date; + } + + /** + * @return the hours worked + */ + public double getHoursWorked() { + return this.hoursWorked; + } + + /** + * @return actual data + */ + public boolean isActualData() { + return this.actualData; + } + + /** + * @return ideal Hours Remaining + */ + public double getIdealHoursRemaining() { + return this.idealHoursRemaining; + } + + /** + * @param idealHoursRemaining : sets the ideal Hours Remaining + */ + public void setIdealHoursRemaining(final double idealHoursRemaining) { + this.idealHoursRemaining = idealHoursRemaining; + } + + /** + * @return burndownRate + */ + public double getBurndownRate() { + return this.burndownRate; + } + + /** + * @param burndownRate : sets the burndownRate + */ + public void setBurndownRate(final double burndownRate) { + this.burndownRate = burndownRate; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownLog.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownLog.java new file mode 100644 index 00000000000..03b8c523fd3 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownLog.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.hours; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; +import org.eclipse.osee.ats.core.client.workflow.log.AtsLog; +import org.eclipse.osee.ats.core.client.workflow.log.LogItem; +import org.eclipse.osee.ats.core.client.workflow.log.LogType; +import org.eclipse.osee.framework.core.exception.OseeCoreException; + +/** + * This is the class responsible for constructing the burndown logs based on the Artifact data. The burndown logs + * constructed is in the form of a list of HourBurndownEntry objects. + * + * @author Praveen Joseph + */ +public class HourBurndownLog { + + private Date startDate; + private Date endDate; + private List<AbstractWorkflowArtifact> artifacts; + private double totalWork; + private double avgIdeal; + + private final List<HourBurndownEntry> entries; + + /** + * Constructor to initialise list of Work flow artifacts and Log entries + */ + public HourBurndownLog() { + this.artifacts = new ArrayList<AbstractWorkflowArtifact>(); + this.entries = new ArrayList<HourBurndownEntry>(); + } + + /** + * @param artifacts : sets the list of work flow artifacts + */ + public void setArtifacts(final List<AbstractWorkflowArtifact> artifacts) { + this.artifacts = artifacts; + } + + /** + * @param endDate : sets the end date + */ + public void setEndDate(final Date endDate) { + this.endDate = endDate; + } + + /** + * @param startDate : sets the start date + */ + public void setStartDate(final Date startDate) { + this.startDate = startDate; + } + + /** + * @param totalWork : sets the total work done + */ + public void setTotalWork(final double totalWork) { + this.totalWork = totalWork; + } + + /** + * @return the list of workflow artifacts + */ + public List<AbstractWorkflowArtifact> getArtifacts() { + return this.artifacts; + } + + /** + * @return the end date + */ + public Date getEndDate() { + return this.endDate; + } + + /** + * @return the start date + */ + public Date getStartDate() { + return this.startDate; + } + + /** + * @return the total work + */ + public double getTotalWork() { + return this.totalWork; + } + + /** + * @param avgIdeal : sets average work hours + */ + public void setAvgIdeal(final double avgIdeal) { + this.avgIdeal = avgIdeal; + } + + /** + * @return average work hours + */ + public double getAvgIdeal() { + return this.avgIdeal; + } + + /** + * @return the entries + */ + public List<HourBurndownEntry> getEntries() { + return this.entries; + } + + /** + * Method to compute the total work and add hourburndown log entries + * + * @throws OseeCoreException + */ + public void compute() throws OseeCoreException { + this.totalWork = computeTotalWork(); + long days = (this.endDate.getTime() - this.startDate.getTime()) / (1000 * 60 * 60 * 24); + final double idealAvg = this.totalWork / days; + + // Day-wise work log + Date inspectDate = this.startDate; + double remainingWork = this.totalWork; + double idealRemainingWork = this.totalWork; + + // Create 0th entry + HourBurndownEntry zeroeth = new HourBurndownEntry(inspectDate); + zeroeth.setHoursWorked(0); + zeroeth.setHoursRemaining(remainingWork); + zeroeth.setBurndownRate(0); + zeroeth.setIdealHoursRemaining(idealRemainingWork); + this.entries.add(zeroeth); + + inspectDate = incrementDate(inspectDate, 1); + + while (!inspectDate.after(this.endDate)) { + double totalWorkDay = computeTotalWork(inspectDate); + remainingWork = remainingWork - totalWorkDay; + idealRemainingWork -= idealAvg; + double burndown = remainingWork / days--; + HourBurndownEntry entry = new HourBurndownEntry(inspectDate); + entry.setHoursWorked(totalWorkDay); + entry.setHoursRemaining(remainingWork); + entry.setIdealHoursRemaining(idealRemainingWork); + entry.setBurndownRate(burndown); + this.entries.add(entry); + // increment + inspectDate = incrementDate(inspectDate, 1); + + } + + } + + private Date incrementDate(final Date inspectDate, final int i) { + // IncrementDate + Calendar cal = Calendar.getInstance(); + cal.setTime(inspectDate); + cal.add(Calendar.DATE, i); + Date newDate = cal.getTime(); + return newDate; + } + + /** + * This method computes the total work to be done from the list of available artifacts + */ + private double computeTotalWork() throws OseeCoreException { + double work = 0; + for (AbstractWorkflowArtifact artifact : this.artifacts) { + work += artifact.getEstimatedHoursTotal(); + } + return work; + } + + /** + * This method computes the total work done on a given date. + */ + @SuppressWarnings("deprecation") + private double computeTotalWork(final Date currentDate) throws OseeCoreException { + double work = 0; + for (AbstractWorkflowArtifact artifact : this.artifacts) { + double previousWork = 0; + AtsLog log = artifact.getLog(); + List<LogItem> logItems = log.getLogItems(); + for (LogItem item : logItems) { + if (item.getType() == LogType.Metrics) { + double itemWork = ReportUtil.getWork(item); + Date itemDate = item.getDate(); + if ((itemDate.getDate() == currentDate.getDate()) && (itemDate.getMonth() == currentDate.getMonth()) && + (itemDate.getYear() == currentDate.getYear())) { + work += itemWork - previousWork; + } + previousWork = itemWork; + } + } + } + return work; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownModel.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownModel.java new file mode 100644 index 00000000000..138684cff74 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownModel.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.hours; + +/** + * Model class to store the HourBurndownLog + * + * @author Praveen Joseph + */ +public class HourBurndownModel { + + private static HourBurndownLog log; + + /** + * @return the HourBurndownLog + */ + public static HourBurndownLog getLog() { + return log; + } + + /** + * @param log : sets the HourBurndownLog + */ + public static void setLog(final HourBurndownLog log) { + HourBurndownModel.log = log; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownTab.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownTab.java new file mode 100644 index 00000000000..8fe61b1da5a --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/HourBurndownTab.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.hours; + +import org.eclipse.osee.reports.burndown.ui.AbstractBurndownTab; + +/** + * Class that represents the UI Component + * + * @author Praveen Joseph + */ +public class HourBurndownTab extends AbstractBurndownTab { + + @Override + public String getTabName() { + return "Hour Burndown"; + } + + @Override + public String getReport() { + return "HourBurndown.rptdesign"; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/ReportUtil.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/ReportUtil.java new file mode 100644 index 00000000000..7e85c51cb2d --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/hours/ReportUtil.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.hours; + +import org.eclipse.osee.ats.core.client.workflow.log.LogItem; +import org.eclipse.osee.ats.core.client.workflow.log.LogType; + + +/** + * Utility Class used during the report data generation + * + * @author Praveen Joseph + */ +public class ReportUtil { + + /** + * This method returns the amount of work with respect to a given work item + * + * @param item The {@link LogItem} instance + * @return the work done + */ + public static double getWork(final LogItem item) { + if (item.getType() == LogType.Metrics) { + String msg = item.getMsg(); + String[] segments = msg.split(" "); + String workString = segments[segments.length - 1]; + return Double.parseDouble(workString); + } + return 0; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownEntry.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownEntry.java new file mode 100644 index 00000000000..2190ce74d7c --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownEntry.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.issues; + +import java.util.Calendar; +import java.util.Date; + +/** + * Model class representing a single entry for a given date. + * + * @author Praveen Joseph + */ +public class IssueBurndownEntry { + + private final Date date; + private int issuesClosed; + private int issuesRemaining; + private double idealIssuesRemaining; + private double burndownRate; + private boolean actualData; + + /** + * @param date sets the current date + */ + public IssueBurndownEntry(final Date date) { + this.date = date; + Date currentTime = Calendar.getInstance().getTime(); + if (currentTime.after(date)) { + this.actualData = true; + } + else { + this.actualData = false; + } + } + + /** + * @return the number of issues closed + */ + public int getIssuesClosed() { + return this.issuesClosed; + } + + /** + * @param issuesClosed : sets the number of issues closed + */ + public void setIssuesClosed(final int issuesClosed) { + this.issuesClosed = issuesClosed; + } + + /** + * @return the number of issues remaining + */ + public int getIssuesRemaining() { + return this.issuesRemaining; + } + + /** + * @param issuesRemaining : sets the number of issues remaining + */ + public void setIssuesRemaining(final int issuesRemaining) { + this.issuesRemaining = issuesRemaining; + } + + /** + * @return the number of ideal issues remaining + */ + public double getIdealIssuesRemaining() { + return this.idealIssuesRemaining; + } + + /** + * @param idealIssuesRemaining : sets the ideal number of issues remaining + */ + public void setIdealIssuesRemaining(final double idealIssuesRemaining) { + this.idealIssuesRemaining = idealIssuesRemaining; + } + + /** + * @return the burndownRate + */ + public double getBurndownRate() { + return this.burndownRate; + } + + /** + * @param requiredBurndown : sets the Burndownrate + */ + public void setBurndownRate(final double requiredBurndown) { + this.burndownRate = requiredBurndown; + } + + /** + * @return the actualData + */ + public boolean isActualData() { + return this.actualData; + } + + /** + * @param actualData : sets the actual data + */ + public void setActualData(final boolean actualData) { + this.actualData = actualData; + } + + /** + * @return the current date + */ + public Date getDate() { + return this.date; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownLog.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownLog.java new file mode 100644 index 00000000000..e79065d0692 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownLog.java @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.issues; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.eclipse.osee.ats.core.client.workflow.AbstractWorkflowArtifact; +import org.eclipse.osee.framework.core.exception.OseeCoreException; + +/** + * This class is used to compute the details wrt.the issue burndown. + * + * @author Praveen Joseph + */ +public class IssueBurndownLog { + + private Date startDate; + private Date endDate; + private List<AbstractWorkflowArtifact> artifacts; + private int totalIssues; + private double avgIdeal; + + private final List<IssueBurndownEntry> entries; + + /** + * Constructor to initialise list of Work flow artifacts and Log entries + */ + public IssueBurndownLog() { + this.artifacts = new ArrayList<AbstractWorkflowArtifact>(); + this.entries = new ArrayList<IssueBurndownEntry>(); + } + + /** + * @param artifacts sets the workflow artifacts + */ + public void setArtifacts(final List<AbstractWorkflowArtifact> artifacts) { + this.artifacts = artifacts; + } + + /** + * @param endDate sets the end date + */ + public void setEndDate(final Date endDate) { + this.endDate = endDate; + } + + /** + * @param startDate sets the start date + */ + public void setStartDate(final Date startDate) { + this.startDate = startDate; + } + + /** + * @param totalIssues sets the total issues + */ + public void setTotalIssues(final int totalIssues) { + this.totalIssues = totalIssues; + } + + /** + * @return the list of workflow atrifacts + */ + public List<AbstractWorkflowArtifact> getArtifacts() { + return this.artifacts; + } + + /** + * @return the end date + */ + public Date getEndDate() { + return this.endDate; + } + + /** + * @return the start date + */ + public Date getStartDate() { + return this.startDate; + } + + /** + * @return the total issues + */ + public int getTotalIssues() { + return this.totalIssues; + } + + /** + * @param avgIdeal : sets the average ideal value + */ + public void setAvgIdeal(final double avgIdeal) { + this.avgIdeal = avgIdeal; + } + + /** + * @return the average ideal value + */ + public double getAvgIdeal() { + return this.avgIdeal; + } + + /** + * @return the issues list + */ + public List<IssueBurndownEntry> getEntries() { + return this.entries; + } + + /** + * Method to compute total work done and issue entries + * + * @throws OseeCoreException : + */ + public void compute() throws OseeCoreException { + this.totalIssues = computeTotalIssues(); + long days = (this.endDate.getTime() - this.startDate.getTime()) / (1000 * 60 * 60 * 24); + final double idealAvg = (double) this.totalIssues / days; + + // Day-wise work log + Date inspectDate = this.startDate; + int remainingIssues = this.totalIssues; + double idealRemainingIssues = this.totalIssues; + + // Create 0th entry + IssueBurndownEntry zeroeth = new IssueBurndownEntry(inspectDate); + zeroeth.setIssuesClosed(0); + zeroeth.setIssuesRemaining(remainingIssues); + zeroeth.setBurndownRate(0); + zeroeth.setIdealIssuesRemaining(idealRemainingIssues); + this.entries.add(zeroeth); + + inspectDate = incrementDate(inspectDate, 1); + + while (!inspectDate.after(this.endDate)) { + int totalIssuesClosed = computeTotalIssues(inspectDate); + remainingIssues = remainingIssues - totalIssuesClosed; + idealRemainingIssues -= idealAvg; + double burndown = (double) remainingIssues / days--; + IssueBurndownEntry entry = new IssueBurndownEntry(inspectDate); + entry.setIssuesClosed(totalIssuesClosed); + entry.setIssuesRemaining(remainingIssues); + entry.setIdealIssuesRemaining(idealRemainingIssues); + entry.setBurndownRate(burndown); + this.entries.add(entry); + // increment + inspectDate = incrementDate(inspectDate, 1); + + } + + } + + @SuppressWarnings("static-access") + private Date incrementDate(final Date inspectDate, final int i) { + // IncrementDate + Calendar cal = Calendar.getInstance(); + cal.setTime(inspectDate); + cal.add(cal.DATE, i); + Date newDate = cal.getTime(); + return newDate; + } + + private int computeTotalIssues() { + return this.artifacts.size(); + } + + /** + * This method returns the number of issues that were completed on a given date. + */ + @SuppressWarnings("deprecation") + private int computeTotalIssues(final Date currentDate) throws OseeCoreException { + int issues = 0; + for (AbstractWorkflowArtifact artifact : this.artifacts) { + if (artifact.isCompleted()) { + Date itemDate = artifact.getCompletedDate(); + if ((itemDate.getDate() == currentDate.getDate()) && (itemDate.getMonth() == currentDate.getMonth()) && + (itemDate.getYear() == currentDate.getYear())) { + issues++; + } + + } + } + return issues; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownModel.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownModel.java new file mode 100644 index 00000000000..1fcfe9ae5ec --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownModel.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.issues; + +/** + * Model class to store the IssueBurndownLog + * + * @author Praveen Joseph + */ +public class IssueBurndownModel { + + private static IssueBurndownLog log; + + /** + * @return the IssueBurndownLog + */ + public static IssueBurndownLog getLog() { + return log; + } + + /** + * @param log sets the IssueBurndownLog + */ + public static void setLog(final IssueBurndownLog log) { + IssueBurndownModel.log = log; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownTab.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownTab.java new file mode 100644 index 00000000000..29128678e61 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/issues/IssueBurndownTab.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.issues; + +import org.eclipse.osee.reports.burndown.ui.AbstractBurndownTab; + +/** + * Class representing the UI Component + * + * @author Praveen Joseph + */ +public class IssueBurndownTab extends AbstractBurndownTab { + + @Override + public String getTabName() { + return "Issue Burndown"; + } + + @Override + public String getReport() { + return "IssueBurndown.rptdesign"; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/AbstractBurndownTab.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/AbstractBurndownTab.java new file mode 100644 index 00000000000..f0209db1ed0 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/AbstractBurndownTab.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.ui; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.eclipse.birt.report.viewer.utilities.WebViewer; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorTab; +import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor; +import org.eclipse.osee.reports.burndown.Activator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.widgets.Composite; +import org.osgi.framework.Bundle; + + +/** + * Class that implements IResultsEditorTab to crate the tab in the UI + * + * @author Praveen Joseph + */ +public abstract class AbstractBurndownTab implements IResultsEditorTab { + + private Browser browser; + + @SuppressWarnings("deprecation") + @Override + public Composite createTab(final Composite parent, final ResultsEditor resultsEditor) throws OseeCoreException { + + String path = getReportPath(); + this.browser = new Browser(parent, SWT.NONE); + WebViewer.display(path, WebViewer.HTML, this.browser, "frameset"); + this.browser.refresh(); + return this.browser; + } + + /** + * @return the report path + */ + public String getReportPath() { + String path = null; + try { + Bundle bundle = Platform.getBundle(getPluginID()); + URL url = FileLocator.find(bundle, new Path("reports/" + getReport()), null); + path = FileLocator.toFileURL(url).getPath(); + } + catch (MalformedURLException me) { + System.out.println("Fehler bei URL " + me.getStackTrace()); + return null; + } + catch (IOException e) { + e.printStackTrace(); + return null; + } + return path; + } + + /** + * @return the plug-in ID + */ + public String getPluginID() { + return Activator.PLUGIN_ID; + } + + /** + * @return Abstract method to return report Path + */ + public abstract String getReport(); + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/BurndownItem.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/BurndownItem.java new file mode 100644 index 00000000000..73fcbc5c562 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/BurndownItem.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.ui; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.api.version.IAtsVersion; +import org.eclipse.osee.ats.core.client.config.VersionsClient; +import org.eclipse.osee.ats.core.client.config.store.VersionArtifactStore; +import org.eclipse.osee.ats.core.config.AtsConfigCache; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite.TableLoadOption; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction; +import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorProvider; +import org.eclipse.osee.framework.ui.skynet.results.IResultsEditorTab; +import org.eclipse.osee.framework.ui.skynet.results.ResultsEditor; +import org.eclipse.osee.reports.burndown.hours.HourBurndownLog; +import org.eclipse.osee.reports.burndown.hours.HourBurndownModel; +import org.eclipse.osee.reports.burndown.hours.HourBurndownTab; +import org.eclipse.osee.reports.burndown.issues.IssueBurndownLog; +import org.eclipse.osee.reports.burndown.issues.IssueBurndownModel; +import org.eclipse.osee.reports.burndown.issues.IssueBurndownTab; + + +/** + * Class to extract data from workflows and fills the HourBurndownModel and IssueBurndownModel + * + * @author Praveen Joseph + */ +public class BurndownItem extends XNavigateItemAction { + + /** + * Constructor which calls its parent constructor + * + * @param parent : + */ + public BurndownItem(final XNavigateItem parent) { + super(parent, "Burndown Reports", AtsImage.REPORT); + } + + @Override + public void run(final TableLoadOption... tableLoadOptions) throws Exception { + // Get input from the user. + BurndownSelectionDialog dlg = new BurndownSelectionDialog(Active.Both); + int open = dlg.open(); + if (open == 0) { + populateModel(dlg); + ResultsEditor.open(new IResultsEditorProvider() { + + @Override + public String getEditorName() { + return "Burndown Reports"; + } + + @Override + public List<IResultsEditorTab> getResultsEditorTabs() { + List<IResultsEditorTab> tabs = new ArrayList<IResultsEditorTab>(); + tabs.add(new HourBurndownTab()); + tabs.add(new IssueBurndownTab()); + return tabs; + } + + }); + } + } + + private boolean populateModel(final BurndownSelectionDialog dlg) { + try { + Artifact art = (Artifact) dlg.getSelectedVersion(); + AtsConfigCache atsConfigCache = new AtsConfigCache(); + VersionArtifactStore artifactStore = new VersionArtifactStore(art, atsConfigCache); + IAtsVersion version = artifactStore.getVersion(); + + // HourBurndown + HourBurndownLog log = new HourBurndownLog(); + log.getArtifacts().addAll(VersionsClient.getTargetedForTeamWorkflows(version)); + log.setStartDate(dlg.getStartDate()); + log.setEndDate(dlg.getEndDate()); + log.compute(); + HourBurndownModel.setLog(log); + + // Issue Burndown + IssueBurndownLog issueLog = new IssueBurndownLog(); + issueLog.getArtifacts().addAll(VersionsClient.getTargetedForTeamWorkflows(version)); + issueLog.setStartDate(dlg.getStartDate()); + issueLog.setEndDate(dlg.getEndDate()); + issueLog.compute(); + IssueBurndownModel.setLog(issueLog); + + } + catch (OseeCoreException e) { + e.printStackTrace(); + return false; + } + + return true; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/BurndownSelectionDialog.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/BurndownSelectionDialog.java new file mode 100644 index 00000000000..253c8b34595 --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/BurndownSelectionDialog.java @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.ui; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; + +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.osee.ats.api.data.AtsRelationTypes; +import org.eclipse.osee.ats.api.team.IAtsTeamDefinition; +import org.eclipse.osee.ats.api.version.IAtsVersion; +import org.eclipse.osee.ats.core.client.config.store.TeamDefinitionArtifactStore; +import org.eclipse.osee.ats.core.client.config.store.VersionArtifactStore; +import org.eclipse.osee.ats.core.config.AtsConfigCache; +import org.eclipse.osee.ats.core.config.TeamDefinitions; +import org.eclipse.osee.framework.core.enums.Active; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLevel; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.ui.skynet.ArtifactViewerSorter; +import org.eclipse.osee.framework.ui.skynet.util.ArtifactDescriptiveLabelProvider; +import org.eclipse.osee.framework.ui.skynet.widgets.XComboViewer; +import org.eclipse.osee.framework.ui.skynet.widgets.XDate; +import org.eclipse.osee.framework.ui.skynet.widgets.XModifiedListener; +import org.eclipse.osee.framework.ui.skynet.widgets.XWidget; +import org.eclipse.osee.framework.ui.swt.Displays; +import org.eclipse.osee.reports.burndown.Activator; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.dialogs.SelectionDialog; + +/** + * @author Praveen Joseph + */ +public class BurndownSelectionDialog extends SelectionDialog { + + XComboViewer teamCombo = new XComboViewer("Team", SWT.READ_ONLY); + XComboViewer versionCombo = new XComboViewer("Version", SWT.READ_ONLY); + XDate startDateCombo = new XDate("StartDate"); + XDate endDateCombo = new XDate("End Date"); + Artifact selectedVersion = null; + Artifact selectedTeamDef = null; + Date startDate; + Date endDate; + private final IAtsTeamDefinition teamDef; + Artifact project; + private final Active active; + + /** + * @param active : + */ + public BurndownSelectionDialog(final Active active) { + super(Displays.getActiveShell()); + this.active = active; + this.teamDef = null; + setTitle("Select Version"); + setMessage("Select Version"); + } + + /** + * @param teamDef : + * @param active : + */ + public BurndownSelectionDialog(final IAtsTeamDefinition teamDef, final Active active) { + super(Displays.getActiveShell()); + this.teamDef = teamDef; + this.active = active; + setTitle("Select Version"); + setMessage("Select Version"); + } + + @Override + protected Control createDialogArea(final Composite container) { + + List<Object> objs = new ArrayList<Object>(); + try { + Set<IAtsTeamDefinition> teamReleaseableDefinitions = TeamDefinitions.getTeamReleaseableDefinitions(this.active); + for (IAtsTeamDefinition art : teamReleaseableDefinitions) { + TeamDefinitionArtifactStore artifactStore = new TeamDefinitionArtifactStore(art); + Artifact artifact = artifactStore.getArtifact(); + objs.add(artifact); + } + } + catch (Exception ex) { + OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex); + } + + Composite comp = new Composite(container, SWT.NONE); + comp.setLayout(new GridLayout(2, false)); + comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + if (this.teamDef == null) { + this.teamCombo.setInput(objs); + this.teamCombo.setLabelProvider(new ArtifactDescriptiveLabelProvider()); + this.teamCombo.setContentProvider(new ArrayContentProvider()); + this.teamCombo.setSorter(new ArtifactViewerSorter()); + this.teamCombo.setGrabHorizontal(true); + this.teamCombo.createWidgets(comp, 2); + this.teamCombo.getCombo().setVisibleItemCount(20); + this.teamCombo.addSelectionListener(new SelectionListener() { + + @Override + public void widgetDefaultSelected(final SelectionEvent e) { + widgetSelected(e); + } + + @Override + public void widgetSelected(final SelectionEvent e) { + ArrayList<Object> objs1 = new ArrayList<Object>(); + try { + + BurndownSelectionDialog.this.selectedTeamDef = + (Artifact) BurndownSelectionDialog.this.teamCombo.getSelected(); + + for (Artifact versionArtifact : BurndownSelectionDialog.this.selectedTeamDef + .getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_Version)) { + objs1.add(versionArtifact); + } + BurndownSelectionDialog.this.versionCombo.setInput(objs1); + } + catch (Exception ex) { + OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex); + } + validatePage(); + } + }); + } + else { + TeamDefinitionArtifactStore store = new TeamDefinitionArtifactStore(this.teamDef); + Artifact teamArt = null; + try { + teamArt = store.getArtifact(); + } + catch (OseeCoreException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + this.selectedTeamDef = teamArt; + } + + this.versionCombo.setLabelProvider(new ArtifactDescriptiveLabelProvider()); + this.versionCombo.setContentProvider(new ArrayContentProvider()); + this.versionCombo.setSorter(new ArtifactViewerSorter()); + this.versionCombo.setGrabHorizontal(true); + this.versionCombo.createWidgets(comp, 2); + this.versionCombo.getCombo().setVisibleItemCount(20); + this.versionCombo.addSelectionListener(new SelectionListener() { + + @Override + public void widgetDefaultSelected(final SelectionEvent e) { + widgetSelected(e); + } + + @Override + public void widgetSelected(final SelectionEvent e) { + BurndownSelectionDialog.this.selectedVersion = + (Artifact) BurndownSelectionDialog.this.versionCombo.getSelected(); + validatePage(); + } + }); + if (this.teamDef != null) { + objs = new ArrayList<Object>(); + try { + for (Artifact versionArtifact : this.selectedTeamDef + .getRelatedArtifacts(AtsRelationTypes.TeamDefinitionToVersion_Version)) { + IAtsVersion version = AtsConfigCache.instance.getSoleByGuid(versionArtifact.getGuid(), IAtsVersion.class); + VersionArtifactStore store = new VersionArtifactStore(version); + Artifact verArt = store.getArtifact(); + objs.add(verArt); + } + this.versionCombo.setInput(objs); + } + catch (Exception ex) { + OseeLog.log(Activator.class, OseeLevel.SEVERE_POPUP, ex); + } + } + + // Date + this.startDateCombo.setFormat("MM/dd/yyyy"); + this.startDateCombo.setRequiredEntry(true); + this.startDateCombo.createWidgets(comp, 2); + this.startDateCombo.addXModifiedListener(new XModifiedListener() { + + @Override + public void widgetModified(final XWidget widget) { + BurndownSelectionDialog.this.startDate = BurndownSelectionDialog.this.startDateCombo.getDate(); + validatePage(); + } + }); + + this.endDateCombo.setFormat("MM/dd/yyyy"); + this.endDateCombo.setRequiredEntry(true); + this.endDateCombo.createWidgets(comp, 2); + this.endDateCombo.addXModifiedListener(new XModifiedListener() { + + @Override + public void widgetModified(final XWidget widget) { + BurndownSelectionDialog.this.endDate = BurndownSelectionDialog.this.endDateCombo.getDate(); + validatePage(); + } + }); + return container; + } + + /** + * Method for validations + */ + public void validatePage() { + if (this.teamCombo.getSelected() == null) { + setMessage("Please Select a Team"); + getOkButton().setEnabled(false); + return; + } + if (this.versionCombo.getSelected() == null) { + setMessage("Please Select a Version"); + getOkButton().setEnabled(false); + return; + } + if (this.startDateCombo.getDate() == null) { + setMessage("Please Select the Start Date"); + getOkButton().setEnabled(false); + return; + } + if (this.endDateCombo.getDate() == null) { + setMessage("Please Select the End Date"); + getOkButton().setEnabled(false); + return; + } + if (!this.endDateCombo.getDate().after(this.startDateCombo.getDate())) { + setMessage("End Date must occur after Start Date!!"); + getOkButton().setEnabled(false); + return; + } + setMessage(null); + getOkButton().setEnabled(true); + } + + /** + * @return selected version + */ + public Artifact getSelectedVersion() { + return this.selectedVersion; + } + + /** + * @return the selectedTeamDef + */ + public Artifact getSelectedTeamDef() { + return this.selectedTeamDef; + } + + /** + * @return the start date + */ + public Date getStartDate() { + return this.startDate; + } + + /** + * @return the end date + */ + public Date getEndDate() { + return this.endDate; + } + +} diff --git a/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/ProjectModuleReports.java b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/ProjectModuleReports.java new file mode 100644 index 00000000000..3fe949d680d --- /dev/null +++ b/plugins/org.eclipse.osee.reports.burndown/src/org/eclipse/osee/reports/burndown/ui/ProjectModuleReports.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2012 Robert Bosch Engineering and Business Solutions Ltd India. All rights reserved. This program and + * the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies + * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.osee.reports.burndown.ui; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.osee.ats.AtsImage; +import org.eclipse.osee.ats.navigate.IAtsNavigateItem; +import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem; +import org.eclipse.osee.reports.efficiency.ui.EfficiencyItem; +import org.eclipse.osee.reports.split.ui.DistributionItem; + + +/** + * Class to create the navigate items + * + * @author Praveen Joseph + */ +public class ProjectModuleReports implements IAtsNavigateItem { + + /** + * Default Constructor + */ + public ProjectModuleReports() { + // + } + + @Override + public List<XNavigateItem> getNavigateItems(final XNavigateItem parentItem) { + List<XNavigateItem> items = new ArrayList<XNavigateItem>(); + + XNavigateItem autoseeReportItem = new XNavigateItem(parentItem, "ProjectModule Reports", AtsImage.REPORT); + new BurndownItem(autoseeReportItem); + new DistributionItem(autoseeReportItem); + new EfficiencyItem(autoseeReportItem); + items.add(autoseeReportItem); + return items; + } + +} |