blob: 6802ac76398205a28c9eee686fa6c1127fde71bb [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.hupa.server.service;
import java.util.List;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import org.apache.hupa.server.handler.JavamailUtil;
import org.apache.hupa.shared.data.GenericResultImpl;
import org.apache.hupa.shared.domain.GenericResult;
import org.apache.hupa.shared.domain.ImapFolder;
import org.apache.hupa.shared.domain.SetFlagAction;
import org.apache.hupa.shared.domain.User;
import com.sun.mail.imap.IMAPStore;
public class SetFlagServiceImpl extends AbstractService implements SetFlagService {
@Override
public GenericResult set(SetFlagAction action) throws Exception {
User user = getUser();
ImapFolder folder = action.getFolder();
List<Long> uids = action.getUids();
com.sun.mail.imap.IMAPFolder f = null;
try {
IMAPStore store = cache.get(user);
f = (com.sun.mail.imap.IMAPFolder) store.getFolder(folder.getFullName());
if (f.isOpen() == false) {
f.open(Folder.READ_WRITE);
}
Message[] msgs = f.getMessagesByUID(toArray(uids));
Flag flag = JavamailUtil.convert(action.getFlag());
Flags flags = new Flags();
flags.add(flag);
f.setFlags(msgs, flags, action.getValue());
return new GenericResultImpl();
} catch (MessagingException e) {
String errorMsg = "Error while setting flags of messages with uids " + uids + " for user " + user;
logger.error(errorMsg, e);
throw new Exception(errorMsg, e);
} finally {
if (f != null && f.isOpen()) {
try {
f.close(false);
} catch (MessagingException e) {
// ignore on close
}
}
}
}
private long[] toArray(List<Long> uids) {
long[] array = new long[uids.size()];
for (int i = 0; i < uids.size(); i++) {
array[i] = uids.get(i);
}
return array;
}
}