root/trunk/src/groovy/dbnp/query/Search.groovy @ 1457

Revision 1457, 4.0 KB (checked in by work@…, 3 years ago)

- fixed missing imports caused by Intellij's smart refactoring... guess it's not that smart after all :)

  • Property svn:keywords set to Rev Author Date
Line 
1/**
2 * Search Domain Class
3 *
4 * Abstract class containing search criteria and search results when querying.
5 * Should be subclassed in order to enable searching for different entities.
6 *
7 * @author  Robert Horlings (robert@isdat.nl)
8 * @since       20110118
9 * @package     dbnp.query
10 *
11 * Revision information:
12 * $Rev$
13 * $Author$
14 * $Date$
15 */
16package dbnp.query
17
18import java.text.SimpleDateFormat
19import org.dbnp.gdt.*
20
21class Search {
22        public String entity;
23
24        protected List criteria;
25        protected List results;
26
27        public List getCriteria() { return criteria; }
28        public void setCriteria( List c ) { criteria = c; }
29
30        public List getResults() { return results; }
31        public void setResults( List r ) { results = r; }
32
33        /**
34         * Returns the number of results found by this search
35         * @return
36         */
37        public int getNumResults() {
38                if( results )
39                        return results.size();
40
41                return 0;
42        }
43
44        /**
45         * Executes a search based on the given criteria. Should be filled in by
46         * subclasses searching for a specific entity
47         *
48         * @param       c       List with criteria to search on
49         */
50        public void execute( List c ) {
51                setCriteria( c );
52                execute();
53        }
54
55        /**
56         * Executes a search based on the given criteria. Should be filled in by
57         * subclasses searching for a specific entity
58         */
59        public void execute() {}
60
61        /**
62         * Returns a list of criteria targeted on the given entity
63         * @param entity        Entity to search criteria for
64         * @return                      List of criteria
65         */
66        protected List getEntityCriteria( String entity ) {
67                return criteria?.findAll { it.entity == entity }
68        }
69       
70        /**
71         * Filters a list with entities, based on the given criteria and a closure to check whether a criterion is matched
72         *
73         * @param entities      Original list with entities to check for these criteria
74         * @param criteria      List with criteria to match on
75         * @param check         Closure to see whether a specific entity matches a criterion. Gets two arguments:
76         *                                              element         The element to check
77         *                                              criterion       The criterion to check on.
78         *                                      Returns true if the criterion holds, false otherwise
79         * @return                      The filtered list of entities
80         */
81        protected List filterEntityList( List entities, List<Criterion> criteria, Closure check ) {
82                if( !entities || !criteria || criteria.size() == 0 ) {
83                        return entities;
84                }
85
86                return entities.findAll { entity ->
87                        for( criterion in criteria ) {
88                                if( !check( entity, criterion ) ) {
89                                        return false;
90                                }
91                        }
92                        return true;
93                }
94        }
95       
96        /**
97         * Prepares a value from a template entity for comparison, by giving it a correct type
98         *
99         * @param value         Value of the field
100         * @param type          TemplateFieldType       Type of the specific field
101         * @return                      The value of the field in the correct entity
102         */
103        public static def prepare( def value, TemplateFieldType type ) {
104                switch (type) {
105                        case TemplateFieldType.DATE:
106                                try {
107                                        return new SimpleDateFormat( "yyyy-MM-dd" ).parse( value )
108                                } catch( Exception e ) {
109                                        return value.toString();
110                                }
111                        case TemplateFieldType.RELTIME:
112                                try {
113                                        if( value instanceof Number ) {
114                                                return new RelTime( value );
115                                        } else if( value.toString().isNumber() ) {
116                                                return new RelTime( Long.parseLong( value.toString() ) )
117                                        } else {
118                                                return new RelTime( value );
119                                        }
120                                } catch( Exception e ) {
121                                        try {
122                                                return Long.parseLong( value )
123                                        } catch( Exception e2 ) {
124                                                return value.toString();
125                                        }
126                                }
127                        case TemplateFieldType.DOUBLE:
128                                try {
129                                        return Double.valueOf( value )
130                                } catch( Exception e ) {
131                                        return value.toString();
132                                }
133                        case TemplateFieldType.BOOLEAN:
134                                try {
135                                        return Boolean.valueOf( value )
136                                } catch( Exception e ) {
137                                        println e.getMessage();
138                                        return value.toString();
139                                }
140                        case TemplateFieldType.LONG:
141                                try {
142                                        return Long.valueOf( value )
143                                } catch( Exception e ) {
144                                        return value.toString();
145                                }
146                        case TemplateFieldType.STRING:
147                        case TemplateFieldType.TEXT:
148                        case TemplateFieldType.STRINGLIST:
149                        case TemplateFieldType.TEMPLATE:
150                        case TemplateFieldType.MODULE:
151                        case TemplateFieldType.FILE:
152                        case TemplateFieldType.ONTOLOGYTERM:
153                        default:
154                                return value.toString();
155                }
156
157        }
158}
Note: See TracBrowser for help on using the browser.