/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando Enterprise Edition software.
* You can redistribute it and/or modify it
* under the terms of the Entando's EULA
*
* See the file License for the specific language governing permissions
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpwebmail.apsadmin.webmail.folder;
import java.util.List;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.FolderNotFoundException;
import javax.mail.Message;
import javax.mail.MessagingException;
import com.agiletec.aps.system.ApsSystemUtils;
import com.agiletec.plugins.jpwebmail.aps.system.services.webmail.IWebMailManager;
import com.agiletec.plugins.jpwebmail.apsadmin.util.CurrentFolderMessagesInfo;
import com.agiletec.plugins.jpwebmail.apsadmin.webmail.AbstractWebmailBaseAction;
/**
* Classe per le operazioni sui messaggi visualizzati in una singola cartella.
* @version 1.0
* @author E.Santoboni
*/
public class InboxMessagesAction extends AbstractWebmailBaseAction implements IInboxMessagesAction {
@Override
public String moveMessages() {
Folder currentFolder = this.getCurrentFolder();
try {
currentFolder.open(Folder.READ_WRITE);
Folder dfolder = this.getStore().getFolder(this.getFolderDest());
if (null == dfolder || this.getCurrentFolderName().equals(this.getFolderDest())) {
this.addActionError(this.getText("error.DestFolderNotSelected"));
return SUCCESS;
}
Message[] msgs = this.getSelectedMessages();
if (msgs.length != 0) {
currentFolder.copyMessages(msgs, dfolder);
currentFolder.setFlags(msgs, new Flags(Flags.Flag.DELETED), true);
} else {
this.addActionError(this.getText("error.MsgToMoveNotSelected"));
}
} catch (FolderNotFoundException t) {
ApsSystemUtils.logThrowable(t, this, "moveMessages", "Folder '" + this.getFolderDest() + "' not Found");
if (this.getWebMailManager().getTrashFolderName().equals(this.getFolderDest())) {
this.addActionError(this.getText("error.TrashFolderNotFound", new String[]{this.getFolderDest()}));
} else {
this.addActionError(this.getText("error.DestFolderNotFound", new String[]{this.getFolderDest()}));
}
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "moveMessages");
return FAILURE;
} finally {
this.closeFolder(currentFolder, true);
}
return SUCCESS;
}
@Override
public String deleteMessages() {
String trashFolderName = this.getWebMailManager().getTrashFolderName();
if (null != trashFolderName) {
boolean isTrashFolder = trashFolderName.equalsIgnoreCase(this.getCurrentFolderName());
if (!isTrashFolder) {
this.setFolderDest(trashFolderName);
return this.moveMessages();
}
}
Folder currentFolder = this.getCurrentFolder();
try {
currentFolder.open(Folder.READ_WRITE);
Message[] msgs = this.getSelectedMessages();
//System.out.println("Deleting " + msgs.length + " messages");
if (msgs.length != 0) {
currentFolder.setFlags(msgs, new Flags(Flags.Flag.DELETED), true);
} else {
this.addActionError(this.getText("error.MsgToTrashNotSelected"));
}
} catch (Throwable t) {
ApsSystemUtils.logThrowable(t, this, "deleteMessages");
return FAILURE;
} finally {
this.closeFolder(currentFolder, true);
}
return SUCCESS;
}
protected void closeFolder(Folder currentFolder, boolean expunge) {
try {
if (null != currentFolder) currentFolder.close(expunge);
} catch (MessagingException e) {
throw new RuntimeException("Errore in chiusura folder " + currentFolder.getName());
}
}
protected Message[] getSelectedMessages() throws Throwable {
CurrentFolderMessagesInfo folderInfos = this.getCurrentFolderMessagesInfo();
List<Message> messages = folderInfos.getMessages();
List<Integer> selectedIndexes = this.getMessageIndexes();
if (null == selectedIndexes || selectedIndexes.isEmpty()
|| null == messages || messages.isEmpty()) {
return new Message[0];
}
Message[] selected = new Message[0];
for (int i=0; i<selectedIndexes.size(); i++) {
int index = selectedIndexes.get(i);
selected = this.addMessage(selected, messages.get(index));
}
return selected;
}
@Override
public String selectAllMessages() {
return SUCCESS;
}
@Override
public String deselectAllMessages() {
return SUCCESS;
}
protected CurrentFolderMessagesInfo getCurrentFolderMessagesInfo() throws Throwable {
CurrentFolderMessagesInfo folderInfos = (CurrentFolderMessagesInfo) this.getRequest().getSession().getAttribute(CurrentFolderMessagesInfo.CURRENT_FOLDER_MESSAGES);
if (folderInfos == null) {
throw new RuntimeException("There is no information about the current folder " + this.getCurrentFolderName());
}
if (!folderInfos.getFolderName().equals(this.getCurrentFolderName())) {
throw new RuntimeException("Informazioni correnti su cartella " + folderInfos.getFolderName()
+ " non compatibili con cartella corrente " + this.getCurrentFolderName());
}
return folderInfos;
}
private Message[] addMessage(Message[] messages, Message message){
int len = messages.length;
Message[] newMessages = new Message[len + 1];
for (int i=0; i < len; i++){
newMessages[i] = messages[i];
}
newMessages[len] = message;
return newMessages;
}
protected List<Integer> getMessageIndexes() {
return _messageIndexes;
}
public void setMessageIndexes(List<Integer> messageIndexes) {
this._messageIndexes = messageIndexes;
}
public boolean isSelectedAllMessages() {
return _selectedAllMessages;
}
public void setSelectedAllMessages(boolean selectedAllMessages) {
this._selectedAllMessages = selectedAllMessages;
}
public String getFolderDest() {
return _folderDest;
}
public void setFolderDest(String folderDest) {
this._folderDest = folderDest;
}
public String getCurrentPagerItem() {
return _currentPagerItem;
}
public void setCurrentPagerItem(String currentPagerItem) {
this._currentPagerItem = currentPagerItem;
}
protected IWebMailManager getWebMailManager() {
return _webMailManager;
}
public void setWebMailManager(IWebMailManager webMailManager) {
this._webMailManager = webMailManager;
}
private List<Integer> _messageIndexes;
private boolean _selectedAllMessages;
private String _folderDest;
private String _currentPagerItem;
private IWebMailManager _webMailManager;
}