diff options
author | mpotterc0k | 2013-07-03 16:50:02 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2013-07-09 23:57:57 +0000 |
commit | 800725effd597aa587dda88dec2ed4a717443e86 (patch) | |
tree | 90d353cb4c2299fe503d0eafda1180352f752026 | |
parent | 7677a938f6398ea7138c28fda54605ba324a1828 (diff) | |
download | org.eclipse.osee-800725effd597aa587dda88dec2ed4a717443e86.tar.gz org.eclipse.osee-800725effd597aa587dda88dec2ed4a717443e86.tar.xz org.eclipse.osee-800725effd597aa587dda88dec2ed4a717443e86.zip |
refinement[ats_J3VWW]: Handle new column in Doors export file
Change-Id: I602d65abe0394a789acf5cbaccac6e2a19786aaa
Signed-off-by: mpotterc0k <marc.a.potter@boeing.com>
3 files changed, 196 insertions, 55 deletions
diff --git a/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/skynet/core/DoorsArtifactExtractorTest.java b/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/skynet/core/DoorsArtifactExtractorTest.java index 5b8d49fdcf5..be86cf15bc8 100644 --- a/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/skynet/core/DoorsArtifactExtractorTest.java +++ b/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/skynet/core/DoorsArtifactExtractorTest.java @@ -28,6 +28,7 @@ import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; import org.eclipse.osee.framework.core.operation.NullOperationLogger; import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.framework.skynet.core.importing.RoughArtifact; +import org.eclipse.osee.framework.skynet.core.importing.RoughArtifactKind; import org.eclipse.osee.framework.skynet.core.importing.operations.RoughArtifactCollector; import org.eclipse.osee.framework.skynet.core.importing.parsers.DoorsArtifactExtractor; import org.junit.Before; @@ -64,6 +65,16 @@ public class DoorsArtifactExtractorTest { IMAGE_CONTENT, "Paragraph Number"}; + private static final RoughArtifactKind[] ARTIFACT_TYPES = { + RoughArtifactKind.CONTAINER, + RoughArtifactKind.SECONDARY, + RoughArtifactKind.SECONDARY, + RoughArtifactKind.SECONDARY, + RoughArtifactKind.SECONDARY, + RoughArtifactKind.SECONDARY, + RoughArtifactKind.PRIMARY, + RoughArtifactKind.SECONDARY,}; + private static final String DOCUMENT_APPLICABILITY = "Document 1"; @ClassRule @@ -103,6 +114,10 @@ public class DoorsArtifactExtractorTest { String actualName = artifact.getName(); assertEquals("Artifact Name is incorrect", expectedName, actualName); + RoughArtifactKind expectedType = ARTIFACT_TYPES[index]; + RoughArtifactKind actualType = artifact.getRoughArtifactKind(); + assertEquals("Artifact Type is incorrect", expectedType, actualType); + /*********************************************************** * Prime item diagram. is checked here because it is the most complicated artifact in the example */ @@ -157,7 +172,6 @@ public class DoorsArtifactExtractorTest { */ if (COMPANY_DOCUMENTS.equals(actualName)) { String theHtml = artifact.getRoughAttribute(CoreAttributeTypes.HTMLContent.getName()); - int theValue = theHtml.indexOf("ABC-DEF"); assertEquals("Document Applicability filter failed", theHtml.indexOf("ABC-DEF"), -1); } } diff --git a/plugins/org.eclipse.osee.client.integration.tests/support/doorsArtifactExtractor/sample_DOORS_export.htm b/plugins/org.eclipse.osee.client.integration.tests/support/doorsArtifactExtractor/sample_DOORS_export.htm index aa7a20698a8..d8a0ee913e9 100644 --- a/plugins/org.eclipse.osee.client.integration.tests/support/doorsArtifactExtractor/sample_DOORS_export.htm +++ b/plugins/org.eclipse.osee.client.integration.tests/support/doorsArtifactExtractor/sample_DOORS_export.htm @@ -7,6 +7,7 @@ <th width=420 align=Left>Requirements</th> <th width=83 align=Left>Object Number</th> <th width=52 align=Left>Req?</th> +<th width=160 align=Left>Data Type</th> <th width=93 align=Left>Parent ID</th> <th width=130 align=Left>Effectivity</th> <th width=160 align=Left>Paragraph Heading</th> @@ -25,6 +26,7 @@ </DIV></b><br></td> <td>1</td> <td>False</td> +<td>Heading</td> <td><br></td> <td><br></td> <td>SCOPE</td> @@ -43,6 +45,7 @@ </td> <td>1.0-1</td> <td>False</td> +<td>Information</td> <td><br></td> <td><br></td> <td>SCOPE</td> @@ -62,6 +65,7 @@ </DIV></b><br></td> <td>2</td> <td>False</td> +<td>Heading</td> <td><br></td> <td><br></td> <td>APPLICABLE DOCUMENTS</td> @@ -81,6 +85,7 @@ </DIV></b><br></td> <td>2.2</td> <td>False</td> +<td>Heading</td> <td><br></td> <td><br></td> <td>Non-Government documents.</td> @@ -100,6 +105,7 @@ </DIV></b><br></td> <td>2.2.1</td> <td>False</td> +<td>Heading</td> <td><br></td> <td><br></td> <td>Company documents.</td> @@ -118,6 +124,7 @@ </td> <td>2.2.1.0-3</td> <td>False</td> +<td>Information</td> <td><br></td> <td><br></td> <td>Company documents.</td> @@ -136,6 +143,7 @@ </td> <td>2.2.1.0-6</td> <td>False</td> +<td>Information</td> <td><br></td> <td><br></td> <td>Company documents.</td> @@ -154,6 +162,7 @@ </td> <td>2.2.1.0-8</td> <td>False</td> +<td>Information</td> <td><br></td> <td><br></td> <td>Company documents.</td> @@ -173,6 +182,7 @@ </DIV></b><br></td> <td>3</td> <td>False</td> +<td>Heading</td> <td><br></td> <td><br></td> <td>REQUIREMENTS</td> @@ -192,6 +202,7 @@ </DIV></b><br></td> <td>3.1</td> <td>False</td> +<td>Heading</td> <td><br></td> <td><br></td> <td>Prime item definition.</td> @@ -209,7 +220,8 @@ </a>The subsystem shall be integrated <br> </td> <td>3.1.0-1</td> -<td>True</td> +<td>False</td> +<td>Requirement</td> <td>SREQ-1234<br>SREQ-5678<br>SREQ-2468<br>SREQ-1357<br>SREQ-0987<br>SREQ-4321</td> <td>Earth</td> <td>Prime item definition.</td> @@ -235,6 +247,7 @@ </td> <td>3.1.0-4</td> <td>False</td> +<td>Information</td> <td><br></td> <td><br></td> <td>Prime item definition.</td> @@ -310,6 +323,7 @@ </td> <td>1.2.3.4.5.6.7.8.9</td> <td>False</td> +<td>Table</td> <td><br></td> <td><br></td> <td>Row</td> @@ -328,6 +342,7 @@ </DIV></b><br></td> <td>3.1.1</td> <td>False</td> +<td>Heading</td> <td><br></td> <td><br></td> <td>Prime item diagram.</td> @@ -346,6 +361,7 @@ </td> <td>3.1.1.0-3</td> <td>False</td> +<td>Figure</td> <td><br></td> <td><br></td> <td>Prime item diagram.</td> @@ -364,6 +380,7 @@ </td> <td>3.1.1.0-3</td> <td>False</td> +<td>Figure</td> <td><br></td> <td><br></td> <td>Prime item diagram.</td> @@ -376,6 +393,48 @@ <td nowrap align="left"><a href = "sample_DOORS_export#X5948"> EXA-43<br> (5948)</a>(IN)<br> <small>...</small></td> </tr> + +<tr><td>EXA-1</td> +<td><a name="X1"> +</a><b>1 +<DIV style="margin-left: 36px">SCOPE +</DIV></b><br></td> +<td>3.1.2</td> +<td>False</td> +<td>Not Defined</td> +<td><br></td> +<td><br></td> +<td>Bad Row</td> +<td><br></td> +<td><br></td> +<td><br></td> +<td><br></td> +<td><br></td> +<td><br></td> +<td nowrap align="left"><a href = "sample_DOORS_export#X5880"> EXA-1<br> (5880)</a>(IN)<br> +<small>...</small></td> +</tr> +<tr><td>EXA-2</td> +<td><a name="X2"> +</a>This verifies that a Not Defined row will not be imported <br> +</td> +<td>1.0-1</td> +<td>False</td> +<td>Not Defined</td> +<td><br></td> +<td><br></td> +<td>SCOPE</td> +<td>Some Documented information</td> +<td><br></td> +<td><br></td> +<td><br></td> +<td><br></td> +<td><br></td> +<td nowrap align="left"><a href = "sample_DOORS_export#X5881"> EXA-2<br> (5881)</a>(IN)<br> +<small>...</small></td> +</tr> + + </table> <DIV align="center"><p><a href = "http://www.ibm.com/software/awdtools/doors/">Produced by DOORS 9.3.0.6</a></DIV> </body> diff --git a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/importing/parsers/DoorsArtifactExtractor.java b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/importing/parsers/DoorsArtifactExtractor.java index e44ee287175..6396979a1af 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/importing/parsers/DoorsArtifactExtractor.java +++ b/plugins/org.eclipse.osee.framework.skynet.core/src/org/eclipse/osee/framework/skynet/core/importing/parsers/DoorsArtifactExtractor.java @@ -70,16 +70,84 @@ public class DoorsArtifactExtractor extends AbstractArtifactExtractor { CoreAttributeTypes.VerificationEvent, null, null, - null}; // Last - // one - // is - // actually - // a - // string + null}; // Last one is actually a string private String guidString = ""; private boolean isRequirement; private String subsystem; private String documentApplicability = ""; + private DataTypeEnum lastDataType = DataTypeEnum.OTHER; + + private static enum RowTypeEnum { + ID("ID"), + REQUIREMENTS("Requirements"), + OBJECT_NUMBER("Object Number"), + IS_REQ("Req?"), + PARENT_ID("Parent ID"), + PARAGRAPH_HEADING("Paragraph Heading"), + DOCUMENT_APPLICABILITY("Document Applicability"), + VERIFICATION_CRITERIA("Verification Criteria (V-PIDS_Verification)"), + CHANGE_STATUS("Change Status"), + OBJECT_HEADING("Proposed Object Heading"), + OBJECT_TEXT("Proposed Object Text"), + CHANGE_RATIONALE("Change Rationale"), + LINKS("Links"), + GUID("OSEE GUID"), + SUBSYSTEM("Subsystem"), + DATA_TYPE("Data Type"), + OTHER(""); + + private final static Map<String, RowTypeEnum> rawStringToRowType = new HashMap<String, RowTypeEnum>(); + + public String _rowType; + + RowTypeEnum(String rowType) { + _rowType = rowType; + } + + public static synchronized RowTypeEnum fromString(String value) { + if (rawStringToRowType.isEmpty()) { + for (RowTypeEnum enumStatus : RowTypeEnum.values()) { + RowTypeEnum.rawStringToRowType.put(enumStatus._rowType, enumStatus); + } + } + RowTypeEnum returnVal = rawStringToRowType.get(value); + if (returnVal == null) { + if (value.indexOf("Requirements") != -1) { + returnVal = REQUIREMENTS; + } + } + return returnVal != null ? returnVal : OTHER; + } + + } + + private static enum DataTypeEnum { + HEADING("Heading"), + INFORMATION("Information"), + REQUIREMENT("Requirement"), + TABLE("Table"), + FIGURE("Figure"), + LIST("List"), + NOT_DEFINED("Not Defined"), + OTHER(""); + + public String _dataType; + private final static Map<String, DataTypeEnum> rawStringToDataType = new HashMap<String, DataTypeEnum>(); + + DataTypeEnum(String dataType) { + _dataType = dataType; + } + + public static synchronized DataTypeEnum fromString(String value) { + if (rawStringToDataType.isEmpty()) { + for (DataTypeEnum enumStatus : DataTypeEnum.values()) { + DataTypeEnum.rawStringToDataType.put(enumStatus._dataType, enumStatus); + } + } + DataTypeEnum returnVal = rawStringToDataType.get(value); + return returnVal != null ? returnVal : OTHER; + } + } @Override public String getDescription() { @@ -290,8 +358,11 @@ public class DoorsArtifactExtractor extends AbstractArtifactExtractor { SAXParser parser = new SAXParser(); Handler theHandler = new Handler(); parser.setContentHandler(theHandler); - parser.parse(fileName); - + try { + parser.parse(fileName); + } catch (Exception e) { + e.printStackTrace(); + } } @Override @@ -319,49 +390,6 @@ public class DoorsArtifactExtractor extends AbstractArtifactExtractor { } } - private static enum RowTypeEnum { - ID("ID"), - REQUIREMENTS("Requirements"), - OBJECT_NUMBER("Object Number"), - IS_REQ("Req?"), - PARENT_ID("Parent ID"), - PARAGRAPH_HEADING("Paragraph Heading"), - DOCUMENT_APPLICABILITY("Document Applicability"), - VERIFICATION_CRITERIA("Verification Criteria (V-PIDS_Verification)"), - CHANGE_STATUS("Change Status"), - OBJECT_HEADING("Proposed Object Heading"), - OBJECT_TEXT("Proposed Object Text"), - CHANGE_RATIONALE("Change Rationale"), - LINKS("Links"), - GUID("OSEE GUID"), - SUBSYSTEM("Subsystem"), - OTHER(""); - - private final static Map<String, RowTypeEnum> rawStringToRowType = new HashMap<String, RowTypeEnum>(); - - public String _rowType; - - RowTypeEnum(String rowType) { - _rowType = rowType; - } - - public static synchronized RowTypeEnum fromString(String value) { - if (rawStringToRowType.isEmpty()) { - for (RowTypeEnum enumStatus : RowTypeEnum.values()) { - RowTypeEnum.rawStringToRowType.put(enumStatus._rowType, enumStatus); - } - } - RowTypeEnum returnVal = rawStringToRowType.get(value); - if (returnVal == null) { - if (value.indexOf("Requirements") != -1) { - returnVal = REQUIREMENTS; - } - } - return returnVal != null ? returnVal : OTHER; - } - - } - public void foundStartOfWorksheet(String sheetName) { // Nothing to do in DOORS file Leave in in case this changes (it is // called at start) @@ -387,7 +415,7 @@ public class DoorsArtifactExtractor extends AbstractArtifactExtractor { /*************************************************************** * First check the document applicability box, if it is empty this is a header row */ - boolean isHeaderRow = false; + boolean isHeaderRow = false, foundDataType = false; int rowIndex; for (rowIndex = 0; rowIndex < row.length; rowIndex++) { RowTypeEnum rowType = rowIndexToRowTypeMap.get(rowIndex); @@ -460,13 +488,50 @@ public class DoorsArtifactExtractor extends AbstractArtifactExtractor { break; case IS_REQ: - isRequirement = rowValue.trim().equals("True"); + if (!foundDataType) { + isRequirement = rowValue.trim().equals("True"); + } break; case SUBSYSTEM: subsystem = rowValue.trim(); break; + case DATA_TYPE: + foundDataType = true; + DataTypeEnum dataType = DataTypeEnum.fromString(rowValue.trim()); + switch (dataType) { + case HEADING: + isRequirement = false; + lastDataType = DataTypeEnum.HEADING; + break; + + case REQUIREMENT: + isRequirement = true; + lastDataType = DataTypeEnum.REQUIREMENT; + break; + + case TABLE: + case INFORMATION: + case LIST: + case FIGURE: + isRequirement = lastDataType.equals(DataTypeEnum.REQUIREMENT); + break; + + case NOT_DEFINED: + // bad row -- clear the artifact and terminate processing + inArtifact = false; + theArtifact.clear(); + return; + + case OTHER: + foundDataType = false; + lastDataType = DataTypeEnum.OTHER; + break; + } + + break; + case CHANGE_STATUS: case OBJECT_HEADING: case OBJECT_TEXT: @@ -495,6 +560,9 @@ public class DoorsArtifactExtractor extends AbstractArtifactExtractor { } private void processArtifact() throws OseeCoreException { + if (theArtifact.size() == 0) { + return; + } RoughArtifact roughArtifact = new RoughArtifact(RoughArtifactKind.PRIMARY, paragraphName.trim()); roughArtifact.setSectionNumber(paragraphNumber.trim()); roughArtifact.addAttribute(CoreAttributeTypes.ParagraphNumber, paragraphNumber); |