ResponseCached.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.pdd.core.response_caching;

  21. import java.io.IOException;
  22. import java.io.Serializable;
  23. import java.text.SimpleDateFormat;
  24. import java.util.Date;

  25. import org.openspcoop2.message.AttachmentsProcessingMode;
  26. import org.openspcoop2.message.OpenSPCoop2Message;
  27. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  28. import org.openspcoop2.message.OpenSPCoop2MessageParseResult;
  29. import org.openspcoop2.message.constants.MessageRole;
  30. import org.openspcoop2.message.constants.MessageType;
  31. import org.openspcoop2.message.context.HeaderParameters;
  32. import org.openspcoop2.message.context.MessageContext;
  33. import org.openspcoop2.message.context.StringParameter;
  34. import org.openspcoop2.message.exception.MessageException;
  35. import org.openspcoop2.utils.Utilities;
  36. import org.openspcoop2.utils.UtilsException;
  37. import org.openspcoop2.utils.date.DateManager;
  38. import org.openspcoop2.utils.date.DateUtils;
  39. import org.openspcoop2.utils.io.notifier.NotifierInputStreamParams;

  40. /**    
  41.  * ResponseCached
  42.  *
  43.  * @author Poli Andrea (poli@link.it)
  44.  * @author $Author$
  45.  * @version $Rev$, $Date$
  46.  */
  47. public class ResponseCached implements Serializable {

  48.     /**
  49.      *
  50.      */
  51.     private static final long serialVersionUID = 1L;
  52.    
  53.     private String contentType;
  54.     private byte[] message;
  55.     private long messageLength;
  56.     private byte[] context;
  57.     private Date creazione;
  58.     private Date scadenza;
  59.     private String digest;
  60.     private String uuid;
  61.    
  62.     public Date getCreazione() {
  63.         return this.creazione;
  64.     }
  65.     public long getAgeInSeconds() {
  66.         long now = DateManager.getTimeMillis();
  67.         long creazione = this.creazione.getTime();
  68.         long diff = now - creazione;
  69.         return (diff / 1000l);
  70.     }
  71.     public void setCreazione(Date creazione) {
  72.         this.creazione = creazione;
  73.     }
  74.     public Date getScadenza() {
  75.         return this.scadenza;
  76.     }
  77.     public void setScadenza(Date scadenza) {
  78.         this.scadenza = scadenza;
  79.     }
  80.     public String getContentType() {
  81.         return this.contentType;
  82.     }
  83.     public void setContentType(String contentType) {
  84.         this.contentType = contentType;
  85.     }
  86.     public byte[] getMessage() {
  87.         return this.message;
  88.     }
  89.     public void setMessage(byte[] message) {
  90.         this.message = message;
  91.     }
  92.     public long getMessageLength() {
  93.         return this.messageLength;
  94.     }
  95.     public void setMessageLength(long messageLength) {
  96.         this.messageLength = messageLength;
  97.     }
  98.     public byte[] getContext() {
  99.         return this.context;
  100.     }
  101.     public void setContext(byte[] context) {
  102.         this.context = context;
  103.     }
  104.     public String getUuid() {
  105.         return this.uuid;
  106.     }
  107.     public void setUuid(String uuid) {
  108.         this.uuid = uuid;
  109.     }
  110.     public String getDigest() {
  111.         return this.digest;
  112.     }
  113.     public void setDigest(String digest) {
  114.         this.digest = digest;
  115.     }
  116.    
  117.     public String print() throws UtilsException {
  118.         StringBuilder bf = new StringBuilder();
  119.         bf.append("UUID: ").append(this.uuid).append("\n\n");
  120.         bf.append("Digest: ").append(this.digest).append("\n\n");
  121.         SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMs();
  122.         String creazione = dateformat.format(this.creazione).replace('_','T');
  123.         bf.append("Creazione: ").append(creazione).append("\n\n");
  124.         String scadenza = dateformat.format(this.scadenza).replace('_','T');
  125.         bf.append("Scadenza: ").append(scadenza).append("\n\n");
  126.         bf.append("Età (secondi): ").append(this.getAgeInSeconds()).append("\n\n");
  127.         bf.append("Content-Type: ").append(this.contentType).append("\n\n");
  128.         bf.append("Content-Length: ").append(this.messageLength).append("\n\n");
  129.         bf.append("Context: \n").append(new String(this.context)).append("\n\n");
  130.         // 1024 = 1K
  131.         // Visualizzo al massimo 20K
  132.         int max = 20 * 1024;
  133.         String message =  Utilities.convertToPrintableText(this.message,max);
  134.         bf.append("Messaggio: \n").append(message);
  135.         return bf.toString();
  136.     }
  137.    
  138.     public OpenSPCoop2Message toOpenSPCoop2Message(OpenSPCoop2MessageFactory messageFactory, AttachmentsProcessingMode attachmentProcessingMode, String headerCacheKey) throws Exception {
  139.        
  140.         // Lettura Message Context
  141.         org.openspcoop2.message.context.utils.serializer.JaxbDeserializer jaxbDeserializer  =
  142.                 new org.openspcoop2.message.context.utils.serializer.JaxbDeserializer();
  143.         MessageContext msgContext = jaxbDeserializer.readMessageContext(this.context);
  144.        
  145.         if(msgContext.getMessageType()==null) {
  146.             throw new MessageException("Message Type undefined in context serialized");
  147.         }
  148.         MessageType mt = MessageType.valueOf(msgContext.getMessageType());
  149.         if(mt==null) {
  150.             throw new MessageException("MessageType ["+msgContext.getMessageType()+"] unknown");
  151.         }
  152.        
  153.         if(msgContext.getMessageRole()==null) {
  154.             throw new MessageException("Message Role undefined in context serialized");
  155.         }
  156.         MessageRole mr = MessageRole.valueOf(msgContext.getMessageRole());
  157.         if(mr==null) {
  158.             throw new MessageException("MessageRole ["+msgContext.getMessageRole()+"] unknown");
  159.         }
  160.        
  161.         if(headerCacheKey!=null && msgContext.getTransportResponseContext()!=null) {
  162.             if(msgContext.getTransportResponseContext().getHeaderParameters()==null) {
  163.                 msgContext.getTransportResponseContext().setHeaderParameters(new HeaderParameters());
  164.             }
  165.             StringParameter headerParameter = new StringParameter();
  166.             headerParameter.setNome(headerCacheKey);
  167.             headerParameter.setBase(this.uuid);
  168.             msgContext.getTransportResponseContext().getHeaderParameters().addHeaderParameter(headerParameter);
  169.         }
  170.        
  171.         // CostruzioneMessaggio
  172.         NotifierInputStreamParams notifierInputStreamParams = null;
  173.         OpenSPCoop2MessageParseResult pr = null;
  174.         pr = messageFactory.createMessage(mt,mr,this.contentType,
  175.                 this.message,notifierInputStreamParams,
  176.                 attachmentProcessingMode);
  177.         OpenSPCoop2Message msg = pr.getMessage_throwParseException();
  178.         msg.readResourcesFrom(msgContext);
  179.         return msg;
  180.     }
  181.    
  182.     public static ResponseCached toResponseCached(OpenSPCoop2Message msg, int seconds) throws MessageException, IOException {
  183.         ResponseCached rCached = new ResponseCached();
  184.        
  185.         long now = DateManager.getTimeMillis();
  186.         long ms = (((long)seconds)*1000l);
  187.        
  188.         Date creazione = new Date( now );
  189.         rCached.setCreazione(creazione);
  190.        
  191.         Date scadenza = new Date( now + ms );
  192.         rCached.setScadenza(scadenza);
  193.        
  194.         // Save bytes message
  195.         java.io.ByteArrayOutputStream bout = new java.io.ByteArrayOutputStream();
  196.         msg.writeTo(bout,false);
  197.         bout.flush();
  198.         bout.close();
  199.         rCached.setMessage(bout.toByteArray());
  200.         rCached.setMessageLength(bout.size());
  201.        
  202.         // Save message context
  203.         bout = new java.io.ByteArrayOutputStream();
  204.         msg.serializeResourcesTo(bout);
  205.         bout.flush();
  206.         bout.close();
  207.         rCached.setContext(bout.toByteArray());
  208.        
  209.         rCached.setContentType(msg.getContentType());
  210.        
  211.         return rCached;
  212.     }
  213. }