Skip to content

Instantly share code, notes, and snippets.

@THUFIR
Created April 3, 2012 00:37
Show Gist options
  • Save THUFIR/2288307 to your computer and use it in GitHub Desktop.
Save THUFIR/2288307 to your computer and use it in GitHub Desktop.
NNTP connections
thufir@dur:~$ cat NetBeansProjects/NNTPjsf/src/java/net/bounceme/dur/nntp/MessageBean.java
package net.bounceme.dur.nntp;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
@Named
@SessionScoped
public class MessageBean implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(MessageBean.class.getName());
private static Level level = Level.INFO;
public MessageBean() {
logger.log(level, "MessageBean..");
}
public DataModel getModel() throws Exception {
logger.log(level, "MessageBean.getModel..");
List<MessageEntity> messageEntities = getNNTP();
DataModel messagesDataModel = new ListDataModel(messageEntities);
return messagesDataModel;
}
private List<MessageEntity> getNNTP() throws Exception {
logger.log(level, "MessageBean.getNNTP..");
List<MessageEntity> messageEntities = new ArrayList<MessageEntity>();
SingletonNNTP nntp = SingletonNNTP.INSTANCE;
messageEntities = nntp.getEntities();
logger.log(level, "MessageBean.getNNTP nntp.size: {0}", messageEntities.size());
return messageEntities;
}
}thufir@dur:~$
thufir@dur:~$ cat NetBeansProjects/NNTPjsf/src/java/net/bounceme/dur/nntp/MessageEntity.java
package net.bounceme.dur.nntp;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Address;
import javax.mail.Header;
import javax.persistence.*;
@Entity
public class MessageEntity implements Serializable {
private static long serialVersionUID = 1L;
private String MessageId = "0";
private List<Header> headers = new ArrayList<Header>();
private String content = "content";
private String subject = "subj";
@Temporal(javax.persistence.TemporalType.DATE)
private Date sentDate = new Date();
private List<Address> addresses = new ArrayList<Address>();
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private URL url = null;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof MessageEntity)) {
return false;
}
MessageEntity other = (MessageEntity) object;
if ((this.getId() == null && other.getId() != null) || (this.getId() != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
public String getMessageId() {
return MessageId;
}
public void setMessageId(String MessageId) {
this.MessageId = MessageId;
}
public List<String> getStringHeaders() {
List<Header> headerListOfHeaders = getHeaders();
List<String> stringListOfHeaders = new ArrayList<String>();
for (Header h : headerListOfHeaders) {
stringListOfHeaders.add(h.getName() + " " + h.getValue() + "\n");
}
return stringListOfHeaders;
}
public List<Header> getHeaders() {
return headers;
}
public void setHeaders(List<Header> headers) {
this.headers = headers;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public Date getSentDate() {
return sentDate;
}
public void setSentDate(Date sentDate) {
this.sentDate = sentDate;
}
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
public URL getUrl() throws MalformedURLException {
url = new URL("http://www.google.com/");
for (Header h : headers) {
if ("Archived-at".equals(h.getName())) {
String s = h.getValue();
s = s.substring(1, s.length()-1);
url = new URL(s);
}
}
return url;
}
public void setUrl(URL link) {
this.url = link;
}
@Override
public String toString() {
String s = "no URL";
try {
s = "net.bounceme.dur.nntp.MessageEntity[ id=" + getId() + " ]"
+ getUrl().toExternalForm();
} catch (MalformedURLException ex) {
Logger.getLogger(MessageEntity.class.getName()).log(Level.SEVERE, null, ex);
}
return s;
}
}
thufir@dur:~$
thufir@dur:~$ cat NetBeansProjects/NNTPjsf/src/java/net/bounceme/dur/nntp/SingletonNNTP.java
package net.bounceme.dur.nntp;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.*;
public enum SingletonNNTP {
INSTANCE;
private final Logger logger = Logger.getLogger(SingletonNNTP.class.getName());
private final Level level = Level.INFO;
private Properties props = new Properties();
private List<Message> messages = new ArrayList<Message>();
private boolean loaded = false;
private List<MessageEntity> messageEntities = new ArrayList<MessageEntity>();
private SingletonNNTP() {
logger.logp(level, "SingletonNNTP", "SingletonNNTP", "only once...");
props = PropertiesReader.getProps();
if (!loaded) {
try {
loaded = setMessages();
} catch (Exception ex) {
Logger.getLogger(SingletonNNTP.class.getName()).log(Level.SEVERE, "FAILED TO LOAD MESSAGES", ex);
}
}
}
public List<Message> getMessages(boolean debug) throws Exception {
logger.logp(level, "SingletonNNTP", "getMessages", "returning messages");
return Collections.unmodifiableList(messages);
}
private boolean setMessages() throws Exception {
logger.logp(level, "SingletonNNTP", "setMessages", "connecting to leafnode");
Session session = Session.getDefaultInstance(props);
session.setDebug(false);
Store store = session.getStore(new URLName(props.getProperty("nntp.host")));
store.connect();
Folder root = store.getDefaultFolder();
Folder folder = root.getFolder(props.getProperty("nntp.group"));
folder.open(Folder.READ_ONLY);
Message[] msgs = folder.getMessages();
messages = Arrays.asList(msgs);
setEntities();
folder.close(false);
store.close();
return true;
}
public List<MessageEntity> getEntities() {
logger.logp(level, "SingletonNNTP", "getEntities", "getting entities");
for (MessageEntity m : messageEntities) {
for (Header h : m.getHeaders()) {
logger.log(level, h.toString());
}
}
return Collections.unmodifiableList(messageEntities);
}
private void setEntities() throws Exception {
logger.logp(level, "SingletonNNTP", "loadEntities", "trying to convert");
messageEntities = new ArrayList<MessageEntity>();
for (Message message : messages) {
MessageEntity entity = new MessageEntity();
Enumeration allHeaders = message.getAllHeaders();
List<Header> headers = new ArrayList<Header>();
while (allHeaders.hasMoreElements()) {
Header hdr = (Header) allHeaders.nextElement();
headers.add(hdr);
}
entity.setHeaders(headers);
entity.setSubject(message.getSubject());
entity.setContent(message.getContent().toString());
entity.setSentDate(message.getReceivedDate());
messageEntities.add(entity);
}
}
}
thufir@dur:~$
thufir@dur:~$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment