blob: f526b2c42c27a2001b8348cc843c4a1ffe6d6913 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="commands" nsURI="http://www.eclipse.org/ecl/data/commands.ecore"
nsPrefix="dataCommands">
<eClassifiers xsi:type="ecore:EClass" name="ReadCsvFile" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Parses given csv file. Fails if file is not found or format is invalid.&#xA;Learn more about &lt;a href = &quot;http://xored.freshdesk.com/solution/articles/78219-assert-the-whole-table&quot;>Asserting the whole table contents.&lt;/a>"/>
<details key="returns" value="&lt;code>Table&lt;/code> EMF Object. "/>
<details key="example" value="with [get-window Preferences] {&#xA;&#x9;get-tree | select &quot;Java/Installed JREs&quot;&#xA;&#x9;get-table | get-table-data | eq [read-csv-file &quot;workspace:/assertData/table.csv&quot;] | &#xA;&#x9;&#x9;assert-true &quot;Data in table does not match input file&quot; &#xA;&#x9;get-button OK | click&#xA;}&#xA;&#xA;//Let's say we need to write ErrorLog info to csv file 'table.csv'.&#xA;//ECL script should look like this:&#xA; &#xA;get-view &quot;Error Log&quot; | get-tree | expand-all&#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&#xA; &#xA;//Note: &#xA;//&lt;a href=&quot;#expand-all&quot;>Expand-all&lt;/a>command may be useful in case of hierarchical tree - otherwise non-expanded levels won't be written. &#xA;//You should have MyProject/AssertData on your workspace (you may do it easily with a workspace context) to let you csv file to be created there. &#xA; &#xA;//In case you want to specify which columns/rows should be written you may use &#xA;//&lt;a href=&quot;#select-columns&quot;>select-columns&lt;/a>/&lt;a href=&quot;#exclude-columns&quot;>exclude-columns&lt;/a> and &lt;a href=&quot;#select-rows&quot;>select-rows&lt;/a>/&lt;a href=&quot;#exclude-rows&quot;>exclude-rows&lt;/a> commands:&#xA; &#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | select-columns &quot;Message&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot; &#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | exclude-columns &quot;Message&quot; &quot;Plug-in&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot;&#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | select-rows -column &quot;Message&quot; -value &quot;Execution of early startup handlers completed.&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot;&#xA; &#xA;//To compare table data to already written csv file you may use &lt;a href=&quot;#read-csv-file&quot;>read-csv-file&lt;/a> command:&#xA; &#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | select-columns &quot;Plug-in&quot; | eq [read-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot;] | assert-true &quot;Data in table does not match input file&quot; "/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="URI to a file to read. Currently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Print" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Takes a list of objects from input pipe and prints them as a plain-text table into output pipe."/>
<details key="returns" value="Series of string objects"/>
</eAnnotations>
<eAnnotations source="http://www.eclipse.org/ecl/internal"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="input" unique="false" upperBound="-1"
eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EObject">
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="WriteCsvFile" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Writes given table into csv file. Fails if file is not accessible.&#xA;Learn more about &lt;a href = &quot;http://xored.freshdesk.com/solution/articles/78219-assert-the-whole-table&quot;>Asserting the whole table contents.&lt;/a>"/>
<details key="returns" value="The value of &lt;code>table&lt;/code> argument."/>
<details key="example" value="with [get-window Preferences] {&#xA;&#x9;get-tree | select &quot;Java/Installed JREs&quot;&#xA;&#x9;get-table | get-table-data | write-csv-file &quot;workspace:/assertData/table.csv&quot;&#xA;&#x9;get-button OK | click&#xA;}&#xA;&#xA;//Let's say we need to write ErrorLog info to csv file 'table.csv'.&#xA;//ECL script should look like this:&#xA; &#xA;get-view &quot;Error Log&quot; | get-tree | expand-all&#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&#xA; &#xA;//Note: &#xA;//&lt;a href=&quot;#expand-all&quot;>Expand-all&lt;/a>command may be useful in case of hierarchical tree - otherwise non-expanded levels won't be written. &#xA;//You should have MyProject/AssertData on your workspace (you may do it easily with a workspace context) to let you csv file to be created there. &#xA; &#xA;//In case you want to specify which columns/rows should be written you may use &#xA;//&lt;a href=&quot;#select-columns&quot;>select-columns&lt;/a>/&lt;a href=&quot;#exclude-columns&quot;>exclude-columns&lt;/a> and &lt;a href=&quot;#select-rows&quot;>select-rows&lt;/a>/&lt;a href=&quot;#exclude-rows&quot;>exclude-rows&lt;/a> commands:&#xA; &#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | select-columns &quot;Message&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot; &#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | exclude-columns &quot;Message&quot; &quot;Plug-in&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot;&#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | select-rows -column &quot;Message&quot; -value &quot;Execution of early startup handlers completed.&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot;&#xA; &#xA;//To compare table data to already written csv file you may use &lt;a href=&quot;#read-csv-file&quot;>read-csv-file&lt;/a> command:&#xA; &#xA;get-view &quot;Error Log&quot; | get-tree | get-table-data | select-columns &quot;Plug-in&quot; | eq [read-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot;] | assert-true &quot;Data in table does not match input file&quot; "/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="table" eType="ecore:EClass objects.ecore#//Table">
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Table to write"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="URI to write CSV data to. Currently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ExcludeColumns" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Takes a table from input and returns the same table which has some columns excluded. "/>
<details key="returns" value="Copy of input table object without columns with names listed in &lt;code>columns&lt;/code>"/>
<details key="example" value="get-view &quot;Error Log&quot; | get-tree | get-table-data | exclude-columns &quot;Message&quot; &quot;Plug-in&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot;"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="table" eType="ecore:EClass objects.ecore#//Table">
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Table to exclude columns from"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="columns" upperBound="-1"
eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Column names to exclude from table. It is OK to pass column names which are not present in table"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="SelectColumns" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Takes a table from input and returns the table containing only columns passed into &lt;code>columns&lt;/code> argument."/>
<details key="returns" value="Copy of input table object with only columns with names listed in &lt;code>columns&lt;/code>"/>
<details key="example" value="get-view &quot;Error Log&quot; | get-tree | get-table-data | select-columns &quot;Message&quot; | write-csv-file &quot;workspace:/MyProject/AssertData/table.csv&quot; "/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="table" eType="ecore:EClass objects.ecore#//Table">
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Table to take columns from"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="columns" upperBound="-1"
eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Column names to take from table. If given column name is not present in input table, command fails"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AssertTablesMatch" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Compares contents of two tables. If contents are not the same, fails with a descriptive message"/>
<details key="example" value="assert-tables-match [get-editor &quot;context&quot; | get-section Parameters | get-table | get-table-data ]&#xA; [get-editor &quot;context2&quot; | get-section Parameters | get-table | get-table-data]"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="left" eType="ecore:EClass objects.ecore#//Table"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="right" eType="ecore:EClass objects.ecore#//Table"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="ignoreColumnOrder" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"
defaultValueLiteral="false">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="When true, column order is not taken into account"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="ignoreMissingColumns" eType="#//IgnoreColumnsMode"
defaultValueLiteral="NONE">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Describes the comparison behaviour in case when one of tables contains a column which is not present in other table:&#xA;&lt;ul>&#xA;&lt;li>&lt;b>NONE&lt;/b> &amp;ndash; all columns must be present in both tables&lt;/li>&#xA;&lt;li>&lt;b>LEFT&lt;/b> &amp;ndash; columns from right table which are not present in left, are ignored&lt;/li>&#xA;&lt;li>&lt;b>RIGHT&lt;/b> &amp;ndash; columns from left table which are not present in right, are ignored&lt;/li>&#xA;&lt;li>&lt;b>BOTH&lt;/b> &amp;ndash; comparison performed only on columns present in both tables&lt;/li>&#xA;&lt;p>Another way to interpret this argument is that it is an answer on question &amp;quot;Which column can have less columns?&amp;quot;&lt;/p>&#xA;&lt;p>The primary reasoning for this argument is to provide smooth migration when presentation is changed – consider this scenario: we have a CSV file with table data, and we have UI table. If we add or remove extra columns in the UI, we can keep existing sample data file and just correct the &lt;code>ignoreMissingColumns&lt;/code> argument&lt;/p>&#xA;"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="IgnoreColumnsMode">
<eLiterals name="NONE"/>
<eLiterals name="LEFT" value="1"/>
<eLiterals name="RIGHT" value="2"/>
<eLiterals name="BOTH" value="3"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="WriteLines" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Reads objects from input pipe and writes them into file line-by-line as strings"/>
<details key="example" value="//writes a list of launch configuration into a file line-by-line&#xA;list-launch-configurations | write-lines -uri &quot;workspace:/Project/Folder/file.txt&quot;&#xA;// appends &quot;New line&quot; into a file. &#xA;str &quot;New line&quot; | write-lines -uri &quot;workspace:/Project/Folder/file.txt&quot; -append&#xA;"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="URI to write lines to. Currently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="append" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"
defaultValueLiteral="false">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Whether to append given lines into file. Default value is false"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ReadLines" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Reads lines from file identified by uri and writes them one-by-one into output pipe"/>
<details key="example" value="//Displays alert with lines count&#xA;show-alert [concat &quot;The number of lines is &quot;[read-lines -uri &quot;workspace:/Project/Folder/file.txt&quot; | length | str]]&#xA;&#xA;"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" lowerBound="1" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="URI to read lines from. Currently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system"/>
</eAnnotations>
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="SelectRows" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Takes a table from input and returns the table with rows filtered by column and criteria."/>
<details key="returns" value="Copy of input table object with filtered rows."/>
<details key="example" value="select-rows -column &quot;columnName&quot; -value &quot;value&quot; -match exact|glob|regex"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="table" eType="ecore:EClass objects.ecore#//Table">
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Table to take columns from"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Column named to filter rows by."/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Pattern to match rows to."/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="match" eType="#//RowMatchMode">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Describes the matching behaviour for rows.&#xA;&lt;ul>&#xA;&lt;li>&lt;b>glob&lt;/b> &amp;ndash; wildcard matching&lt;/li>&#xA;&lt;li>&lt;b>exact&lt;/b> &amp;ndash; value should be equals to pattern&lt;/li>&#xA;&lt;li>&lt;b>regext&lt;/b> &amp;ndash; value must match java regular expression&lt;/li>&#xA;&lt;/ul>"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EEnum" name="RowMatchMode">
<eLiterals name="exact"/>
<eLiterals name="glob" value="1"/>
<eLiterals name="regexp" value="2"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ExcludeRows" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Takes a table from input and returns the table with rows filtered by column and criteria."/>
<details key="returns" value="Copy of input table object with filtered rows."/>
<details key="example" value="exclude-rows -column &quot;columnName&quot; -value &quot;value&quot; -match exact|glob|regex"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="table" eType="ecore:EClass objects.ecore#//Table">
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Table to take columns from"/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="column" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Column named to filter rows by."/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Pattern to match rows to."/>
</eAnnotations>
</eStructuralFeatures>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="match" eType="#//RowMatchMode">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Describes the matching behaviour for rows.&#xA;&lt;ul>&#xA;&lt;li>&lt;b>glob&lt;/b> &amp;ndash; wildcard matching&lt;/li>&#xA;&lt;li>&lt;b>exact&lt;/b> &amp;ndash; value should be equals to pattern&lt;/li>&#xA;&lt;li>&lt;b>regext&lt;/b> &amp;ndash; value must match java regular expression&lt;/li>&#xA;&lt;/ul>"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="AsTableData" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Converts its input to table data format, exactly the same as &lt;code>get-table-data&lt;/code> returns."/>
<details key="returns" value="Table data."/>
<details key="example" value="get-log -levels error | as-table-data | write-csv-file &quot;workspace:/Project/file2.csv&quot;"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EReference" name="input" upperBound="-1"
eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EObject">
<eAnnotations source="http://www.eclipse.org/ecl/input"/>
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Object(s) to convert from."/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ReadProperties" eSuperTypes="../../org.eclipse.rcptt.ecl.core/model/ecl.ecore#//Command">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="Parses given .properties file. Fails if file is not found or format is invalid"/>
<details key="returns" value="ECL map with values from properties file"/>
<details key="example" value="...get-item &quot;General Registers/pc&quot; | get-property &quot;values[\'Value\']&quot;&#xA;| matches [format &quot;%s.*&quot; [read-properties -uri &quot;file:/C:/Users/Administrator/Desktop/p.properties&quot; | get myKey]] | verify-true&#xA;"/>
</eAnnotations>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="uri" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
<eAnnotations source="http://www.eclipse.org/ecl/docs">
<details key="description" value="URI to a file to read. Currently supported schemes are workspace:/ for files in workspace and file:/ for files on local file system"/>
</eAnnotations>
</eStructuralFeatures>
</eClassifiers>
</ecore:EPackage>