001 /** 002 * Copyright (c) 2010 Yahoo! Inc. All rights reserved. 003 * Licensed under the Apache License, Version 2.0 (the "License"); 004 * you may not use this file except in compliance with the License. 005 * You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software 010 * distributed under the License is distributed on an "AS IS" BASIS, 011 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 * See the License for the specific language governing permissions and 013 * limitations under the License. See accompanying LICENSE file. 014 */ 015 package org.apache.oozie.store; 016 017 import java.util.List; 018 import java.util.Map; 019 020 import org.apache.oozie.client.OozieClient; 021 022 public class StoreStatusFilter { 023 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"; 024 025 public static final String coordCountStr = "Select count(w) from CoordinatorJobBean w"; 026 027 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"; 028 029 public static final String wfCountStr = "Select count(w) from WorkflowJobBean w"; 030 031 public static void filter(Map<String, List<String>> filter, List<String> orArray, List<String> colArray, List<String> valArray, StringBuilder sb, String seletStr, String countStr) { 032 boolean isStatus = false; 033 boolean isGroup = false; 034 boolean isAppName = false; 035 boolean isUser = false; 036 boolean isEnabled = false; 037 038 int index = 0; 039 040 for (Map.Entry<String, List<String>> entry : filter.entrySet()) { 041 String colName = null; 042 String colVar = null; 043 if (entry.getKey().equals(OozieClient.FILTER_GROUP)) { 044 List<String> values = filter.get(OozieClient.FILTER_GROUP); 045 colName = "group"; 046 for (int i = 0; i < values.size(); i++) { 047 colVar = "group"; 048 colVar = colVar + index; 049 if (!isEnabled && !isGroup) { 050 sb.append(seletStr).append(" where w.group IN (:group" + index); 051 isGroup = true; 052 isEnabled = true; 053 } 054 else { 055 if (isEnabled && !isGroup) { 056 sb.append(" and w.group IN (:group" + index); 057 isGroup = true; 058 } 059 else { 060 if (isGroup) { 061 sb.append(", :group" + index); 062 } 063 } 064 } 065 if (i == values.size() - 1) { 066 sb.append(")"); 067 } 068 index++; 069 valArray.add(values.get(i)); 070 orArray.add(colName); 071 colArray.add(colVar); 072 } 073 } 074 else { 075 if (entry.getKey().equals(OozieClient.FILTER_STATUS)) { 076 List<String> values = filter.get(OozieClient.FILTER_STATUS); 077 colName = "status"; 078 for (int i = 0; i < values.size(); i++) { 079 colVar = "status"; 080 colVar = colVar + index; 081 if (!isEnabled && !isStatus) { 082 sb.append(seletStr).append(" where w.status IN (:status" + index); 083 isStatus = true; 084 isEnabled = true; 085 } 086 else { 087 if (isEnabled && !isStatus) { 088 sb.append(" and w.status IN (:status" + index); 089 isStatus = true; 090 } 091 else { 092 if (isStatus) { 093 sb.append(", :status" + index); 094 } 095 } 096 } 097 if (i == values.size() - 1) { 098 sb.append(")"); 099 } 100 index++; 101 valArray.add(values.get(i)); 102 orArray.add(colName); 103 colArray.add(colVar); 104 } 105 } 106 else { 107 if (entry.getKey().equals(OozieClient.FILTER_NAME)) { 108 List<String> values = filter.get(OozieClient.FILTER_NAME); 109 colName = "appName"; 110 for (int i = 0; i < values.size(); i++) { 111 colVar = "appName"; 112 colVar = colVar + index; 113 if (!isEnabled && !isAppName) { 114 sb.append(seletStr).append(" where w.appName IN (:appName" + index); 115 isAppName = true; 116 isEnabled = true; 117 } 118 else { 119 if (isEnabled && !isAppName) { 120 sb.append(" and w.appName IN (:appName" + index); 121 isAppName = true; 122 } 123 else { 124 if (isAppName) { 125 sb.append(", :appName" + index); 126 } 127 } 128 } 129 if (i == values.size() - 1) { 130 sb.append(")"); 131 } 132 index++; 133 valArray.add(values.get(i)); 134 orArray.add(colName); 135 colArray.add(colVar); 136 } 137 } 138 else { 139 if (entry.getKey().equals(OozieClient.FILTER_USER)) { 140 List<String> values = filter.get(OozieClient.FILTER_USER); 141 colName = "user"; 142 for (int i = 0; i < values.size(); i++) { 143 colVar = "user"; 144 colVar = colVar + index; 145 if (!isEnabled && !isUser) { 146 sb.append(seletStr).append(" where w.user IN (:user" + index); 147 isUser = true; 148 isEnabled = true; 149 } 150 else { 151 if (isEnabled && !isUser) { 152 sb.append(" and w.user IN (:user" + index); 153 isUser = true; 154 } 155 else { 156 if (isUser) { 157 sb.append(", :user" + index); 158 } 159 } 160 } 161 if (i == values.size() - 1) { 162 sb.append(")"); 163 } 164 index++; 165 valArray.add(values.get(i)); 166 orArray.add(colName); 167 colArray.add(colVar); 168 } 169 } 170 } 171 } 172 } 173 } 174 } 175 }