This project has retired. For details please refer to its
Attic page.
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 }