Detecting inconsistent selections on Multi Value Enum Attribute via RegExp

Hi,

imagine that you have a multi value enumeration in your module, but certain enum values are not allowed to be selected at the same time.

E.g. your enumeration have the values "v1", "v2", "v3", "v4".
The combined selection of "v1" and "v3" is ok, but it is not ok to have further enum values selected when both are selected. E.g. It is not allowed to have "v1" and "v3" and "v2" or "v4" selected.

I would check such inconsistencies via regular expressions.
The attribute value of a multi value enum attribute is a multi line string where each line represents a selected enum value of a certain object. E.g. the multi value enum attribute obj.mvattr contains the selection "v1", "v2" and "v3". The return value is:
"v1"
"v2"
"v3"

My question: Does anyone have a suggestion how to define a regular expression to detect the inconsistency? My problem is, that it is possible to have "v2" and possibly other enum values unallowed selected between "v1" and "v3", but it could also be "v4" and other selected after "v3" which is also an inconsistency itself. Moreover, both of them could be selected "v2" and "v4" - another case of inconsistency. The pattern for both enum values must be defined as optional occurences.

E.g. (v1)(.* \n)*(v3)(.*) --> But here the valid selection of only "v1" and "v3" matches also.

Does anybody has a suggestion for me how to define the regular expression so that I can match all cases of inconsitency whith that regular expression?

Thanks in advnce, Helko
Helko - Tue Feb 07 03:16:18 EST 2012

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
llandale - Tue Feb 07 12:16:06 EST 2012

[1] From a theoreticaly viewpoint its likely you are mixing two different pieces of information into one attribute.

[2] I dislike regular expressions; partly because I'm terrible at them and partly because they are so hard for me to read and partly because they are so hard for the next dude to read.

[3] This surely is easier to code with logic if you have more than one error condition.

bool b1 = isMember(o.NameAttr, "v1")
bool b2 = isMember(o.NameAttr, "v2")
bool b3 = isMember(o.NameAttr, "v3")
bool b4 = isMember(o.NameAttr, "v4")
bool bx = true
if ( b1 and  b2  and  b3 and  bx) then "v2 disallowed with v1 and v2"
if (!b1 and  b2  and  bx and !b4) then "v2 disallowed when v1 and v4 are off"
... more conditions ...


-Louie

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Helko - Wed Feb 08 07:09:39 EST 2012

llandale - Tue Feb 07 12:16:06 EST 2012

[1] From a theoreticaly viewpoint its likely you are mixing two different pieces of information into one attribute.

[2] I dislike regular expressions; partly because I'm terrible at them and partly because they are so hard for me to read and partly because they are so hard for the next dude to read.

[3] This surely is easier to code with logic if you have more than one error condition.

bool b1 = isMember(o.NameAttr, "v1")
bool b2 = isMember(o.NameAttr, "v2")
bool b3 = isMember(o.NameAttr, "v3")
bool b4 = isMember(o.NameAttr, "v4")
bool bx = true
if ( b1 and  b2  and  b3 and  bx) then "v2 disallowed with v1 and v2"
if (!b1 and  b2  and  bx and !b4) then "v2 disallowed when v1 and v4 are off"
... more conditions ...


-Louie

Hi Louie,
yes, it is a mixing of two information into one attrbute, but it is a sort of additional constraint for the selection value range.
For me thats in general a common practice. It's not a simple but a complex attribute.

I aggree with you. I also did not like reading regular expressions.

Nevertheless, I need to use it, because the constraints I'm talkiong about here are mainly facing a predefined subset of enum values in this enumeration. At DOORS runtime the DXL program, which is also checking the constraints for each object, adds further enum values in the course of time.

Thus, statical hard coded checks as you suggested with your if statements are not sufficient in my use case.

An example: I have to check, if only "v1" and "v3" are selected but not "v2" or some of the runtime-defined enum values I have mentioned above.
Cheers, Helko

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Mathias Mamsch - Wed Feb 08 07:56:01 EST 2012

Helko - Wed Feb 08 07:09:39 EST 2012
Hi Louie,
yes, it is a mixing of two information into one attrbute, but it is a sort of additional constraint for the selection value range.
For me thats in general a common practice. It's not a simple but a complex attribute.

I aggree with you. I also did not like reading regular expressions.

Nevertheless, I need to use it, because the constraints I'm talkiong about here are mainly facing a predefined subset of enum values in this enumeration. At DOORS runtime the DXL program, which is also checking the constraints for each object, adds further enum values in the course of time.

Thus, statical hard coded checks as you suggested with your if statements are not sufficient in my use case.

An example: I have to check, if only "v1" and "v3" are selected but not "v2" or some of the runtime-defined enum values I have mentioned above.
Cheers, Helko

As Louie I also do not see the need to use regexp on that. But if you still do. Well in theory it should be easy. Note that in DOORS attribute values will have no duplicates, appear in order and separated by \n. Imagine you have three values v1,v2,v3. Then you have 2^3 = 8 possibilities for selections:
 

nothing
v1
v2
v3
v1,v2
v1,v3
v2,v3
v1,v2,v3

 


Now you can make a regexp:

 

 

"(^$)|(^v1$)|(^v2$)|(^v3$)|(^v1\nv2$)|(^v1\nv3$)|(^v2\nv3$)|(^v1\nv2\nv3$)"



which contains all possible values. If you now select 5 of them to be valid, then you remove the other 3 from the regexp and you have a regexp matching your valid patterns (you could also keep the 3 invalid ones) to have the regexp matching invalid combinations. I think you get the idea. It gets problematic if you have 10 enumeration values (1024 possibilities), but only care about 3 of them. In this case you should use Louies approach to preselect the ones you are interested in.



 

 

 

Buffer buf = create() 
 
int count = 0
string val; for val in skEnumValuesIAmInterestedIn do {
   if (isMember(o.NameAttr, val)) {
      if (count++ > 0) buf += "\n"
      buf += val
   }
}



You could then apply your magic regexp on the result again. However might be more efficient instead of using strings to replace your enum values by numbers. Maybe that helps, regards, Mathias



 

 

 


Mathias Mamsch, IT-QBase GmbH, Consultant for Requirement Engineering and D00RS

 

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Helko - Wed Feb 08 08:04:41 EST 2012

Mathias Mamsch - Wed Feb 08 07:56:01 EST 2012

As Louie I also do not see the need to use regexp on that. But if you still do. Well in theory it should be easy. Note that in DOORS attribute values will have no duplicates, appear in order and separated by \n. Imagine you have three values v1,v2,v3. Then you have 2^3 = 8 possibilities for selections:
 

nothing
v1
v2
v3
v1,v2
v1,v3
v2,v3
v1,v2,v3

 


Now you can make a regexp:

 

 

"(^$)|(^v1$)|(^v2$)|(^v3$)|(^v1\nv2$)|(^v1\nv3$)|(^v2\nv3$)|(^v1\nv2\nv3$)"



which contains all possible values. If you now select 5 of them to be valid, then you remove the other 3 from the regexp and you have a regexp matching your valid patterns (you could also keep the 3 invalid ones) to have the regexp matching invalid combinations. I think you get the idea. It gets problematic if you have 10 enumeration values (1024 possibilities), but only care about 3 of them. In this case you should use Louies approach to preselect the ones you are interested in.



 

 

 

Buffer buf = create() 
 
int count = 0
string val; for val in skEnumValuesIAmInterestedIn do {
   if (isMember(o.NameAttr, val)) {
      if (count++ > 0) buf += "\n"
      buf += val
   }
}



You could then apply your magic regexp on the result again. However might be more efficient instead of using strings to replace your enum values by numbers. Maybe that helps, regards, Mathias



 

 

 


Mathias Mamsch, IT-QBase GmbH, Consultant for Requirement Engineering and D00RS

 

Thanks!

Comeing back to the Why:
I cannot check with isMember on enum values which are not present at the beginning or will be defined later on runtime with no limitation on the naming.
Yes, I can check with isMember my predefined subset of enum values.

Thats the reason, why I'm using regular expressions. See my example above. Also the selection status of some runtime defined enum value is relevant for the constraint checking.

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
SystemAdmin - Wed Feb 08 08:36:50 EST 2012

Helko - Wed Feb 08 08:04:41 EST 2012
Thanks!

Comeing back to the Why:
I cannot check with isMember on enum values which are not present at the beginning or will be defined later on runtime with no limitation on the naming.
Yes, I can check with isMember my predefined subset of enum values.

Thats the reason, why I'm using regular expressions. See my example above. Also the selection status of some runtime defined enum value is relevant for the constraint checking.

… and why are you not able to add values to the skip list during run time?
At some point of the script you could ask the current attribute's definition for its defined values (or whatever is your source of information about values to regard) and add them to your skip list, you can define clusters of values which trigger "is allowed or not", use isMember to concat this information and then use some regexp …
but coming back to your original question and the example you gave:
Would the following be a solution for you (yes, this disregards that a value v3a might exist)?

code
Regexp reV1AndV3 = regexp "v1.*\nv3"
Regexp reV1AndV3AndNothingElse = regexp "^v1\nv3$"
if (reV1AndV3 and ! reV1AndV3AndNothingElse) {complain}
code

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
SystemAdmin - Wed Feb 08 08:40:09 EST 2012

SystemAdmin - Wed Feb 08 08:36:50 EST 2012
… and why are you not able to add values to the skip list during run time?
At some point of the script you could ask the current attribute's definition for its defined values (or whatever is your source of information about values to regard) and add them to your skip list, you can define clusters of values which trigger "is allowed or not", use isMember to concat this information and then use some regexp …
but coming back to your original question and the example you gave:
Would the following be a solution for you (yes, this disregards that a value v3a might exist)?

code
Regexp reV1AndV3 = regexp "v1.*\nv3"
Regexp reV1AndV3AndNothingElse = regexp "^v1\nv3$"
if (reV1AndV3 and ! reV1AndV3AndNothingElse) {complain}
code

ggg apparently I will also have to find the "preview" button some day.... Ah, found it - would have had to use FF instead of Chrome....

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Mathias Mamsch - Wed Feb 08 08:45:59 EST 2012

Helko - Wed Feb 08 08:04:41 EST 2012
Thanks!

Comeing back to the Why:
I cannot check with isMember on enum values which are not present at the beginning or will be defined later on runtime with no limitation on the naming.
Yes, I can check with isMember my predefined subset of enum values.

Thats the reason, why I'm using regular expressions. See my example above. Also the selection status of some runtime defined enum value is relevant for the constraint checking.

If you do not want to use isMember you can replace it by a findPlainText in a string. I still do not get what you mean by "defined later on runtime with no limitation on the naming". Are you not reading the values from an attribute or doing any postprocessing to the attribute values? However you can always replace the isMember by a findPlainText. The gist is, that you need to extract a subset of your values (i.e. remove all values you do not care for, or put them to separate strings) to use a regexp for checking.

Example for checking for the existence of one value in a string (use that in the filter code of my earlier post):

// if (isMember (o.strAttributeName, val)) { 
    //    ...
    // }
 
    // equivalent code: 
    string check = "\n" (o.strAttributeName) "\n"
    int d1, d2
    if (findPlainText(check, "\n" val "\n", d1,d2, false)) {
        ... 
    }

 


You might also try to explain a little more, what you are trying to accomplish. Maybe that helps, regards, Mathias

 

 


Mathias Mamsch, IT-QBase GmbH, Consultant for Requirement Engineering and D00RS

 

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Helko - Wed Feb 08 09:14:40 EST 2012

Mathias Mamsch - Wed Feb 08 08:45:59 EST 2012

If you do not want to use isMember you can replace it by a findPlainText in a string. I still do not get what you mean by "defined later on runtime with no limitation on the naming". Are you not reading the values from an attribute or doing any postprocessing to the attribute values? However you can always replace the isMember by a findPlainText. The gist is, that you need to extract a subset of your values (i.e. remove all values you do not care for, or put them to separate strings) to use a regexp for checking.

Example for checking for the existence of one value in a string (use that in the filter code of my earlier post):

// if (isMember (o.strAttributeName, val)) { 
    //    ...
    // }
 
    // equivalent code: 
    string check = "\n" (o.strAttributeName) "\n"
    int d1, d2
    if (findPlainText(check, "\n" val "\n", d1,d2, false)) {
        ... 
    }

 


You might also try to explain a little more, what you are trying to accomplish. Maybe that helps, regards, Mathias

 

 


Mathias Mamsch, IT-QBase GmbH, Consultant for Requirement Engineering and D00RS

 

OK, again I try to explain by using other words :) :

The module has an enumeration type. An attribute is facing this type.

Before using it daily a set of predefined enum values already exists. These enum values are: "v1", "v2" and "v3".

The end user runs a DXL program in context of the module. At runtime, the user adds further enum values. The value must be unique.

As I said at the beginning, there are additionaly constraints limiting the possibility of selection for a module object.

E.g. It is allowed to have "v1" selected. In that case, "v2" might optionaly be selected, but it is not necessary. It is not allowed to have other enum values selected when "v1" and possibly "v2" is selected. Thus "v3" is forbidden in that case and also other enum values which will be added to the enum type by DXL programm, I've mentioned at the beginning.

There are further so called miss use cases for selections regarding "v1", "v2" and "v3" in special but also regarding the enum values which has been added to the enum type later on.

I try to identify such inconsistencies by checking them per object in the module with certain regular expressions.

E.g.

Regexp missUseCase1= regexp "(v1\n)(v2\n|[^v2].+)";


should be my regular expression for the miss use case example above.

The problem:

 

[^v2]


excepts the character v and 2, but not the string v2.

Why I'm not using imperative code with a lot of if isMember-checks? For this I have to gather all enum values currently defined in the enum type. Than I have to check using isMember per object if v1 and possibly v2 hase been selected but not (v3 OR some of the user defined enum values).

I'm thinking that the cost and complexity behind such code is more ugly than using regular expressions? That's why I'm trying to find a solution using regular expressions.

But, if it is not possible to define an exception for whole words instead of single characters, I have to realize the if-isMember-checking-solution.

Cheers, Helko

 

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
SystemAdmin - Wed Feb 08 10:58:46 EST 2012

Helko - Wed Feb 08 09:14:40 EST 2012

OK, again I try to explain by using other words :) :

The module has an enumeration type. An attribute is facing this type.

Before using it daily a set of predefined enum values already exists. These enum values are: "v1", "v2" and "v3".

The end user runs a DXL program in context of the module. At runtime, the user adds further enum values. The value must be unique.

As I said at the beginning, there are additionaly constraints limiting the possibility of selection for a module object.

E.g. It is allowed to have "v1" selected. In that case, "v2" might optionaly be selected, but it is not necessary. It is not allowed to have other enum values selected when "v1" and possibly "v2" is selected. Thus "v3" is forbidden in that case and also other enum values which will be added to the enum type by DXL programm, I've mentioned at the beginning.

There are further so called miss use cases for selections regarding "v1", "v2" and "v3" in special but also regarding the enum values which has been added to the enum type later on.

I try to identify such inconsistencies by checking them per object in the module with certain regular expressions.

E.g.

Regexp missUseCase1= regexp "(v1\n)(v2\n|[^v2].+)";


should be my regular expression for the miss use case example above.

The problem:

 

[^v2]


excepts the character v and 2, but not the string v2.

Why I'm not using imperative code with a lot of if isMember-checks? For this I have to gather all enum values currently defined in the enum type. Than I have to check using isMember per object if v1 and possibly v2 hase been selected but not (v3 OR some of the user defined enum values).

I'm thinking that the cost and complexity behind such code is more ugly than using regular expressions? That's why I'm trying to find a solution using regular expressions.

But, if it is not possible to define an exception for whole words instead of single characters, I have to realize the if-isMember-checking-solution.

Cheers, Helko

 

I assume "miss" use case means a regexp for a value which is not allowed.

You mean something like

Regexp missUseCase1= regexp "^(([^v])|(v[^1]))?(^v1(([^\n])|(\n[^v])|(\nv[^2])))$";


?

(this expression seems to work with the regex coach with modifier /m/ switched off, not sure how it behaves in dxl).
Is it just me or does this regexp look like it does not make the code more readable? :)

Edit: no, it does not work - this expression will also match if v1 is not available at all, apart from that the rules seem to match. so you will have to add some more tweaks, good luck!

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
llandale - Wed Feb 08 16:10:52 EST 2012

Helko - Wed Feb 08 07:09:39 EST 2012
Hi Louie,
yes, it is a mixing of two information into one attrbute, but it is a sort of additional constraint for the selection value range.
For me thats in general a common practice. It's not a simple but a complex attribute.

I aggree with you. I also did not like reading regular expressions.

Nevertheless, I need to use it, because the constraints I'm talkiong about here are mainly facing a predefined subset of enum values in this enumeration. At DOORS runtime the DXL program, which is also checking the constraints for each object, adds further enum values in the course of time.

Thus, statical hard coded checks as you suggested with your if statements are not sufficient in my use case.

An example: I have to check, if only "v1" and "v3" are selected but not "v2" or some of the runtime-defined enum values I have mentioned above.
Cheers, Helko

No real difference between hard-coding if-elseif logic and hard coding regular expressions. But I think you are saying there is some data-driven constraints for this project that somehow say:

  • For attr "X", if "v1" and "v2" are selected then its invalid if "v2" is also selected.

Maybe that's in a table that looks like this:

Attribute    Danger Combo       Invalid Values
X               v1, v3          v2
X               v2, v3, v4      v1


If the Danger Combo exists then it's invalid if any of the Invalid Values may also exist.

 

for every row in the table
{  NameAttr = Attibute from table
   IsDanger = true
   for each Danger Combo Value
   {  if (!isMember(obj.NameAttr, DangerValue)) IsDanger = false
   }
   if (IsDanger)
   {  IsInvalid = false
      for each Invalid Values
      {  if (!isMember(obj.NameAttr, InvalidValue)) IsInvalid = true
      }
   }
   if (IsInvalid) whatever
}


-Louie

 

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Mathias Mamsch - Thu Feb 09 03:19:50 EST 2012

Helko - Wed Feb 08 09:14:40 EST 2012

OK, again I try to explain by using other words :) :

The module has an enumeration type. An attribute is facing this type.

Before using it daily a set of predefined enum values already exists. These enum values are: "v1", "v2" and "v3".

The end user runs a DXL program in context of the module. At runtime, the user adds further enum values. The value must be unique.

As I said at the beginning, there are additionaly constraints limiting the possibility of selection for a module object.

E.g. It is allowed to have "v1" selected. In that case, "v2" might optionaly be selected, but it is not necessary. It is not allowed to have other enum values selected when "v1" and possibly "v2" is selected. Thus "v3" is forbidden in that case and also other enum values which will be added to the enum type by DXL programm, I've mentioned at the beginning.

There are further so called miss use cases for selections regarding "v1", "v2" and "v3" in special but also regarding the enum values which has been added to the enum type later on.

I try to identify such inconsistencies by checking them per object in the module with certain regular expressions.

E.g.

Regexp missUseCase1= regexp "(v1\n)(v2\n|[^v2].+)";


should be my regular expression for the miss use case example above.

The problem:

 

[^v2]


excepts the character v and 2, but not the string v2.

Why I'm not using imperative code with a lot of if isMember-checks? For this I have to gather all enum values currently defined in the enum type. Than I have to check using isMember per object if v1 and possibly v2 hase been selected but not (v3 OR some of the user defined enum values).

I'm thinking that the cost and complexity behind such code is more ugly than using regular expressions? That's why I'm trying to find a solution using regular expressions.

But, if it is not possible to define an exception for whole words instead of single characters, I have to realize the if-isMember-checking-solution.

Cheers, Helko

 

Ok, lets make this by example. Imagine you have a general attribute called 'Flags' which takes the following value:

  • No Req
  • HW Req
  • SW Req
  • Security Relevant // user defined
  • Testable // user defined


Now assume you want to only want to check later, if "No Req" is not used together with either SW Req or HW Req. Then you do something like that:

 

 

Buffer filterValues (Object o, string sAttrName, string arVals[]) {
   Buffer buf = create() 
 
   int count = 0
   for (count = 0; count < sizeof arVals; count ++) {
      string val = arVals[count]
      if (isMember(o.sAttrName, val)) {
         if (count++ > 0) buf += "\n"
         buf += val
      }
   }
   return buf
}
 
string enumRule1[] = {"No Req", "HW Req", "SW Req"}
// do not combine No Req with HW Req or SW Req
Regexp reRule1Fail = regexp "(No Req\nHW Req)|(No Req\nSW Req)" 
Object o; for o in current Module do {
   // filter the values you are interested in
   Buffer buf = filterValues (o, "Flags", enumRule1) 
   if (search (reRule1Fail, buf, 0)) {
     print (identifier o) ": Do not combine 'No Req' with 'HW or SW Req! "
   }
   delete buf
}



You can check multiple rules using this approach on any subset you want. This way also the order of the enum values does not matter, since they are filtered in the order of the rule array.

Anyway what Louie said is still true, having attributes where you mix multiple kinds of information to a multi value enum is sometimes not a good idea, due to the inherit danger of inconsistencies, where you need to code checks. In the above example you would have made two attributes:



 

 

 

 

  • isRequirement (True / False)
  • Flags (HW Req, SW Req, Critical, etc.)


Hope that helps, regards, Mathias

 

 

 


Mathias Mamsch, IT-QBase GmbH, Consultant for Requirement Engineering and D00RS

 

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Helko - Thu Feb 09 05:39:02 EST 2012

llandale - Wed Feb 08 16:10:52 EST 2012

No real difference between hard-coding if-elseif logic and hard coding regular expressions. But I think you are saying there is some data-driven constraints for this project that somehow say:

  • For attr "X", if "v1" and "v2" are selected then its invalid if "v2" is also selected.

Maybe that's in a table that looks like this:

Attribute    Danger Combo       Invalid Values
X               v1, v3          v2
X               v2, v3, v4      v1


If the Danger Combo exists then it's invalid if any of the Invalid Values may also exist.

 

for every row in the table
{  NameAttr = Attibute from table
   IsDanger = true
   for each Danger Combo Value
   {  if (!isMember(obj.NameAttr, DangerValue)) IsDanger = false
   }
   if (IsDanger)
   {  IsInvalid = false
      for each Invalid Values
      {  if (!isMember(obj.NameAttr, InvalidValue)) IsInvalid = true
      }
   }
   if (IsInvalid) whatever
}


-Louie

 

Dear Matthias, Dear Louie, Others

first: thanks for your answers.

I've understood what you are suggesting.
But the problem is still challenging, because you are argumenting in your examples only based on a predefined set of enum value. But my consistency rules are also partly depending on the selection resp. no selection of enum values the user has made later on (no dependency on certain enum values, but on "if the user has made any selections on user defined enum values").

Mainly the consistency rules are focusing the 3 predefined enum values which are each time on the first 3 positions of the enum value list and each time has the same ordering.

I have no chance to introduce further attributes etc.. That is out of scope of my decision range in the project I'm working for.

Due to the missing power of features when using regular expression in DXL, I've realized my functionality with a lot of if-findPlainText-checks as Matthias suggested yesterday.

Many thanks + cheers, Helko

Re: Detecting inconsistent selections on Multi Value Enum Attribute via RegExp
Mathias Mamsch - Thu Feb 09 07:43:07 EST 2012

Helko - Thu Feb 09 05:39:02 EST 2012
Dear Matthias, Dear Louie, Others

first: thanks for your answers.

I've understood what you are suggesting.
But the problem is still challenging, because you are argumenting in your examples only based on a predefined set of enum value. But my consistency rules are also partly depending on the selection resp. no selection of enum values the user has made later on (no dependency on certain enum values, but on "if the user has made any selections on user defined enum values").

Mainly the consistency rules are focusing the 3 predefined enum values which are each time on the first 3 positions of the enum value list and each time has the same ordering.

I have no chance to introduce further attributes etc.. That is out of scope of my decision range in the project I'm working for.

Due to the missing power of features when using regular expression in DXL, I've realized my functionality with a lot of if-findPlainText-checks as Matthias suggested yesterday.

Many thanks + cheers, Helko

Hi Helko,

you might want to check my above post (comes out of order with the other posts, due to different locales of the posters). If you filter out the enum values you are interested in, you do not depend on any user defined enum values, even not on the order, since the filtering will bring the values in the correct order that matches your regular expression. I really think that should solve the problem.

Regards, Mathias

Mathias Mamsch, IT-QBase GmbH, Consultant for Requirement Engineering and D00RS