See inline.
On 20/08/2012, Suvek <suvek.shah(a)gmail.com> wrote:
Thanks laune!!!
I think I did not explain properly and duplicate name "FOREIGN_BUSINESS"
added more to the confusion... still you understood my problem , I will
try
putting more flesh on the bones in terms of classes to explain further
details...
public class TaxPayer {
...
ArrayList<Address> addersses;
TaxpayerType taxpayerType;
...
}
public class Address {
...
AddressType addressType;
...
}
public enum AddressType{
UNKNOWN,
BUSINESS,
FOREIGN_BUSINESS_ADDRESS,
RENTED,
OWNED,
....
}
public enum TaxpayerType{
BUSINESS,
FOREIGN_BUSINESS,
INDIVIDUAL,
FAMILY,
PROPRITER
....
}
Now based on the taxpayerType say FOREIGN_BUSINESS, the taxpayer must have
atleast 2 Addresses (BUSINESS and FOREIGN_BUSINESS_ADDRESS).
Agreed, to of the above.
I will have seperate rule for each type of tax payer, I am not
passing in
the AddressTypes (BUSINESS and FOREIGN_BUSINESS_ADDRESS) to be verified
against as the facts, I want to set these values in the rule.
Why? They are static, aren't they?
There is no really convenient way to define a constant Set (or any
other Collection) in DRL syntax. You can write an array, but then
you'll need a way of doing set operations (like containsAll() ) with
an array as one operand.
So ideally I
want something like
rule "Validate Foreign Business"
when
$tpType: List() from [ AddressType.BUSINESS,
AddressType.FOREIGN_BUSINESS_ADDRESS ] //This line is incorrect
Taxpayer( $name: name, taxpayerType == $tpType, $addrs: addresses )
accumulate( Address( $addrType: addressType ) from $addrs,
$addrTypeSet: collectSet( $addrType ) )
eval( ! $addrTypeSet.containsAll( $addressTypes ) )
then
System.out.println( $name + " is not OK" );
end
Also is it possible to show which address type is missing? say
AddressType.BUSINESS is not present in the list
The answer to this would be a Set. It can be computed by applying
method removeAll(x) to the required Set, where x is the Set resulting
from accumulate.
I strongly suggest you use my approach with defining the static
AddressType Sets as an attribute of TaxpayerType!
-W
thanks in advance for your help
the rule is always resolving to success irrespective of weather the
addresses are present or not.
the only change that I have done is
replaced
$tpType: TaxpayerType( $addressTypes: addressTypes )
with
$tpType:
--
View this message in context:
http://drools.46999.n3.nabble.com/All-the-values-from-one-list-must-be-pr...
Sent from the Drools: User forum mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users