/** * Copyright (c) 2012, 2013 itemis AG. * 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: * Mark Broerkens - initial API and implementation * */ package org.eclipse.rmf.tests.reqif10.serialization.uc001.tc1200; import java.math.BigInteger; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EDataType; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.EcorePackage; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.util.FeatureMap; import org.eclipse.emf.ecore.util.FeatureMapUtil; import org.eclipse.rmf.reqif10.AttributeDefinitionString; import org.eclipse.rmf.reqif10.AttributeDefinitionXHTML; import org.eclipse.rmf.reqif10.AttributeValueString; import org.eclipse.rmf.reqif10.AttributeValueXHTML; import org.eclipse.rmf.reqif10.DatatypeDefinition; import org.eclipse.rmf.reqif10.DatatypeDefinitionString; import org.eclipse.rmf.reqif10.DatatypeDefinitionXHTML; import org.eclipse.rmf.reqif10.ReqIF10Factory; import org.eclipse.rmf.reqif10.ReqIF10Package; import org.eclipse.rmf.reqif10.SpecHierarchy; import org.eclipse.rmf.reqif10.SpecObject; import org.eclipse.rmf.reqif10.SpecObjectType; import org.eclipse.rmf.reqif10.Specification; import org.eclipse.rmf.reqif10.SpecificationType; import org.eclipse.rmf.reqif10.XhtmlContent; import org.eclipse.rmf.reqif10.xhtml.XhtmlColType; import org.eclipse.rmf.reqif10.xhtml.XhtmlColgroupType; import org.eclipse.rmf.reqif10.xhtml.XhtmlDdType; import org.eclipse.rmf.reqif10.xhtml.XhtmlDivType; import org.eclipse.rmf.reqif10.xhtml.XhtmlDlType; import org.eclipse.rmf.reqif10.xhtml.XhtmlDtType; import org.eclipse.rmf.reqif10.xhtml.XhtmlFactory; import org.eclipse.rmf.reqif10.xhtml.XhtmlLiType; import org.eclipse.rmf.reqif10.xhtml.XhtmlObjectType; import org.eclipse.rmf.reqif10.xhtml.XhtmlOlType; import org.eclipse.rmf.reqif10.xhtml.XhtmlPType; import org.eclipse.rmf.reqif10.xhtml.XhtmlPackage; import org.eclipse.rmf.reqif10.xhtml.XhtmlTableType; import org.eclipse.rmf.reqif10.xhtml.XhtmlTbodyType; import org.eclipse.rmf.reqif10.xhtml.XhtmlTdType; import org.eclipse.rmf.reqif10.xhtml.XhtmlTfootType; import org.eclipse.rmf.reqif10.xhtml.XhtmlTheadType; import org.eclipse.rmf.reqif10.xhtml.XhtmlTrType; import org.eclipse.rmf.reqif10.xhtml.XhtmlUlType; import org.eclipse.rmf.tests.reqif10.serialization.util.SimpleModelBuilder; /** */ @SuppressWarnings("nls") public class TC1200FormatedContentModelBuilder extends SimpleModelBuilder { final static String LAST_CHANGE_STRING = "2012-04-07T01:51:37.112+02:00"; int id_counter = 0; int specHierarchyCounter = 0; int specObjectCounter = 0; // datatypes DatatypeDefinitionXHTML datatypeDefinitionXHTML; DatatypeDefinitionString datatypeDefinitionString; // SpecObjectTypes SpecObjectType specObjectType; AttributeDefinitionXHTML attributeDefinitionXHTML; AttributeDefinitionString attributeDefinitionString; // SpecificationTypes SpecificationType specificationType; // SpecObjects SpecObject specObject; /** * @throws Exception * */ public TC1200FormatedContentModelBuilder() throws Exception { super(null, "ID_TC1200_ReqIfHeader", "TC 1200 'Formated Content'"); } @Override public void createDatatypes() throws Exception { // datatypeDefinitionXHTML datatypeDefinitionXHTML = ReqIF10Factory.eINSTANCE.createDatatypeDefinitionXHTML(); datatypeDefinitionXHTML.setIdentifier("ID_TC1200_DatatypeDefinitionXHTML"); datatypeDefinitionXHTML.setLongName("TC1200 XHTML"); datatypeDefinitionXHTML.setLastChange(toDate(LAST_CHANGE_STRING)); // datatypeDefinitionString datatypeDefinitionString = ReqIF10Factory.eINSTANCE.createDatatypeDefinitionString(); datatypeDefinitionString.setIdentifier("ID_TC1200_DatatypeDefinitionString"); datatypeDefinitionString.setLongName("TC1200 String"); datatypeDefinitionString.setMaxLength(new BigInteger("255")); datatypeDefinitionString.setLastChange(toDate(LAST_CHANGE_STRING)); EList<DatatypeDefinition> datatypes = getReqIF().getCoreContent().getDatatypes(); datatypes.add(datatypeDefinitionXHTML); datatypes.add(datatypeDefinitionString); } @Override public void createSpecObjectTypes() throws Exception { // SpecObjectType specObjectType = ReqIF10Factory.eINSTANCE.createSpecObjectType(); specObjectType.setIdentifier("ID_TC1200_SpecObjectType"); specObjectType.setLongName("TC1200 SpecObjectType"); specObjectType.setLastChange(toDate(LAST_CHANGE_STRING)); // AttributeDefinitionXHTML attributeDefinitionXHTML = ReqIF10Factory.eINSTANCE.createAttributeDefinitionXHTML(); attributeDefinitionXHTML.setIdentifier("ID_TC1200_AttributeDefinitionXHTML"); attributeDefinitionXHTML.setLongName("TC1200 AttributeDefinitionXHTML"); attributeDefinitionXHTML.setLastChange(toDate(LAST_CHANGE_STRING)); attributeDefinitionXHTML.setType(datatypeDefinitionXHTML); // AttributeDefinitionString attributeDefinitionString = ReqIF10Factory.eINSTANCE.createAttributeDefinitionString(); attributeDefinitionString.setIdentifier("ID_TC1200_AttributeDefinitionString"); attributeDefinitionString.setLongName("TC1200 AttributeDefinitionString"); attributeDefinitionString.setLastChange(toDate(LAST_CHANGE_STRING)); attributeDefinitionString.setType(datatypeDefinitionString); specObjectType.getSpecAttributes().add(attributeDefinitionXHTML); specObjectType.getSpecAttributes().add(attributeDefinitionString); getReqIF().getCoreContent().getSpecTypes().add(specObjectType); } @Override public void createSpecificationTypes() throws Exception { specificationType = ReqIF10Factory.eINSTANCE.createSpecificationType(); specificationType.setIdentifier("ID_TC1200_SpecificationType"); specificationType.setLongName("TC1200 SpecificationType"); specificationType.setLastChange(toDate(LAST_CHANGE_STRING)); getReqIF().getCoreContent().getSpecTypes().add(specificationType); } @Override public void createSpecifications() throws Exception { Specification specification = ReqIF10Factory.eINSTANCE.createSpecification(); specification.setIdentifier("ID_TC1200_Specification"); specification.setType(specificationType); specification.setLastChange(toDate(LAST_CHANGE_STRING)); SpecHierarchy specHierarchy; for (SpecObject specObject : getReqIF().getCoreContent().getSpecObjects()) { specHierarchy = ReqIF10Factory.eINSTANCE.createSpecHierarchy(); specHierarchy.setIdentifier("ID_TC1200_SpecHierarchy_" + specHierarchyCounter++); specHierarchy.setLastChange(toDate(LAST_CHANGE_STRING)); specHierarchy.setObject(specObject); specification.getChildren().add(specHierarchy); getReqIF().getCoreContent().getSpecifications().add(specification); } } @Override public void createSpecObjects() throws Exception { SpecObject specObject; String description; EObject xhtmlLevel1; EObject xhtmlLevel2; EObject xhtmlLevel3; EObject xhtmlLevel4; // level 0 / empty xhtml input /* * description = "empty"; specObject = createSpecObject(description, * ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), null); * getReqIF().getCoreContent().getSpecObjects().add(specObject); description = "empty_the_original_value"; * specObject = createSpecObject(description, * ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheOriginalValue(), null); * getReqIF().getCoreContent().getSpecObjects().add(specObject); */ // level 1 / top level // create fill XhtmlDivType in XhtmlContent.div at original value description = "xhtml.p.type_the_original_value"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlPType(), true); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheOriginalValue(), xhtmlLevel1); description = "xhtml.p.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlPType(), true); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); // create fill XhtmlDivType in XhtmlContent.div at original value description = "xhtml.div.type_the_original_value"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), true); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheOriginalValue(), xhtmlLevel1); description = "xhtml.div.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), true); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); // level 2 // objects that are contained on xhtml.p.type createSpecObjectWithPXhtml("xhtml.br.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Br(), XhtmlPackage.eINSTANCE.getXhtmlBrType()); createSpecObjectWithPXhtml("xhtml.span.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Span(), XhtmlPackage.eINSTANCE.getXhtmlSpanType()); createSpecObjectWithPXhtml("xhtml.em.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Em(), XhtmlPackage.eINSTANCE.getXhtmlEmType()); createSpecObjectWithPXhtml("xhtml.strong.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Strong(), XhtmlPackage.eINSTANCE.getXhtmlStrongType()); createSpecObjectWithPXhtml("xhtml.dfn.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Dfn(), XhtmlPackage.eINSTANCE.getXhtmlDfnType()); createSpecObjectWithPXhtml("xhtml.code.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Code(), XhtmlPackage.eINSTANCE.getXhtmlCodeType()); createSpecObjectWithPXhtml("xhtml.samp.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Samp(), XhtmlPackage.eINSTANCE.getXhtmlSampType()); createSpecObjectWithPXhtml("xhtml.kbd.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Kbd(), XhtmlPackage.eINSTANCE.getXhtmlKbdType()); createSpecObjectWithPXhtml("xhtml.var.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Var(), XhtmlPackage.eINSTANCE.getXhtmlVarType()); createSpecObjectWithPXhtml("xhtml.cite.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Cite(), XhtmlPackage.eINSTANCE.getXhtmlCiteType()); createSpecObjectWithPXhtml("xhtml.abbr.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Abbr(), XhtmlPackage.eINSTANCE.getXhtmlAbbrType()); createSpecObjectWithPXhtml("xhtml.acronym.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Acronym(), XhtmlPackage.eINSTANCE.getXhtmlAcronymType()); createSpecObjectWithPXhtml("xhtml.q.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Q(), XhtmlPackage.eINSTANCE.getXhtmlQType()); createSpecObjectWithPXhtml("xhtml.inl.pres.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Tt(), XhtmlPackage.eINSTANCE.getXhtmlInlPresType()); createSpecObjectWithPXhtml("xhtml.a.type", XhtmlPackage.eINSTANCE.getXhtmlPType_A(), XhtmlPackage.eINSTANCE.getXhtmlAType()); // (mj) we omit object here, as it does not support styles and is tested later on extensively. See REQIF-17 // createSpecObjectWithPXhtml("xhtml.object.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Object(), // XhtmlPackage.eINSTANCE.getXhtmlObjectType()); createSpecObjectWithPXhtml("xhtml.edit.type", XhtmlPackage.eINSTANCE.getXhtmlPType_Ins(), XhtmlPackage.eINSTANCE.getXhtmlEditType()); // first level objects that are contained in xhtml.div.type and are not already covered by xhtml.p.type createSpecObjectWithDivXhtml("xhtml.h1.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_H1(), XhtmlPackage.eINSTANCE.getXhtmlH1Type()); createSpecObjectWithDivXhtml("xhtml.h2.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_H2(), XhtmlPackage.eINSTANCE.getXhtmlH2Type()); createSpecObjectWithDivXhtml("xhtml.h3.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_H3(), XhtmlPackage.eINSTANCE.getXhtmlH3Type()); createSpecObjectWithDivXhtml("xhtml.h4.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_H4(), XhtmlPackage.eINSTANCE.getXhtmlH4Type()); createSpecObjectWithDivXhtml("xhtml.h5.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_H5(), XhtmlPackage.eINSTANCE.getXhtmlH5Type()); createSpecObjectWithDivXhtml("xhtml.h6.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_H6(), XhtmlPackage.eINSTANCE.getXhtmlH6Type()); createSpecObjectWithDivXhtml("xhtml.ul.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Ul(), XhtmlPackage.eINSTANCE.getXhtmlUlType()); createSpecObjectWithDivXhtml("xhtml.ol.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Ol(), XhtmlPackage.eINSTANCE.getXhtmlOlType()); createSpecObjectWithDivXhtml("xhtml.dl.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Dl(), XhtmlPackage.eINSTANCE.getXhtmlDlType()); createSpecObjectWithDivXhtml("xhtml.pre.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Pre(), XhtmlPackage.eINSTANCE.getXhtmlPreType()); createSpecObjectWithDivXhtml("xhtml.blockquote.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Blockquote(), XhtmlPackage.eINSTANCE.getXhtmlBlockquoteType()); createSpecObjectWithDivXhtml("xhtml.address.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Address(), XhtmlPackage.eINSTANCE.getXhtmlAddressType()); createSpecObjectWithDivXhtml("xhtml.hr.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Hr(), XhtmlPackage.eINSTANCE.getXhtmlHrType()); createSpecObjectWithDivXhtml("xhtml.table.type", XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), XhtmlPackage.eINSTANCE.getXhtmlTableType()); // level 3 // xhtml.li.type description = "xhtml.li.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlUlType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Ul(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlLiType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlUlType_Li(), xhtmlLevel3); // xhtml.dt.type description = "xhtml.dt.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDlType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Dl(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDtType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlDlType_Dt(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDdType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlDlType_Dd(), xhtmlLevel3); // xhtml.dd.type description = "xhtml.dd.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDlType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Dl(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDtType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlDlType_Dt(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDdType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlDlType_Dd(), xhtmlLevel3); // xhtml.caption.type description = "xhtml.caption.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlCaptionType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Caption(), xhtmlLevel3); // xhtml.thead.type description = "xhtml.thead.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); ((XhtmlTableType) xhtmlLevel2).getTr().clear(); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTheadType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Thead(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTbodyType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tbody(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTfootType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tfoot(), xhtmlLevel3); // xhtml.col.type description = "xhtml.col.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlColType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Col(), xhtmlLevel3); // xhtml.colgroup.type description = "xhtml.colgroup.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlColgroupType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Colgroup(), xhtmlLevel3); // xhtml.tfoot.type description = "xhtml.tfoot.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); ((XhtmlTableType) xhtmlLevel2).getTr().clear(); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTheadType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Thead(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTbodyType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tbody(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTfootType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tfoot(), xhtmlLevel3); // xhtml.tbody.type description = "xhtml.tbody.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); ((XhtmlTableType) xhtmlLevel2).getTr().clear(); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTheadType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Thead(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTbodyType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tbody(), xhtmlLevel3); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTfootType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tfoot(), xhtmlLevel3); // xhtml.tr.type description = "xhtml.tr.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTrType(), true); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tr(), xhtmlLevel3); // xhtml.param.type // (mj) removed, due to REQIF-17 // description = "xhtml.param.type"; // xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); // specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), // xhtmlLevel1); // getReqIF().getCoreContent().getSpecObjects().add(specObject); // // xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlObjectType(), false); // // setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Object(), xhtmlLevel2); // // xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlParamType(), true); // setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlObjectType_Param(), xhtmlLevel3); // level 4 // xhtml.td.type description = "xhtml.td.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTrType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tr(), xhtmlLevel3); xhtmlLevel4 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTdType(), true); setValue(xhtmlLevel3, XhtmlPackage.eINSTANCE.getXhtmlTrType_Td(), xhtmlLevel4); // xhtml.th.type description = "xhtml.th.type"; xhtmlLevel1 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlLevel1); getReqIF().getCoreContent().getSpecObjects().add(specObject); xhtmlLevel2 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTableType(), false); setValue(xhtmlLevel1, XhtmlPackage.eINSTANCE.getXhtmlDivType_Table(), xhtmlLevel2); xhtmlLevel3 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTrType(), false); setValue(xhtmlLevel2, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tr(), xhtmlLevel3); xhtmlLevel4 = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlThType(), true); setValue(xhtmlLevel3, XhtmlPackage.eINSTANCE.getXhtmlTrType_Th(), xhtmlLevel4); } private void createSpecObjectWithPXhtml(String description, EReference eReference, EClass targetType) throws Exception { EObject xhtmlRoot = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlPType(), false); setValue(xhtmlRoot, eReference, createXhtmlInstance(targetType, true)); SpecObject specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlRoot); getReqIF().getCoreContent().getSpecObjects().add(specObject); } private void createSpecObjectWithDivXhtml(String description, EReference eReference, EClass targetType) throws Exception { EObject xhtmlRoot = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlDivType(), false); setValue(xhtmlRoot, eReference, createXhtmlInstance(targetType, true)); SpecObject specObject = createSpecObject(description, ReqIF10Package.eINSTANCE.getAttributeValueXHTML_TheValue(), xhtmlRoot); getReqIF().getCoreContent().getSpecObjects().add(specObject); } private SpecObject createSpecObject(String text, EStructuralFeature attributeValueXhtmlFeature, EObject eObject) throws Exception { SpecObject specObject = ReqIF10Factory.eINSTANCE.createSpecObject(); specObject.setIdentifier("ID_TC1200_SpecObject_" + text); specObject.setLastChange(toDate(LAST_CHANGE_STRING)); specObject.setType(specObjectType); AttributeValueString attributeValueString = ReqIF10Factory.eINSTANCE.createAttributeValueString(); attributeValueString.setDefinition(attributeDefinitionString); attributeValueString.setTheValue(text); specObject.getValues().add(attributeValueString); AttributeValueXHTML attributeValueXHTML = ReqIF10Factory.eINSTANCE.createAttributeValueXHTML(); attributeValueXHTML.setDefinition(attributeDefinitionXHTML); XhtmlContent xhtmlContent = ReqIF10Factory.eINSTANCE.createXhtmlContent(); setValue(attributeValueXHTML, attributeValueXhtmlFeature, xhtmlContent); if (null != eObject) { xhtmlContent.setXhtml(eObject); } else { // null } specObject.getValues().add(attributeValueXHTML); return specObject; } private EObject createXhtmlInstance(EClass eClass, boolean createAll) { EObject eObject = EcoreUtil.create(eClass); setAttributes(eObject, createAll); setSubElements(eObject, createAll); setMixedText(eObject, createAll); return eObject; } private void setMixedText(EObject eObject, boolean createAll) { // get the mixed attribute EAttribute mixedAttribute = null; for (EAttribute eAttribute : eObject.eClass().getEAllAttributes()) { if ("mixed".equals(eAttribute.getName()) && EcorePackage.eINSTANCE.getEFeatureMapEntry() == eAttribute.getEAttributeType()) { mixedAttribute = eAttribute; break; } } if (null != mixedAttribute) { FeatureMap featureMap = (FeatureMap) eObject.eGet(mixedAttribute); int featureMapSize = featureMap.size(); if (0 == featureMapSize) { featureMap.add(FeatureMapUtil.createTextEntry(eObject.eClass().getName())); } else { if (createAll) { for (int i = 0; i < featureMapSize * 3; i = i + 3) { FeatureMap.Entry entry = featureMap.get(i); EStructuralFeature feature = entry.getEStructuralFeature(); featureMap.add(i, FeatureMapUtil.createTextEntry("\n text before " + feature.getName())); featureMap.add(i + 2, FeatureMapUtil.createTextEntry("text after " + feature.getName())); } } } } else { // System.out.println("no mixed Attribute found in " + eObject); } } private void setSubElements(EObject eObject, boolean createAll) { if (createAll) { if (eObject instanceof XhtmlTableType) { EObject subEObject; // caption subEObject = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlCaptionType(), false); setValue(eObject, XhtmlPackage.eINSTANCE.getXhtmlTableType_Caption(), subEObject); // colgroup subEObject = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlColgroupType(), false); setValue(eObject, XhtmlPackage.eINSTANCE.getXhtmlTableType_Colgroup(), subEObject); // thead subEObject = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTheadType(), false); setValue(eObject, XhtmlPackage.eINSTANCE.getXhtmlTableType_Thead(), subEObject); // tbody subEObject = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTbodyType(), false); setValue(eObject, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tbody(), subEObject); // tfoot subEObject = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTfootType(), false); setValue(eObject, XhtmlPackage.eINSTANCE.getXhtmlTableType_Tfoot(), subEObject); // tr /* * subEObject = createXhtmlInstance(XhtmlPackage.eINSTANCE.getXhtmlTrType(), false); setValue(eObject, * XhtmlPackage.eINSTANCE.getXhtmlTableType_Tr(), subEObject); */ } else { // create full set of sub elements for (EReference eReference : eObject.eClass().getEAllContainments()) { // (mj) Skip XhtmlObjectType if (eReference.getEReferenceType().getName().equals("XhtmlObjectType")) { continue; } EObject subEObject = createXhtmlInstance(eReference.getEReferenceType(), false); setValue(eObject, eReference, subEObject); } } } else { // create mandatory sub elements only if (eObject instanceof XhtmlTableType) { XhtmlTrType tr = XhtmlFactory.eINSTANCE.createXhtmlTrType(); setAttributes(tr, false); ((XhtmlTableType) eObject).getTr().add(tr); XhtmlTdType td = XhtmlFactory.eINSTANCE.createXhtmlTdType(); setAttributes(td, false); tr.getTd().add(td); } else if (eObject instanceof XhtmlTbodyType) { XhtmlTrType tr = XhtmlFactory.eINSTANCE.createXhtmlTrType(); setAttributes(tr, false); ((XhtmlTbodyType) eObject).getTr().add(tr); XhtmlTdType td = XhtmlFactory.eINSTANCE.createXhtmlTdType(); setAttributes(td, false); tr.getTd().add(td); } else if (eObject instanceof XhtmlTheadType) { XhtmlTrType tr = XhtmlFactory.eINSTANCE.createXhtmlTrType(); setAttributes(tr, false); ((XhtmlTheadType) eObject).getTr().add(tr); XhtmlTdType td = XhtmlFactory.eINSTANCE.createXhtmlTdType(); setAttributes(td, false); tr.getTd().add(td); } else if (eObject instanceof XhtmlTfootType) { XhtmlTrType tr = XhtmlFactory.eINSTANCE.createXhtmlTrType(); setAttributes(tr, false); ((XhtmlTfootType) eObject).getTr().add(tr); XhtmlTdType td = XhtmlFactory.eINSTANCE.createXhtmlTdType(); setAttributes(td, false); tr.getTd().add(td); } else if (eObject instanceof XhtmlTrType) { XhtmlTdType td = XhtmlFactory.eINSTANCE.createXhtmlTdType(); setAttributes(td, false); ((XhtmlTrType) eObject).getTd().add(td); } else if (eObject instanceof XhtmlDlType) { XhtmlDtType dt = XhtmlFactory.eINSTANCE.createXhtmlDtType(); setAttributes(dt, false); setMixedText(dt, false); XhtmlDdType dd = XhtmlFactory.eINSTANCE.createXhtmlDdType(); setAttributes(dd, false); setMixedText(dd, false); ((XhtmlDlType) eObject).getDt().add(dt); ((XhtmlDlType) eObject).getDd().add(dd); } else if (eObject instanceof XhtmlUlType) { XhtmlLiType li = XhtmlFactory.eINSTANCE.createXhtmlLiType(); setAttributes(li, false); setMixedText(li, false); ((XhtmlUlType) eObject).getLi().add(li); } else if (eObject instanceof XhtmlOlType) { XhtmlLiType li = XhtmlFactory.eINSTANCE.createXhtmlLiType(); setAttributes(li, false); setMixedText(li, false); ((XhtmlOlType) eObject).getLi().add(li); } else if (eObject instanceof XhtmlColgroupType) { XhtmlColType col = XhtmlFactory.eINSTANCE.createXhtmlColType(); setAttributes(col, false); setMixedText(col, false); ((XhtmlColgroupType) eObject).getCol().add(col); } else if (eObject instanceof XhtmlObjectType) { throw new UnsupportedOperationException("Looks like there is an XhtmlObject Type in this ModelBuilder." + "However, we don't want to have any, as it this test is only meant for formatting, not object" + "embedding (see issue REQIF-17)."); // also, set the required object data. // ((XhtmlObjectType) eObject).setData("diagram.pdf"); // ((XhtmlObjectType) eObject).setType("application/pdf"); // // XhtmlObjectType obj = XhtmlFactory.eINSTANCE.createXhtmlObjectType(); // obj.setType("image/png"); // obj.setData("placeholder.png"); // setAttributes(obj, false); // setMixedText(obj, false); // ((XhtmlObjectType) eObject).getObject().add(obj); } } } private void setAttributes(EObject eObject, boolean createAll) { for (EAttribute eAttribute : eObject.eClass().getEAllAttributes()) { if (createAll || eAttribute.isRequired()) { Object value = getValue(eAttribute); if (null != value && eAttribute.isChangeable()) { setValue(eObject, eAttribute, value); } } } } private Object getValue(EAttribute eAttribute) { EDataType eDataType = eAttribute.getEAttributeType(); String datatypeName = eDataType.getName(); if ("class".equals(eAttribute.getName())) { // ReqIF never use class return null; } if ("style".equals(eAttribute.getName())) { // ReqIF only limited support return EcoreUtil.createFromString(eDataType, "text-decoration:underline"); } if (XhtmlPackage.eINSTANCE.getXhtmlObjectType_Class() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Archive() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Classid() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Codebase() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Codetype() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Declare() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Id() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Lang() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Name() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Space() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Standby() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Style() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Tabindex() == eAttribute || XhtmlPackage.eINSTANCE.getXhtmlObjectType_Title() == eAttribute) { // ReqIF: only attributes data, type, width, height are allowed return null; } if ("String".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "text"); } if ("LangType".equals(datatypeName)) { return null; } if ("SpaceType".equals(datatypeName)) { return null; } if ("ID".equals(datatypeName)) { return null; // return EcoreUtil.createFromString(eDataType, "ID" + id_counter++); } if ("CDATA".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "CDATA\"CDATA"); } if ("Datetime".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "2012-04-05T02:39:33.005+02:00"); } if ("URI".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "http://eclipse.org/rmf"); } if ("EFeatureMapEntry".equals(datatypeName)) { return null; } if ("Character".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "a"); } if ("LanguageCode".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "en"); } if ("Number".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "1"); } if ("Charset".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "UTF-8"); } if ("MimeType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "text/html"); } if ("ContentType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "text/html"); } if ("Text".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "text"); } if ("Length".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "100"); } if ("LinkTypes".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "LinkTypes"); } if ("RulesType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "rows"); } if ("AlignType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "left"); } if ("ValignType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "top"); } if ("MultiLength".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "100"); } if ("Pixels".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "100"); } if ("FrameType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "above"); } if ("ValuetypeType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "data"); } if ("IDREFS".equals(datatypeName)) { return null; // EcoreUtil.createFromString(eDataType, "a123"); } if ("ScopeType".equals(datatypeName)) { return EcoreUtil.createFromString(eDataType, "row"); } return null; } @SuppressWarnings("unchecked") private void setValue(EObject eObject, EStructuralFeature eStructuralFeature, Object value) { if (eStructuralFeature.isMany()) { ((EList<Object>) eObject.eGet(eStructuralFeature)).add(value); } else { eObject.eSet(eStructuralFeature, value); } } }