1 22 23 package gnu.mail.providers.nntp; 24 25 import java.io.IOException ; 26 import java.io.InputStream ; 27 import java.util.Enumeration ; 28 29 import javax.mail.FetchProfile ; 30 import javax.mail.Flags ; 31 import javax.mail.MessagingException ; 32 import javax.mail.internet.InternetHeaders ; 33 import javax.mail.internet.MimeMessage ; 34 35 41 public final class NNTPMessage 42 extends MimeMessage 43 { 44 45 String messageId; 46 47 NNTPMessage(NNTPFolder folder, 48 int msgnum, 49 String messageId) 50 { 51 super(folder, msgnum); 52 this.messageId = messageId; 53 headers = null; 54 flags = folder.getPermanentFlags(); 56 if (folder.isSeen(msgnum)) 57 flags.add(Flags.Flag.SEEN); 58 } 59 60 public String getMessageId() 61 { 62 return messageId; 63 } 64 65 void requestHeaders() 66 throws MessagingException 67 { 68 FetchProfile fp = new FetchProfile (); 69 fp.add(FetchProfile.Item.ENVELOPE); 70 NNTPMessage[] messages = new NNTPMessage[1]; 71 messages[0] = this; 72 folder.fetch(messages, fp); 73 } 74 75 78 void updateHeaders(InputStream in) 79 throws MessagingException , IOException 80 { 81 headers = new InternetHeaders (in); 82 } 83 84 void requestContent() 85 throws MessagingException 86 { 87 FetchProfile fp = new FetchProfile (); 88 fp.add(FetchProfile.Item.CONTENT_INFO); 89 NNTPMessage[] messages = new NNTPMessage[1]; 90 messages[0] = this; 91 folder.fetch(messages, fp); 92 } 93 94 97 void updateContent(byte[] content) 98 { 99 this.content = content; 100 } 101 102 104 public String [] getHeader(String name) 105 throws MessagingException 106 { 107 if (headers==null) 108 requestHeaders(); 109 return super.getHeader(name); 110 } 111 112 public String getHeader(String name, String delimiter) 113 throws MessagingException 114 { 115 if (headers==null) 116 requestHeaders(); 117 return super.getHeader(name, delimiter); 118 } 119 120 public Enumeration getAllHeaders() 121 throws MessagingException 122 { 123 if (headers==null) 124 requestHeaders(); 125 return super.getAllHeaders(); 126 } 127 128 public Enumeration getMatchingHeaders(String [] names) 129 throws MessagingException 130 { 131 if (headers==null) 132 requestHeaders(); 133 return super.getMatchingHeaders(names); 134 } 135 136 public Enumeration getNonMatchingHeaders(String [] names) 137 throws MessagingException 138 { 139 if (headers==null) 140 requestHeaders(); 141 return super.getNonMatchingHeaders(names); 142 } 143 144 public Enumeration getAllHeaderLines() 145 throws MessagingException 146 { 147 if (headers==null) 148 requestHeaders(); 149 return super.getAllHeaderLines(); 150 } 151 152 public Enumeration getMatchingHeaderLines(String [] names) 153 throws MessagingException 154 { 155 if (headers==null) 156 requestHeaders(); 157 return super.getMatchingHeaderLines(names); 158 } 159 160 public Enumeration getNonMatchingHeaderLines(String [] names) 161 throws MessagingException 162 { 163 if (headers==null) 164 requestHeaders(); 165 return super.getNonMatchingHeaderLines(names); 166 } 167 168 169 171 173 public int getSize() 174 throws MessagingException 175 { 176 if (content==null) 177 requestContent(); 178 return super.getSize(); 179 } 180 181 public int getLineCount() 182 throws MessagingException 183 { 184 String value = getHeader("Lines", ","); 185 if (value!=null) 186 { 187 try 188 { 189 return Integer.parseInt(value.trim()); 190 } 191 catch (NumberFormatException e) 192 { 193 } 194 } 195 return -1; 196 } 197 198 public InputStream getContentStream() 199 throws MessagingException 200 { 201 if (content==null) 202 requestContent(); 203 return super.getContentStream(); 204 } 205 206 208 public void saveChanges() 209 throws MessagingException 210 { 211 if (headers==null) 212 requestHeaders(); 213 if (content==null) 214 requestContent(); 215 } 216 217 219 public void setFlags(Flags flag, boolean set) 220 throws MessagingException 221 { 222 if (flag.contains(Flags.Flag.SEEN)) 223 ((NNTPFolder)folder).setSeen(msgnum, set); 224 super.setFlags(flag, set); 225 } 226 227 } 228 | Popular Tags |