<div dir="ltr">Hello Droolers,<br><br>I&#39;m a Drools novice and I&#39;m stuck with a basic rule problem.<br><br>In my domain I use a list of abbreviations to describe the conditions of a system.<br>Before I can check the state of my system I have to verify all applied abbreviations.<br>
<br>The List of abbreviations is not a fixed list it&#39;s more like a combination of chars, combined in different ways on fixed positions.<br><br>This is a small cutout:<br><br>A cutout of possible chars at Position 1: A B C D F H<br>
A cutout of possible chars at Position 2: - A C s n b<br>A cutout of possible chars at Position 3: - A B E F M<br>A cutout of possible chars at Position 4: - H L O R U<br><br>Now it is allowed to combine the following abbreviations:<br>
(another small cutout)<br><br>A--O&nbsp;&nbsp;&nbsp;&nbsp; A--R&nbsp;&nbsp;&nbsp;&nbsp; A--U&nbsp;&nbsp;&nbsp; A--L<br>BAAO&nbsp;&nbsp;&nbsp;&nbsp; BAAR&nbsp;&nbsp;&nbsp;&nbsp; BAAU&nbsp;&nbsp;&nbsp; BAAL<br><br>but it is not allowed to combine this:<br><br>AA**&nbsp;&nbsp;&nbsp;&nbsp; B-** (* stands for all possible chars on a position)<br><br>Now I have 2 basic Questions:<br>
<br>1) How can I pick abbreviations that are NOT allowed?<br>&nbsp;&nbsp; I think it&#39;s easy to say:<br><br>&nbsp;&nbsp; rule &quot;Rule 1&quot;<br>&nbsp;&nbsp;&nbsp; when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a : Abbreviation( pos1 == &#39;A&#39;, pos2 == &#39;-&#39;, pos3 == &#39;-&#39;, pos4 == &#39;O&#39; )<br>
&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # do something positiv<br>&nbsp;&nbsp; end<br><br>&nbsp;&nbsp; But how can I pick up all the wrong combinations without hardcoding them?<br>&nbsp;&nbsp; This would end up in a never-ending story.<br><br>2) Upgrading the &quot;Rule 1&quot; from my 1st Question I&#39;m looking for a way to make the<br>
&nbsp;&nbsp; Rules more generic.<br>&nbsp;&nbsp; I don&#39;t want to hardcode all possible abbreviation combinations.<br>&nbsp;&nbsp; How can I realise something like this VERY INFORMAL notation:<br><br>&nbsp;&nbsp; rule &quot;Rule 2&quot;<br>&nbsp;&nbsp;&nbsp; when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a : Abbreviation( pos1 == &#39;A&#39;, pos2 == [&#39;-&#39;,&#39;D&#39;,&#39;H&#39;], pos3 == &#39;-&#39;, pos4 == [&#39;O&#39;, &#39;R&#39;, &#39;U&#39;, &#39;L&#39;] )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If abbreviation looks like A--O, AD-O, AD-U, AH-R, etc. everything is fine.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # It&#39;s time for &quot;Rule 2&quot; to do something positiv<br>&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # do something positiv<br>&nbsp;&nbsp; end<br><br>&nbsp;&nbsp; &quot;Rule 2&quot; should find all the abbreviations that are build up according to a set of allowed char combinations.<br>
<br>&nbsp;&nbsp; OR<br><br>&nbsp;&nbsp; rule &quot;Rule 3&quot;<br>&nbsp;&nbsp;&nbsp; when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a : Abbreviation( pos1 == &#39;A&#39;, pos2 != [&#39;-&#39;,&#39;D&#39;,&#39;H&#39;], pos3 != &#39;-&#39;, pos4 != [&#39;O&#39;, &#39;R&#39;, &#39;U&#39;, &#39;L&#39;] )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If abbreviation looks like AA-O, AB-U, A-AO, A--K, etc. something is wrong.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # It&#39;s time for &quot;RULE 3&quot; to announce something negative<br>&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # announce something negative<br>&nbsp;&nbsp; end<br>
<br>&nbsp;&nbsp; &quot;Rule 3&quot; should filter all the abbreviations that are violating a set of allowed char combinations.<br><br>Thanx 2 all droolers in advance.<br><br>Pete</div>