001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     * 
010     *      http://www.apache.org/licenses/LICENSE-2.0
011     * 
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.oozie.store;
019    
020    import java.util.List;
021    import java.util.Map;
022    
023    import org.apache.oozie.client.OozieClient;
024    
025    public class StoreStatusFilter {
026        public static final String coordSeletStr = "Select w.id, w.appName, w.status, w.user, w.group, w.startTimestamp, w.endTimestamp, w.appPath, w.concurrency, w.frequency, w.lastActionTimestamp, w.nextMaterializedTimestamp, w.createdTimestamp, w.timeUnitStr, w.timeZone, w.timeOut from CoordinatorJobBean w";
027    
028        public static final String coordCountStr = "Select count(w) from CoordinatorJobBean w";
029    
030        public static final String wfSeletStr = "Select w.id, w.appName, w.status, w.run, w.user, w.group, w.createdTimestamp, w.startTimestamp, w.lastModifiedTimestamp, w.endTimestamp from WorkflowJobBean w";
031    
032        public static final String wfCountStr = "Select count(w) from WorkflowJobBean w";
033    
034        public static final String bundleSeletStr = "Select w.id, w.appName, w.appPath, w.conf, w.status, w.kickoffTimestamp, w.startTimestamp, w.endTimestamp, w.pauseTimestamp, w.createdTimestamp, w.user, w.group, w.timeUnitStr, w.timeOut from BundleJobBean w";
035    
036        public static final String bundleCountStr = "Select count(w) from BundleJobBean w";
037    
038        public static void filter(Map<String, List<String>> filter, List<String> orArray, List<String> colArray,
039                List<String> valArray, StringBuilder sb, String seletStr, String countStr) {
040            boolean isStatus = false;
041            boolean isGroup = false;
042            boolean isAppName = false;
043            boolean isUser = false;
044            boolean isEnabled = false;
045            boolean isFrequency = false;
046            boolean isId = false;
047    
048            int index = 0;
049    
050            for (Map.Entry<String, List<String>> entry : filter.entrySet()) {
051                String colName = null;
052                String colVar = null;
053                if (entry.getKey().equals(OozieClient.FILTER_GROUP)) {
054                    List<String> values = filter.get(OozieClient.FILTER_GROUP);
055                    colName = "group";
056                    for (int i = 0; i < values.size(); i++) {
057                        colVar = "group";
058                        colVar = colVar + index;
059                        if (!isEnabled && !isGroup) {
060                            sb.append(seletStr).append(" where w.group IN (:group" + index);
061                            isGroup = true;
062                            isEnabled = true;
063                        }
064                        else {
065                            if (isEnabled && !isGroup) {
066                                sb.append(" and w.group IN (:group" + index);
067                                isGroup = true;
068                            }
069                            else {
070                                if (isGroup) {
071                                    sb.append(", :group" + index);
072                                }
073                            }
074                        }
075                        if (i == values.size() - 1) {
076                            sb.append(")");
077                        }
078                        index++;
079                        valArray.add(values.get(i));
080                        orArray.add(colName);
081                        colArray.add(colVar);
082                    }
083                }
084                else {
085                    if (entry.getKey().equals(OozieClient.FILTER_STATUS)) {
086                        List<String> values = filter.get(OozieClient.FILTER_STATUS);
087                        colName = "status";
088                        for (int i = 0; i < values.size(); i++) {
089                            colVar = "status";
090                            colVar = colVar + index;
091                            if (!isEnabled && !isStatus) {
092                                sb.append(seletStr).append(" where w.status IN (:status" + index);
093                                isStatus = true;
094                                isEnabled = true;
095                            }
096                            else {
097                                if (isEnabled && !isStatus) {
098                                    sb.append(" and w.status IN (:status" + index);
099                                    isStatus = true;
100                                }
101                                else {
102                                    if (isStatus) {
103                                        sb.append(", :status" + index);
104                                    }
105                                }
106                            }
107                            if (i == values.size() - 1) {
108                                sb.append(")");
109                            }
110                            index++;
111                            valArray.add(values.get(i));
112                            orArray.add(colName);
113                            colArray.add(colVar);
114                        }
115                    }
116                    else {
117                        if (entry.getKey().equals(OozieClient.FILTER_NAME)) {
118                            List<String> values = filter.get(OozieClient.FILTER_NAME);
119                            colName = "appName";
120                            for (int i = 0; i < values.size(); i++) {
121                                colVar = "appName";
122                                colVar = colVar + index;
123                                if (!isEnabled && !isAppName) {
124                                    sb.append(seletStr).append(" where w.appName IN (:appName" + index);
125                                    isAppName = true;
126                                    isEnabled = true;
127                                }
128                                else {
129                                    if (isEnabled && !isAppName) {
130                                        sb.append(" and w.appName IN (:appName" + index);
131                                        isAppName = true;
132                                    }
133                                    else {
134                                        if (isAppName) {
135                                            sb.append(", :appName" + index);
136                                        }
137                                    }
138                                }
139                                if (i == values.size() - 1) {
140                                    sb.append(")");
141                                }
142                                index++;
143                                valArray.add(values.get(i));
144                                orArray.add(colName);
145                                colArray.add(colVar);
146                            }
147                        }
148                        else {
149                            if (entry.getKey().equals(OozieClient.FILTER_USER)) {
150                                List<String> values = filter.get(OozieClient.FILTER_USER);
151                                colName = "user";
152                                for (int i = 0; i < values.size(); i++) {
153                                    colVar = "user";
154                                    colVar = colVar + index;
155                                    if (!isEnabled && !isUser) {
156                                        sb.append(seletStr).append(" where w.user IN (:user" + index);
157                                        isUser = true;
158                                        isEnabled = true;
159                                    }
160                                    else {
161                                        if (isEnabled && !isUser) {
162                                            sb.append(" and w.user IN (:user" + index);
163                                            isUser = true;
164                                        }
165                                        else {
166                                            if (isUser) {
167                                                sb.append(", :user" + index);
168                                            }
169                                        }
170                                    }
171                                    if (i == values.size() - 1) {
172                                        sb.append(")");
173                                    }
174                                    index++;
175                                    valArray.add(values.get(i));
176                                    orArray.add(colName);
177                                    colArray.add(colVar);
178                                }
179                            }
180                            else if (entry.getKey().equals(OozieClient.FILTER_FREQUENCY)) {
181                                List<String> values = filter.get(OozieClient.FILTER_FREQUENCY);
182                                colName = "frequency";
183                                for (int i = 0; i < values.size(); i++) {
184                                    colVar = "frequency";
185                                    colVar = colVar + index;
186                                    if (!isEnabled && !isFrequency) {
187                                        sb.append(seletStr).append(" where w.frequency IN (:frequency" + index);
188                                        isFrequency = true;
189                                        isEnabled = true;
190                                    }
191                                    else {
192                                        if (isEnabled && !isFrequency) {
193                                            sb.append(" and w.frequency IN (:frequency" + index);
194                                            isFrequency = true;
195                                        }
196                                        else {
197                                            if (isFrequency) {
198                                                sb.append(", :frequency" + index);
199                                            }
200                                        }
201                                    }
202                                    if (i == values.size() - 1) {
203                                        sb.append(")");
204                                    }
205                                    index++;
206                                    valArray.add(values.get(i));
207                                    orArray.add(colName);
208                                    colArray.add(colVar);
209                                }
210                            }
211                            else if (entry.getKey().equals(OozieClient.FILTER_ID)) {
212                                List<String> values = filter.get(OozieClient.FILTER_ID);
213                                colName = "id";
214                                for (int i = 0; i < values.size(); i++) {
215                                    colVar = "id";
216                                    colVar = colVar + index;
217                                    if (!isEnabled && !isId) {
218                                        sb.append(seletStr).append(" where w.id IN (:id" + index);
219                                        isId = true;
220                                        isEnabled = true;
221                                    }
222                                    else {
223                                        if (isEnabled && !isId) {
224                                            sb.append(" and w.id IN (:id" + index);
225                                            isId = true;
226                                        }
227                                        else {
228                                            if (isId) {
229                                                sb.append(", :id" + index);
230                                            }
231                                        }
232                                    }
233                                    if (i == values.size() - 1) {
234                                        sb.append(")");
235                                    }
236                                    index++;
237                                    valArray.add(values.get(i));
238                                    orArray.add(colName);
239                                    colArray.add(colVar);
240                                }
241                            }
242                        }
243                    }
244                }
245            }
246        }
247    }