/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License * at: * * http://opensource.org/licenses/ecl2.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package org.opencastproject.serviceregistry.impl; import static org.opencastproject.util.JsonVal.asString; import static org.opencastproject.util.Jsons.obj; import static org.opencastproject.util.Jsons.p; import static org.opencastproject.util.data.Tuple.tuple; import org.opencastproject.job.api.Incident.Severity; import org.opencastproject.util.JsonObj; import org.opencastproject.util.JsonVal; import org.opencastproject.util.Jsons; import org.opencastproject.util.Jsons.Prop; import org.opencastproject.util.data.Function; import org.opencastproject.util.data.Tuple; import org.opencastproject.util.persistence.Queries; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.persistence.Access; import javax.persistence.AccessType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Lob; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; @Entity(name = "Incident") @Access(AccessType.FIELD) @Table(name = "mh_incident") @NamedQueries({@NamedQuery(name = "Incident.findByJobId", query = "select a from Incident a where a.jobId = :jobId")}) public class IncidentDto { @Id @GeneratedValue @Column(name = "id") private Long id; @Column(name = "jobid") private Long jobId; @Column(name = "timestamp") @Temporal(TemporalType.TIMESTAMP) private Date timestamp; @Column(name = "code") private String code; @Column(name = "severity") private Integer severity; @Lob @Column(name = "parameters", length = 65535) private String parameters; @Lob @Column(name = "details", length = 65535) private String details; /** Constructor method. */ public static IncidentDto mk( Long jobId, Date date, String code, Severity severity, Map<String, String> parameters, List<Tuple<String, String>> details) { IncidentDto dto = new IncidentDto(); dto.jobId = jobId; dto.timestamp = date; dto.code = code; dto.severity = severity.ordinal(); List<Prop> props = new ArrayList<Jsons.Prop>(); for (Entry<String, String> entry : parameters.entrySet()) { props.add(p(entry.getKey(), entry.getValue())); } dto.parameters = obj(props.toArray(new Prop[props.size()])).toJson(); props = new ArrayList<Jsons.Prop>(); for (Tuple<String, String> t : details) { props.add(p(t.getA(), t.getB())); } dto.details = obj(props.toArray(new Prop[props.size()])).toJson(); return dto; } public Long getId() { return id; } public long getJobId() { return jobId; } /** @see org.opencastproject.job.api.Incident#getTimestamp() */ public Date getTimestamp() { return timestamp; } /** @see org.opencastproject.job.api.Incident#getSeverity() */ public Severity getSeverity() { return Severity.values()[severity]; } /** @see org.opencastproject.job.api.Incident#getCode() */ public String getCode() { return code; } /** @see org.opencastproject.job.api.Incident#getDetails() */ public List<Tuple<String, String>> getTechnicalInformation() { final List<Tuple<String, String>> list = new ArrayList<Tuple<String, String>>(); JsonObj messageJson = JsonObj.jsonObj(details); for (Object k : messageJson.keySet()) { String title = JsonVal.asJsonVal.apply(k).as(asString); String content = messageJson.val(title).as(asString); list.add(tuple(title, content)); } return list; } /** @see org.opencastproject.job.api.Incident#getDescriptionParameters() */ public Map<String, String> getParameters() { Map<String, String> param = new HashMap<String, String>(); JsonObj paramJson = JsonObj.jsonObj(parameters); for (Object k : paramJson.keySet()) { String key = JsonVal.asJsonVal.apply(k).as(asString); String value = paramJson.val(key).as(asString); param.put(key, value); } return param; } public static Function<EntityManager, List<IncidentDto>> findByJobId(long jobId) { return Queries.named.findAll("Incident.findByJobId", tuple("jobId", jobId)); } }