source: contrib/MailArchiver/sources/src/serpro/mailarchiver/service/web/DefaultGetMessageBodyOperation.java @ 6785

Revision 6785, 3.6 KB checked in by rafaelraymundo, 12 years ago (diff)

Ticket #2946 - Liberado codigo do MailArchiver?. Documentação na subpasta DOCS.

Line 
1/**
2 * MailArchiver is an application that provides services for storing and managing e-mail messages through a Web Services SOAP interface.
3 * Copyright (C) 2012  Marcio Andre Scholl Levien and Fernando Alberto Reuter Wendt and Jose Ronaldo Nogueira Fonseca Junior
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18
19/******************************************************************************\
20*
21*  This product was developed by
22*
23*        SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO),
24*
25*  a government company established under Brazilian law (5.615/70),
26*  at Department of Development of Porto Alegre.
27*
28\******************************************************************************/
29
30package serpro.mailarchiver.service.web;
31
32import java.io.IOException;
33import java.util.regex.Pattern;
34
35import javax.jdo.annotations.PersistenceAware;
36
37import org.springframework.beans.factory.annotation.Autowired;
38
39import serpro.mailarchiver.domain.metaarchive.Message;
40import serpro.mailarchiver.domain.metaarchive.TextBody;
41import serpro.mailarchiver.service.BaseService;
42import serpro.mailarchiver.service.find.FMessage;
43import serpro.mailarchiver.util.BodyVisitor;
44import serpro.mailarchiver.util.Logger;
45import serpro.mailarchiver.util.transaction.WithReadOnlyTx;
46
47@PersistenceAware
48public class DefaultGetMessageBodyOperation
49    extends BaseService
50    implements GetMessageBodyOperation
51{
52    private static final Logger log = Logger.getLocalLogger();
53
54    @Autowired
55    private FMessage findMessage;
56
57    private static final Pattern controlCharactersPattern = Pattern.compile("[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]");
58
59    @WithReadOnlyTx
60    @Override
61    public String apply(String messageId) throws ServiceFault {
62
63        if(messageId.isEmpty()) {
64            ServiceFault.invalidMessageId()
65                    .setActor("getMessageBody")
66                    .setMessage("Message id is empty or null.")
67                    .raise();
68        }
69
70        Message message = findMessage.byId(messageId);
71
72        if(message == null) {
73            ServiceFault.messageNotFound()
74                    .setActor("getMessageBody")
75                    .setMessage("Message not found.")
76                    .addValue("messageId", messageId)
77                    .raise();
78        }
79
80        final StringBuilder sb = new StringBuilder();
81
82        sb.append("<span>\n");
83
84        message.visitBodies(new BodyVisitor() {
85            @Override
86            public void visitTextBody(TextBody textBody) {
87                try {
88                    sb.append(
89                            "    <div id='text-body-").append(textBody.getOid()).append("'>\n")
90                                    .append(textBody.getAdaptedText()).append("\n"
91                        +   "    </div>\n");
92                }
93                catch(IOException ex) {
94                    log.error(ex);
95                }
96            }
97        });
98
99        sb.append("</span>\n");
100
101        return controlCharactersPattern.matcher(sb.toString()).replaceAll("");
102    }
103}
Note: See TracBrowser for help on using the repository browser.