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.sla;
019
020 import java.sql.Timestamp;
021 import java.util.Date;
022 import java.util.LinkedHashMap;
023 import java.util.List;
024 import java.util.Map;
025 import javax.persistence.EntityManager;
026 import javax.persistence.Query;
027
028 import org.apache.oozie.ErrorCode;
029 import org.apache.oozie.executor.jpa.JPAExecutor;
030 import org.apache.oozie.executor.jpa.JPAExecutorException;
031 import org.apache.oozie.sla.SLASummaryBean;
032
033 /**
034 * Load the list of SLASummaryBean (for dashboard) and return the list.
035 */
036 public class SLASummaryGetForFilterJPAExecutor implements JPAExecutor<List<SLASummaryBean>> {
037
038 private static final String selectStr = "SELECT OBJECT(s) FROM SLASummaryBean s WHERE ";
039
040 private SLASummaryFilter filter;
041 private int numMaxResults;
042
043
044 public SLASummaryGetForFilterJPAExecutor(SLASummaryFilter filter, int numMaxResults) {
045 this.filter = filter;
046 this.numMaxResults = numMaxResults;
047 }
048
049 @Override
050 public String getName() {
051 return "SLASummaryGetForFilterJPAExecutor";
052 }
053
054 @SuppressWarnings("unchecked")
055 @Override
056 public List<SLASummaryBean> execute(EntityManager em) throws JPAExecutorException {
057 List<SLASummaryBean> ssBean;
058 StringBuilder sb = new StringBuilder(selectStr);
059 Map<String, Object> queryParams = new LinkedHashMap<String, Object>();
060 boolean firstCondition = true;
061 if (filter.getJobId() != null) {
062 firstCondition = false;
063 if (filter.getParentId() != null) {
064 sb.append("(s.jobId = :jobId OR s.parentId = :parentId)");
065 queryParams.put("jobId", filter.getJobId());
066 queryParams.put("parentId", filter.getParentId());
067 }
068 else {
069 sb.append("s.jobId = :jobId");
070 queryParams.put("jobId", filter.getJobId());
071 }
072 }
073 if (filter.getParentId() != null && filter.getJobId() == null) {
074 firstCondition = false;
075 sb.append("s.parentId = :parentId");
076 queryParams.put("parentId", filter.getParentId());
077 }
078 if (filter.getAppName() != null && filter.getJobId() == null && filter.getParentId() == null) {
079 firstCondition = false;
080 sb.append("s.appName = :appName");
081 queryParams.put("appName", filter.getAppName());
082 }
083 if (filter.getNominalStart() != null) {
084 if (firstCondition) {
085 firstCondition = false;
086 }
087 else {
088 sb.append(" AND ");
089 }
090 sb.append("s.nominalTimeTS >= :nominalTimeStart");
091 queryParams.put("nominalTimeStart", new Timestamp(filter.getNominalStart().getTime()));
092 }
093
094 if (filter.getNominalEnd() != null) {
095 if (firstCondition) {
096 firstCondition = false;
097 }
098 else {
099 sb.append(" AND ");
100 }
101 sb.append("s.nominalTimeTS <= :nominalTimeEnd");
102 queryParams.put("nominalTimeEnd", new Timestamp(filter.getNominalEnd().getTime()));
103 }
104
105 sb.append(" ORDER BY s.nominalTimeTS");
106 try {
107 Query q = em.createQuery(sb.toString());
108 for (Map.Entry<String, Object> entry : queryParams.entrySet()) {
109 q.setParameter(entry.getKey(), entry.getValue());
110 }
111 q.setMaxResults(numMaxResults);
112 ssBean = (List<SLASummaryBean>) q.getResultList();
113 }
114 catch (Exception e) {
115 throw new JPAExecutorException(ErrorCode.E0603, e.getMessage(), e);
116 }
117 return ssBean;
118 }
119
120 public static class SLASummaryFilter {
121
122 private String appName;
123 private String jobId;
124 private String parentId;
125 private Date nominalStart;
126 private Date nominalEnd;
127
128 public SLASummaryFilter() {
129 }
130
131 public String getAppName() {
132 return appName;
133 }
134
135 public void setAppName(String appName) {
136 this.appName = appName;
137 }
138
139 public String getJobId() {
140 return jobId;
141 }
142
143 public void setJobId(String jobId) {
144 this.jobId = jobId;
145 }
146
147 public String getParentId() {
148 return parentId;
149 }
150
151 public void setParentId(String parentId) {
152 this.parentId = parentId;
153 }
154
155 public Date getNominalStart() {
156 return nominalStart;
157 }
158
159 public void setNominalStart(Date nominalStart) {
160 this.nominalStart = nominalStart;
161 }
162
163 public Date getNominalEnd() {
164 return nominalEnd;
165 }
166
167 public void setNominalEnd(Date nominalEnd) {
168 this.nominalEnd = nominalEnd;
169 }
170
171 }
172
173 }