/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2010-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.netmgt.rt;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.opennms.core.utils.LogUtils;
public class RTTicket implements Serializable {
/**
*
*/
private static final long serialVersionUID = 445141747501076112L;
private static Pattern m_trim = Pattern.compile("\\s*\\n*$");
private Long m_id;
private String m_status;
private String m_queue;
private String m_created;
private List<String> m_requestors = new ArrayList<String>();
private String m_subject;
private String m_text;
private List<CustomField> m_customFields;
public RTTicket() {
m_customFields = new ArrayList<CustomField>();
}
public RTTicket(final String queue, final String requestor, final String subject, final String text, final List<CustomField> customFields) {
this(null, queue, requestor, subject, text, customFields);
}
public RTTicket(final Long id, final String queue, final String requestor, final String subject, final String text, final List<CustomField> customFields) {
m_id = id;
m_queue = queue;
m_requestors.add(requestor);
m_subject = subject;
m_text = text;
m_customFields = customFields;
}
public Long getId() {
return m_id;
}
public void setId(final Long id) {
m_id = id;
}
public String getStatus() {
return m_status;
}
public void setStatus(final String status) {
m_status = status;
}
public String getQueue() {
return m_queue;
}
public void setQueue(final String queue) {
m_queue = queue;
}
public String getCreated() {
return m_created;
}
public void setCreated(final String created) {
m_created = created;
}
public String getRequestor() {
synchronized (m_requestors) {
if (m_requestors.size() > 0) {
return m_requestors.get(0);
}
}
return null;
}
public List<String> getRequestors() {
return m_requestors;
}
public void setRequestors(final List<String> requestors) {
synchronized (m_requestors) {
m_requestors.clear();
m_requestors.addAll(requestors);
}
}
public void setRequestor(final String requestor) {
synchronized (m_requestors) {
m_requestors.clear();
m_requestors.add(requestor);
}
}
public void addRequestor(final String requestor) {
m_requestors.add(requestor);
}
public String getSubject() {
return m_subject;
}
public void setSubject(final String subject) {
m_subject = subject;
}
public String getText() {
return m_text;
}
public void setText(final String text) {
m_text = text;
}
public List<CustomField> getCustomFields() {
return m_customFields;
}
public void setCustomFields(List<CustomField> customFields) {
m_customFields = customFields;
}
public void addCustomField(CustomField customField) {
m_customFields.add(customField);
}
public String toString() {
StringBuilder customFields = new StringBuilder();
for (CustomField cf : m_customFields) {
customFields.append(cf.toString())
.append("\n");
}
return new ToStringBuilder(this)
.append("ID", m_id)
.append("Queue", m_queue)
.append("Created", m_created)
.append("Requestors", StringUtils.join(m_requestors, ", "))
.append("Status", m_status)
.append("Subject", m_subject)
.append("Text", m_text)
.append("Custom Fields", customFields.toString())
.toString();
}
public String toContent() {
final StringBuilder contentBuilder = new StringBuilder();
if (m_id == null) {
contentBuilder.append("id: ticket/new\n");
if (m_queue != null) contentBuilder.append("Queue: ").append(m_queue).append("\n");
if (m_requestors != null) contentBuilder.append("Requestor: ").append(getRequestor()).append("\n");
if (m_subject != null) contentBuilder.append("Subject: ").append(m_subject.replaceAll("[\\r\\n]+", " ")).append("\n");
if (m_text != null) contentBuilder.append("text: ").append(m_text.replaceAll("\\r?\\n", "\n ")).append("\n");
if (m_customFields.size() > 0) {
for (CustomField field : m_customFields) {
if (field.getValues().size() == 0) continue;
if (field.getValues().size() > 1) LogUtils.warnf(this, "Field %s has %d values, using only the first one", field.getName(), field.getValues().size());
String value = field.getValues().get(0).getValue();
contentBuilder.append("CF.{").append(field.getName()).append("}: ").append(value).append("\n");
}
}
} else {
// contentBuilder.append("id: ticket/").append(m_id).append("\n");
}
if (m_status != null) contentBuilder.append("Status: ").append(m_status).append("\n");
return m_trim.matcher(contentBuilder.toString()).replaceAll("");
}
public RTTicket copy() {
final RTTicket newTicket = new RTTicket();
newTicket.setId(m_id);
newTicket.setQueue(m_queue);
newTicket.setRequestors(m_requestors);
newTicket.setStatus(m_status);
newTicket.setSubject(m_subject);
newTicket.setText(m_text);
newTicket.setCustomFields(m_customFields);
return newTicket;
}
}