Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorgan E. Cook2016-09-14 17:52:05 -0400
committerDavid W. Miller2016-09-14 17:52:05 -0400
commit1f84c2daf99fe17eb0c6d07d8b088a1f45cceca3 (patch)
tree77eb4b8fddc73bbea6a21cf2e20ae265018c97f6
parentdf626a4730eabd8ef1346b9d24e6a7f5afc25c59 (diff)
downloadorg.eclipse.osee-1f84c2daf99fe17eb0c6d07d8b088a1f45cceca3.tar.gz
org.eclipse.osee-1f84c2daf99fe17eb0c6d07d8b088a1f45cceca3.tar.xz
org.eclipse.osee-1f84c2daf99fe17eb0c6d07d8b088a1f45cceca3.zip
refactor: Word Applicability Publishing
Change-Id: I6ac94f54e8c10a719f07bb64dd83a1b508de9f62 Signed-off-by: Morgan E. Cook <Morgan.e.cook@boeing.com>
-rw-r--r--plugins/org.eclipse.osee.ats.client.demo/support/SAW-SystemRequirements.xml2
-rw-r--r--plugins/org.eclipse.osee.define.report.api/src/org/eclipse/osee/define/report/api/WordTemplateContentData.java10
-rw-r--r--plugins/org.eclipse.osee.define.report/META-INF/MANIFEST.MF6
-rw-r--r--plugins/org.eclipse.osee.define.report/src/ApplicabilityGrammar.tokens16
-rw-r--r--plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/ApplicabilityExpression.java200
-rw-r--r--plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordMLApplicabilityHandler.java199
-rw-r--r--plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordTemplateContentRendererHandler.java20
-rw-r--r--plugins/org.eclipse.osee.framework.core/META-INF/MANIFEST.MF5
-rw-r--r--plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.g92
-rw-r--r--plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.tokens16
-rw-r--r--plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarLexer.java467
-rw-r--r--plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarParser.java1150
-rw-r--r--plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java6
-rw-r--r--plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/loader/processor/RelationLoadProcessor.java2
-rw-r--r--plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ApplicabilityEndpointImpl.java12
15 files changed, 2182 insertions, 21 deletions
diff --git a/plugins/org.eclipse.osee.ats.client.demo/support/SAW-SystemRequirements.xml b/plugins/org.eclipse.osee.ats.client.demo/support/SAW-SystemRequirements.xml
index dd876a9ead..47e39f1eec 100644
--- a/plugins/org.eclipse.osee.ats.client.demo/support/SAW-SystemRequirements.xml
+++ b/plugins/org.eclipse.osee.ats.client.demo/support/SAW-SystemRequirements.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
-<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"><w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>Microsoft Word - SAW-SystemRequirements-Rev2.doc</o:Title><o:Author>Peter</o:Author><o:LastAuthor>Donald G. Dunne</o:LastAuthor><o:Revision>9</o:Revision><o:TotalTime>32</o:TotalTime><o:Created>2007-11-08T00:15:00Z</o:Created><o:LastSaved>2008-03-08T22:11:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Words>1836</o:Words><o:Characters>10469</o:Characters><o:Lines>87</o:Lines><o:Paragraphs>24</o:Paragraphs><o:CharactersWithSpaces>12281</o:CharactersWithSpaces><o:Version>11.8134</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/><w:font w:name="Wingdings"><w:panose-1 w:val="05000000000000000000"/><w:charset w:val="02"/><w:family w:val="Auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="10000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/></w:font><w:font w:name="Tahoma"><w:panose-1 w:val="020B0604030504040204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="61007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000" w:csb-0="000101FF" w:csb-1="00000000"/></w:font><w:font w:name="APODLF+TimesNewRoman"><w:altName w:val="Times New Roman"/><w:panose-1 w:val="00000000000000000000"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:notTrueType/><w:pitch w:val="default"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font><w:font w:name="APOBEE+TimesNewRoman,Bold"><w:altName w:val="Times New Roman"/><w:panose-1 w:val="00000000000000000000"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:notTrueType/><w:pitch w:val="default"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:lsid w:val="27052676"/><w:plt w:val="Multilevel"/><w:tmpl w:val="53543520"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="Heading1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="Heading2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:pStyle w:val="Heading3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="Heading4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="Heading5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="Heading6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="Heading7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="Heading8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="Heading9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="1"><w:lsid w:val="4F745A43"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="2B64EB84"/><w:lvl w:ilvl="0" w:tplc="04090005"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="2"><w:lsid w:val="690C37D0"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="EE90C016"/><w:lvl w:ilvl="0" w:tplc="04090005"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="3"><w:lsid w:val="713254E8"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="FED6E646"/><w:lvl w:ilvl="0" w:tplc="04090005"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="0"/></w:list><w:list w:ilfo="2"><w:ilst w:val="3"/></w:list><w:list w:ilfo="3"><w:ilst w:val="1"/></w:list><w:list w:ilfo="4"><w:ilst w:val="2"/></w:list><w:list w:ilfo="5"><w:ilst w:val="0"/></w:list><w:list w:ilfo="6"><w:ilst w:val="0"/></w:list><w:list w:ilfo="7"><w:ilst w:val="0"/></w:list><w:list w:ilfo="8"><w:ilst w:val="0"/></w:list><w:list w:ilfo="9"><w:ilst w:val="0"/></w:list><w:list w:ilfo="10"><w:ilst w:val="0"/></w:list><w:list w:ilfo="11"><w:ilst w:val="0"/></w:list><w:list w:ilfo="12"><w:ilst w:val="0"/></w:list><w:ilfoMacAtCleanup w:val="4"/></w:lists><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:rsid w:val="001D5940"/><w:rPr><wx:font wx:val="Times New Roman"/><w:sz w:val="24"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><wx:uiName wx:val="Heading 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0056103B"/><w:pPr><w:pStyle w:val="Heading1"/><w:keepNext/><w:listPr><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:kern w:val="32"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading2"><w:name w:val="heading 2"/><wx:uiName wx:val="Heading 2"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading2"/><w:keepNext/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="1"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:i/><w:i-cs/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading3"><w:name w:val="heading 3"/><wx:uiName wx:val="Heading 3"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading3"/><w:keepNext/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="2"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="26"/><w:sz-cs w:val="26"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading4"><w:name w:val="heading 4"/><wx:uiName wx:val="Heading 4"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading4"/><w:keepNext/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="3"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:b/><w:b-cs/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading5"><w:name w:val="heading 5"/><wx:uiName wx:val="Heading 5"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading5"/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="4"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:b/><w:b-cs/><w:i/><w:i-cs/><w:sz w:val="26"/><w:sz-cs w:val="26"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading6"><w:name w:val="heading 6"/><wx:uiName wx:val="Heading 6"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading6"/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="5"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:b/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading7"><w:name w:val="heading 7"/><wx:uiName wx:val="Heading 7"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading7"/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="6"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading8"><w:name w:val="heading 8"/><wx:uiName wx:val="Heading 8"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading8"/><w:listPr><w:ilvl w:val="7"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="7"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:i/><w:i-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading9"><w:name w:val="heading 9"/><wx:uiName wx:val="Heading 9"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading9"/><w:listPr><w:ilvl w:val="8"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="8"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/><w:semiHidden/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:semiHidden/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/><w:semiHidden/></w:style><w:style w:type="paragraph" w:styleId="Default"><w:name w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="Default"/><w:widowControl w:val="off"/><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/></w:pPr><w:rPr><w:rFonts w:ascii="APOBEE+TimesNewRoman,Bold" w:h-ansi="APOBEE+TimesNewRoman,Bold" w:cs="APOBEE+TimesNewRoman,Bold"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="000000"/><w:sz w:val="24"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM1"><w:name w:val="CM1"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM1"/><w:spacing w:line="368" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM2"><w:name w:val="CM2"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM2"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM3"><w:name w:val="CM3"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM3"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM26"><w:name w:val="CM26"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM26"/><w:spacing w:after="240"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM4"><w:name w:val="CM4"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM4"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM29"><w:name w:val="CM29"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM29"/><w:spacing w:after="138"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM5"><w:name w:val="CM5"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM5"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM23"><w:name w:val="CM23"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM23"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM24"><w:name w:val="CM24"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM24"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM25"><w:name w:val="CM25"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM25"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM28"><w:name w:val="CM28"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM28"/><w:spacing w:after="333"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="DocumentMap"><w:name w:val="Document Map"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="000F30F7"/><w:pPr><w:pStyle w:val="DocumentMap"/><w:shd w:val="clear" w:color="auto" w:fill="000080"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style></w:styles><w:shapeDefaults><o:shapedefaults v:ext="edit" spidmax="2050"/><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1"/></o:shapelayout></w:shapeDefaults><w:docPr><w:view w:val="normal"/><w:zoom w:percent="100"/><w:bordersDontSurroundHeader/><w:bordersDontSurroundFooter/><w:attachedTemplate w:val=""/><w:defaultTabStop w:val="720"/><w:drawingGridHorizontalSpacing w:val="120"/><w:drawingGridVerticalSpacing w:val="120"/><w:displayHorizontalDrawingGridEvery w:val="0"/><w:displayVerticalDrawingGridEvery w:val="3"/><w:useMarginsForDrawingGridOrigin/><w:doNotShadeFormData/><w:punctuationKerning/><w:characterSpacingControl w:val="CompressPunctuation"/><w:optimizeForBrowser/><w:validateAgainstSchema w:val="off"/><w:saveInvalidXML w:val="off"/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:doNotUnderlineInvalidXML/><w:compat><w:spaceForUL/><w:balanceSingleByteDoubleByteWidth/><w:doNotLeaveBackslashAlone/><w:ulTrailSpace/><w:doNotExpandShiftReturn/><w:footnoteLayoutLikeWW8/><w:shapeLayoutLikeWW8/><w:alignTablesRowByRow/><w:forgetLastTabAlignment/><w:adjustLineHeightInTable/><w:doNotUseHTMLParagraphAutoSpacing/><w:layoutRawTableWidth/><w:layoutTableRowsApart/><w:useWord97LineBreakingRules/><w:dontAllowFieldEndSelect/><w:useWord2002TableStyleRules/></w:compat><wsp:rsids><wsp:rsidRoot wsp:val="00932067"/><wsp:rsid wsp:val="000C7F38"/><wsp:rsid wsp:val="000F30F7"/><wsp:rsid wsp:val="00174D8A"/><wsp:rsid wsp:val="001C74F6"/><wsp:rsid wsp:val="001D5940"/><wsp:rsid wsp:val="002524D4"/><wsp:rsid wsp:val="00282CC6"/><wsp:rsid wsp:val="002F3B05"/><wsp:rsid wsp:val="004113C0"/><wsp:rsid wsp:val="00472BD6"/><wsp:rsid wsp:val="0056103B"/><wsp:rsid wsp:val="005C57DC"/><wsp:rsid wsp:val="006B1AA5"/><wsp:rsid wsp:val="007704C0"/><wsp:rsid wsp:val="00932067"/><wsp:rsid wsp:val="00976243"/><wsp:rsid wsp:val="009C60DF"/><wsp:rsid wsp:val="009E5734"/><wsp:rsid wsp:val="009F2FE2"/><wsp:rsid wsp:val="00A04D4C"/><wsp:rsid wsp:val="00AE56EF"/><wsp:rsid wsp:val="00C10128"/><wsp:rsid wsp:val="00D118A9"/><wsp:rsid wsp:val="00DD3A6B"/><wsp:rsid wsp:val="00DE58D4"/><wsp:rsid wsp:val="00E16903"/><wsp:rsid wsp:val="00E91EE7"/><wsp:rsid wsp:val="00EB2959"/><wsp:rsid wsp:val="00EC0396"/><wsp:rsid wsp:val="00F61047"/><wsp:rsid wsp:val="00F6579C"/><wsp:rsid wsp:val="00FD64F9"/></wsp:rsids></w:docPr><w:body><wx:sect><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading1"/><w:listPr><wx:t wx:val="1. "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Objective </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:r><w:t>This document defines the requirements for the Surgical Assistant Workstation for Teleoperated</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> </w:t></w:r><w:r><w:t>Surgical Robots (SAWTSR) being developed by Johns Hopkins University and Intuitive Surgical. This document provides requirements for the workstation system and does not include application requirements. It is expected that applications developed on this workstation would define their own requirements (i.e., in a separate document). </w:t></w:r></w:p></wx:sub-section><wx:sub-section><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading1"/><w:listPr><wx:t wx:val="2. "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>References </w:t></w:r></w:p><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading2"/><w:listPr><wx:t wx:val="2.1 "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Project-Specific </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>“Development of a Surgical Assistant Workstation for Teleoperated Surgical Robots,” proposal for NSF ERC Supplement, July 2006. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>“Intuitive Surgical daVinci API v5.0 Reference Manual”, generated July 14, 2006. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>J. Leven, D. Burschka, R. Kumar, G. Zhang, S. J. Blumenkranz, X. Dai, M. Awad, G. Hager, M. Marohn, M. Choti, C. Hasser and R. H. Taylor “DaVinci Canvas: A Telerobotic Surgical System with Integrated, Robot-Assisted, Laparoscopic Ultrasound Capability,” in MICCAI, vol. LNCS 3749, J. Duncan and G. Gerig, Eds. Palm Springs, CA: Springer-Verlag, 2005, pp. 811-818. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>J. Leven, “A Telerobotic Surgical Systems with Integrated Robot-Assisted Laparoscopic Ultrasound Capability”, MS Thesis, Computer Science, Johns Hopkins University, Baltimore, 2005. </w:t></w:r></w:p></wx:sub-section><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading2"/><w:listPr><wx:t wx:val="2.2 "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Calibration and Registration Techniques </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>B.K.P. Horn, “Closed-form</w:t></w:r><w:r><w:tab wx:wTab="345" wx:tlc="none" wx:cTlc="5"/><w:t> solution of absolute orientation using unit quaternions,” J. Opt. Soc. Amer. A, Vol. 4, No. 4, pp. 629–642, Apr. 1987. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>K.S. Arun, T.S. Huang, S.D. Blostein, “Least-Squares Fitting of Two 3D Point Sets”, IEEE PAMI, Vol. 9, No. 4, pp. 698-700, Sept. 1987. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>S.</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> </w:t></w:r><w:r><w:t>Umeyama, “Least-Squares Estimation of</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> Transformation Parameters </w:t></w:r><w:r><w:t>Between Two Point Patterns”, IEEE PAMI, Vol. 13,</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> No. 4, pp. 376-380, Apr. 1991.</w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>Boctor, A. Viswanathan, M. Choti, R. Taylor, G. Fichtinger, G. Hager, “A Novel Closed Form Solution for Ultrasound Calibration,” IEEE Intl. Symp. Bio. Imag. (ISBI), Arling</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t>ton, VA, pp 527-530, Apr. 2004.</w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>P. J. Besl and N. D. McKay, "A Method for Registration of 3-D Shapes," IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 14, pp. 239256, Feb. 1992. </w:t></w:r></w:p></wx:sub-section><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading2"/><w:listPr><wx:t wx:val="2.3 "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Virtual Fixtures and Constrained Optimization </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>Kapoor, M. Li, R.H. Taylor, “Constrained Control for Surgical Assistant Robots”, Proc. IEEE Intl. Conf. on Robotics and Automation, Orlando, FL, May 2006, pp 231-236. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li, A. Kapoor and R. H. Taylor “A Constrained Optimization Approach to Virtual Fixtures,” in IROS. Edmonton, Alberta, Canada, 2005. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li and R. H. Taylor, “Performance of Teleoperated and cooperatively controlled surgical robots with automatically generated spatial virtual fixtures.,” in IEEE International Conference on Robotics and Automation. Barcelona, Spain, 2005. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li, “Intelligent Robotic Surgical Assistance for Sinus Surgery”, Ph.D. Thesis, Computer Science, The Johns Hopkins University, Baltimore, Maryland, 2005. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li and R. H. Taylor, “Spatial Motion Constraints in Medical Robots Using Virtual Fixtures Generated by Anatomy,” in IEEE Conf. on Robotics and Automation. New Orleans, 2004, pp. 1270-1275. </w:t></w:r></w:p></wx:sub-section></wx:sub-section><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRPr="002524D4" wsp:rsidRDefault="00D118A9" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading1"/><w:listPr><wx:t wx:val="3. "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Robot </w:t></w:r><w:r wsp:rsidR="002524D4"><w:t>System Overview</w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2"><w:pPr><w:pStyle w:val="CM4"/><w:spacing w:after="383"/><w:ind w:left="360"/><w:jc w:val="both"/><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/></w:rPr><w:t>The goal is to create a unified assistive environment for surgery that integrates robotic devices; fused information environments combining preoperative images &amp; models, intraoperative images &amp; other sensors; surgical task modeling; and human-machine cooperative manipulation, as shown in Figure 1 (from Reference 2.1.1). </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="000C7F38"><w:pPr><w:pStyle w:val="Default"/><w:spacing w:after="160"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/><w:color w:val="auto"/></w:rPr></w:pPr><w:r wsp:rsidRPr="000C7F38"><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/><w:color w:val="auto"/></w:rPr><w:pict><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"/><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/><v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/><v:f eqn="prod @3 21600 pixelWidth"/><v:f eqn="prod @3 21600 pixelHeight"/><v:f eqn="sum @0 0 1"/><v:f eqn="prod @6 1 2"/><v:f eqn="prod @7 21600 pixelWidth"/><v:f eqn="sum @8 21600 0"/><v:f eqn="prod @7 21600 pixelHeight"/><v:f eqn="sum @10 21600 0"/></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/><o:lock v:ext="edit" aspectratio="t"/></v:shapetype><w:binData w:name="wordml://02000001.jpg">/9j/4AAQSkZJRgABAgEAlgCZAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdC
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"><w:ignoreElements w:val="http://schemas.microsoft.com/office/word/2003/wordml/sp2"/><o:DocumentProperties><o:Title>Microsoft Word - SAW-SystemRequirements-Rev2.doc</o:Title><o:Author>Peter</o:Author><o:LastAuthor>Donald G. Dunne</o:LastAuthor><o:Revision>9</o:Revision><o:TotalTime>32</o:TotalTime><o:Created>2007-11-08T00:15:00Z</o:Created><o:LastSaved>2008-03-08T22:11:00Z</o:LastSaved><o:Pages>1</o:Pages><o:Words>1836</o:Words><o:Characters>10469</o:Characters><o:Lines>87</o:Lines><o:Paragraphs>24</o:Paragraphs><o:CharactersWithSpaces>12281</o:CharactersWithSpaces><o:Version>11.8134</o:Version></o:DocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/><w:font w:name="Wingdings"><w:panose-1 w:val="05000000000000000000"/><w:charset w:val="02"/><w:family w:val="Auto"/><w:pitch w:val="variable"/><w:sig w:usb-0="00000000" w:usb-1="10000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/></w:font><w:font w:name="Tahoma"><w:panose-1 w:val="020B0604030504040204"/><w:charset w:val="00"/><w:family w:val="Swiss"/><w:pitch w:val="variable"/><w:sig w:usb-0="61007A87" w:usb-1="80000000" w:usb-2="00000008" w:usb-3="00000000" w:csb-0="000101FF" w:csb-1="00000000"/></w:font><w:font w:name="APODLF+TimesNewRoman"><w:altName w:val="Times New Roman"/><w:panose-1 w:val="00000000000000000000"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:notTrueType/><w:pitch w:val="default"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font><w:font w:name="APOBEE+TimesNewRoman,Bold"><w:altName w:val="Times New Roman"/><w:panose-1 w:val="00000000000000000000"/><w:charset w:val="00"/><w:family w:val="Roman"/><w:notTrueType/><w:pitch w:val="default"/><w:sig w:usb-0="00000003" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:lsid w:val="27052676"/><w:plt w:val="Multilevel"/><w:tmpl w:val="53543520"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:pStyle w:val="Heading1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1. "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="461" w:hanging="461"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1"><w:start w:val="1"/><w:pStyle w:val="Heading2"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="734" w:hanging="734"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2"><w:start w:val="1"/><w:pStyle w:val="Heading3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1066" w:hanging="1066"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3"><w:start w:val="1"/><w:pStyle w:val="Heading4"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1397" w:hanging="1397"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4"><w:start w:val="1"/><w:pStyle w:val="Heading5"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="1742" w:hanging="1742"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5"><w:start w:val="1"/><w:pStyle w:val="Heading6"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2074" w:hanging="2074"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6"><w:start w:val="1"/><w:pStyle w:val="Heading7"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2405" w:hanging="2405"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7"><w:start w:val="1"/><w:pStyle w:val="Heading8"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="2736" w:hanging="2736"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8"><w:start w:val="1"/><w:pStyle w:val="Heading9"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9 "/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="3082" w:hanging="3082"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="1"><w:lsid w:val="4F745A43"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="2B64EB84"/><w:lvl w:ilvl="0" w:tplc="04090005"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="2"><w:lsid w:val="690C37D0"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="EE90C016"/><w:lvl w:ilvl="0" w:tplc="04090005"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:listDef w:listDefId="3"><w:lsid w:val="713254E8"/><w:plt w:val="HybridMultilevel"/><w:tmpl w:val="FED6E646"/><w:lvl w:ilvl="0" w:tplc="04090005"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="720"/></w:tabs><w:ind w:left="720" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="1" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="1440"/></w:tabs><w:ind w:left="1440" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="2" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2160"/></w:tabs><w:ind w:left="2160" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="3" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="2880"/></w:tabs><w:ind w:left="2880" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="4" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="3600"/></w:tabs><w:ind w:left="3600" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="5" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="4320"/></w:tabs><w:ind w:left="4320" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="6" w:tplc="04090001" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5040"/></w:tabs><w:ind w:left="5040" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Symbol" w:h-ansi="Symbol" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="7" w:tplc="04090003" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val="o"/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="5760"/></w:tabs><w:ind w:left="5760" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Courier New" w:h-ansi="Courier New" w:cs="Courier New" w:hint="default"/></w:rPr></w:lvl><w:lvl w:ilvl="8" w:tplc="04090005" w:tentative="on"><w:start w:val="1"/><w:nfc w:val="23"/><w:lvlText w:val=""/><w:lvlJc w:val="left"/><w:pPr><w:tabs><w:tab w:val="list" w:pos="6480"/></w:tabs><w:ind w:left="6480" w:hanging="360"/></w:pPr><w:rPr><w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:hint="default"/></w:rPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="0"/></w:list><w:list w:ilfo="2"><w:ilst w:val="3"/></w:list><w:list w:ilfo="3"><w:ilst w:val="1"/></w:list><w:list w:ilfo="4"><w:ilst w:val="2"/></w:list><w:list w:ilfo="5"><w:ilst w:val="0"/></w:list><w:list w:ilfo="6"><w:ilst w:val="0"/></w:list><w:list w:ilfo="7"><w:ilst w:val="0"/></w:list><w:list w:ilfo="8"><w:ilst w:val="0"/></w:list><w:list w:ilfo="9"><w:ilst w:val="0"/></w:list><w:list w:ilfo="10"><w:ilst w:val="0"/></w:list><w:list w:ilfo="11"><w:ilst w:val="0"/></w:list><w:list w:ilfo="12"><w:ilst w:val="0"/></w:list><w:ilfoMacAtCleanup w:val="4"/></w:lists><w:styles><w:versionOfBuiltInStylenames w:val="4"/><w:latentStyles w:defLockedState="off" w:latentStyleCount="156"/><w:style w:type="paragraph" w:default="on" w:styleId="Normal"><w:name w:val="Normal"/><w:rsid w:val="001D5940"/><w:rPr><wx:font wx:val="Times New Roman"/><w:sz w:val="24"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><wx:uiName wx:val="Heading 1"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="0056103B"/><w:pPr><w:pStyle w:val="Heading1"/><w:keepNext/><w:listPr><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:kern w:val="32"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading2"><w:name w:val="heading 2"/><wx:uiName wx:val="Heading 2"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading2"/><w:keepNext/><w:listPr><w:ilvl w:val="1"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="1"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:i/><w:i-cs/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading3"><w:name w:val="heading 3"/><wx:uiName wx:val="Heading 3"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading3"/><w:keepNext/><w:listPr><w:ilvl w:val="2"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="2"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:b/><w:b-cs/><w:sz w:val="26"/><w:sz-cs w:val="26"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading4"><w:name w:val="heading 4"/><wx:uiName wx:val="Heading 4"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading4"/><w:keepNext/><w:listPr><w:ilvl w:val="3"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="3"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:b/><w:b-cs/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading5"><w:name w:val="heading 5"/><wx:uiName wx:val="Heading 5"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading5"/><w:listPr><w:ilvl w:val="4"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="4"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:b/><w:b-cs/><w:i/><w:i-cs/><w:sz w:val="26"/><w:sz-cs w:val="26"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading6"><w:name w:val="heading 6"/><wx:uiName wx:val="Heading 6"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading6"/><w:listPr><w:ilvl w:val="5"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="5"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:b/><w:b-cs/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading7"><w:name w:val="heading 7"/><wx:uiName wx:val="Heading 7"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading7"/><w:listPr><w:ilvl w:val="6"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="6"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading8"><w:name w:val="heading 8"/><wx:uiName wx:val="Heading 8"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading8"/><w:listPr><w:ilvl w:val="7"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="7"/></w:pPr><w:rPr><wx:font wx:val="Times New Roman"/><w:i/><w:i-cs/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="Heading9"><w:name w:val="heading 9"/><wx:uiName wx:val="Heading 9"/><w:basedOn w:val="Normal"/><w:next w:val="Normal"/><w:rsid w:val="00AE56EF"/><w:pPr><w:pStyle w:val="Heading9"/><w:listPr><w:ilvl w:val="8"/><w:ilfo w:val="1"/></w:listPr><w:spacing w:before="240" w:after="60"/><w:outlineLvl w:val="8"/></w:pPr><w:rPr><w:rFonts w:ascii="Arial" w:h-ansi="Arial" w:cs="Arial"/><wx:font wx:val="Arial"/><w:sz w:val="22"/><w:sz-cs w:val="22"/></w:rPr></w:style><w:style w:type="character" w:default="on" w:styleId="DefaultParagraphFont"><w:name w:val="Default Paragraph Font"/><w:semiHidden/></w:style><w:style w:type="table" w:default="on" w:styleId="TableNormal"><w:name w:val="Normal Table"/><wx:uiName wx:val="Table Normal"/><w:semiHidden/><w:rPr><wx:font wx:val="Times New Roman"/></w:rPr><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="list" w:default="on" w:styleId="NoList"><w:name w:val="No List"/><w:semiHidden/></w:style><w:style w:type="paragraph" w:styleId="Default"><w:name w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="Default"/><w:widowControl w:val="off"/><w:autoSpaceDE w:val="off"/><w:autoSpaceDN w:val="off"/><w:adjustRightInd w:val="off"/></w:pPr><w:rPr><w:rFonts w:ascii="APOBEE+TimesNewRoman,Bold" w:h-ansi="APOBEE+TimesNewRoman,Bold" w:cs="APOBEE+TimesNewRoman,Bold"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="000000"/><w:sz w:val="24"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="EN-US" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM1"><w:name w:val="CM1"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM1"/><w:spacing w:line="368" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM2"><w:name w:val="CM2"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM2"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM3"><w:name w:val="CM3"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM3"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM26"><w:name w:val="CM26"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM26"/><w:spacing w:after="240"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM4"><w:name w:val="CM4"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM4"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM29"><w:name w:val="CM29"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM29"/><w:spacing w:after="138"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM5"><w:name w:val="CM5"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM5"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM23"><w:name w:val="CM23"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM23"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM24"><w:name w:val="CM24"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM24"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM25"><w:name w:val="CM25"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM25"/><w:spacing w:line="276" w:line-rule="at-least"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="CM28"><w:name w:val="CM28"/><w:basedOn w:val="Default"/><w:next w:val="Default"/><w:rsid w:val="001D5940"/><w:pPr><w:pStyle w:val="CM28"/><w:spacing w:after="333"/></w:pPr><w:rPr><w:rFonts w:cs="Times New Roman"/><wx:font wx:val="APOBEE+TimesNewRoman,Bold"/><w:color w:val="auto"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="DocumentMap"><w:name w:val="Document Map"/><w:basedOn w:val="Normal"/><w:semiHidden/><w:rsid w:val="000F30F7"/><w:pPr><w:pStyle w:val="DocumentMap"/><w:shd w:val="clear" w:color="auto" w:fill="000080"/></w:pPr><w:rPr><w:rFonts w:ascii="Tahoma" w:h-ansi="Tahoma" w:cs="Tahoma"/><wx:font wx:val="Tahoma"/><w:sz w:val="20"/><w:sz-cs w:val="20"/></w:rPr></w:style></w:styles><w:shapeDefaults><o:shapedefaults v:ext="edit" spidmax="2050"/><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1"/></o:shapelayout></w:shapeDefaults><w:docPr><w:view w:val="normal"/><w:zoom w:percent="100"/><w:bordersDontSurroundHeader/><w:bordersDontSurroundFooter/><w:attachedTemplate w:val=""/><w:defaultTabStop w:val="720"/><w:drawingGridHorizontalSpacing w:val="120"/><w:drawingGridVerticalSpacing w:val="120"/><w:displayHorizontalDrawingGridEvery w:val="0"/><w:displayVerticalDrawingGridEvery w:val="3"/><w:useMarginsForDrawingGridOrigin/><w:doNotShadeFormData/><w:punctuationKerning/><w:characterSpacingControl w:val="CompressPunctuation"/><w:optimizeForBrowser/><w:validateAgainstSchema w:val="off"/><w:saveInvalidXML w:val="off"/><w:ignoreMixedContent w:val="off"/><w:alwaysShowPlaceholderText w:val="off"/><w:doNotUnderlineInvalidXML/><w:compat><w:spaceForUL/><w:balanceSingleByteDoubleByteWidth/><w:doNotLeaveBackslashAlone/><w:ulTrailSpace/><w:doNotExpandShiftReturn/><w:footnoteLayoutLikeWW8/><w:shapeLayoutLikeWW8/><w:alignTablesRowByRow/><w:forgetLastTabAlignment/><w:adjustLineHeightInTable/><w:doNotUseHTMLParagraphAutoSpacing/><w:layoutRawTableWidth/><w:layoutTableRowsApart/><w:useWord97LineBreakingRules/><w:dontAllowFieldEndSelect/><w:useWord2002TableStyleRules/></w:compat><wsp:rsids><wsp:rsidRoot wsp:val="00932067"/><wsp:rsid wsp:val="000C7F38"/><wsp:rsid wsp:val="000F30F7"/><wsp:rsid wsp:val="00174D8A"/><wsp:rsid wsp:val="001C74F6"/><wsp:rsid wsp:val="001D5940"/><wsp:rsid wsp:val="002524D4"/><wsp:rsid wsp:val="00282CC6"/><wsp:rsid wsp:val="002F3B05"/><wsp:rsid wsp:val="004113C0"/><wsp:rsid wsp:val="00472BD6"/><wsp:rsid wsp:val="0056103B"/><wsp:rsid wsp:val="005C57DC"/><wsp:rsid wsp:val="006B1AA5"/><wsp:rsid wsp:val="007704C0"/><wsp:rsid wsp:val="00932067"/><wsp:rsid wsp:val="00976243"/><wsp:rsid wsp:val="009C60DF"/><wsp:rsid wsp:val="009E5734"/><wsp:rsid wsp:val="009F2FE2"/><wsp:rsid wsp:val="00A04D4C"/><wsp:rsid wsp:val="00AE56EF"/><wsp:rsid wsp:val="00C10128"/><wsp:rsid wsp:val="00D118A9"/><wsp:rsid wsp:val="00DD3A6B"/><wsp:rsid wsp:val="00DE58D4"/><wsp:rsid wsp:val="00E16903"/><wsp:rsid wsp:val="00E91EE7"/><wsp:rsid wsp:val="00EB2959"/><wsp:rsid wsp:val="00EC0396"/><wsp:rsid wsp:val="00F61047"/><wsp:rsid wsp:val="00F6579C"/><wsp:rsid wsp:val="00FD64F9"/></wsp:rsids></w:docPr><w:body><wx:sect><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading1"/><w:listPr><wx:t wx:val="1. "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Objective </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:r><w:t>This document defines the requirements for the Surgical Assistant Workstation for Teleoperated</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> </w:t></w:r><w:r><w:t>Surgical Robots (SAWTSR) being developed by Johns Hopkins University and Intuitive Surgical. This document provides requirements for the workstation system and does not include application requirements. It is expected that applications developed on this workstation would define their own requirements (i.e., in a separate document). </w:t></w:r> <w:p><w:r><w:t> Feature[A] Test feature a is included for config1 End Feature Feature[A=Excluded] Test a is excluded for config2 End Feature[A=Excluded] Feature[B = Choice1 | Choice2] Test this text is here for config1 and config2 End Feature </w:t></w:r></w:p> <w:p><w:r><w:t> Feature[C] Test c is included for config1 Feature Else Test else statement is here for config2 End Feature[C] </w:t></w:r></w:p> <w:p><w:r><w:t> Configuration[Config1] Test config1 configuration tag works End Configuration Configuration[Config2] Test Config2 configuration tag works End Configuration </w:t></w:r></w:p> </w:p></wx:sub-section><wx:sub-section><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading1"/><w:listPr><wx:t wx:val="2. "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>References </w:t></w:r></w:p><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading2"/><w:listPr><wx:t wx:val="2.1 "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Project-Specific </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>“Development of a Surgical Assistant Workstation for Teleoperated Surgical Robots,” proposal for NSF ERC Supplement, July 2006. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>“Intuitive Surgical daVinci API v5.0 Reference Manual”, generated July 14, 2006. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>J. Leven, D. Burschka, R. Kumar, G. Zhang, S. J. Blumenkranz, X. Dai, M. Awad, G. Hager, M. Marohn, M. Choti, C. Hasser and R. H. Taylor “DaVinci Canvas: A Telerobotic Surgical System with Integrated, Robot-Assisted, Laparoscopic Ultrasound Capability,” in MICCAI, vol. LNCS 3749, J. Duncan and G. Gerig, Eds. Palm Springs, CA: Springer-Verlag, 2005, pp. 811-818. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>J. Leven, “A Telerobotic Surgical Systems with Integrated Robot-Assisted Laparoscopic Ultrasound Capability”, MS Thesis, Computer Science, Johns Hopkins University, Baltimore, 2005. </w:t></w:r></w:p></wx:sub-section><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading2"/><w:listPr><wx:t wx:val="2.2 "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Calibration and Registration Techniques </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>B.K.P. Horn, “Closed-form</w:t></w:r><w:r><w:tab wx:wTab="345" wx:tlc="none" wx:cTlc="5"/><w:t> solution of absolute orientation using unit quaternions,” J. Opt. Soc. Amer. A, Vol. 4, No. 4, pp. 629–642, Apr. 1987. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>K.S. Arun, T.S. Huang, S.D. Blostein, “Least-Squares Fitting of Two 3D Point Sets”, IEEE PAMI, Vol. 9, No. 4, pp. 698-700, Sept. 1987. </w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>S.</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> </w:t></w:r><w:r><w:t>Umeyama, “Least-Squares Estimation of</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> Transformation Parameters </w:t></w:r><w:r><w:t>Between Two Point Patterns”, IEEE PAMI, Vol. 13,</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t> No. 4, pp. 376-380, Apr. 1991.</w:t></w:r></w:p><w:p wsp:rsidR="00AE56EF" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>Boctor, A. Viswanathan, M. Choti, R. Taylor, G. Fichtinger, G. Hager, “A Novel Closed Form Solution for Ultrasound Calibration,” IEEE Intl. Symp. Bio. Imag. (ISBI), Arling</w:t></w:r><w:r wsp:rsidR="00AE56EF"><w:t>ton, VA, pp 527-530, Apr. 2004.</w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="3"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>P. J. Besl and N. D. McKay, "A Method for Registration of 3-D Shapes," IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 14, pp. 239256, Feb. 1992. </w:t></w:r></w:p></wx:sub-section><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading2"/><w:listPr><wx:t wx:val="2.3 "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Virtual Fixtures and Constrained Optimization </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>Kapoor, M. Li, R.H. Taylor, “Constrained Control for Surgical Assistant Robots”, Proc. IEEE Intl. Conf. on Robotics and Automation, Orlando, FL, May 2006, pp 231-236. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li, A. Kapoor and R. H. Taylor “A Constrained Optimization Approach to Virtual Fixtures,” in IROS. Edmonton, Alberta, Canada, 2005. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li and R. H. Taylor, “Performance of Teleoperated and cooperatively controlled surgical robots with automatically generated spatial virtual fixtures.,” in IEEE International Conference on Robotics and Automation. Barcelona, Spain, 2005. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li, “Intelligent Robotic Surgical Assistance for Sinus Surgery”, Ph.D. Thesis, Computer Science, The Johns Hopkins University, Baltimore, Maryland, 2005. </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2" wsp:rsidP="00AE56EF"><w:pPr><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="4"/><wx:t wx:val="§" wx:wTabBefore="360" wx:wTabAfter="255"/><wx:font wx:val="Wingdings"/></w:listPr></w:pPr><w:r><w:t>M. Li and R. H. Taylor, “Spatial Motion Constraints in Medical Robots Using Virtual Fixtures Generated by Anatomy,” in IEEE Conf. on Robotics and Automation. New Orleans, 2004, pp. 1270-1275. </w:t></w:r></w:p></wx:sub-section></wx:sub-section><wx:sub-section><w:p wsp:rsidR="009F2FE2" wsp:rsidRPr="002524D4" wsp:rsidRDefault="00D118A9" wsp:rsidP="00EB2959"><w:pPr><w:pStyle w:val="Heading1"/><w:listPr><wx:t wx:val="3. "/><wx:font wx:val="Times New Roman"/></w:listPr></w:pPr><w:r><w:t>Robot </w:t></w:r><w:r wsp:rsidR="002524D4"><w:t>System Overview</w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="009F2FE2"><w:pPr><w:pStyle w:val="CM4"/><w:spacing w:after="383"/><w:ind w:left="360"/><w:jc w:val="both"/><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/></w:rPr><w:t>The goal is to create a unified assistive environment for surgery that integrates robotic devices; fused information environments combining preoperative images &amp; models, intraoperative images &amp; other sensors; surgical task modeling; and human-machine cooperative manipulation, as shown in Figure 1 (from Reference 2.1.1). </w:t></w:r></w:p><w:p wsp:rsidR="009F2FE2" wsp:rsidRDefault="000C7F38"><w:pPr><w:pStyle w:val="Default"/><w:spacing w:after="160"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/><w:color w:val="auto"/></w:rPr></w:pPr><w:r wsp:rsidRPr="000C7F38"><w:rPr><w:rFonts w:ascii="APODLF+TimesNewRoman" w:h-ansi="APODLF+TimesNewRoman" w:cs="APODLF+TimesNewRoman"/><wx:font wx:val="APODLF+TimesNewRoman"/><w:color w:val="auto"/></w:rPr><w:pict><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"/><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/><v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/><v:f eqn="prod @3 21600 pixelWidth"/><v:f eqn="prod @3 21600 pixelHeight"/><v:f eqn="sum @0 0 1"/><v:f eqn="prod @6 1 2"/><v:f eqn="prod @7 21600 pixelWidth"/><v:f eqn="sum @8 21600 0"/><v:f eqn="prod @7 21600 pixelHeight"/><v:f eqn="sum @10 21600 0"/></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/><o:lock v:ext="edit" aspectratio="t"/></v:shapetype><w:binData w:name="wordml://02000001.jpg">/9j/4AAQSkZJRgABAgEAlgCZAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdC
IFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAA
AADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj
cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAA
diff --git a/plugins/org.eclipse.osee.define.report.api/src/org/eclipse/osee/define/report/api/WordTemplateContentData.java b/plugins/org.eclipse.osee.define.report.api/src/org/eclipse/osee/define/report/api/WordTemplateContentData.java
index 907932323b..ddb32bc3d7 100644
--- a/plugins/org.eclipse.osee.define.report.api/src/org/eclipse/osee/define/report/api/WordTemplateContentData.java
+++ b/plugins/org.eclipse.osee.define.report.api/src/org/eclipse/osee/define/report/api/WordTemplateContentData.java
@@ -21,7 +21,7 @@ import org.eclipse.osee.framework.core.data.TransactionId;
public class WordTemplateContentData {
private Long artId;
- private BranchId branchId;
+ private BranchId branch;
private String footer;
private boolean isEdit;
private String linkType;
@@ -37,12 +37,12 @@ public class WordTemplateContentData {
this.artId = artId;
}
- public BranchId getBranchId() {
- return branchId;
+ public BranchId getBranch() {
+ return branch;
}
- public void setBranchId(BranchId branchId) {
- this.branchId = branchId;
+ public void setBranch(BranchId branch) {
+ this.branch = branch;
}
public String getFooter() {
diff --git a/plugins/org.eclipse.osee.define.report/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.define.report/META-INF/MANIFEST.MF
index 63164ae169..1f69bfe5c5 100644
--- a/plugins/org.eclipse.osee.define.report/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.define.report/META-INF/MANIFEST.MF
@@ -10,6 +10,11 @@ Import-Package: com.google.common.base;version="15.0.0",
com.google.gson,
javax.ws.rs,
javax.ws.rs.core,
+ org.antlr.runtime,
+ org.antlr.runtime.debug,
+ org.antlr.runtime.tree,
+ org.codehaus.jackson;version="1.9.13",
+ org.codehaus.jackson.map;version="1.9.13",
org.eclipse.osee.app,
org.eclipse.osee.ats.core.config,
org.eclipse.osee.ats.core.users,
@@ -20,6 +25,7 @@ Import-Package: com.google.common.base;version="15.0.0",
org.eclipse.osee.framework.core.data,
org.eclipse.osee.framework.core.enums,
org.eclipse.osee.framework.core.exception,
+ org.eclipse.osee.framework.core.grammar,
org.eclipse.osee.framework.core.model,
org.eclipse.osee.framework.core.util,
org.eclipse.osee.framework.jdk.core.text,
diff --git a/plugins/org.eclipse.osee.define.report/src/ApplicabilityGrammar.tokens b/plugins/org.eclipse.osee.define.report/src/ApplicabilityGrammar.tokens
new file mode 100644
index 0000000000..3a944a1026
--- /dev/null
+++ b/plugins/org.eclipse.osee.define.report/src/ApplicabilityGrammar.tokens
@@ -0,0 +1,16 @@
+T__9=9
+T__8=8
+OR=4
+AND=6
+T__11=11
+T__12=12
+T__13=13
+ID=5
+WS=7
+T__10=10
+']'=9
+'='=11
+')'=13
+'('=12
+'Feature['=10
+'Configuration['=8
diff --git a/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/ApplicabilityExpression.java b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/ApplicabilityExpression.java
new file mode 100644
index 0000000000..4dd18aab99
--- /dev/null
+++ b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/ApplicabilityExpression.java
@@ -0,0 +1,200 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.define.report.internal.wordupdate;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.eclipse.osee.framework.core.data.FeatureDefinitionData;
+import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
+import org.eclipse.osee.orcs.data.ArtifactReadable;
+
+/**
+ * @author Morgan E. Cook
+ */
+public class ApplicabilityExpression {
+
+ private String content;
+ private String elseContent;
+
+ private String configuration;
+ private HashCollection<String, String> featureValuesAllowed;
+
+ private static ScriptEngineManager sem = new ScriptEngineManager();
+ private static ScriptEngine se = sem.getEngineByName("JavaScript");
+
+ public ApplicabilityExpression(String configuration, HashCollection<String, String> featureValuesAllowed) {
+ this.configuration = configuration;
+ this.featureValuesAllowed = featureValuesAllowed;
+ }
+
+ public String getValidConfigurationContent(String text, ArrayList<String> configurations) {
+ parseContent(text, false);
+
+ String toReturn = elseContent;
+
+ for (String config : configurations) {
+ if (configuration.equals(config)) {
+ toReturn = content;
+ }
+ }
+
+ return toReturn;
+ }
+
+ public String getValidFeatureContent(String text, HashMap<String, List<String>> featureIdValuesMap, ArrayList<String> featureOperators, ArtifactReadable featureDefArt) {
+ parseContent(text, true);
+
+ String toReturn = null;
+
+ String expression = createFeatureExpression(featureIdValuesMap, featureOperators, featureDefArt);
+
+ boolean result = false;
+ try {
+ result = (boolean) se.eval(expression);
+ } catch (ScriptException ex) {
+ throw new OseeCoreException("Failed to parse expression: " + expression);
+ }
+
+ if (result) {
+ toReturn = content;
+ } else {
+ toReturn = elseContent;
+ }
+
+ return toReturn;
+ }
+
+ private void parseContent(String text, boolean isFeature) {
+ content = text;
+ elseContent = null;
+
+ Matcher match = WordMLApplicabilityHandler.ELSE_PATTERN.matcher(text);
+
+ if (match.find()) {
+ content = text.substring(0, match.start());
+
+ elseContent = text.substring(match.end());
+ if (isFeature) {
+ elseContent = elseContent.replaceAll(WordMLApplicabilityHandler.ENDFEATURE, "");
+ elseContent = elseContent.replaceAll(WordMLApplicabilityHandler.BEGINFEATURE, "");
+ } else {
+ elseContent = elseContent.replaceAll(WordMLApplicabilityHandler.ENDCONFIG, "");
+ elseContent = elseContent.replaceAll(WordMLApplicabilityHandler.BEGINCONFIG, "");
+ }
+
+ }
+ if (isFeature) {
+ content = content.replaceAll(WordMLApplicabilityHandler.ENDFEATURE, "");
+ content = content.replaceAll(WordMLApplicabilityHandler.BEGINFEATURE, "");
+ } else {
+ content = content.replaceAll(WordMLApplicabilityHandler.ENDCONFIG, "");
+ content = content.replaceAll(WordMLApplicabilityHandler.BEGINCONFIG, "");
+ }
+ }
+
+ private String createFeatureExpression(HashMap<String, List<String>> featureIdValuesMap, ArrayList<String> featureOperators, ArtifactReadable featureDefArt) {
+ String myFeatureExpression = "";
+ Iterator<String> iterator = featureOperators.iterator();
+
+ for (String feature : featureIdValuesMap.keySet()) {
+ List<String> values = featureIdValuesMap.get(feature);
+
+ String valueExpression = createValueExpression(feature, values, featureDefArt);
+
+ boolean result = false;
+
+ try {
+ result = (boolean) se.eval(valueExpression);
+ } catch (ScriptException ex) {
+ throw new OseeCoreException("Failed to parse expression: " + valueExpression);
+ }
+
+ myFeatureExpression += result + " ";
+
+ if (iterator.hasNext()) {
+ String next = iterator.next();
+ if (next.equals("|")) {
+ myFeatureExpression += "|| ";
+ } else if (next.equals("&")) {
+ myFeatureExpression += "&& ";
+ }
+ }
+ }
+
+ return myFeatureExpression;
+ }
+
+ private String createValueExpression(String feature, List<String> values, ArtifactReadable featureDefArt) {
+ String myValueExpression = "";
+ for (String value : values) {
+ if (value.equals("(")) {
+ myValueExpression += "( ";
+ } else if (value.equals(")")) {
+ myValueExpression += ") ";
+ } else if (value.equals("|")) {
+ myValueExpression += "|| ";
+ } else if (value.equals("&")) {
+ myValueExpression += "&& ";
+ } else {
+ boolean eval = isFeatureValuePairValid(feature, value, featureDefArt);
+ myValueExpression += eval + " ";
+ }
+ }
+
+ return myValueExpression;
+ }
+
+ private boolean isFeatureValuePairValid(String feature, String value, ArtifactReadable featureDefArt) {
+ if (featureValuesAllowed.containsKey(feature)) {
+ Collection<String> validValues = featureValuesAllowed.getValues(feature);
+
+ value = value.equals("Default") ? getDefaultValue(feature, featureDefArt) : value;
+
+ if (validValues.contains(value)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private String getDefaultValue(String feature, ArtifactReadable featureDefArt) {
+ String toReturn = null;
+ try {
+ String json = featureDefArt.getSoleAttributeAsString(CoreAttributeTypes.GeneralStringData);
+
+ ObjectMapper mapper = new ObjectMapper();
+ FeatureDefinitionData[] featDataList = mapper.readValue(json, FeatureDefinitionData[].class);
+
+ for (FeatureDefinitionData featData : featDataList) {
+ if (featData.getName().equals(feature)) {
+ toReturn = featData.getDefaultValue();
+ break;
+ }
+ }
+ } catch (Exception e) {
+ throw new OseeCoreException("Error getting default value for feature: " + feature);
+ }
+
+ return toReturn;
+ }
+}
diff --git a/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordMLApplicabilityHandler.java b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordMLApplicabilityHandler.java
new file mode 100644
index 0000000000..ac245ba258
--- /dev/null
+++ b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordMLApplicabilityHandler.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Boeing.
+ * 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
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.report.internal.wordupdate;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.antlr.runtime.ANTLRStringStream;
+import org.antlr.runtime.CommonTokenStream;
+import org.antlr.runtime.RecognitionException;
+import org.eclipse.osee.framework.core.data.BranchId;
+import org.eclipse.osee.framework.core.enums.CoreArtifactTypes;
+import org.eclipse.osee.framework.core.grammar.ApplicabilityGrammarLexer;
+import org.eclipse.osee.framework.core.grammar.ApplicabilityGrammarParser;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
+import org.eclipse.osee.orcs.OrcsApi;
+import org.eclipse.osee.orcs.data.ArtifactReadable;
+
+public class WordMLApplicabilityHandler {
+
+ private static String FEATUREAPP = "feature";
+ private static String CONFIGAPP = "config";
+
+ private static String MAX_TAG_OCCURENCE = "30";
+ private static String WORD_ML_TAGS = "(\\<[^>]*?>){0," + MAX_TAG_OCCURENCE + "}";
+
+ private static String TABLE_CELL = "<w:tc>";
+ private static String TABLE = "<w:tbl>";
+
+ public static String END = "E" + WORD_ML_TAGS + "n" + WORD_ML_TAGS + "d ?" + WORD_ML_TAGS + " ?";
+ public static String ELSE = "E" + WORD_ML_TAGS + "l" + WORD_ML_TAGS + "s" + WORD_ML_TAGS + "e ?";
+ public static String FEATURE =
+ "F" + WORD_ML_TAGS + "e" + WORD_ML_TAGS + "a" + WORD_ML_TAGS + "t" + WORD_ML_TAGS + "u" + WORD_ML_TAGS + "r" + WORD_ML_TAGS + "e";
+ public static String CONFIG =
+ "C" + WORD_ML_TAGS + "o" + WORD_ML_TAGS + "n" + WORD_ML_TAGS + "f" + WORD_ML_TAGS + "i" + WORD_ML_TAGS + "g" + WORD_ML_TAGS + "u" + WORD_ML_TAGS + "r" + WORD_ML_TAGS + "a" + WORD_ML_TAGS + "t" + WORD_ML_TAGS + "i" + WORD_ML_TAGS + "o" + WORD_ML_TAGS + "n";
+
+ public static String ENDBRACKETS = WORD_ML_TAGS + "(\\[(.*?)\\]) ?";
+ public static String OPTIONAL_ENDBRACKETS = " ?(" + WORD_ML_TAGS + "(\\[.*?\\]))?";
+ public static String BEGINFEATURE = FEATURE + ENDBRACKETS;
+ public static String ENDFEATURE = END + FEATURE + OPTIONAL_ENDBRACKETS;
+ public static String BEGINCONFIG = CONFIG + ENDBRACKETS;
+ public static String ENDCONFIG = END + CONFIG + OPTIONAL_ENDBRACKETS;
+
+ public static String LOGICAL_STRING = WORD_ML_TAGS + " ?(LM|ID).*?";
+
+ public static Pattern LOGICAL_PATTERN =
+ Pattern.compile(LOGICAL_STRING, Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ public static Pattern FEATURE_CONFIG_PATTERN =
+ Pattern.compile("(" + BEGINFEATURE + "(.*?)" + ENDFEATURE + ")|(" + BEGINCONFIG + "(.*?)" + ENDCONFIG + ")",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ public static Pattern ELSE_PATTERN = Pattern.compile("(" + FEATURE + "|" + CONFIG + ")" + " " + ELSE,
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ public static Pattern TABLE_PATTERN =
+ Pattern.compile("<w:tbl>(.*?)</w:tbl>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ public static Pattern TABLE_ROW_PATTERN =
+ Pattern.compile("<w:tr wsp:rsidR=\".*?\" wsp:rsidRPr=\".*?\" wsp:rsidTr=\".*?\">(.*?)</w:tr>",
+ Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+ public static Pattern TABLE_CELL_PATTERN =
+ Pattern.compile("<w:tc>(.*?)</w:tc>", Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
+
+ private static int startSearchIndex = 0;
+ private static int startReplaceIndex = 0;
+ private static int endReplaceIndex = 0;
+
+ public static String previewValidApplicabilityContent(OrcsApi orcsApi, String content, BranchId branch) {
+ String toReturn = content;
+ startReplaceIndex = 0;
+ endReplaceIndex = 0;
+ startSearchIndex = 0;
+
+ HashCollection<String, String> featureValuesAllowed =
+ orcsApi.getQueryFactory().applicabilityQuery().getBranchViewFeatureValues(branch, branch.getViewId());
+
+ String configuration = featureValuesAllowed.getValues("Config").iterator().next();
+
+ ApplicabilityExpression appExp = new ApplicabilityExpression(configuration, featureValuesAllowed);
+
+ // need to do this to make sure index keeps getting updated for adding and removing content
+ while (startSearchIndex < toReturn.length()) {
+ String toSearch = toReturn.substring(startSearchIndex);
+
+ String applicabilityContent = findNextApplicability(toSearch);
+
+ if (applicabilityContent == null) {
+ break;
+ }
+
+ String plainText = WordUtilities.textOnly(applicabilityContent);
+ String plExpression = plainText.substring(0, plainText.indexOf("]") + 1);
+ toReturn = parseExpression(orcsApi, appExp, plExpression, applicabilityContent, toReturn, branch);
+ }
+
+ return toReturn;
+ }
+
+ private static String parseExpression(OrcsApi orcsApi, ApplicabilityExpression featureAppExp, String plExpression, String contentBlock, String toReturn, BranchId branch) {
+ String validContent = null;
+ try {
+ ApplicabilityGrammarLexer lex = new ApplicabilityGrammarLexer(new ANTLRStringStream(plExpression));
+ ApplicabilityGrammarParser parser = new ApplicabilityGrammarParser(new CommonTokenStream(lex));
+ parser.start();
+
+ String applicabilityType = parser.getApplicabilityType();
+
+ if (applicabilityType.equals(FEATUREAPP)) {
+ ArtifactReadable featureDefArt = orcsApi.getQueryFactory().fromBranch(branch).andTypeEquals(
+ CoreArtifactTypes.FeatureDefinition).getResults().getExactlyOne();
+
+ validContent = featureAppExp.getValidFeatureContent(contentBlock, parser.getFeatureIdValuesMap(),
+ parser.getFeatureOperators(), featureDefArt);
+ } else if (applicabilityType.equals(CONFIGAPP)) {
+ validContent = featureAppExp.getValidConfigurationContent(contentBlock, parser.getConfigIds());
+ }
+
+ } catch (RecognitionException ex) {
+ throw new OseeCoreException(
+ "Failed to parse expression: " + plExpression + " at start Index: " + startReplaceIndex);
+ }
+
+ if (validContent != null) {
+ String toReplace = toReturn.substring(startReplaceIndex, endReplaceIndex);
+ toReturn = toReturn.replace(toReplace, validContent);
+ startSearchIndex = startReplaceIndex + validContent.length();
+ } else {
+ String toReplace = toReturn.substring(startReplaceIndex, endReplaceIndex);
+ toReturn = toReturn.replace(toReplace, "");
+ startSearchIndex = startReplaceIndex;
+ }
+
+ return toReturn;
+ }
+
+ private static String findNextApplicability(String toSearch) {
+ String toReturn = null;
+
+ Matcher match = FEATURE_CONFIG_PATTERN.matcher(toSearch);
+
+ if (match.find()) {
+ // If match contains the table tag, the Feature/Config is around entire table and not just a row so no special parsing needed
+ if (!match.group(0).contains(TABLE) && match.group(0).contains(TABLE_CELL)) {
+ String findStartOfRow = toSearch.substring(0, match.start());
+ int startRowIndex = findStartOfRow.lastIndexOf("<w:tr wsp:rsidR=");
+
+ if (startRowIndex != -1) {
+
+ String findEndOfRow = toSearch.substring(startRowIndex);
+ int endRowIndex = findEndOfRow.indexOf("</w:tr>");
+ if (endRowIndex != -1) {
+ endRowIndex = endRowIndex + startRowIndex + 7;
+ toReturn = toSearch.substring(startRowIndex, endRowIndex);
+ startReplaceIndex = startRowIndex + startSearchIndex;
+ endReplaceIndex = startReplaceIndex + toReturn.length();
+ }
+ }
+ } else {
+ //this is End Feature optional bracket
+ int actualEnd = match.end();
+ // Group 21 is ending brackets for features, Group 56 is ending brackets for Configuration
+ String endBracket = null;
+ int endIndex = -1;
+ int startIndex = -1;
+ if (match.group(21) != null) {
+ endBracket = match.group(21);
+ endIndex = match.end(21);
+ startIndex = match.start(21);
+ } else if (match.group(56) != null) {
+ endBracket = match.group(56);
+ endIndex = match.end(56);
+ startIndex = match.start(56);
+ }
+ if (endBracket != null) {
+ String endBracketText = WordUtilities.textOnly(endBracket);
+
+ // Don't include because it is not a feature/configuration tag
+ if (endBracketText.contains(".") || toSearch.substring(endIndex).matches(LOGICAL_STRING)) {
+ actualEnd = startIndex;
+ }
+ }
+ int e = match.group().length() - (match.end() - actualEnd);
+ toReturn = match.group(0).substring(0, e);
+ startReplaceIndex = match.start() + startSearchIndex;
+ endReplaceIndex = actualEnd + startSearchIndex;
+ }
+ }
+
+ return toReturn;
+ }
+}
diff --git a/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordTemplateContentRendererHandler.java b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordTemplateContentRendererHandler.java
index a42b60ba73..b70033061a 100644
--- a/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordTemplateContentRendererHandler.java
+++ b/plugins/org.eclipse.osee.define.report/src/org/eclipse/osee/define/report/internal/wordupdate/WordTemplateContentRendererHandler.java
@@ -14,6 +14,7 @@ import java.util.HashSet;
import java.util.Set;
import org.eclipse.osee.define.report.api.ReportConstants;
import org.eclipse.osee.define.report.api.WordTemplateContentData;
+import org.eclipse.osee.framework.core.data.ArtifactId;
import org.eclipse.osee.framework.core.data.TransactionId;
import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
import org.eclipse.osee.framework.core.enums.DeletionFlag;
@@ -27,7 +28,13 @@ import org.eclipse.osee.orcs.data.ArtifactReadable;
public class WordTemplateContentRendererHandler {
public static final String PGNUMTYPE_START_1 = "<w:pgNumType [^>]*w:start=\"1\"/>";
- private final OrcsApi orcsApi;
+ public static final String PL_STYLE =
+ "<w:rPr><w:rStyle w:val=\"ProductLineApplicability\"((?=/>)(/>)|(.*?</w:rStyle>)).*?</w:rPr>";
+ public static final String PL_HIGHLIGHT =
+ "<w:highlight w:val=\"light-gray\"></w:highlight><w:shd w:color=\"auto\" w:fill=\"BFBFBF\" w:val=\"clear\"></w:shd>";
+ public static final String EMPTY_PARAGRAPHS = "<w:r wsp:rsidRPr=\"\\d+\"><w:t></w:t></w:r>";
+ public static final String EXTRA_SPACES = "<w:r><w:t> </w:t></w:r>";
+ private OrcsApi orcsApi;
public WordTemplateContentRendererHandler(OrcsApi orcsApi) {
this.orcsApi = orcsApi;
@@ -40,10 +47,10 @@ public class WordTemplateContentRendererHandler {
}
ArtifactReadable artifact = null;
if (txId.equals(TransactionId.SENTINEL)) {
- artifact = orcsApi.getQueryFactory().fromBranch(wtcData.getBranchId()).andUuid(
+ artifact = orcsApi.getQueryFactory().fromBranch(wtcData.getBranch()).andUuid(
wtcData.getArtId()).includeDeletedArtifacts().includeDeletedAttributes().getResults().getAtMostOneOrNull();
} else {
- artifact = orcsApi.getQueryFactory().fromBranch(wtcData.getBranchId()).fromTransaction(txId).andUuid(
+ artifact = orcsApi.getQueryFactory().fromBranch(wtcData.getBranch()).fromTransaction(txId).andUuid(
wtcData.getArtId()).includeDeletedArtifacts().includeDeletedAttributes().getResults().getAtMostOneOrNull();
}
@@ -88,6 +95,13 @@ public class WordTemplateContentRendererHandler {
}
}
+ if (!wtcData.getIsEdit() && wtcData.getBranch().getViewId().notEqual(ArtifactId.SENTINEL)) {
+ data = data.replaceAll(PL_STYLE, "");
+ data = data.replaceAll(PL_HIGHLIGHT, "");
+ data = WordMLApplicabilityHandler.previewValidApplicabilityContent(orcsApi, data, wtcData.getBranch());
+ data = data.replaceAll(EMPTY_PARAGRAPHS, "");
+ }
+
data = data.concat(wtcData.getFooter());
if (!wtcData.getIsEdit()) {
diff --git a/plugins/org.eclipse.osee.framework.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.framework.core/META-INF/MANIFEST.MF
index 003fa45136..684b33d5b9 100644
--- a/plugins/org.eclipse.osee.framework.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.framework.core/META-INF/MANIFEST.MF
@@ -6,7 +6,9 @@ Bundle-Version: 0.25.0.qualifier
Bundle-Activator: org.eclipse.osee.framework.core.internal.Activator
Bundle-Vendor: Eclipse Open System Engineering Environment
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.apache.commons.httpclient,
+Import-Package: org.antlr.runtime;
+ org.antlr.runtime.tree;
+ org.apache.commons.httpclient,
org.apache.commons.httpclient.methods,
org.apache.commons.httpclient.params,
org.codehaus.jackson,
@@ -30,6 +32,7 @@ Export-Package: org.eclipse.osee.framework.core.data,
org.eclipse.osee.framework.core.enums,
org.eclipse.osee.framework.core.event,
org.eclipse.osee.framework.core.exception,
+ org.eclipse.osee.framework.core.grammar,
org.eclipse.osee.framework.core.operation,
org.eclipse.osee.framework.core.ops,
org.eclipse.osee.framework.core.sql,
diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.g b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.g
new file mode 100644
index 0000000000..8b8a8b51e5
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.g
@@ -0,0 +1,92 @@
+grammar ApplicabilityGrammar;
+
+options {
+ASTLabelType=CommonTree;
+output=AST;
+}
+
+
+// START:members
+@header {
+ import java.util.HashMap;
+ import java.util.Arrays;
+ import java.util.Collections;
+}
+
+@members {
+
+ private String applicabilityType = null;
+ private String featureId = null;
+
+ private ArrayList<String> configIds = new ArrayList<>();
+ private HashMap<String, List<String>> featureId_values_map = new HashMap<>();
+ private ArrayList<String> featureOperators = new ArrayList<>();
+
+
+ public ArrayList<String> getFeatureOperators() {
+ return featureOperators;
+ }
+
+ public ArrayList<String> getConfigIds() {
+ return configIds;
+ }
+
+ public HashMap<String, List<String>> getFeatureIdValuesMap() {
+ return featureId_values_map;
+ }
+
+ public String getApplicabilityType() {
+ return applicabilityType;
+ }
+}
+
+start : applicability EOF! { featureOperators.removeAll(Collections.singleton(null)); };
+
+applicability : config_applicability { applicabilityType="config"; }
+ | feature_applicability { applicabilityType="feature"; } ;
+
+config_applicability : 'Configuration[' config_expressions+ ']';
+
+config_expressions : OR? ID { configIds.add($ID.text); };
+
+feature_applicability : 'Feature[' feature_expressions+ ']' ;
+
+feature_expressions : (operator? feature_expression) { featureOperators.add($operator.text); };
+
+feature_expression : ID { featureId = $ID.text;
+ featureId_values_map.put(featureId, new ArrayList<String>());
+ }
+ ('=' temp=feature_value)? { if($temp.text == null) {
+ featureId_values_map.put(featureId, Arrays.asList("Default"));
+ }
+ };
+
+feature_value : value | start_compound ;
+
+start_compound : '(' { featureId_values_map.get(featureId).add("("); }
+ compound_value
+ ')' { featureId_values_map.get(featureId).add(")"); };
+
+compound_value : value+ | multiple_compounds;
+
+multiple_compounds : start_compound
+ operator { featureId_values_map.get(featureId).add($operator.text); }
+ compound_value;
+
+value : temp=operator? ID {
+ if($temp.text != null)
+ featureId_values_map.get(featureId).add($temp.text);
+
+ featureId_values_map.get(featureId).add($ID.text);
+
+ };
+
+operator : AND | OR;
+OR : '|';
+AND : '&';
+ID : ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-')* ;
+
+WS : (' '|'\r'|'\t'|'\n')+ {$channel=HIDDEN;};
+
+
+
diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.tokens b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.tokens
new file mode 100644
index 0000000000..3a944a1026
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammar.tokens
@@ -0,0 +1,16 @@
+T__9=9
+T__8=8
+OR=4
+AND=6
+T__11=11
+T__12=12
+T__13=13
+ID=5
+WS=7
+T__10=10
+']'=9
+'='=11
+')'=13
+'('=12
+'Feature['=10
+'Configuration['=8
diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarLexer.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarLexer.java
new file mode 100644
index 0000000000..f168fb26ec
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarLexer.java
@@ -0,0 +1,467 @@
+package org.eclipse.osee.framework.core.grammar;
+// $ANTLR 3.2 Sep 23, 2009 12:02:23 ApplicabilityGrammar.g 2016-12-19 11:00:12
+
+import org.antlr.runtime.BaseRecognizer;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.DFA;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.Lexer;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.RecognizerSharedState;
+
+public class ApplicabilityGrammarLexer extends Lexer {
+ public static final int T__9 = 9;
+ public static final int T__8 = 8;
+ public static final int OR = 4;
+ public static final int AND = 6;
+ public static final int T__11 = 11;
+ public static final int T__12 = 12;
+ public static final int T__13 = 13;
+ public static final int ID = 5;
+ public static final int WS = 7;
+ public static final int EOF = -1;
+ public static final int T__10 = 10;
+
+ // delegates
+ // delegators
+
+ public ApplicabilityGrammarLexer() {
+ ;
+ }
+
+ public ApplicabilityGrammarLexer(CharStream input) {
+ this(input, new RecognizerSharedState());
+ }
+
+ public ApplicabilityGrammarLexer(CharStream input, RecognizerSharedState state) {
+ super(input, state);
+
+ }
+
+ public String getGrammarFileName() {
+ return "ApplicabilityGrammar.g";
+ }
+
+ // $ANTLR start "T__8"
+ public final void mT__8() throws RecognitionException {
+ try {
+ int _type = T__8;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:3:6: ( 'Configuration[' )
+ // ApplicabilityGrammar.g:3:8: 'Configuration['
+ {
+ match("Configuration[");
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "T__8"
+
+ // $ANTLR start "T__9"
+ public final void mT__9() throws RecognitionException {
+ try {
+ int _type = T__9;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:4:6: ( ']' )
+ // ApplicabilityGrammar.g:4:8: ']'
+ {
+ match(']');
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "T__9"
+
+ // $ANTLR start "T__10"
+ public final void mT__10() throws RecognitionException {
+ try {
+ int _type = T__10;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:5:7: ( 'Feature[' )
+ // ApplicabilityGrammar.g:5:9: 'Feature['
+ {
+ match("Feature[");
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "T__10"
+
+ // $ANTLR start "T__11"
+ public final void mT__11() throws RecognitionException {
+ try {
+ int _type = T__11;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:6:7: ( '=' )
+ // ApplicabilityGrammar.g:6:9: '='
+ {
+ match('=');
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "T__11"
+
+ // $ANTLR start "T__12"
+ public final void mT__12() throws RecognitionException {
+ try {
+ int _type = T__12;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:7:7: ( '(' )
+ // ApplicabilityGrammar.g:7:9: '('
+ {
+ match('(');
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "T__12"
+
+ // $ANTLR start "T__13"
+ public final void mT__13() throws RecognitionException {
+ try {
+ int _type = T__13;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:8:7: ( ')' )
+ // ApplicabilityGrammar.g:8:9: ')'
+ {
+ match(')');
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "T__13"
+
+ // $ANTLR start "OR"
+ public final void mOR() throws RecognitionException {
+ try {
+ int _type = OR;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:85:10: ( '|' )
+ // ApplicabilityGrammar.g:85:12: '|'
+ {
+ match('|');
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "OR"
+
+ // $ANTLR start "AND"
+ public final void mAND() throws RecognitionException {
+ try {
+ int _type = AND;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:86:10: ( '&' )
+ // ApplicabilityGrammar.g:86:12: '&'
+ {
+ match('&');
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "AND"
+
+ // $ANTLR start "ID"
+ public final void mID() throws RecognitionException {
+ try {
+ int _type = ID;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:87:4: ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '-' )* )
+ // ApplicabilityGrammar.g:87:6: ( 'a' .. 'z' | 'A' .. 'Z' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '-' )*
+ {
+ if ((input.LA(1) >= 'A' && input.LA(1) <= 'Z') || (input.LA(1) >= 'a' && input.LA(1) <= 'z')) {
+ input.consume();
+
+ } else {
+ MismatchedSetException mse = new MismatchedSetException(null, input);
+ recover(mse);
+ throw mse;
+ }
+
+ // ApplicabilityGrammar.g:87:25: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '-' )*
+ loop1: do {
+ int alt1 = 2;
+ int LA1_0 = input.LA(1);
+
+ if ((LA1_0 == '-' || (LA1_0 >= '0' && LA1_0 <= '9') || (LA1_0 >= 'A' && LA1_0 <= 'Z') || LA1_0 == '_' || (LA1_0 >= 'a' && LA1_0 <= 'z'))) {
+ alt1 = 1;
+ }
+
+ switch (alt1) {
+ case 1:
+ // ApplicabilityGrammar.g:
+ {
+ if (input.LA(1) == '-' || (input.LA(1) >= '0' && input.LA(1) <= '9') || (input.LA(
+ 1) >= 'A' && input.LA(1) <= 'Z') || input.LA(
+ 1) == '_' || (input.LA(1) >= 'a' && input.LA(1) <= 'z')) {
+ input.consume();
+
+ } else {
+ MismatchedSetException mse = new MismatchedSetException(null, input);
+ recover(mse);
+ throw mse;
+ }
+
+ }
+ break;
+
+ default:
+ break loop1;
+ }
+ } while (true);
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "ID"
+
+ // $ANTLR start "WS"
+ public final void mWS() throws RecognitionException {
+ try {
+ int _type = WS;
+ int _channel = DEFAULT_TOKEN_CHANNEL;
+ // ApplicabilityGrammar.g:89:4: ( ( ' ' | '\\r' | '\\t' | '\\n' )+ )
+ // ApplicabilityGrammar.g:89:6: ( ' ' | '\\r' | '\\t' | '\\n' )+
+ {
+ // ApplicabilityGrammar.g:89:6: ( ' ' | '\\r' | '\\t' | '\\n' )+
+ int cnt2 = 0;
+ loop2: do {
+ int alt2 = 2;
+ int LA2_0 = input.LA(1);
+
+ if (((LA2_0 >= '\t' && LA2_0 <= '\n') || LA2_0 == '\r' || LA2_0 == ' ')) {
+ alt2 = 1;
+ }
+
+ switch (alt2) {
+ case 1:
+ // ApplicabilityGrammar.g:
+ {
+ if ((input.LA(1) >= '\t' && input.LA(1) <= '\n') || input.LA(1) == '\r' || input.LA(1) == ' ') {
+ input.consume();
+
+ } else {
+ MismatchedSetException mse = new MismatchedSetException(null, input);
+ recover(mse);
+ throw mse;
+ }
+
+ }
+ break;
+
+ default:
+ if (cnt2 >= 1) break loop2;
+ EarlyExitException eee = new EarlyExitException(2, input);
+ throw eee;
+ }
+ cnt2++;
+ } while (true);
+
+ _channel = HIDDEN;
+
+ }
+
+ state.type = _type;
+ state.channel = _channel;
+ } finally {
+ }
+ }
+ // $ANTLR end "WS"
+
+ public void mTokens() throws RecognitionException {
+ // ApplicabilityGrammar.g:1:8: ( T__8 | T__9 | T__10 | T__11 | T__12 | T__13 | OR | AND | ID | WS )
+ int alt3 = 10;
+ alt3 = dfa3.predict(input);
+ switch (alt3) {
+ case 1:
+ // ApplicabilityGrammar.g:1:10: T__8
+ {
+ mT__8();
+
+ }
+ break;
+ case 2:
+ // ApplicabilityGrammar.g:1:15: T__9
+ {
+ mT__9();
+
+ }
+ break;
+ case 3:
+ // ApplicabilityGrammar.g:1:20: T__10
+ {
+ mT__10();
+
+ }
+ break;
+ case 4:
+ // ApplicabilityGrammar.g:1:26: T__11
+ {
+ mT__11();
+
+ }
+ break;
+ case 5:
+ // ApplicabilityGrammar.g:1:32: T__12
+ {
+ mT__12();
+
+ }
+ break;
+ case 6:
+ // ApplicabilityGrammar.g:1:38: T__13
+ {
+ mT__13();
+
+ }
+ break;
+ case 7:
+ // ApplicabilityGrammar.g:1:44: OR
+ {
+ mOR();
+
+ }
+ break;
+ case 8:
+ // ApplicabilityGrammar.g:1:47: AND
+ {
+ mAND();
+
+ }
+ break;
+ case 9:
+ // ApplicabilityGrammar.g:1:51: ID
+ {
+ mID();
+
+ }
+ break;
+ case 10:
+ // ApplicabilityGrammar.g:1:54: WS
+ {
+ mWS();
+
+ }
+ break;
+
+ }
+
+ }
+
+ protected DFA3 dfa3 = new DFA3(this);
+ static final String DFA3_eotS = "\1\uffff\1\11\1\uffff\1\11\7\uffff\15\11\1\uffff\5\11\1\uffff";
+ static final String DFA3_eofS = "\37\uffff";
+ static final String DFA3_minS =
+ "\1\11\1\157\1\uffff\1\145\7\uffff\1\156\1\141\1\146\1\164\1\151" + "\1\165\1\147\1\162\1\165\1\145\1\162\1\133\1\141\1\uffff\1\164\1" + "\151\1\157\1\156\1\133\1\uffff";
+ static final String DFA3_maxS =
+ "\1\174\1\157\1\uffff\1\145\7\uffff\1\156\1\141\1\146\1\164\1\151" + "\1\165\1\147\1\162\1\165\1\145\1\162\1\133\1\141\1\uffff\1\164\1" + "\151\1\157\1\156\1\133\1\uffff";
+ static final String DFA3_acceptS =
+ "\2\uffff\1\2\1\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12\15\uffff\1" + "\3\5\uffff\1\1";
+ static final String DFA3_specialS = "\37\uffff}>";
+ static final String[] DFA3_transitionS = {
+ "\2\12\2\uffff\1\12\22\uffff\1\12\5\uffff\1\10\1\uffff\1\5\1" + "\6\23\uffff\1\4\3\uffff\2\11\1\1\2\11\1\3\24\11\2\uffff\1\2" + "\3\uffff\32\11\1\uffff\1\7",
+ "\1\13",
+ "",
+ "\1\14",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "\1\15",
+ "\1\16",
+ "\1\17",
+ "\1\20",
+ "\1\21",
+ "\1\22",
+ "\1\23",
+ "\1\24",
+ "\1\25",
+ "\1\26",
+ "\1\27",
+ "\1\30",
+ "\1\31",
+ "",
+ "\1\32",
+ "\1\33",
+ "\1\34",
+ "\1\35",
+ "\1\36",
+ ""};
+
+ static final short[] DFA3_eot = DFA.unpackEncodedString(DFA3_eotS);
+ static final short[] DFA3_eof = DFA.unpackEncodedString(DFA3_eofS);
+ static final char[] DFA3_min = DFA.unpackEncodedStringToUnsignedChars(DFA3_minS);
+ static final char[] DFA3_max = DFA.unpackEncodedStringToUnsignedChars(DFA3_maxS);
+ static final short[] DFA3_accept = DFA.unpackEncodedString(DFA3_acceptS);
+ static final short[] DFA3_special = DFA.unpackEncodedString(DFA3_specialS);
+ static final short[][] DFA3_transition;
+
+ static {
+ int numStates = DFA3_transitionS.length;
+ DFA3_transition = new short[numStates][];
+ for (int i = 0; i < numStates; i++) {
+ DFA3_transition[i] = DFA.unpackEncodedString(DFA3_transitionS[i]);
+ }
+ }
+
+ class DFA3 extends DFA {
+
+ public DFA3(BaseRecognizer recognizer) {
+ this.recognizer = recognizer;
+ this.decisionNumber = 3;
+ this.eot = DFA3_eot;
+ this.eof = DFA3_eof;
+ this.min = DFA3_min;
+ this.max = DFA3_max;
+ this.accept = DFA3_accept;
+ this.special = DFA3_special;
+ this.transition = DFA3_transition;
+ }
+
+ public String getDescription() {
+ return "1:1: Tokens : ( T__8 | T__9 | T__10 | T__11 | T__12 | T__13 | OR | AND | ID | WS );";
+ }
+ }
+
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarParser.java b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarParser.java
new file mode 100644
index 0000000000..bf465b2ddf
--- /dev/null
+++ b/plugins/org.eclipse.osee.framework.core/src/org/eclipse/osee/framework/core/grammar/ApplicabilityGrammarParser.java
@@ -0,0 +1,1150 @@
+package org.eclipse.osee.framework.core.grammar;
+// $ANTLR 3.2 Sep 23, 2009 12:02:23 ApplicabilityGrammar.g 2016-12-19 11:00:12
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import org.antlr.runtime.BitSet;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.Parser;
+import org.antlr.runtime.ParserRuleReturnScope;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.RecognizerSharedState;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.TokenStream;
+import org.antlr.runtime.tree.CommonTree;
+import org.antlr.runtime.tree.CommonTreeAdaptor;
+import org.antlr.runtime.tree.TreeAdaptor;
+
+public class ApplicabilityGrammarParser extends Parser {
+ public static final String[] tokenNames = new String[] {
+ "<invalid>",
+ "<EOR>",
+ "<DOWN>",
+ "<UP>",
+ "OR",
+ "ID",
+ "AND",
+ "WS",
+ "'Configuration['",
+ "']'",
+ "'Feature['",
+ "'='",
+ "'('",
+ "')'"};
+ public static final int T__9 = 9;
+ public static final int T__8 = 8;
+ public static final int OR = 4;
+ public static final int AND = 6;
+ public static final int T__11 = 11;
+ public static final int T__12 = 12;
+ public static final int T__13 = 13;
+ public static final int ID = 5;
+ public static final int WS = 7;
+ public static final int EOF = -1;
+ public static final int T__10 = 10;
+
+ // delegates
+ // delegators
+
+ public ApplicabilityGrammarParser(TokenStream input) {
+ this(input, new RecognizerSharedState());
+ }
+
+ public ApplicabilityGrammarParser(TokenStream input, RecognizerSharedState state) {
+ super(input, state);
+
+ }
+
+ protected TreeAdaptor adaptor = new CommonTreeAdaptor();
+
+ public void setTreeAdaptor(TreeAdaptor adaptor) {
+ this.adaptor = adaptor;
+ }
+
+ public TreeAdaptor getTreeAdaptor() {
+ return adaptor;
+ }
+
+ public String[] getTokenNames() {
+ return ApplicabilityGrammarParser.tokenNames;
+ }
+
+ public String getGrammarFileName() {
+ return "ApplicabilityGrammar.g";
+ }
+
+ private String applicabilityType = null;
+ private String featureId = null;
+
+ private ArrayList<String> configIds = new ArrayList<>();
+ private HashMap<String, List<String>> featureId_values_map = new HashMap<>();
+ private ArrayList<String> featureOperators = new ArrayList<>();
+
+ public ArrayList<String> getFeatureOperators() {
+ return featureOperators;
+ }
+
+ public ArrayList<String> getConfigIds() {
+ return configIds;
+ }
+
+ public HashMap<String, List<String>> getFeatureIdValuesMap() {
+ return featureId_values_map;
+ }
+
+ public String getApplicabilityType() {
+ return applicabilityType;
+ }
+
+ public static class start_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "start"
+ // ApplicabilityGrammar.g:43:1: start : applicability EOF ;
+ public final ApplicabilityGrammarParser.start_return start() throws RecognitionException {
+ ApplicabilityGrammarParser.start_return retval = new ApplicabilityGrammarParser.start_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token EOF2 = null;
+ ApplicabilityGrammarParser.applicability_return applicability1 = null;
+
+ CommonTree EOF2_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:43:24: ( applicability EOF )
+ // ApplicabilityGrammar.g:43:27: applicability EOF
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ pushFollow(FOLLOW_applicability_in_start57);
+ applicability1 = applicability();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, applicability1.getTree());
+ EOF2 = (Token) match(input, EOF, FOLLOW_EOF_in_start59);
+ featureOperators.removeAll(Collections.singleton(null));
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "start"
+
+ public static class applicability_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "applicability"
+ // ApplicabilityGrammar.g:45:1: applicability : ( config_applicability | feature_applicability );
+ public final ApplicabilityGrammarParser.applicability_return applicability() throws RecognitionException {
+ ApplicabilityGrammarParser.applicability_return retval = new ApplicabilityGrammarParser.applicability_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ ApplicabilityGrammarParser.config_applicability_return config_applicability3 = null;
+
+ ApplicabilityGrammarParser.feature_applicability_return feature_applicability4 = null;
+
+ try {
+ // ApplicabilityGrammar.g:45:25: ( config_applicability | feature_applicability )
+ int alt1 = 2;
+ int LA1_0 = input.LA(1);
+
+ if ((LA1_0 == 8)) {
+ alt1 = 1;
+ } else if ((LA1_0 == 10)) {
+ alt1 = 2;
+ } else {
+ NoViableAltException nvae = new NoViableAltException("", 1, 0, input);
+
+ throw nvae;
+ }
+ switch (alt1) {
+ case 1:
+ // ApplicabilityGrammar.g:45:27: config_applicability
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ pushFollow(FOLLOW_config_applicability_in_applicability80);
+ config_applicability3 = config_applicability();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, config_applicability3.getTree());
+ applicabilityType = "config";
+
+ }
+ break;
+ case 2:
+ // ApplicabilityGrammar.g:46:11: feature_applicability
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ pushFollow(FOLLOW_feature_applicability_in_applicability95);
+ feature_applicability4 = feature_applicability();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, feature_applicability4.getTree());
+ applicabilityType = "feature";
+
+ }
+ break;
+
+ }
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "applicability"
+
+ public static class config_applicability_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "config_applicability"
+ // ApplicabilityGrammar.g:48:1: config_applicability : 'Configuration[' ( config_expressions )+ ']' ;
+ public final ApplicabilityGrammarParser.config_applicability_return config_applicability() throws RecognitionException {
+ ApplicabilityGrammarParser.config_applicability_return retval =
+ new ApplicabilityGrammarParser.config_applicability_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token string_literal5 = null;
+ Token char_literal7 = null;
+ ApplicabilityGrammarParser.config_expressions_return config_expressions6 = null;
+
+ CommonTree string_literal5_tree = null;
+ CommonTree char_literal7_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:48:25: ( 'Configuration[' ( config_expressions )+ ']' )
+ // ApplicabilityGrammar.g:48:27: 'Configuration[' ( config_expressions )+ ']'
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ string_literal5 = (Token) match(input, 8, FOLLOW_8_in_config_applicability118);
+ string_literal5_tree = (CommonTree) adaptor.create(string_literal5);
+ adaptor.addChild(root_0, string_literal5_tree);
+
+ // ApplicabilityGrammar.g:48:44: ( config_expressions )+
+ int cnt2 = 0;
+ loop2: do {
+ int alt2 = 2;
+ int LA2_0 = input.LA(1);
+
+ if (((LA2_0 >= OR && LA2_0 <= ID))) {
+ alt2 = 1;
+ }
+
+ switch (alt2) {
+ case 1:
+ // ApplicabilityGrammar.g:48:44: config_expressions
+ {
+ pushFollow(FOLLOW_config_expressions_in_config_applicability120);
+ config_expressions6 = config_expressions();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, config_expressions6.getTree());
+
+ }
+ break;
+
+ default:
+ if (cnt2 >= 1) break loop2;
+ EarlyExitException eee = new EarlyExitException(2, input);
+ throw eee;
+ }
+ cnt2++;
+ } while (true);
+
+ char_literal7 = (Token) match(input, 9, FOLLOW_9_in_config_applicability123);
+ char_literal7_tree = (CommonTree) adaptor.create(char_literal7);
+ adaptor.addChild(root_0, char_literal7_tree);
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "config_applicability"
+
+ public static class config_expressions_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "config_expressions"
+ // ApplicabilityGrammar.g:50:1: config_expressions : ( OR )? ID ;
+ public final ApplicabilityGrammarParser.config_expressions_return config_expressions() throws RecognitionException {
+ ApplicabilityGrammarParser.config_expressions_return retval =
+ new ApplicabilityGrammarParser.config_expressions_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token OR8 = null;
+ Token ID9 = null;
+
+ CommonTree OR8_tree = null;
+ CommonTree ID9_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:50:21: ( ( OR )? ID )
+ // ApplicabilityGrammar.g:50:24: ( OR )? ID
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ // ApplicabilityGrammar.g:50:24: ( OR )?
+ int alt3 = 2;
+ int LA3_0 = input.LA(1);
+
+ if ((LA3_0 == OR)) {
+ alt3 = 1;
+ }
+ switch (alt3) {
+ case 1:
+ // ApplicabilityGrammar.g:50:24: OR
+ {
+ OR8 = (Token) match(input, OR, FOLLOW_OR_in_config_expressions133);
+ OR8_tree = (CommonTree) adaptor.create(OR8);
+ adaptor.addChild(root_0, OR8_tree);
+
+ }
+ break;
+
+ }
+
+ ID9 = (Token) match(input, ID, FOLLOW_ID_in_config_expressions136);
+ ID9_tree = (CommonTree) adaptor.create(ID9);
+ adaptor.addChild(root_0, ID9_tree);
+
+ configIds.add((ID9 != null ? ID9.getText() : null));
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "config_expressions"
+
+ public static class feature_applicability_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "feature_applicability"
+ // ApplicabilityGrammar.g:52:1: feature_applicability : 'Feature[' ( feature_expressions )+ ']' ;
+ public final ApplicabilityGrammarParser.feature_applicability_return feature_applicability() throws RecognitionException {
+ ApplicabilityGrammarParser.feature_applicability_return retval =
+ new ApplicabilityGrammarParser.feature_applicability_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token string_literal10 = null;
+ Token char_literal12 = null;
+ ApplicabilityGrammarParser.feature_expressions_return feature_expressions11 = null;
+
+ CommonTree string_literal10_tree = null;
+ CommonTree char_literal12_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:52:25: ( 'Feature[' ( feature_expressions )+ ']' )
+ // ApplicabilityGrammar.g:52:27: 'Feature[' ( feature_expressions )+ ']'
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ string_literal10 = (Token) match(input, 10, FOLLOW_10_in_feature_applicability148);
+ string_literal10_tree = (CommonTree) adaptor.create(string_literal10);
+ adaptor.addChild(root_0, string_literal10_tree);
+
+ // ApplicabilityGrammar.g:52:38: ( feature_expressions )+
+ int cnt4 = 0;
+ loop4: do {
+ int alt4 = 2;
+ int LA4_0 = input.LA(1);
+
+ if (((LA4_0 >= OR && LA4_0 <= AND))) {
+ alt4 = 1;
+ }
+
+ switch (alt4) {
+ case 1:
+ // ApplicabilityGrammar.g:52:38: feature_expressions
+ {
+ pushFollow(FOLLOW_feature_expressions_in_feature_applicability150);
+ feature_expressions11 = feature_expressions();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, feature_expressions11.getTree());
+
+ }
+ break;
+
+ default:
+ if (cnt4 >= 1) break loop4;
+ EarlyExitException eee = new EarlyExitException(4, input);
+ throw eee;
+ }
+ cnt4++;
+ } while (true);
+
+ char_literal12 = (Token) match(input, 9, FOLLOW_9_in_feature_applicability153);
+ char_literal12_tree = (CommonTree) adaptor.create(char_literal12);
+ adaptor.addChild(root_0, char_literal12_tree);
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "feature_applicability"
+
+ public static class feature_expressions_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "feature_expressions"
+ // ApplicabilityGrammar.g:54:1: feature_expressions : ( ( operator )? feature_expression ) ;
+ public final ApplicabilityGrammarParser.feature_expressions_return feature_expressions() throws RecognitionException {
+ ApplicabilityGrammarParser.feature_expressions_return retval =
+ new ApplicabilityGrammarParser.feature_expressions_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ ApplicabilityGrammarParser.operator_return operator13 = null;
+
+ ApplicabilityGrammarParser.feature_expression_return feature_expression14 = null;
+
+ try {
+ // ApplicabilityGrammar.g:54:25: ( ( ( operator )? feature_expression ) )
+ // ApplicabilityGrammar.g:54:27: ( ( operator )? feature_expression )
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ // ApplicabilityGrammar.g:54:27: ( ( operator )? feature_expression )
+ // ApplicabilityGrammar.g:54:28: ( operator )? feature_expression
+ {
+ // ApplicabilityGrammar.g:54:28: ( operator )?
+ int alt5 = 2;
+ int LA5_0 = input.LA(1);
+
+ if ((LA5_0 == OR || LA5_0 == AND)) {
+ alt5 = 1;
+ }
+ switch (alt5) {
+ case 1:
+ // ApplicabilityGrammar.g:54:28: operator
+ {
+ pushFollow(FOLLOW_operator_in_feature_expressions167);
+ operator13 = operator();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, operator13.getTree());
+
+ }
+ break;
+
+ }
+
+ pushFollow(FOLLOW_feature_expression_in_feature_expressions170);
+ feature_expression14 = feature_expression();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, feature_expression14.getTree());
+
+ }
+
+ featureOperators.add((operator13 != null ? input.toString(operator13.start, operator13.stop) : null));
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "feature_expressions"
+
+ public static class feature_expression_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "feature_expression"
+ // ApplicabilityGrammar.g:56:1: feature_expression : ID ( '=' temp= feature_value )? ;
+ public final ApplicabilityGrammarParser.feature_expression_return feature_expression() throws RecognitionException {
+ ApplicabilityGrammarParser.feature_expression_return retval =
+ new ApplicabilityGrammarParser.feature_expression_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token ID15 = null;
+ Token char_literal16 = null;
+ ApplicabilityGrammarParser.feature_value_return temp = null;
+
+ CommonTree ID15_tree = null;
+ CommonTree char_literal16_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:56:21: ( ID ( '=' temp= feature_value )? )
+ // ApplicabilityGrammar.g:56:23: ID ( '=' temp= feature_value )?
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ ID15 = (Token) match(input, ID, FOLLOW_ID_in_feature_expression182);
+ ID15_tree = (CommonTree) adaptor.create(ID15);
+ adaptor.addChild(root_0, ID15_tree);
+
+ featureId = (ID15 != null ? ID15.getText() : null);
+ featureId_values_map.put(featureId, new ArrayList<String>());
+
+ // ApplicabilityGrammar.g:59:9: ( '=' temp= feature_value )?
+ int alt6 = 2;
+ int LA6_0 = input.LA(1);
+
+ if ((LA6_0 == 11)) {
+ alt6 = 1;
+ }
+ switch (alt6) {
+ case 1:
+ // ApplicabilityGrammar.g:59:10: '=' temp= feature_value
+ {
+ char_literal16 = (Token) match(input, 11, FOLLOW_11_in_feature_expression196);
+ char_literal16_tree = (CommonTree) adaptor.create(char_literal16);
+ adaptor.addChild(root_0, char_literal16_tree);
+
+ pushFollow(FOLLOW_feature_value_in_feature_expression200);
+ temp = feature_value();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, temp.getTree());
+
+ }
+ break;
+
+ }
+
+ if ((temp != null ? input.toString(temp.start, temp.stop) : null) == null) {
+ featureId_values_map.put(featureId, Arrays.asList("Default"));
+ }
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "feature_expression"
+
+ public static class feature_value_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "feature_value"
+ // ApplicabilityGrammar.g:64:1: feature_value : ( value | start_compound );
+ public final ApplicabilityGrammarParser.feature_value_return feature_value() throws RecognitionException {
+ ApplicabilityGrammarParser.feature_value_return retval = new ApplicabilityGrammarParser.feature_value_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ ApplicabilityGrammarParser.value_return value17 = null;
+
+ ApplicabilityGrammarParser.start_compound_return start_compound18 = null;
+
+ try {
+ // ApplicabilityGrammar.g:64:17: ( value | start_compound )
+ int alt7 = 2;
+ int LA7_0 = input.LA(1);
+
+ if (((LA7_0 >= OR && LA7_0 <= AND))) {
+ alt7 = 1;
+ } else if ((LA7_0 == 12)) {
+ alt7 = 2;
+ } else {
+ NoViableAltException nvae = new NoViableAltException("", 7, 0, input);
+
+ throw nvae;
+ }
+ switch (alt7) {
+ case 1:
+ // ApplicabilityGrammar.g:64:20: value
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ pushFollow(FOLLOW_value_in_feature_value232);
+ value17 = value();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, value17.getTree());
+
+ }
+ break;
+ case 2:
+ // ApplicabilityGrammar.g:64:28: start_compound
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ pushFollow(FOLLOW_start_compound_in_feature_value236);
+ start_compound18 = start_compound();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, start_compound18.getTree());
+
+ }
+ break;
+
+ }
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "feature_value"
+
+ public static class start_compound_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "start_compound"
+ // ApplicabilityGrammar.g:66:1: start_compound : '(' compound_value ')' ;
+ public final ApplicabilityGrammarParser.start_compound_return start_compound() throws RecognitionException {
+ ApplicabilityGrammarParser.start_compound_return retval = new ApplicabilityGrammarParser.start_compound_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token char_literal19 = null;
+ Token char_literal21 = null;
+ ApplicabilityGrammarParser.compound_value_return compound_value20 = null;
+
+ CommonTree char_literal19_tree = null;
+ CommonTree char_literal21_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:66:18: ( '(' compound_value ')' )
+ // ApplicabilityGrammar.g:66:20: '(' compound_value ')'
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ char_literal19 = (Token) match(input, 12, FOLLOW_12_in_start_compound254);
+ char_literal19_tree = (CommonTree) adaptor.create(char_literal19);
+ adaptor.addChild(root_0, char_literal19_tree);
+
+ featureId_values_map.get(featureId).add("(");
+ pushFollow(FOLLOW_compound_value_in_start_compound269);
+ compound_value20 = compound_value();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, compound_value20.getTree());
+ char_literal21 = (Token) match(input, 13, FOLLOW_13_in_start_compound280);
+ char_literal21_tree = (CommonTree) adaptor.create(char_literal21);
+ adaptor.addChild(root_0, char_literal21_tree);
+
+ featureId_values_map.get(featureId).add(")");
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "start_compound"
+
+ public static class compound_value_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "compound_value"
+ // ApplicabilityGrammar.g:70:1: compound_value : ( ( value )+ | multiple_compounds );
+ public final ApplicabilityGrammarParser.compound_value_return compound_value() throws RecognitionException {
+ ApplicabilityGrammarParser.compound_value_return retval = new ApplicabilityGrammarParser.compound_value_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ ApplicabilityGrammarParser.value_return value22 = null;
+
+ ApplicabilityGrammarParser.multiple_compounds_return multiple_compounds23 = null;
+
+ try {
+ // ApplicabilityGrammar.g:70:18: ( ( value )+ | multiple_compounds )
+ int alt9 = 2;
+ int LA9_0 = input.LA(1);
+
+ if (((LA9_0 >= OR && LA9_0 <= AND))) {
+ alt9 = 1;
+ } else if ((LA9_0 == 12)) {
+ alt9 = 2;
+ } else {
+ NoViableAltException nvae = new NoViableAltException("", 9, 0, input);
+
+ throw nvae;
+ }
+ switch (alt9) {
+ case 1:
+ // ApplicabilityGrammar.g:70:20: ( value )+
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ // ApplicabilityGrammar.g:70:20: ( value )+
+ int cnt8 = 0;
+ loop8: do {
+ int alt8 = 2;
+ int LA8_0 = input.LA(1);
+
+ if (((LA8_0 >= OR && LA8_0 <= AND))) {
+ alt8 = 1;
+ }
+
+ switch (alt8) {
+ case 1:
+ // ApplicabilityGrammar.g:70:20: value
+ {
+ pushFollow(FOLLOW_value_in_compound_value292);
+ value22 = value();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, value22.getTree());
+
+ }
+ break;
+
+ default:
+ if (cnt8 >= 1) break loop8;
+ EarlyExitException eee = new EarlyExitException(8, input);
+ throw eee;
+ }
+ cnt8++;
+ } while (true);
+
+ }
+ break;
+ case 2:
+ // ApplicabilityGrammar.g:70:29: multiple_compounds
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ pushFollow(FOLLOW_multiple_compounds_in_compound_value297);
+ multiple_compounds23 = multiple_compounds();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, multiple_compounds23.getTree());
+
+ }
+ break;
+
+ }
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "compound_value"
+
+ public static class multiple_compounds_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "multiple_compounds"
+ // ApplicabilityGrammar.g:72:1: multiple_compounds : start_compound operator compound_value ;
+ public final ApplicabilityGrammarParser.multiple_compounds_return multiple_compounds() throws RecognitionException {
+ ApplicabilityGrammarParser.multiple_compounds_return retval =
+ new ApplicabilityGrammarParser.multiple_compounds_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ ApplicabilityGrammarParser.start_compound_return start_compound24 = null;
+
+ ApplicabilityGrammarParser.operator_return operator25 = null;
+
+ ApplicabilityGrammarParser.compound_value_return compound_value26 = null;
+
+ try {
+ // ApplicabilityGrammar.g:72:22: ( start_compound operator compound_value )
+ // ApplicabilityGrammar.g:72:24: start_compound operator compound_value
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ pushFollow(FOLLOW_start_compound_in_multiple_compounds314);
+ start_compound24 = start_compound();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, start_compound24.getTree());
+ pushFollow(FOLLOW_operator_in_multiple_compounds326);
+ operator25 = operator();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, operator25.getTree());
+ featureId_values_map.get(featureId).add(
+ (operator25 != null ? input.toString(operator25.start, operator25.stop) : null));
+ pushFollow(FOLLOW_compound_value_in_multiple_compounds340);
+ compound_value26 = compound_value();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, compound_value26.getTree());
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "multiple_compounds"
+
+ public static class value_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "value"
+ // ApplicabilityGrammar.g:76:1: value : (temp= operator )? ID ;
+ public final ApplicabilityGrammarParser.value_return value() throws RecognitionException {
+ ApplicabilityGrammarParser.value_return retval = new ApplicabilityGrammarParser.value_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token ID27 = null;
+ ApplicabilityGrammarParser.operator_return temp = null;
+
+ CommonTree ID27_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:76:16: ( (temp= operator )? ID )
+ // ApplicabilityGrammar.g:76:18: (temp= operator )? ID
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ // ApplicabilityGrammar.g:76:22: (temp= operator )?
+ int alt10 = 2;
+ int LA10_0 = input.LA(1);
+
+ if ((LA10_0 == OR || LA10_0 == AND)) {
+ alt10 = 1;
+ }
+ switch (alt10) {
+ case 1:
+ // ApplicabilityGrammar.g:76:22: temp= operator
+ {
+ pushFollow(FOLLOW_operator_in_value359);
+ temp = operator();
+
+ state._fsp--;
+
+ adaptor.addChild(root_0, temp.getTree());
+
+ }
+ break;
+
+ }
+
+ ID27 = (Token) match(input, ID, FOLLOW_ID_in_value362);
+ ID27_tree = (CommonTree) adaptor.create(ID27);
+ adaptor.addChild(root_0, ID27_tree);
+
+ if ((temp != null ? input.toString(temp.start, temp.stop) : null) != null) featureId_values_map.get(
+ featureId).add((temp != null ? input.toString(temp.start, temp.stop) : null));
+
+ featureId_values_map.get(featureId).add((ID27 != null ? ID27.getText() : null));
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "value"
+
+ public static class operator_return extends ParserRuleReturnScope {
+ CommonTree tree;
+
+ public Object getTree() {
+ return tree;
+ }
+ };
+
+ // $ANTLR start "operator"
+ // ApplicabilityGrammar.g:84:1: operator : ( AND | OR );
+ public final ApplicabilityGrammarParser.operator_return operator() throws RecognitionException {
+ ApplicabilityGrammarParser.operator_return retval = new ApplicabilityGrammarParser.operator_return();
+ retval.start = input.LT(1);
+
+ CommonTree root_0 = null;
+
+ Token set28 = null;
+
+ CommonTree set28_tree = null;
+
+ try {
+ // ApplicabilityGrammar.g:84:14: ( AND | OR )
+ // ApplicabilityGrammar.g:
+ {
+ root_0 = (CommonTree) adaptor.nil();
+
+ set28 = (Token) input.LT(1);
+ if (input.LA(1) == OR || input.LA(1) == AND) {
+ input.consume();
+ adaptor.addChild(root_0, (CommonTree) adaptor.create(set28));
+ state.errorRecovery = false;
+ } else {
+ MismatchedSetException mse = new MismatchedSetException(null, input);
+ throw mse;
+ }
+
+ }
+
+ retval.stop = input.LT(-1);
+
+ retval.tree = (CommonTree) adaptor.rulePostProcessing(root_0);
+ adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
+
+ } catch (RecognitionException re) {
+ reportError(re);
+ recover(input, re);
+ retval.tree = (CommonTree) adaptor.errorNode(input, retval.start, input.LT(-1), re);
+
+ } finally {
+ }
+ return retval;
+ }
+ // $ANTLR end "operator"
+
+ // Delegated rules
+
+ public static final BitSet FOLLOW_applicability_in_start57 = new BitSet(new long[] {0x0000000000000000L});
+ public static final BitSet FOLLOW_EOF_in_start59 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_config_applicability_in_applicability80 =
+ new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_feature_applicability_in_applicability95 =
+ new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_8_in_config_applicability118 = new BitSet(new long[] {0x0000000000000030L});
+ public static final BitSet FOLLOW_config_expressions_in_config_applicability120 =
+ new BitSet(new long[] {0x0000000000000230L});
+ public static final BitSet FOLLOW_9_in_config_applicability123 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_OR_in_config_expressions133 = new BitSet(new long[] {0x0000000000000020L});
+ public static final BitSet FOLLOW_ID_in_config_expressions136 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_10_in_feature_applicability148 = new BitSet(new long[] {0x0000000000000070L});
+ public static final BitSet FOLLOW_feature_expressions_in_feature_applicability150 =
+ new BitSet(new long[] {0x0000000000000270L});
+ public static final BitSet FOLLOW_9_in_feature_applicability153 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_operator_in_feature_expressions167 = new BitSet(new long[] {0x0000000000000070L});
+ public static final BitSet FOLLOW_feature_expression_in_feature_expressions170 =
+ new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_ID_in_feature_expression182 = new BitSet(new long[] {0x0000000000000802L});
+ public static final BitSet FOLLOW_11_in_feature_expression196 = new BitSet(new long[] {0x0000000000001070L});
+ public static final BitSet FOLLOW_feature_value_in_feature_expression200 =
+ new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_value_in_feature_value232 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_start_compound_in_feature_value236 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_12_in_start_compound254 = new BitSet(new long[] {0x0000000000001070L});
+ public static final BitSet FOLLOW_compound_value_in_start_compound269 = new BitSet(new long[] {0x0000000000002000L});
+ public static final BitSet FOLLOW_13_in_start_compound280 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_value_in_compound_value292 = new BitSet(new long[] {0x0000000000000072L});
+ public static final BitSet FOLLOW_multiple_compounds_in_compound_value297 =
+ new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_start_compound_in_multiple_compounds314 =
+ new BitSet(new long[] {0x0000000000000050L});
+ public static final BitSet FOLLOW_operator_in_multiple_compounds326 = new BitSet(new long[] {0x0000000000001070L});
+ public static final BitSet FOLLOW_compound_value_in_multiple_compounds340 =
+ new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_operator_in_value359 = new BitSet(new long[] {0x0000000000000020L});
+ public static final BitSet FOLLOW_ID_in_value362 = new BitSet(new long[] {0x0000000000000002L});
+ public static final BitSet FOLLOW_set_in_operator0 = new BitSet(new long[] {0x0000000000000002L});
+
+} \ No newline at end of file
diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java
index 469a3119e8..27d3166071 100644
--- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java
+++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/render/WordTemplateRenderer.java
@@ -160,9 +160,8 @@ public class WordTemplateRenderer extends WordRenderer implements ITemplateRende
public void renderAttribute(AttributeTypeToken attributeType, Artifact artifact, PresentationType presentationType, Producer producer, AttributeElement attributeElement, String footer) throws OseeCoreException {
WordMLProducer wordMl = (WordMLProducer) producer;
- String data = null;
if (attributeType.equals(CoreAttributeTypes.WordTemplateContent)) {
-
+ String data = null;
LinkType linkType = (LinkType) getOption("linkType");
if (attributeElement.getLabel().length() > 0) {
@@ -180,7 +179,7 @@ public class WordTemplateRenderer extends WordRenderer implements ITemplateRende
WordTemplateContentData wtcData = new WordTemplateContentData();
wtcData.setArtId(artifact.getUuid());
- wtcData.setBranchId(artifact.getBranch());
+ wtcData.setBranch(artifact.getBranch());
wtcData.setFooter(footer);
wtcData.setIsEdit(presentationType == PresentationType.SPECIALIZED_EDIT);
wtcData.setLinkType(linkType != null ? linkType.toString() : null);
@@ -189,7 +188,6 @@ public class WordTemplateRenderer extends WordRenderer implements ITemplateRende
wtcData.setOseeLink(oseeLink);
Pair<String, Set<String>> content = HttpWordUpdateRequest.renderWordTemplateContent(wtcData);
-
if (content != null) {
data = content.getFirst();
WordUiUtil.displayUnknownGuids(artifact, content.getSecond());
diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/loader/processor/RelationLoadProcessor.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/loader/processor/RelationLoadProcessor.java
index 1ca0f1cf23..1a199fb051 100644
--- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/loader/processor/RelationLoadProcessor.java
+++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/loader/processor/RelationLoadProcessor.java
@@ -73,7 +73,7 @@ public class RelationLoadProcessor extends LoadProcessor<RelationData, RelationO
} else {
if (!historical) {
logger.warn(
- "multiple relation versions for branch[%d] rel_type [%d] a_artId[%d] b_artId[%s] previousGammaId[%s] currentGammaId[%s]",
+ "multiple relation versions for branch[%s] rel_type [%d] a_artId[%d] b_artId[%s] previousGammaId[%s] currentGammaId[%s]",
branch, typeId, aArtId, bArtId, condition.previousGammaId, gammaId);
}
}
diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ApplicabilityEndpointImpl.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ApplicabilityEndpointImpl.java
index 56d835592a..d981715479 100644
--- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ApplicabilityEndpointImpl.java
+++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/ApplicabilityEndpointImpl.java
@@ -76,14 +76,14 @@ public class ApplicabilityEndpointImpl implements ApplicabilityEndpoint {
tx.addTuple2(CoreTupleTypes.ViewApplicability, config1, "A = Included");
tx.addTuple2(CoreTupleTypes.ViewApplicability, config2, "A = Excluded");
- tx.addTuple2(CoreTupleTypes.ViewApplicability, config1, "B = Choice 1");
- tx.addTuple2(CoreTupleTypes.ViewApplicability, config2, "B = Choice 2");
- tx.addTuple2(CoreTupleTypes.ViewApplicability, config2, "B = Choice 3");
+ tx.addTuple2(CoreTupleTypes.ViewApplicability, config1, "B = Choice1");
+ tx.addTuple2(CoreTupleTypes.ViewApplicability, config2, "B = Choice2");
+ tx.addTuple2(CoreTupleTypes.ViewApplicability, config2, "B = Choice3");
tx.addTuple2(CoreTupleTypes.ViewApplicability, config1, "C = Included");
tx.addTuple2(CoreTupleTypes.ViewApplicability, config2, "C = Excluded");
- String featureDefJson = "[{" + "\"name\": \"A\"," + //
+ String featureDefJson = "{\"FeatureDefinitions\" : [{" + "\"name\": \"A\"," + //
"\"type\": \"single\"," + //
"\"values\": [\"Included\", \"Excluded\"]," + //
"\"defaultValue\": \"Included\"," + //
@@ -91,7 +91,7 @@ public class ApplicabilityEndpointImpl implements ApplicabilityEndpoint {
"}, {" + //
"\"name\": \"B\"," + //
"\"type\": \"multiple\"," + //
- "\"values\": [\"Choice 1\", \"Choice 2\", \"Choice 3\"]," + //
+ "\"values\": [\"Choice1\", \"Choice2\", \"Choice3\"]," + //
"\"defaultValue\": \"\"," + //
"\"description\": \"Test B\"" + //
"},{" + //
@@ -101,7 +101,7 @@ public class ApplicabilityEndpointImpl implements ApplicabilityEndpoint {
"\"defaultValue\": \"Included\"," + //
"\"description\": \"Test C\"" + //
"}" + //
- "]";
+ "]}";
tx.createAttribute(featureDefinition, CoreAttributeTypes.GeneralStringData, featureDefJson);

Back to the top