• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

new JAVA method to check condition (difficult!), Please help !

 
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi Programmers !

I have a problem:

I have to flag objects which come into an application from outside if they are "acceptable" or "NOT acceptable".

There are a few conditions.
The objects come with the following condition (I think this is a String).
For the database it is easy to substring the relevant things and understand the logic behind this.
But fopr JAVA, I have no Idea !!!

PLEASE HELP !

Example:

Object 1 with condition (exactly like this, with these brackets and brackets within brackets):

condition=

(Location = 'Berlin') and ((Papernumber = '41111') or (Papernumber = '42255') or (Papernumber = 'XNF1225'))

&& / || (and/or)

(Papernumber not in('XXY52IFR','TTZHE225','77568ZZ','12558JJ','DCSTEST1'))

&& / || (and/or)

(PaperReference not like '%125546NY4-XCDI%')

How to put it in a JAVA structure ?
10.000 of these objects with these conditions come every morning via a batch into the applicatuion and on the basis of these conditions abouve these objects should flagged with a character ('A' for acceptable and 'B' for NOT acceptale)

Could you please help me ?
The problem is too, that this has to be done as fast as possible... :-)

Very important.
I would be very glad, if someone could show me a java method which would do that. The input (the cionditions above) comes as ONE String.

Thankls a lot !!!

best regards
 
Rancher
Posts: 43081
77
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You can tackle on this on several levels:
- Write a grammar for a parser (e.g. Antlr or SableCC), although I'd say that's overkill here
- Write a grammar for a lexer (e.g. www.jflex.de); that's probably what I'd do
- Find the source code for a simple arithmetic expression evaluator and adapt it to this syntax. But with the IN and LIKE clauses it's probably just different enough to make this not worthwhile.
- Build your own by using String functions and regular expressions
 
Michael Zohner
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hm...
Sounds good, but a bit too difficult for me
Could you or anyone show me a method ro example or give me some code to check out ?

- Find the source code for a simple arithmetic expression evaluator and adapt it to this syntax. But with the IN and LIKE clauses it's probably just different enough to make this not worthwhile.
Where to find ? Any ideas ? :-))

- Build your own by using String functions and regular expressions.
Hm, any ideas how to code ?

I would be glad to have an example to check the conditions...

Thanks a lot !!!

Michael
 
Michael Zohner
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
It is a little bit like a tree (set/map) I think:

Lets say we have a "check matrix". This matrix contains MANY objects which contains the conditions which I meant in first thread above. The conditions are differnt in each of these objects.

It should make this:

1. The SOURCE object (which should be checked for matching conditions) comes in

2. First check: Is Attribute 1 (from SOURCE object which is coming in) available in Check matrix (in any of the objects with the conditions) ? -> IF TRUE > continue !

3. Second check: Is Attribute 2 available in REMAINING objects of the Check matrix (remaining objects, because I have to check second attribute against remaining objects after first check)? -> IF TRUE > continue !

4. Third check: Is Attribute 3 within a list of attributes (for e.g.) of the remaining objects from second check ?
-> IF TRUE -> FLAG THIS INCOMING OBJECT AS "A".
Otherwise (when FALSE at first/second/third check) -> FLAG AS "B".

Understand the logic ?
It is a bit difficlut.

Can I do something with "TreeSet" or "TreeMap" ?

Does anyone hav an idea of the needed method ?
Some source for that ?

cheers
Michael
 
Ulf Dittmer
Rancher
Posts: 43081
77
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I used to have an expression evaluator on my web page, but removed it - I'll put it up again and post the link here tonight. It implements a recursive descent parser, which should be sufficient for your needs, and not overly complicated.
 
Michael Zohner
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Great !!!
Thanks !!!
 
(instanceof Sidekick)
Posts: 8791
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
This would be great fun to build by hand, though maybe not the best use of your or your employer's time.

Build something that can evaluate boolean "term operator term" like "true and true". I'd parse those three tokens and call a method based on operator. The "and" method would try to cast the two terms to boolean.

Next allow more operators and terms like "a and b and c" with no punctuation. Should just be a loop on the first routine to go until there are no more tokens.

Now recognize that an expression in parens is just a term. In

a and ( b or c )

( b or c ) is a term, that also happens to be another whole expression. That screams for recursion, no? Once it handles one level of parens, I bet it will handle any number of levels.

Next recognize expressions that are comparisons like ( a = b ). If you follow the pattern of obtaining "term operator term" and then calling a subroutine based on operator, you should be able to introduce new operators all the time.

The in(set) syntax is a bit strange because you'll have to know not to evaluate (set) as a nested expression. I wonder if you'd want to recognize "in" as a function and handle in(set) as a single term.

Anyhow, does this sound like fine geek entertainment or what?
 
Ranch Hand
Posts: 1923
Scala Postgres Database Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Michael Zohner:
Hi Programmers !

Example:

Object 1 with condition (exactly like this, with these brackets and brackets within brackets):

condition=

(Location = 'Berlin') and ((Papernumber = '41111') or (Papernumber = '42255') or (Papernumber = 'XNF1225'))

&& / || (and/or)

(Papernumber not in('XXY52IFR','TTZHE225','77568ZZ','12558JJ','DCSTEST1'))

&& / || (and/or)

(PaperReference not like '%125546NY4-XCDI%')



I'm not sure whether I understood the question correctly.
is '&& / || (and/or)' what you get, or do you get either an 'and' or an 'or'-operator?
If you get the second, you could replace these && with AND and || with OR and get a part of a sql-string.

If you build a database, you could send the query
/condition=/WHERE /
to get the result, couldn't you?
 
Ulf Dittmer
Rancher
Posts: 43081
77
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I've posted the recursive-descent parser on this page. It's not the prettiest code (I ported it from C and enhanced it), but it's fairly straightforward to extend. Let me know if you have any questions.
 
Ranch Hand
Posts: 1170
Hibernate Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Wait a minute! That looks a lot like homework
 
Would anybody like some fudge? I made it an hour ago. And it goes well with a tiny ad ...
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com
reply
    Bookmark Topic Watch Topic
  • New Topic