// Path: src/java/com/idega/block/email/bean/FoundMessagesInfo.java
// public class FoundMessagesInfo implements Serializable {
// 
// 	private static final long serialVersionUID = 5549581211079663255L;
// 
// 	private Collection<Message> messages;
// 	
// 	private MessageParserType parserType;
// 
// 	private String identifier;
// 	
// 	public FoundMessagesInfo(MessageParserType parserType) {
// 		this.parserType = parserType;
// 	}
// 	
// 	public FoundMessagesInfo(String identifier, MessageParserType parserType) {
// 		this(parserType);
// 		
// 		this.identifier = identifier;
// 	}
// 	
// 	public FoundMessagesInfo(Collection<Message> messages, MessageParserType parserType) {
// 		this(parserType);
// 		
// 		this.messages = messages == null ? null : new ArrayList<Message>(messages);
// 	}
// 	
// 	public Collection<Message> getMessages() {
// 		return messages;
// 	}
// 
// 	public MessageParserType getParserType() {
// 		return parserType;
// 	}
// 	
// 	public void addMessage(Message message) {
// 		if (messages == null) {
// 			messages = new ArrayList<Message>();
// 		}
// 		messages.add(message);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "Identifier: " + identifier + ", type: " + parserType + ", messages: " + getMessages();
// 	}
// 
// 	public String getIdentifier() {
// 		return identifier;
// 	}
// 
// 	public void setIdentifier(String identifier) {
// 		this.identifier = identifier;
// 	}	
// 	
// }
// 
// Path: src/java/com/idega/block/email/patterns/EmailSubjectSearchable.java
// public interface EmailSubjectSearchable extends Serializable {
// 
// 	public abstract Message[] getMessages(EmailParams params) throws MessagingException;
// 
// 	public abstract Map<String, FoundMessagesInfo> getSearchResultsFormatted(EmailParams params) throws MessagingException;
// 
// 	public abstract MessageParserType getParserType();
// 
// 	public String getFixedIdentifier(String identifier);
// 
// }


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.idega.block.email.bean.FoundMessagesInfo;
import com.idega.block.email.patterns.EmailSubjectSearchable;
import com.idega.core.business.DefaultSpringBean;
import com.idega.idegaweb.IWMainApplication;
import com.idega.util.ArrayUtil;
import com.idega.util.CoreConstants;
import com.idega.util.ListUtil;
import com.idega.util.datastructures.map.MapUtil;
		params.setUsername(username);
		params.setPassword(password);

		login(params);

		return params;
	}

	/**
	 * Method used to logout from the mail host.
	 */
	public void logout(EmailParams params) throws MessagingException {
		if (params.isLoggedOut()) {
			return;
		}

		params.getFolder().close(true);
		params.getStore().close();
		params.setLoggedOut(true);
	}

	@SuppressWarnings("unchecked")
	public Collection<EmailSubjectSearchable> getEmailSubjectSearchers() {
		if (ListUtil.isEmpty(emailSubjectSearchers)) {
			Map<String, ? extends EmailSubjectSearchable> beans = WebApplicationContextUtils
				.getWebApplicationContext(IWMainApplication.getDefaultIWMainApplication().getServletContext()).getBeansOfType(EmailSubjectSearchable.class);
			if (beans == null || beans.isEmpty()) {
				return null;
			}

// Path: src/java/com/idega/block/email/bean/FoundMessagesInfo.java
// public class FoundMessagesInfo implements Serializable {
// 
// 	private static final long serialVersionUID = 5549581211079663255L;
// 
// 	private Collection<Message> messages;
// 	
// 	private MessageParserType parserType;
// 
// 	private String identifier;
// 	
// 	public FoundMessagesInfo(MessageParserType parserType) {
// 		this.parserType = parserType;
// 	}
// 	
// 	public FoundMessagesInfo(String identifier, MessageParserType parserType) {
// 		this(parserType);
// 		
// 		this.identifier = identifier;
// 	}
// 	
// 	public FoundMessagesInfo(Collection<Message> messages, MessageParserType parserType) {
// 		this(parserType);
// 		
// 		this.messages = messages == null ? null : new ArrayList<Message>(messages);
// 	}
// 	
// 	public Collection<Message> getMessages() {
// 		return messages;
// 	}
// 
// 	public MessageParserType getParserType() {
// 		return parserType;
// 	}
// 	
// 	public void addMessage(Message message) {
// 		if (messages == null) {
// 			messages = new ArrayList<Message>();
// 		}
// 		messages.add(message);
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "Identifier: " + identifier + ", type: " + parserType + ", messages: " + getMessages();
// 	}
// 
// 	public String getIdentifier() {
// 		return identifier;
// 	}
// 
// 	public void setIdentifier(String identifier) {
// 		this.identifier = identifier;
// 	}	
// 	
// }
// 
// Path: src/java/com/idega/block/email/patterns/EmailSubjectSearchable.java
// public interface EmailSubjectSearchable extends Serializable {
// 
// 	public abstract Message[] getMessages(EmailParams params) throws MessagingException;
// 
// 	public abstract Map<String, FoundMessagesInfo> getSearchResultsFormatted(EmailParams params) throws MessagingException;
// 
// 	public abstract MessageParserType getParserType();
// 
// 	public String getFixedIdentifier(String identifier);
// 
// }


// Path: src/java/com/idega/block/email/client/business/EmailSubjectPatternFinder.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.idega.block.email.bean.FoundMessagesInfo;
import com.idega.block.email.patterns.EmailSubjectSearchable;
import com.idega.core.business.DefaultSpringBean;
import com.idega.idegaweb.IWMainApplication;
import com.idega.util.ArrayUtil;
import com.idega.util.CoreConstants;
import com.idega.util.ListUtil;
import com.idega.util.datastructures.map.MapUtil;

		params.setUsername(username);
		params.setPassword(password);

		login(params);

		return params;
	}

	/**
	 * Method used to logout from the mail host.
	 */
	public void logout(EmailParams params) throws MessagingException {
		if (params.isLoggedOut()) {
			return;
		}

		params.getFolder().close(true);
		params.getStore().close();
		params.setLoggedOut(true);
	}

	@SuppressWarnings("unchecked")
	public Collection<EmailSubjectSearchable> getEmailSubjectSearchers() {
		if (ListUtil.isEmpty(emailSubjectSearchers)) {
			Map<String, ? extends EmailSubjectSearchable> beans = WebApplicationContextUtils
				.getWebApplicationContext(IWMainApplication.getDefaultIWMainApplication().getServletContext()).getBeansOfType(EmailSubjectSearchable.class);
			if (beans == null || beans.isEmpty()) {
				return null;
			}

			emailSubjectSearchers = new ArrayList<EmailSubjectSearchable>(beans.size());