package is.idega.idegaweb.campus.block.mailinglist.presentation;
import is.idega.idegaweb.campus.block.mailinglist.business.LetterParser;
import is.idega.idegaweb.campus.block.mailinglist.business.MailingListService;
import is.idega.idegaweb.campus.block.mailinglist.data.EmailLetter;
import is.idega.idegaweb.campus.block.mailinglist.data.MailingList;
import is.idega.idegaweb.campus.presentation.CampusBlock;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import com.idega.business.IBOLookup;
import com.idega.core.contact.data.Email;
import com.idega.data.IDORelationshipException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.idegaweb.IWBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.Image;
import com.idega.presentation.PresentationObject;
import com.idega.presentation.Table;
import com.idega.presentation.text.Link;
import com.idega.presentation.ui.CheckBox;
import com.idega.presentation.ui.DataTable;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.HiddenInput;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextArea;
import com.idega.presentation.ui.TextInput;
import com.idega.presentation.util.Edit;
import com.idega.util.text.ContentParsable;
/**
*
*
* @author <br>
* <a href="mailto:aron@idega.is">Aron Birkir</a> <br>
*
* @created 9. mars 2002
* @version 1.0
*/
public class Emailer extends CampusBlock {
private IWBundle core;
private static String prmLocale = "em_locales";
private static String prmLetter = "em_letter";
private static String prmLetterDelete = "em_letter_del";
private static String prmList = "em_list";
private static String prmLists = "em_lists";
private static String prmListId = "em_list_id";
private static String prmListDelete = "em_list_del";
private static String prmType = "em_type";
private static String prmSubject = "em_subject";
private static String prmFrom = "em_from";
private static String prmParse = "em_parse";
private static String prmUserOnly = "em_useronly";
private static String prmHost = "em_host";
private static String prmBody = "em_body";
private static String prmForm = "em_form";
private static String prmEmailDelete = "em_email_delete";
private static String prmEmail = "em_email";
private ContentParsable contentParsable;
private boolean hasPermission = false;
private Image editImage, deleteImage, mailImage, listImage;
/** Constructor for the Emailer object */
public Emailer() {
contentParsable = new LetterParser();
}
/**
* Constructor for the Emailer object
*
* @param contentParsable Description of the Parameter
*/
public Emailer(ContentParsable contentParsable) {
this.contentParsable = contentParsable;
}
/**
* Sets the contentParsable attribute of the Emailer object
*
* @param contentParsable The new contentParsable value
*/
public void setContentParsable(ContentParsable contentParsable) {
this.contentParsable = contentParsable;
}
/**
* Gets the localizedNameKey of the Emailer object
*
* @return The localized name key value
*/
public String getLocalizedNameKey() {
return "emails";
}
/**
* Gets the localizedNameValue of the Emailer object
*
* @return The localized name value value
*/
public String getLocalizedNameValue() {
return "Emails";
}
/**
* Controls the layout of this block
* @param iwc the idegaweb context
*
*/
private void control(IWContext iwc) throws RemoteException {
//debugParameters(iwc);
Table T = new Table(3, 2);
T.setWidth(Table.HUNDRED_PERCENT);
T.setBorder(1);
T.setWidth(1, 1, "60%");
T.setWidth(2, 1, "40%");
//T.setWidth(3, 1, "30%");
T.setVerticalAlignment(1, 1, "top");
T.setRowVerticalAlignment(2,Table.VERTICAL_ALIGN_TOP);
T.setVerticalAlignment(2, 1, "top");
T.setVerticalAlignment(3, 1, "top");
T.mergeCells(3, 1, 3, 2);
MailingListService MailingListBusiness = getMailService(iwc);
if (iwc.isParameterSet(prmLists)) {
try {
MailingList mlist = null;
int mid = -1;
int cat = -1;
if (iwc.isParameterSet(prmListId)) {
mlist =MailingListBusiness.getMailingList(Integer.parseInt(iwc.getParameter(prmListId)));
mid = new Integer(mlist.getPrimaryKey().toString()).intValue();
}
if (iwc.isParameterSet("save_list")) {
mlist = MailingListBusiness.storeMailingList(cat, mid, iwc.getParameter(prmEmail));
}
else if (iwc.isParameterSet(prmListDelete)) {
MailingListBusiness.removeMailingList(mlist);
mlist = null;
}
else if (iwc.isParameterSet(prmEmailDelete) && mlist != null) {
MailingListBusiness.removeEmail(mlist, Integer.parseInt(iwc.getParameter(prmEmailDelete)));
}
else if (iwc.isParameterSet("save_email")) {
MailingListBusiness.addEmail(mlist, iwc.getParameter(prmEmail));
}
T.add(getMailingLists(iwc,mid), 1, 1);
if (iwc.isParameterSet("new_list") || mlist != null) {
T.add(getMailingListForm(mlist), 1, 2);
}
if (mlist != null) {
int row = 1;
/*
* if(iwc.isParameterSet("add_email")){
* T.add(getEmailForm(mlist),2,1);
* row++;
* }
* else{
*/
T.mergeCells(2, 1, 2, 2);
//}
T.add(getEmailList(iwc,mlist), 2, row);
}
}
catch (NumberFormatException e) {
e.printStackTrace();
}
catch (RemoteException e) {
e.printStackTrace();
}
catch (EJBException e) {
e.printStackTrace();
}
catch (IDORelationshipException e) {
e.printStackTrace();
}
catch (FinderException e) {
e.printStackTrace();
}
catch (CreateException e) {
e.printStackTrace();
}
}
else if (iwc.isParameterSet(prmEmailDelete)) {
}
else {
EmailLetter letter = null;
boolean saved = false;
//int id = -1;
if (iwc.isParameterSet(prmLetter)) {
try {
letter = MailingListBusiness.getEmailLetter(Integer.parseInt(iwc.getParameter(prmLetter)));
//id = new Integer(letter.getPrimaryKey().toString()).intValue();
}
catch (NumberFormatException e) {
e.printStackTrace();
}
catch (RemoteException e) {
e.printStackTrace();
}
catch (EJBException e) {
e.printStackTrace();
}
catch (FinderException e) {
e.printStackTrace();
}
}
if (iwc.isParameterSet("save_letter")) {
MailingListBusiness.createEmailLetter(
letter,
iwc.getParameter(prmHost),
iwc.getParameter(prmFrom),
iwc.getParameter(prmSubject),
iwc.getParameter(prmBody),
iwc.isParameterSet(prmParse),
iwc.isParameterSet(prmUserOnly),
iwc.getParameter(prmType));
saved = true;
}
else if (iwc.isParameterSet("save_letter_list")) {
//MailingListBusiness.createEmailLetter();
String[] letUse = iwc.getParameterValues("let_use");
String[] wasUsed = iwc.getParameterValues("was_used");
letUse = letUse == null ? new String[0] : letUse;
wasUsed = wasUsed == null ? new String[0] : wasUsed;
if (letter != null && letUse.length != wasUsed.length) {
MailingListBusiness.storeEmailLetterMailingLists(letter, parseArray(letUse), parseArray(wasUsed));
}
letter = null;
}
else if (iwc.isParameterSet(prmLetterDelete)) {
if (letter != null) {
MailingListBusiness.removeEmailLetter(letter);
letter = null;
}
}
else if (iwc.isParameterSet("mail_letter")) {
if (letter != null) {
getMailService(iwc).sendMail( letter, null);
}
}
T.add(getEmailLetterList(iwc), 1, 1);
if (iwc.isParameterSet("letter_list")) {
if (letter != null) {
T.add(getLetterMailingLists(iwc,letter), 2, 1);
}
}
else if (!saved && (iwc.isParameterSet("new_letter") || letter != null)) {
T.add(getEmailLetterForm(iwc, letter), 1, 2);
if (contentParsable != null) {
T.add(getTags(), 2, 2);
}
}
}
Form F = new Form();
F.setName(prmForm);
F.add(T);
add(getLinkTable());
add(F);
}
/**
* Gets the linkTable of the Emailer object
*
* @return The link table value
*/
public PresentationObject getLinkTable() {
Table T = new Table();
Link letter = new Link("Letters");
T.add(letter, 1, 1);
Link lists = new Link("Mailinglists");
lists.addParameter(prmLists, "true");
T.add(lists, 2, 1);
return T;
}
/**
* Gets the emailLetterList of the Emailer object
*
* @return The email letter list value
*/
public PresentationObject getEmailLetterList(IWContext iwc) {
Collection letters = null;
try {
letters = getMailService(iwc).getEmailLetters();
}
catch (RemoteException e) {
}
DataTable dTable = new DataTable();
dTable.setWidth("100%");
dTable.setTitlesHorizontal(true);
dTable.addTitle(localize("email_letters", "Email letters"));
int row = 1;
dTable.add(getHeader(localize("subject", "Subject")), 1, row);
dTable.add(getHeader(localize("from", "From")), 2, row);
dTable.add(getHeader(localize("type", "Type")), 3, row);
row++;
EmailLetter letter;
if (letters != null) {
Iterator iter = letters.iterator();
while (iter.hasNext()) {
letter = (EmailLetter) iter.next();
dTable.add(getText(letter.getSubject()), 1, row);
dTable.add(getText(letter.getFrom()), 2, row);
dTable.add(getText(localize(letter.getMailType(),letter.getMailType())), 3, row);
dTable.add(getLetterChangeLink(letter), 4, row);
dTable.add(getLetterDeleteLink(letter), 5, row);
dTable.add(getLetterMailLink(letter), 6, row);
dTable.add(getLetterListLink(letter), 7, row);
row++;
}
}
Link newButton = new Link(getResourceBundle().getLocalizedImageButton("new", "New"));
newButton.addParameter("new_letter", "true");
dTable.addButton(newButton);
return dTable;
}
/**
* Gets the emailLetterForm of the Emailer object
*
* @param iwc Description of the Parameter
* @param letter Description of the Parameter
* @return The email letter form value
*/
public PresentationObject getEmailLetterForm(IWContext iwc, EmailLetter letter) {
DataTable dTable = new DataTable();
dTable.setWidth(Table.HUNDRED_PERCENT);
dTable.addTitle(localize("new_letter", "New letter"));
DropdownMenu types = null;
if (contentParsable != null) {
types = getTypeDrop(prmType);
}
TextInput subject = new TextInput(prmSubject);
TextInput from = new TextInput(prmFrom);
TextInput host = new TextInput(prmHost);
TextArea body = new TextArea(prmBody);
body.setColumns(80);
body.setRows(30);
CheckBox parse = new CheckBox(prmParse);
CheckBox useronly = new CheckBox(prmUserOnly);
if (letter != null) {
subject.setContent(letter.getSubject());
body.setContent(letter.getBody());
host.setContent(letter.getHost());
from.setContent(letter.getFrom());
if (types != null) {
types.setSelectedElement(letter.getMailType());
}
parse.setChecked(letter.getParse());
useronly.setChecked(letter.getOnlyUser());
dTable.add(new HiddenInput(prmLetter, letter.getPrimaryKey().toString()));
}
int col_1 = 1;
int col_2 = 2;
int row = 1;
if (types != null) {
dTable.add(getHeader(localize("emailer.letter.type", "Type")), col_1, row);
dTable.add(types, col_2, row);
row++;
}
dTable.add(getHeader(localize("emailer.letter.host", "Host")), col_1, row);
dTable.add(host, col_2, row);
row++;
dTable.add(getHeader(localize("emailer.letter.from", "From")), col_1, row);
dTable.add(from, col_2, row);
row++;
dTable.add(getHeader(localize("emailer.letter.subject", "Subject")), col_1, row);
dTable.add(subject, col_2, row);
row++;
dTable.add(getHeader(localize("emailer.letter.body", "Body")), col_1, row);
dTable.add(body, col_2, row);
row++;
dTable.add(getHeader(localize("emailer.letter.parse", "Parse")), col_1, row);
dTable.add(parse, col_2, row);
row++;
dTable.add(getHeader(localize("emailer.letter.skip_user", "Skip user")), col_1, row);
dTable.add(useronly, col_2, row);
dTable.addButton(new SubmitButton(getResourceBundle().getLocalizedImageButton("save", "Save"), "save_letter"));
return dTable;
}
/**
* Gets the tags of the Emailer object
*
* @return The tags value
*/
public PresentationObject getTags() {
DataTable dTable = new DataTable();
dTable.addTitle(localize("email_tags", "Email tags"));
String[] tags = contentParsable.getParseTags();
int row = 1;
Link L;
String tag;
for (int i = 0; i < tags.length; i++) {
tag = contentParsable.formatTag(tags[i]);
L = new Link(getHeader(tag));
//L.setOnClick("this.form."+prmBody+".value += this.options[this.selectedIndex].value;");
L.setURL("javascript://");
L.setOnClick("document." + prmForm + "." + prmBody + ".value += '" + tag + "' ;");
dTable.add(L, 1, row++);
}
return dTable;
}
/**
* Gets the mailingLists of the Emailer object
*
* @param mlistId Description of the Parameter
* @return The mailing lists value
*/
public PresentationObject getMailingLists(IWContext iwc,int mlistId) {
DataTable dTable = new DataTable();
dTable.setWidth(Table.HUNDRED_PERCENT);
dTable.setTitlesHorizontal(true);
int row = 1;
dTable.addTitle(localize("mailing_lists", "Mailing lists"));
dTable.add(getHeader(localize("name", "Name")), 1, row);
dTable.add(getHeader(localize("created", "Created")), 2, row);
row++;
Collection mlists = null;
try {
mlists = getMailService(iwc).getMailingLists();
}
catch (RemoteException e) {
}
if (mlists != null) {
MailingList mlist;
//String color;
Iterator iter = mlists.iterator();
while (iter.hasNext()) {
mlist = (MailingList) iter.next();
//color = new Integer(mlist.getPrimaryKey().toString()).intValue() != mlistId ? "#000000" : "#FF0000";
dTable.add(getText(mlist.getName()), 1, row);
dTable.add(getText(mlist.getCreated().toString()), 2, row);
dTable.add(getListChangeLink(mlist), 3, row);
dTable.add(getListDeleteLink(mlist), 4, row);
row++;
}
}
Link newbutton = new Link(getResourceBundle().getLocalizedImageButton("new", "New"));
newbutton.addParameter(prmLists, "true");
newbutton.addParameter("new_list", "true");
dTable.addButton(newbutton);
return dTable;
}
/**
* Gets the mailingListForm of the Emailer object
*
* @param mlist Description of the Parameter
* @return The mailing list form value
*/
public PresentationObject getMailingListForm(MailingList mlist) {
DataTable dTable = new DataTable();
dTable.setWidth(Table.HUNDRED_PERCENT);
dTable.addTitle(localize("mailinglist", "Mailinglist"));
TextInput name = new TextInput(prmEmail);
if (mlist != null) {
name.setContent(mlist.getName());
dTable.add(new HiddenInput(prmListId, mlist.getPrimaryKey().toString()));
}
dTable.add(new HiddenInput(prmLists, "true"));
dTable.add(getHeader(localize("name", "Name")), 1, 1);
dTable.add(name, 2, 1);
dTable.addButton(new SubmitButton(getResourceBundle().getLocalizedImageButton("save", "Save"), "save_list"));
return dTable;
}
/**
* Gets the emailList of the Emailer object
*
* @param mlist Description of the Parameter
* @return The email list value
*/
public PresentationObject getEmailList(IWContext iwc, MailingList mlist) {
DataTable dTable = new DataTable();
dTable.setWidth(Table.HUNDRED_PERCENT);
dTable.setTitlesHorizontal(true);
dTable.addTitle(localize("emails", "Emails"));
int row = 1;
dTable.add(getHeader(localize("email_address", "Email address")), 1, row);
row++;
//int id = -1;
Collection emails = null;
try {
emails = getMailService(iwc).getEmails(mlist);
}
catch (RemoteException e) {
}
if (emails != null) {
Email email;
Iterator iter = emails.iterator();
while (iter.hasNext()) {
email = (Email) iter.next();
dTable.add(getText(email.getEmailAddress()), 1, row);
dTable.add(getEmailDeleteLink(email, mlist), 2, row);
row++;
}
}
dTable.addButton(new HiddenInput(prmList, mlist.getPrimaryKey().toString()));
TextInput name = new TextInput(prmEmail);
Edit.setStyle(name);
dTable.addButton(name);
dTable.addButton(new SubmitButton(getResourceBundle().getLocalizedImageButton("add", "add"), "save_email"));
/*
* Link addButton = new Link(iwrb.getLocalizedImageButton("add","Add"));
* addButton.addParameter("add_email","true");
* addButton.addParameter(prmLists,"true");
* addButton.addParameter(prmListId,mlist.getID());
* dTable.addButton(addButton);
*/
return dTable;
}
/**
* Gets the letterMailingLists of the Emailer object
*
* @param letter Description of the Parameter
* @return The letter mailing lists value
*/
public PresentationObject getLetterMailingLists(IWContext iwc, EmailLetter letter) throws RemoteException {
DataTable dTable = new DataTable();
dTable.setWidth("100%");
dTable.setTitlesHorizontal(true);
int row = 1;
dTable.addTitle(localize("mailing_lists", "Mailing lists"));
dTable.add(getHeader(localize("use", "Use")), 1, row);
dTable.add(getHeader(localize("name", "Name")), 2, row);
row++;
Map listMap = getMailService(iwc).mapOfMailingList(letter);
boolean hasMap = listMap != null;
Collection mlists = getMailService(iwc).getMailingLists(); //MailingListBusiness.listOfMailingList();
if (mlists != null) {
MailingList mlist;
//String color;
CheckBox use;
HiddenInput used;
String prmUse = "let_use";
Iterator iter = mlists.iterator();
while (iter.hasNext()) {
mlist = (MailingList) iter.next();
Integer primKey = (Integer) mlist.getPrimaryKey();
use = new CheckBox(prmUse, primKey.toString());
if (hasMap && listMap.containsKey(primKey)) {
use.setChecked(true);
used = new HiddenInput("was_used", primKey.toString());
dTable.add(used);
}
else {
use.setChecked(false);
}
dTable.add(use, 1, row);
dTable.add(getText(mlist.getName()), 2, row);
row++;
}
}
dTable.add(new HiddenInput(prmLetter, letter.getPrimaryKey().toString()));
dTable.addButton(new SubmitButton(getResourceBundle().getLocalizedImageButton("save", "Save"), "save_letter_list"));
return dTable;
}
// Used to add new email to mailinglist
/**
* Gets the emailForm of the Emailer object
*
* @param mlist Description of the Parameter
* @return The email form value
*/
public PresentationObject getEmailForm(MailingList mlist) {
DataTable dTable = new DataTable();
dTable.setWidth("100%");
dTable.addTitle(localize("email", "Email"));
TextInput name = new TextInput(prmEmail);
if (mlist != null) {
//name.setContent(mlist.getName());
dTable.add(new HiddenInput(prmList, mlist.getPrimaryKey().toString()));
}
dTable.add(getHeader(localize("email_address", "Email address")), 1, 1);
dTable.add(name, 2, 1);
return dTable;
}
/**
* Gets the typeDrop of the Emailer object
*
* @param name Description of the Parameter
* @return The type drop value
*/
public DropdownMenu getTypeDrop(String name) {
DropdownMenu drp = new DropdownMenu(name);
String[] types = contentParsable.getParseTypes();
for (int i = 0; i < types.length; i++) {
drp.addMenuElement(types[i], localize(types[i], types[i]));
}
return drp;
}
/**
* Parses int primitives from a string array
* @param array Description of the Parameter
* @return Description of the Return Value
*
*/
private int[] parseArray(String[] array) {
int[] intArray = new int[array.length];
for (int i = 0; i < array.length; i++) {
intArray[i] = Integer.parseInt(array[i]);
}
return intArray;
}
public void main(IWContext iwc) {
core = iwc.getIWMainApplication().getCoreBundle();
editImage = core.getImage("/shared/edit.gif");
deleteImage = core.getImage("/shared/delete.gif");
mailImage = getResourceBundle().getLocalizedImageButton("send_letter","Send");//core.getImage("/shared/empty.gif");
listImage = getResourceBundle().getLocalizedImageButton("show_lists","Show lists");
if(hasEditPermission()){
try {
control(iwc);
}
catch (RemoteException e) {
e.printStackTrace();
}
}
else
addText(localize("no_permission","No permission"));
}
public MailingListService getMailService(IWApplicationContext iwac) throws RemoteException {
return (MailingListService) IBOLookup.getServiceInstance(iwac, MailingListService.class);
}
public synchronized Object clone() {
Emailer obj = null;
try {
obj = (Emailer) super.clone();
// integers :
obj.contentParsable = contentParsable;
}
catch (Exception ex) {
ex.printStackTrace(System.err);
}
return obj;
}
/**
* Gets the letterChangeLink of the Emailer object
*
* @param letter Description of the Parameter
* @return The letter change link value
*/
public Link getLetterChangeLink(EmailLetter letter) {
Link L = new Link(editImage);
L.addParameter(prmLetter, letter.getPrimaryKey().toString());
L.setToolTip(localize("tooltip.edit_letter","Edit letter"));
return L;
}
/**
* Gets the letterDeleteLink of the Emailer object
*
* @param letter Description of the Parameter
* @return The letter delete link value
*/
public Link getLetterDeleteLink(EmailLetter letter) {
Link L = new Link(deleteImage);
L.addParameter(prmLetterDelete, letter.getPrimaryKey().toString());
L.addParameter(prmLetter, letter.getPrimaryKey().toString());
L.setToolTip(localize("tooltip.delete_letter","Delete letter"));
return L;
}
/**
* Gets the letterMailLink of the Emailer object
*
* @param letter Description of the Parameter
* @return The letter mail link value
*/
public Link getLetterMailLink(EmailLetter letter) {
Link L = new Link(mailImage);
L.addParameter("mail_letter", "true");
L.addParameter(prmLetter, letter.getPrimaryKey().toString());
L.setToolTip(localize("tooltip.mail_letter_sample","Mail letter to email list"));
return L;
}
/**
* Gets the letterListLink of the Emailer object
*
* @param letter Description of the Parameter
* @return The letter list link value
*/
public Link getLetterListLink(EmailLetter letter) {
Link L = new Link(listImage);
L.addParameter("letter_list", "true");
L.setToolTip(localize("tooltip.view_mail_list","View email list"));
L.addParameter(prmLetter, letter.getPrimaryKey().toString());
return L;
}
/**
* Gets the listDeleteLink of the Emailer object
*
* @param list Description of the Parameter
* @return The list delete link value
*/
public Link getListDeleteLink(MailingList list) {
Link L = new Link(deleteImage);
L.addParameter(prmListDelete, "true");
L.addParameter(prmListId, list.getPrimaryKey().toString());
L.addParameter(prmLists, "true");
L.setToolTip(localize("tooltip.delete_list","Delete list"));
return L;
}
/**
* Gets the listChangeLink of the Emailer object
*
* @param list Description of the Parameter
* @return The list change link value
*/
public Link getListChangeLink(MailingList list) {
Link L = new Link(editImage);
L.addParameter(prmListId, list.getPrimaryKey().toString());
L.addParameter(prmLists, "true");
L.setToolTip(localize("tooltip.edit_list","Edit email list"));
return L;
}
/**
* Gets the emailDeleteLink of the Emailer object
*
* @param email Description of the Parameter
* @param mlist Description of the Parameter
* @return The email delete link value
*/
public Link getEmailDeleteLink(Email email, MailingList mlist) {
Link L = new Link(deleteImage);
L.addParameter(prmEmailDelete, email.getPrimaryKey().toString());
L.addParameter(prmListId, mlist.getPrimaryKey().toString());
L.addParameter(prmLists, "true");
L.setToolTip(localize("tooltip.remove_email","Remove email"));
return L;
}
}