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.executor.jpa; 019 020 import java.util.HashMap; 021 import java.util.List; 022 import java.util.Map; 023 024 import javax.persistence.EntityManager; 025 import javax.persistence.Query; 026 import org.apache.oozie.ErrorCode; 027 import org.apache.oozie.SLAEventBean; 028 import org.apache.oozie.client.OozieClient; 029 030 /** 031 * Load the list of SLAEventBean for a seqId and return the list. 032 */ 033 @Deprecated 034 public class SLAEventsGetForFilterJPAExecutor implements JPAExecutor<List<SLAEventBean>> { 035 036 private static final String selectStr = "SELECT OBJECT(w) FROM SLAEventBean w WHERE w.event_id > :seqid"; 037 private long seqId = -1; 038 private int len; 039 private long[] lastSeqId; 040 private Map<String, List<String>> filter; 041 private StringBuilder sb; 042 043 public SLAEventsGetForFilterJPAExecutor(long seqId, int len, Map<String, List<String>> filter, long[] lastSeqId) { 044 this.seqId = seqId; 045 this.len = len; 046 this.filter = filter; 047 this.lastSeqId = lastSeqId; 048 this.lastSeqId[0] = seqId; 049 } 050 051 @Override 052 public String getName() { 053 return "SLAEventsGetForJobIdJPAExecutor"; 054 } 055 056 @Override 057 @SuppressWarnings("unchecked") 058 public List<SLAEventBean> execute(EntityManager em) throws JPAExecutorException { 059 060 List<SLAEventBean> seBeans; 061 StringBuilder sb = new StringBuilder(selectStr); 062 Map<String, String> keyVal = new HashMap<String, String>(); 063 064 for (Map.Entry<String, List<String>> entry : filter.entrySet()) { 065 066 if (entry.getKey().equals(OozieClient.FILTER_JOBID) || entry.getKey().equals(OozieClient.FILTER_APPNAME)) { 067 sb.append(" AND "); 068 } 069 070 if (entry.getKey().equals(OozieClient.FILTER_JOBID)) { 071 List<String> vals = entry.getValue(); 072 if (vals.size() == 1) { 073 sb.append("w.slaId = :jobid"); 074 keyVal.put("jobid", vals.get(0)); 075 } 076 else { 077 for (int i = 0; i < vals.size(); i++) { 078 String val = vals.get(i); 079 keyVal.put("jobid" + i, val); 080 if (i == 0) { 081 sb.append("w.slaId IN (:jobid" + i); 082 } 083 else { 084 sb.append(",:jobid" + i); 085 } 086 } 087 sb.append(")"); 088 } 089 } 090 else if (entry.getKey().equals(OozieClient.FILTER_APPNAME)) { 091 List<String> vals = entry.getValue(); 092 if (vals.size() == 1) { 093 sb.append("w.appName = :appname"); 094 keyVal.put("appname", vals.get(0)); 095 } 096 else { 097 for (int i = 0; i < vals.size(); i++) { 098 String val = vals.get(i); 099 keyVal.put("appname" + i, val); 100 if (i == 0) { 101 sb.append("w.appName IN (:appname" + i); 102 } 103 else { 104 sb.append(",:appname" + i); 105 } 106 } 107 sb.append(")"); 108 } 109 } 110 } 111 sb.append(" ORDER BY w.event_id "); 112 113 try { 114 Query q = em.createQuery(sb.toString()); 115 q.setMaxResults(len); 116 q.setParameter("seqid", seqId); 117 for (Map.Entry<String, String> entry : keyVal.entrySet()) { 118 q.setParameter(entry.getKey(), entry.getValue()); 119 } 120 seBeans = q.getResultList(); 121 for (SLAEventBean j : seBeans) { 122 lastSeqId[0] = Math.max(lastSeqId[0], j.getEvent_id()); 123 } 124 125 } 126 catch (Exception e) { 127 throw new JPAExecutorException(ErrorCode.E0603, e.getMessage(), e); 128 } 129 return seBeans; 130 } 131 132 }