Difference between pages "D45 Scalability" and "Element Hierarchy Extension Point & Library"

From Event-B
(Difference between pages)
Jump to navigationJump to search
imported>Tommy
 
imported>Tommy
 
Line 1: Line 1:
= Overview =
+
The UI in Rodin 2.x contains an extension point <tt>org.eventb.ui.editorItems</tt> that groups the both following information:
Three main domains concerned the scalability task during the last year of the project:<br>
+
*the definition of elements and attributes and their hierarchy, and the way they are created
'''Improved Performance'''. According to the refocus mentioned in the General Platform Maintenance chapter, much of the reworking efforts performed on the core platform basically aimed to overcome Rodin scalability weaknesses, and the continuous need of seamless proving experience. The whole performance was enhanced by core implementation and user interface refactorings. Improvements made to the proving experience will be detailed in a separate chapter.<br>
+
*the information needed to correctly display and edit these elements in the various editors and UI components
'''Design pattern management / Generic Instantiation'''. Formal methods are applicable to various domains for constructing models of complex systems. However, often they lack some systematic methodological approaches, in particular in reusing existing models, for helping the development process.  The objective in introducing design patterns within formal methods in general, and in Event-B in particular, is to overcome this limitation.<br>
 
'''Editors'''. Along DEPLOY, edition became a central concern. Indeed, many usability issues appeard the models involved in pilots became "industrial" sized:
 
:*The legacy structured editor based on a form edition specific architecture reached its limits in editing such complex models. Industrial partners found this issue significant regarding the adoption of the Rodin platform in industry and providing a new structured editor correcting this issue became an important task during this last year of the DEPLOY project.
 
:*Camille textual editor had to tackle challenges related to resources mapping and management for projects of industrial size mentioned above or even the design of extension capabilities. Extension capabilities became a major concern since the grammar could be extended with theories.
 
  
= Motivations =
+
It appears obvious that the first information should be defined from an extension that belongs to the Database.
 +
To fullfil the above statement, the current extension point <tt>org.eventb.ui.editorItems</tt> should be split in two.
 +
The existing extension point was also heterogenous. Indeed, whereas the element relationships were concerning element types, the attribute relationship were concerning element types and references to UI defined attributes (referring to core attributes).<br>
 +
There is no need for such an indirection.
  
== Improved Performance ==
+
----
Many issues concerning stability and performance were related to the core code of the Rodin platform, causing crashes, loss of data, corruption in models. Other issues were related to the UI causing platform hanging, and sometimes leading to its freezing which required sometimes to kill the Rodin process, thus also leading to potential loss of data and corruption in models. Addressing these issues before the end of DEPLOY was mandatory.
+
The proposal should concern :
 +
A - Relationship declaration (new extension point)
 +
B - API to test these relations and traverse them
 +
C - Enforcement of the authorized relations when modifying the DB
 +
D - Behaviour while loading a file (including a file with invalid parent-child relations occurrences)
 +
E- What about the compatibilty with the file upgrade mechanism?
 +
----
  
== Design Pattern Management / Generic Instantiation  ==
+
= Some identified difficulties =
The idea of design patterns in software engineering is to have a general and reusable solution to commonly occurring problems.  In general, a design pattern is not necessarily a finished product, but rather a template on how to solve a problem which can be used in many different situations. The idea is to have some predefined solutions, and incorporate them into the development with some modification and/or instantiation.  With the design pattern tool we provide a semi-automatical way of reusing developed models in Event-B. Moreover, the typical elements that we are able to reuse are not only the models themselves, but also (more importantly) their correctness in terms of proofs associated with the models.
 
  
== Editors ==
+
== Initialization of elements from non UI components ==
  
This section concerns the actual editors that user work with to view and modify models.
+
The following ElementDescRegistry method, shows the dependency between an element creation and the initialization of its attributes with default values.
  
''' Editor of the core platform '''<br>
+
        public <T extends IInternalElement> T createElement(
 +
final IInternalElement root, IInternalElement parent,
 +
final IInternalElementType<T> type, final IInternalElement sibling)
 +
throws RodinDBException {
 +
final T newElement = parent.createChild(type, sibling, null);
 +
final IAttributeDesc[] attrDesc = getAttributes(type);
 +
for (IAttributeDesc desc : attrDesc) {
 +
desc.getManipulation().setDefaultValue(newElement, null);    // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
 +
}
 +
return newElement;
 +
}
  
Two major kinds of failures were faced when developing industrial sized models:
+
The protocol shall be changed to take into account this initialization outside from the graphical manipulation.
:* Failures occurring on Windows platforms, the mostly used system, when reaching the operating system limit number of graphical elements in memory allowed to be displayed at once. This situation used to crash the Rodin platform, and it appeared necessary to control the number of graphical elements needed to display the model elements. Architectures sparing these graphical elements were thus favoured.
+
Doing the initialization at org.eventb.core level is possible by registering a special "attribute initializer". <br>
:* Failures due to the high consumption of memory by the heavy graphical elements used by the forms of legacy editor.
+
WARNING : The required attribute is only available for "choice" attributes. Can't it be available for all kind of attributes?
:Moreover, it appeared important to visualize some elements that are not part of the current level of modelling, but are linked to it, for example, the actions in an abstract event, or its guards. Such elements are called the "inherited" elements, or "implicit children". The legacy structured editor being directly interfaced with the underlying Event-B models in database, it was difficult and tricky to modify it in order to display inherited elements. This was one more argument to go for a new editor based on a intermediary representation of the models.
 
:Another motivation to go for another editor was to get a more modest and ergonomic way to visualize and edit the models. The models being presented through styled text pretty printing and the edition tightly derived from a textual edition.
 
  
''' Camille '''<br>
+
== Correspondence between UI manipulation and "core" elements ==
 +
What if an element is not defined in the UI but defined in the hierarchy of a given core element?<br>
 +
>>> ANSWER : it seems that any contributor to the UI manages the extensions of the datat model. The responsability is thus left to him.<br>
 +
>>> A element for which there is no UI correspondance will not be displayed.
  
Camille was developed as an alternative editor in 2009.  In contrast to the existing editor, this was a pure textual editor that supported standard features like copy and paste, auto-completion, color highlighting and many more.  In addition, it performed better than the existing structural editor.
+
== Operation on elements shall be enforced ==
 +
 +
        private <T extends IInternalElement> OperationCreateElement getCreateElement(
 +
IInternalElement parent, IInternalElementType<T> type,  
 +
IInternalElement sibling, IAttributeValue[] values) {
 +
OperationCreateElement op = new OperationCreateElement(
 +
createDefaultElement(parent, type, sibling));
 +
op.addSubCommande(new ChangeAttribute(values));
 +
return op;
 +
}
  
While successful, Camille offered only limited support for models with extended elements contributed by plug-ins. Also, the underlying EMF Compare framework was problematic due to bugs and performance issues.
+
''The Operation model similar to a kind of transaction mechanism, should be made available from the DB layer.''<br>
 +
''The relations when using such layer shall be enforced and any invalid operation could be rejected.''
  
= Choices / Decisions =
+
= Proposal =
== Improved Performance ==
 
SYSTEREL lead a two phase investigation to have a better idea of the work to be done. Each phase being followed by some refactoring of the code. Out of the early investigation, a cause and effect relationship has been found between performance loss and the various reported bugs, such as "platform hanging" bugs. Indeed, it appeared that solving the performance issues sometimes solved induced bugs as well, making the scalability improvement tasks encompass the maintenance goals.<br>
 
Later, a deeper investigation was performed where profiling and code review were the two techniques used to tackle the issues left. The profiling strategy allowed to get a better localisation of the performance loss in both UI and core code while the code review helped to understand the intrinsic misuses or drawbacks of particular components and/or architectures. The proving UI was refactored in order to use a light textual representation.
 
  
== Design Pattern Management / Generic Instantiation  ==
+
== Hierarchy between elements ==
In our notion of design patterns, a pattern is just a development in Event-B including an abstract model called specification and a refinement. During development there might be the possibility of applying a pattern that was already developed to the current development.  The steps of using the tool are as follows.<br>
 
:'''Matching''' The developer the starts the design pattern plug-in and manually matches the specification of the pattern with the current development. In this linking of pattern and problem the developer has to define the which variable in the current development corresponds to each variable in the pattern specification.  Furthermore the developer has to ensure the consistency of the variable matching by matching the events of the pattern specification with events in the development.<br>
 
:'''Renaming''' Once the matching is done, the developer has the possibility to adapt the pattern refinement such as renaming the variables and events or merging events of the pattern refinement with uninvolved events of the development. Renaming can become mandatory there are name clashes, meaning the pattern refinement includes variable or events having the same name as existing elements in the development.<br>
 
  
After adaptation of the pattern refinement the tool generates automatically a new Event-B machine as a refinement of the machine where the developer started the design pattern tool. The correctness of the generated machine being a refinement is guaranteed by the generation process of the tool.
+
The part concerning element definition and hierarchy will go to a dedicated extension point in the database.
  
Design Patterns in Event-B are nothing else than ordinary Event-B models and are not restricted with respect to their size. Due to the fact that pattern and development have to be matched manually by the
+
=== A - hierarchy definition ===
developer, the size of a pattern effects the usability.  Furthermore, if the pattern is too specific either the pattern cannot be used in most situations or the developer is forced to tune its development
 
such that a further appliance of the pattern is possible. A pattern-driven development could thus lead to models including needless elements that would have been avoided when developing without patterns.
 
  
== Editors ==
+
Here is the definition of such an extension point : org.rodinp.core.dataModel ???  or org.rodinp.core.internalElementHierarchy ???
''' Rodin Editor '''<br>
 
  
The Rodin Editor has been built on the basis of enhancements brought to the Proving UI. In fact, by using the same kind of textual component, every model element is presented as text, as would a pretty print do. The edition is made possible through the use of a unique additional graphical component that overlays the presentation of the element (to be edited).  It lighten the presentation, but also side steps the use of a significant amount of greedy graphical elements. Only two graphical elements are needed for presentation and edition: the model viewer and its overlay editor!<br>
+
Configuration Markup:
The first public version (0.5.0) of the Rodin Editor has been released on the 13/07/2011 as a plug-in of the Rodin platform. This decision has been made in order to let the plug-in incubation for the time it is being tested and stated that no regression is introduced. The Rodin Editor since its version 0.6.1 is part of the Rodin core platform.
+
<!ELEMENT extension ((childRelation | attributeRelation | autoNaming)+)>
 +
<!ATTLIST extension
 +
point CDATA #REQUIRED
 +
id    CDATA #IMPLIED
 +
name  CDATA #IMPLIED
 +
>
 +
 +
<!ELEMENT elementRelationship (childType)+>
 +
<!ATTLIST elementRelationship
 +
parentTypeId CDATA #REQUIRED
 +
>
 +
parentTypeId - Element type of the parent, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).
 +
 +
<!ELEMENT childType EMPTY>
 +
<!ATTLIST childType
 +
typeId                CDATA #REQUIRED
 +
implicitChildProvider CDATA #IMPLIED
 +
>
 +
typeId - Element type of the child, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).
 +
 +
<!ELEMENT attributeRelationship (attributeType)+>
 +
<!ATTLIST attributeRelationship
 +
  elementTypeId CDATA #REQUIRED
 +
>
 +
elementTypeId - Element type of the element, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).
 +
 +
<!ELEMENT attributeType EMPTY>
 +
<!ATTLIST attributeType
 +
typeId CDATA #REQUIRED
 +
class  CDATA #REQUIRED
 +
>
 +
Describes how to graphically display a Rodin attribute of type boolean.
 +
 +
attributeTypeId - Id of the Rodin attribute type to which this description applies (see extension point org.rodinp.core.attributeTypes).
 +
 +
<!ELEMENT autoNaming EMPTY>
 +
<!ATTLIST autoNaming
 +
elementTypeId          CDATA #REQUIRED
 +
attributeDescriptionId CDATA #REQUIRED
 +
namePrefix             CDATA #REQUIRED
 +
>
 +
Describes how to automatically name an element. The autoNaming definition is unique for a given element type.
 +
 +
elementTypeId - Element type of the element, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).
 +
namePrefix - default prefix to name the element
 +
 +
The use of such extension point is obvious in org.eventb.core plug-in, as it would complement the extensions of org.rodinp.core.attributeTypes and org.rodinp.core.internalElementTypes.
  
''' Camille '''<br>
+
=== B - API for the hierarchy ===
  
Camille was quite successful, but due to the limited suitability for editing models using plug-ins, an architectural overhaul has been planned.  The course of action was not obvious, however, as there are a number of possible architectures with varying advantages and disadvantages.  Therefore, Ingo Weigelt at the University of Düsseldorf created a technical report<ref name="camille-arch-tech-report">http://cobra.cs.uni-duesseldorf.de/w/Special:Publication/Weigelt2012</ref> that analyzes the needs of the users and suggests a number of possible solutions.  In the FP7 project ADVANCE, a solution will be decided upon and implemented.
+
The API for an element : IElementDesc
  
= Available Documentation =
+
public String getID();
Links for Improved Performance
+
:* There is a wiki page concerning the Rodin Performance<ref>http://wiki.event-b.org/index.php/Rodin_Performances</ref>.
+
public List<IAttributeDesc> getAttributeDescription();
Links for Design Pattern Management / Generic Instantiation
+
:* A paper concerning the generic instantiation is available<ref name="genInst1">Silva, Renato and Butler, Michael (2009) "Supporting reuse of Event-B developments through generic instantiation". In, International Conference on Formal Engineering Methods (ICFEM 09), Rio de Janeiro, Brazil, 09 - 12 Dec 2009. 19pp. (Submitted) http://eprints.soton.ac.uk/68737/</ref>
+
public List<IElementRelationship> getChildRelationships();
:*An article about Pattern Management is published on the wiki<ref>http://wiki.event-b.org/index.php/Pattern</ref>.
+
:*The article about Generic Instantiation on the wiki<ref>http://wiki.event-b.org/index.php/Generic_Instantiation</ref>
+
public List<IElementType> getChildTypes();
Links for Edition
+
:Two documentation pages have been created for the Rodin Editor:
+
public IAttributeDesc getAutoNameAttribute();
:* A general page describing the editor and how it works <ref name="RodinEditorPage">http://wiki.event-b.org/index.php/Rodin_Editor</ref>.
 
:* A user guide page <ref name="RodinEditorUserManual">http://wiki.event-b.org/index.php/Rodin_Editor_User_Guide</ref>.
 
: Moreover, a special category has been created on both SourceForge feature request<ref name="featTracker">https://sourceforge.net/tracker/?group_id=108850&atid=651672</ref> and bug<ref name="bugTracker">https://sourceforge.net/tracker/?group_id=108850&atid=651669</ref> trackers.
 
  
Camille Documentation
+
adding the following method to the protocol :
* As the Camille text editor is based on the standard Eclipse editor, that documentation applies fully as well: <br>
 
help on Editors<ref>http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.user/concepts/concepts-6.htm Eclipse</ref>
 
* Additional information is available in the Text Editor<ref>http://wiki.event-b.org/index.php/Text_Editor</ref> section on the wiki.
 
* The Rodin Handbook<ref>http://handbook.event-b.org/</ref> provides some basic usage information in a few places.
 
* The technical report<ref name="camille-arch-tech-report">http://cobra.cs.uni-duesseldorf.de/w/Special:Publication/Weigelt2012</ref> describes analysis of user's needs and possible solutions.
 
  
= Status =
+
        public boolean isDirectChildTypeOf(IElementDesc parentElemDesc);
== Improved Performance ==
 
The refactoring made on both core code and UI code allowed to gain up to 25 times speed-up on the UI (as described below),<br>
 
[[Image:800px-Rodin_Performances_Core_perf_simple3_nos.png|700px|link=Rodin Performances|General Platform Performances]]<br>
 
and almost a 2 times speed-up in the core code, making the platform usable in an industrial sized context.<br>
 
[[Image:Rodin_Performances_Editor_perf_simplev2_nos.png|850px|Rodin Proof Editor Performances]]
 
  
== Design Pattern Management / Generic Instantiation ==
+
The API for an Attribute : IAttributeDesc
The Generic Instantiation plug-in is available in version 0.2.1 for Rodin 2.4 and above from the main Rodin Update Site in the ''Composition and Decomposition'' category.
+
 +
        public String getID(); 
 +
     
 +
        public IAttributeManipulation getManipulation();
 +
   
 +
public IAttributeType getAttributeType();
  
== Editors ==
+
== Data model operation ==
 +
The ElementManipulationFacade, support for modifications over the Database, should be provided by the Event-B Core plug-in.<br>
 +
The IAttributeManipulation interface should be also provided by the Event-B Core plug-in as it concerns the manipulation done on the attribute in the DB.
  
''' Rodin Editor '''
+
The information about the rendering of an element or an attribute, should not be deduced from the attribute itself (e.g. choiceAttribute vs. toggleAttribute vs. textAttribute), it should be given in the UI.
  
The Rodin Editor is part of the Rodin platform since Rodin 2.4 released by end of January 2012.
+
== UI related information ==
 +
The part concerning how to display elements and UI related info will stay in the editorItems extension point and shall point to an element definition and hierachy.<br>
 +
Relationships will disappear from the editorItems extension point.
  
''' Camille '''
+
The interfaces become the following :
  
Camille has been quite successful, and besides a number of bug fixes and some performance profiling and tuning, the code base has not changed much.
+
public interface IUIElementDesc extends IItemDesc {
 +
 +
public String getChildrenSuffix();
 +
 +
public IImageProvider getImageProvider();
 +
 +
public IAttributeDesc atColumn(int i);
 +
 +
public int getDefaultColumn();
 +
 +
public boolean isSelectable(int i);
 +
 +
public String getAutoNamePrefix();
 +
 +
public IElementPrettyPrinter getPrettyPrinter();
 +
 +
}
  
= References =
+
public interface IUIAttributeDesc extends IItemDesc {
<references/>
+
 +
public String getSuffix();
 +
 +
public IEditComposite createWidget();
 +
 +
public boolean isHorizontalExpand();
 +
 +
}
  
[[Category:D45 Deliverable]]
+
[[Category:Design_proposal]]

Revision as of 16:09, 25 September 2012

The UI in Rodin 2.x contains an extension point org.eventb.ui.editorItems that groups the both following information:

  • the definition of elements and attributes and their hierarchy, and the way they are created
  • the information needed to correctly display and edit these elements in the various editors and UI components

It appears obvious that the first information should be defined from an extension that belongs to the Database. To fullfil the above statement, the current extension point org.eventb.ui.editorItems should be split in two. The existing extension point was also heterogenous. Indeed, whereas the element relationships were concerning element types, the attribute relationship were concerning element types and references to UI defined attributes (referring to core attributes).
There is no need for such an indirection.


The proposal should concern :

A - Relationship declaration (new extension point)
B - API to test these relations and traverse them
C - Enforcement of the authorized relations when modifying the DB
D - Behaviour while loading a file (including a file with invalid parent-child relations occurrences)
E- What about the compatibilty with the file upgrade mechanism?

Some identified difficulties

Initialization of elements from non UI components

The following ElementDescRegistry method, shows the dependency between an element creation and the initialization of its attributes with default values.

       public <T extends IInternalElement> T createElement(
			final IInternalElement root, IInternalElement parent,
			final IInternalElementType<T> type, final IInternalElement sibling)
			throws RodinDBException {
		final T newElement = parent.createChild(type, sibling, null);
		final IAttributeDesc[] attrDesc = getAttributes(type);
		for (IAttributeDesc desc : attrDesc) {
			desc.getManipulation().setDefaultValue(newElement, null);    // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
		}
		return newElement;
	}

The protocol shall be changed to take into account this initialization outside from the graphical manipulation. Doing the initialization at org.eventb.core level is possible by registering a special "attribute initializer".
WARNING : The required attribute is only available for "choice" attributes. Can't it be available for all kind of attributes?

Correspondence between UI manipulation and "core" elements

What if an element is not defined in the UI but defined in the hierarchy of a given core element?
>>> ANSWER : it seems that any contributor to the UI manages the extensions of the datat model. The responsability is thus left to him.
>>> A element for which there is no UI correspondance will not be displayed.

Operation on elements shall be enforced

       private <T extends IInternalElement> OperationCreateElement getCreateElement(
			IInternalElement parent, IInternalElementType<T> type, 
			IInternalElement sibling, IAttributeValue[] values) {
		OperationCreateElement op = new OperationCreateElement( 
				createDefaultElement(parent, type, sibling));
		op.addSubCommande(new ChangeAttribute(values));
		return op;
	}

The Operation model similar to a kind of transaction mechanism, should be made available from the DB layer.
The relations when using such layer shall be enforced and any invalid operation could be rejected.

Proposal

Hierarchy between elements

The part concerning element definition and hierarchy will go to a dedicated extension point in the database.

A - hierarchy definition

Here is the definition of such an extension point : org.rodinp.core.dataModel ??? or org.rodinp.core.internalElementHierarchy ???

Configuration Markup:
<!ELEMENT extension ((childRelation | attributeRelation | autoNaming)+)>
<!ATTLIST extension
point CDATA #REQUIRED
id    CDATA #IMPLIED
name  CDATA #IMPLIED
>

<!ELEMENT elementRelationship (childType)+>
<!ATTLIST elementRelationship
parentTypeId CDATA #REQUIRED
>
parentTypeId - Element type of the parent, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).

<!ELEMENT childType EMPTY>
<!ATTLIST childType
typeId                CDATA #REQUIRED
implicitChildProvider CDATA #IMPLIED
>
typeId - Element type of the child, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).

<!ELEMENT attributeRelationship (attributeType)+>
<!ATTLIST attributeRelationship
elementTypeId CDATA #REQUIRED
>
elementTypeId - Element type of the element, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).

<!ELEMENT attributeType EMPTY>
<!ATTLIST attributeType
typeId CDATA #REQUIRED
class  CDATA #REQUIRED
>
Describes how to graphically display a Rodin attribute of type boolean.

attributeTypeId - Id of the Rodin attribute type to which this description applies (see extension point org.rodinp.core.attributeTypes).

<!ELEMENT autoNaming EMPTY>
<!ATTLIST autoNaming
elementTypeId          CDATA #REQUIRED
attributeDescriptionId CDATA #REQUIRED
namePrefix             CDATA #REQUIRED
>
Describes how to automatically name an element. The autoNaming definition is unique for a given element type.

elementTypeId - Element type of the element, must be the unique ID of a Rodin internal element type (see extension point org.rodinp.core.internalElementTypes).
namePrefix - default prefix to name the element

The use of such extension point is obvious in org.eventb.core plug-in, as it would complement the extensions of org.rodinp.core.attributeTypes and org.rodinp.core.internalElementTypes.

B - API for the hierarchy

The API for an element : IElementDesc

	public String getID();

	public List<IAttributeDesc> getAttributeDescription();
	
	public List<IElementRelationship> getChildRelationships();

	public List<IElementType> getChildTypes();

	public IAttributeDesc getAutoNameAttribute();

adding the following method to the protocol :

       public boolean isDirectChildTypeOf(IElementDesc parentElemDesc);

The API for an Attribute : IAttributeDesc

       public String getID();  
     
       public IAttributeManipulation getManipulation();

	public IAttributeType getAttributeType();

Data model operation

The ElementManipulationFacade, support for modifications over the Database, should be provided by the Event-B Core plug-in.
The IAttributeManipulation interface should be also provided by the Event-B Core plug-in as it concerns the manipulation done on the attribute in the DB.

The information about the rendering of an element or an attribute, should not be deduced from the attribute itself (e.g. choiceAttribute vs. toggleAttribute vs. textAttribute), it should be given in the UI.

UI related information

The part concerning how to display elements and UI related info will stay in the editorItems extension point and shall point to an element definition and hierachy.
Relationships will disappear from the editorItems extension point.

The interfaces become the following :

public interface IUIElementDesc extends IItemDesc {

	public String getChildrenSuffix();

	public IImageProvider getImageProvider();

	public IAttributeDesc atColumn(int i);

	public int getDefaultColumn();

	public boolean isSelectable(int i);
	
	public String getAutoNamePrefix();
	
	public IElementPrettyPrinter getPrettyPrinter();
	
}
public interface IUIAttributeDesc extends IItemDesc {

	public String getSuffix();

	public IEditComposite createWidget();

	public boolean isHorizontalExpand();

}