/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.adm.database; import org.eclipse.persistence.annotations.Index; import ru.codeinside.gws.api.Packet; import ru.codeinside.gws.api.ServerResponse; import ru.codeinside.log.Logger; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.xml.namespace.QName; import java.util.Date; import java.util.LinkedHashSet; import java.util.Set; @Entity @EntityListeners(Logger.class) @Table(name = "service_response") @SequenceGenerator(name = "service_response_seq", sequenceName = "service_response_seq") @Index(name = "service_response_bidid_idx", unique = false, columnNames = "bidid") public class ServiceResponseEntity { @Column(nullable = false) public String name; @ManyToOne(optional = false, fetch = FetchType.LAZY) @JoinColumn(name = "bidId", nullable = false) Bid bid; public String actionNs; public String action; @Column(length = 1024 * 1024) public String appData; // TODO: нужно более рациональный тип @Column(nullable = false) public String gservice; // TODO: нужно более рациональный тип @Column(nullable = false) public String status; @Temporal(TemporalType.TIMESTAMP) @Column(nullable = false) public Date date; @Column(nullable = false) public String exchangeType; public String requestIdRef; public String originRequestIdRef; public String serviceCode; public String caseNumber; public String testMsg; public String docRequestCode; @Column(name = "requestmessage") public byte[] responseMessage; @Id @GeneratedValue(generator = "service_response_seq") private Long id; @OneToMany(mappedBy = "response", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE) private Set<EnclosureEntity> enclosures; /** * Для JPA движка */ protected ServiceResponseEntity() { } public ServiceResponseEntity(Bid bid, ServerResponse serverResponse) { this.bid = bid; appData = serverResponse.appData; if (serverResponse.action != null) { action = serverResponse.action.getLocalPart(); actionNs = serverResponse.action.getNamespaceURI(); } docRequestCode = serverResponse.docRequestCode; responseMessage = serverResponse.responseMessage; processPacket(serverResponse.packet); name = ""; } public Long getId() { return id; } public ServerResponse getServerResponse() { ServerResponse response = new ServerResponse(); response.packet = new Packet(); response.packet.serviceCode = serviceCode; response.appData = appData; response.packet.caseNumber = caseNumber; response.packet.typeCode = Packet.Type.valueOf(gservice); response.packet.status = Packet.Status.valueOf(status); response.packet.exchangeType = exchangeType; response.packet.requestIdRef = requestIdRef; response.packet.date = date; response.packet.originRequestIdRef = originRequestIdRef; response.packet.testMsg = testMsg; response.docRequestCode = docRequestCode; response.responseMessage = responseMessage; if (action != null) { response.action = new QName(actionNs, action); } return response; } public Set<EnclosureEntity> getEnclosures() { if (enclosures == null) { enclosures = new LinkedHashSet<EnclosureEntity>(); } return enclosures; } public Bid getBid() { return bid; } private void processPacket(Packet packet) { gservice = packet.typeCode.name(); status = packet.status.name(); date = packet.date != null ? packet.date : new Date(); exchangeType = packet.exchangeType; requestIdRef = packet.requestIdRef; originRequestIdRef = packet.originRequestIdRef; serviceCode = packet.serviceCode; caseNumber = packet.caseNumber; testMsg = packet.testMsg; } }