AW: AW: AW: using multiple action forms in one action. Best practice?

2004-11-17 Thread Martin Kindler
Bill,

you seem to understand my application quite well. The metaphor of
region/shops is excellent.

What adds a bit of complexity is that the shop-module is just one of
several. There might be an additional
people-module, a statistical data-module, etc. Thus serializing the
editing process in a wizard style would impose an order on the process which
is not very pleasant. Also, I would like to reuse the forms/action for
editing already existing objects/regions, where the order enforced by a
wizard is not appropriate.

But I think I have learned fromthis discussion how it could be implemented
reasonably.
The only exception being the question of scope which is not that important
in my case.

Martin


 -Ursprüngliche Nachricht-
 Von: Bill Keese [mailto:[EMAIL PROTECTED] 
 Gesendet: Mittwoch, 17. November 2004 01:48
 An: Struts Users Mailing List
 Betreff: Re: AW: AW: using multiple action forms in one 
 action. Best practice?
 
 
 It's hard for me to answer because I don't really understand your 
 application.  JSP1 is for picking a region, and then JSP2 is 
 for picking 
 stores within that region, right? And then after picking the 
 stores, you 
 display a confirmation page with the map and the list of 
 picked stores?
 
 When you hit the save button on the confirmation page, the input to 
 the SaveAction is both the selected region and the selected stores, 
 right?  So you are combining the information entered on two 
 previous forms.
 
 If it was me, I would have 3 separate actions and 3 separate 
 action-forms:
1. select-region
2. select-stores
3. confirm-dialog
 
 The confirm-dialog ActionForm would contain both the region 
 information 
 and the list of stores.  Thus I would only use one ActionForm per 
 Action, and I wouldn't use session variables.
 
 Bill
 
 Martin Kindler wrote:
 
 Hi Bill,
 
 so you say, it is good practice to use the two forms in one 
 action as I 
 do in my current solution? Sure, one has to hide the 
 internals from AF1 
 to an action primarily designed to use AF2 to keep the 
 address module 
 generic. Perhaps I should make the calling ActionForms implement a 
 specific interface. If I really want a fully generic address 
 module I 
 would have to split the
 action(s) in two, simply because the actions designed for 
 the address 
 module need a generic API. I cannot rely (for full genericity) on a 
 calling module to use AF1. In my current situation I will probably 
 ignore this as it is a straightforward refactoring which can be done 
 when need occurs. As to the question request vs. session scope I 
 understand the problems which might occur using session 
 scope. I do not 
 see a solution which would also fulfil the modularization 
 requirement.
 
 Thanks!
 
 Martin
 
   
 
 -Ursprüngliche Nachricht-
 Von: Bill Keese [mailto:[EMAIL PROTECTED]
 Gesendet: Dienstag, 16. November 2004 02:10
 An: Struts Users Mailing List
 Betreff: Re: AW: using multiple action forms in one action. 
 Best practice?
 
 
 Hi Martin,
 
 
 
 From this JSP I want to access a (hopefully) generic module
   
 
 to get the
 
 
 access points. This module has to get some information (e. g. a
 region to prefilter the addresses or access points already 
   
 
 existing)
 
 
 from JSP1.
 
   
 
 I think you should  generate the input to the generic module, rather
 than passing the ActionForm directly:
 
// get data from ActionForm1 needed to look up addresses
AddressLookupInfo info = getAddressInfoFromActionForm1(AF1);
 
// lookup addresses
List res = AddressLookup.getAddresses(info);
 ...
 
 Then your module can still be generic.
 
 
 
 I could take the necessary information from AF1 to some
   
 
 POJO (or bean)
 
 
 on model level (or controller level) and transfer it to
   
 
 AF2. This is
 
 
 probably the cleanest solution but means to split each
   
 
 action into
 
 
 two, just to do
 the data transfer.
  
 
   
 
 You shouldn't need to split each action into two.  Action1's
 job is to 
 handle the input from ActionForm1, and then do the setup to display 
 JSP2, right?  So, just create the ActionForm2 manually 
 inside Action1:
 
   // Create AF2 as an input/output form
   ActionForm2 af2 = new ActionForm2();  
  session.setAttribute(actionForm2, af2);
 
   // ... and pre-populate it with the data the user has 
 already input
   ActionForm1 af1 =
(ActionForm1) getActionForm(mapping, form,
 request, session);
   af2.loadDataFromAF1(af1);
 
   // forward control to JSP2
   return (mapping.findForward(jsp2));
 
 
 
 My current solution simply accesses both action forms, AF1 and AF2 
 (getting the one not available as the form-parameter by 
 MyForm mf =
 (MyForm)session.getAttribute(AFi);
 but my feeling is that this is not really good style.
  
 
   
 
 I guess it depends on whether you consider the two forms to 
 represent
 one logical command or two logical commands.
 
 The other

Re: AW: AW: AW: using multiple action forms in one action. Best practice?

2004-11-17 Thread Bill Keese
Hi Martin,
I see what you mean about the wizard metaphor being inappropriate for 
your case.  Maybe tabbed dialog box is a closer analogy.  But I guess 
that doesn't match exactly either, because the contents of tab B change 
according to the contents of tab A.  Anyway, there are many ways to 
implement something like that and I guess each has advantages/disadvantages.

By the way, in our application, we have a few cases where we process the 
data entered on multiple forms in one final action.  Specifically we do 
this when we use popup windows, since the concept of ordering of pages 
becomes more complicated / impossible when there are multiple windows 
displayed on the screen at a single time.  So we save the information 
from the popup window in the session context, and then reference it when 
the user hits submit on the main form.   By the way, does anyone 
have experience using popup windows in this way without resorting to 
using session variables?

Anyway, good luck!
Bill
Martin Kindler wrote:
Bill,
you seem to understand my application quite well. The metaphor of
region/shops is excellent.
What adds a bit of complexity is that the shop-module is just one of
several. There might be an additional
people-module, a statistical data-module, etc. Thus serializing the
editing process in a wizard style would impose an order on the process which
is not very pleasant. Also, I would like to reuse the forms/action for
editing already existing objects/regions, where the order enforced by a
wizard is not appropriate.
But I think I have learned fromthis discussion how it could be implemented
reasonably.
The only exception being the question of scope which is not that important
in my case.
Martin
 

-Ursprüngliche Nachricht-
Von: Bill Keese [mailto:[EMAIL PROTECTED] 
Gesendet: Mittwoch, 17. November 2004 01:48
An: Struts Users Mailing List
Betreff: Re: AW: AW: using multiple action forms in one 
action. Best practice?

It's hard for me to answer because I don't really understand your 
application.  JSP1 is for picking a region, and then JSP2 is 
for picking 
stores within that region, right? And then after picking the 
stores, you 
display a confirmation page with the map and the list of 
picked stores?

When you hit the save button on the confirmation page, the input to 
the SaveAction is both the selected region and the selected stores, 
right?  So you are combining the information entered on two 
previous forms.

If it was me, I would have 3 separate actions and 3 separate 
action-forms:
  1. select-region
  2. select-stores
  3. confirm-dialog

The confirm-dialog ActionForm would contain both the region 
information 
and the list of stores.  Thus I would only use one ActionForm per 
Action, and I wouldn't use session variables.

Bill
Martin Kindler wrote:
   

Hi Bill,
so you say, it is good practice to use the two forms in one 
 

action as I 
   

do in my current solution? Sure, one has to hide the 
 

internals from AF1 
   

to an action primarily designed to use AF2 to keep the 
 

address module 
   

generic. Perhaps I should make the calling ActionForms implement a 
specific interface. If I really want a fully generic address 
 

module I 
   

would have to split the
action(s) in two, simply because the actions designed for 
 

the address 
   

module need a generic API. I cannot rely (for full genericity) on a 
calling module to use AF1. In my current situation I will probably 
ignore this as it is a straightforward refactoring which can be done 
when need occurs. As to the question request vs. session scope I 
understand the problems which might occur using session 
 

scope. I do not 
   

see a solution which would also fulfil the modularization 
 

requirement.
   

Thanks!
Martin

 

-Ursprüngliche Nachricht-
Von: Bill Keese [mailto:[EMAIL PROTECTED]
Gesendet: Dienstag, 16. November 2004 02:10
An: Struts Users Mailing List
Betreff: Re: AW: using multiple action forms in one action. 
Best practice?

Hi Martin,
  

From this JSP I want to access a (hopefully) generic module
   



 

to get the
  

   

access points. This module has to get some information (e. g. a
region to prefilter the addresses or access points already 


 

existing)
  

from JSP1.
   



 

I think you should  generate the input to the generic module, rather
than passing the ActionForm directly:
 // get data from ActionForm1 needed to look up addresses
 AddressLookupInfo info = getAddressInfoFromActionForm1(AF1);
 // lookup addresses
 List res = AddressLookup.getAddresses(info);
  ...
Then your module can still be generic.
  

   

I could take the necessary information from AF1 to some


 

POJO (or bean)
  

   

on model level (or controller level) and transfer it to


 

AF2. This is
  

   

probably the cleanest solution but means to split each


 

action

AW: AW: using multiple action forms in one action. Best practice?

2004-11-16 Thread Martin Kindler
Hi Bill,

so you say, it is good practice to use the two forms in one action as I do
in my current solution? Sure, one has to hide the internals from AF1 to an
action primarily designed to use AF2 to keep the address module generic.
Perhaps I should make the calling ActionForms implement a specific
interface.
If I really want a fully generic address module I would have to split the
action(s) in two, simply because the actions designed for the address module
need a generic API. I cannot rely (for full genericity) on a calling
module to use AF1. In my current situation I will probably ignore this as it
is a straightforward refactoring which can be done when need occurs. 
As to the question request vs. session scope I understand the problems which
might occur using session scope.
I do not see a solution which would also fulfil the modularization
requirement.

Thanks!

Martin

 -Ursprüngliche Nachricht-
 Von: Bill Keese [mailto:[EMAIL PROTECTED] 
 Gesendet: Dienstag, 16. November 2004 02:10
 An: Struts Users Mailing List
 Betreff: Re: AW: using multiple action forms in one action. 
 Best practice?
 
 
 Hi Martin,
 
  From this JSP I want to access a (hopefully) generic module 
 to get the 
  access points. This module has to get some information (e. g. a 
  region to prefilter the addresses or access points already 
 existing) 
  from JSP1.
 
 I think you should  generate the input to the generic module, rather 
 than passing the ActionForm directly:
 
// get data from ActionForm1 needed to look up addresses
AddressLookupInfo info = getAddressInfoFromActionForm1(AF1);
 
// lookup addresses
List res = AddressLookup.getAddresses(info);
 ...
 
 Then your module can still be generic.
 
  I could take the necessary information from AF1 to some 
 POJO (or bean) 
  on model level (or controller level) and transfer it to 
 AF2. This is 
  probably the cleanest solution but means to split each 
 action into 
  two, just to do
  the data transfer.
   
 
 You shouldn't need to split each action into two.  Action1's 
 job is to 
 handle the input from ActionForm1, and then do the setup to display 
 JSP2, right?  So, just create the ActionForm2 manually inside Action1:
 
   // Create AF2 as an input/output form
   ActionForm2 af2 = new ActionForm2();
   session.setAttribute(actionForm2, af2);
 
   // ... and pre-populate it with the data the user has already input
   ActionForm1 af1 =
(ActionForm1) getActionForm(mapping, form, 
 request, session);
   af2.loadDataFromAF1(af1);
 
   // forward control to JSP2
   return (mapping.findForward(jsp2));
 
  My current solution simply accesses both action forms, AF1 and AF2
  (getting
  the one not available as the form-parameter by MyForm mf = 
  (MyForm)session.getAttribute(AFi);
  but my feeling is that this is not really good style.
   
 
 I guess it depends on whether you consider the two forms to represent 
 one logical command or two logical commands.
 
 The other thing to consider, though, is whether or not you 
 want to store 
 the ActionForms at session scope.   Session scope is 
 problematic because 
 you might end up accessing old data (if the user previously 
 quit in the 
 middle of a wizard).  Also, I imagine things would fail in a 
 distributed 
 application where the user's requests are randomly routed to multiple 
 servers.The alternative is to use request level scope, 
 but in this 
 case the information entered in Form#1 has to be embedded in 
 the output 
 of JSP2 as hidden HTML variables.
 
 Bill
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: AW: AW: using multiple action forms in one action. Best practice?

2004-11-16 Thread Bill Keese
It's hard for me to answer because I don't really understand your 
application.  JSP1 is for picking a region, and then JSP2 is for picking 
stores within that region, right? And then after picking the stores, you 
display a confirmation page with the map and the list of picked stores?

When you hit the save button on the confirmation page, the input to 
the SaveAction is both the selected region and the selected stores, 
right?  So you are combining the information entered on two previous forms.

If it was me, I would have 3 separate actions and 3 separate action-forms:
  1. select-region
  2. select-stores
  3. confirm-dialog
The confirm-dialog ActionForm would contain both the region information 
and the list of stores.  Thus I would only use one ActionForm per 
Action, and I wouldn't use session variables.

Bill
Martin Kindler wrote:
Hi Bill,
so you say, it is good practice to use the two forms in one action as I do
in my current solution? Sure, one has to hide the internals from AF1 to an
action primarily designed to use AF2 to keep the address module generic.
Perhaps I should make the calling ActionForms implement a specific
interface.
If I really want a fully generic address module I would have to split the
action(s) in two, simply because the actions designed for the address module
need a generic API. I cannot rely (for full genericity) on a calling
module to use AF1. In my current situation I will probably ignore this as it
is a straightforward refactoring which can be done when need occurs. 
As to the question request vs. session scope I understand the problems which
might occur using session scope.
I do not see a solution which would also fulfil the modularization
requirement.

Thanks!
Martin
 

-Ursprüngliche Nachricht-
Von: Bill Keese [mailto:[EMAIL PROTECTED] 
Gesendet: Dienstag, 16. November 2004 02:10
An: Struts Users Mailing List
Betreff: Re: AW: using multiple action forms in one action. 
Best practice?

Hi Martin,
   

From this JSP I want to access a (hopefully) generic module 
 

to get the 
   

access points. This module has to get some information (e. g. a 
region to prefilter the addresses or access points already 
 

existing) 
   

from JSP1.
 

I think you should  generate the input to the generic module, rather 
than passing the ActionForm directly:

  // get data from ActionForm1 needed to look up addresses
  AddressLookupInfo info = getAddressInfoFromActionForm1(AF1);
  // lookup addresses
  List res = AddressLookup.getAddresses(info);
   ...
Then your module can still be generic.
   

I could take the necessary information from AF1 to some 
 

POJO (or bean) 
   

on model level (or controller level) and transfer it to 
 

AF2. This is 
   

probably the cleanest solution but means to split each 
 

action into 
   

two, just to do
the data transfer.
 

You shouldn't need to split each action into two.  Action1's 
job is to 
handle the input from ActionForm1, and then do the setup to display 
JSP2, right?  So, just create the ActionForm2 manually inside Action1:

 // Create AF2 as an input/output form
 ActionForm2 af2 = new ActionForm2();
 session.setAttribute(actionForm2, af2);
 // ... and pre-populate it with the data the user has already input
 ActionForm1 af1 =
  (ActionForm1) getActionForm(mapping, form, 
request, session);
 af2.loadDataFromAF1(af1);

 // forward control to JSP2
 return (mapping.findForward(jsp2));
   

My current solution simply accesses both action forms, AF1 and AF2
(getting
the one not available as the form-parameter by MyForm mf = 
(MyForm)session.getAttribute(AFi);
but my feeling is that this is not really good style.

 

I guess it depends on whether you consider the two forms to represent 
one logical command or two logical commands.

The other thing to consider, though, is whether or not you 
want to store 
the ActionForms at session scope.   Session scope is 
problematic because 
you might end up accessing old data (if the user previously 
quit in the 
middle of a wizard).  Also, I imagine things would fail in a 
distributed 
application where the user's requests are randomly routed to multiple 
servers.The alternative is to use request level scope, 
but in this 
case the information entered in Form#1 has to be embedded in 
the output 
of JSP2 as hidden HTML variables.

Bill
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
   


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

 

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: AW: using multiple action forms in one action. Best practice?

2004-11-15 Thread Bill Keese
Hi Martin,
From this JSP I want to access a (hopefully) generic module to
get the access points. This module has to get some information (e. g. a
region to prefilter the addresses or access points already existing) from
JSP1.
I think you should  generate the input to the generic module, rather 
than passing the ActionForm directly:

   // get data from ActionForm1 needed to look up addresses
   AddressLookupInfo info = getAddressInfoFromActionForm1(AF1);
   // lookup addresses
   List res = AddressLookup.getAddresses(info);
...
Then your module can still be generic.
I could take the necessary information from AF1 to some POJO (or bean) on
model level (or controller level) and transfer it to AF2. This is probably
the cleanest solution but means to split each action into two, just to do
the data transfer.
 

You shouldn't need to split each action into two.  Action1's job is to 
handle the input from ActionForm1, and then do the setup to display 
JSP2, right?  So, just create the ActionForm2 manually inside Action1:

  // Create AF2 as an input/output form
  ActionForm2 af2 = new ActionForm2();
  session.setAttribute(actionForm2, af2);
  // ... and pre-populate it with the data the user has already input
  ActionForm1 af1 =
   (ActionForm1) getActionForm(mapping, form, request, session);
  af2.loadDataFromAF1(af1);
  // forward control to JSP2
  return (mapping.findForward(jsp2));
My current solution simply accesses both action forms, AF1 and AF2 (getting
the one not available as the form-parameter by 
MyForm mf = (MyForm)session.getAttribute(AFi);
but my feeling is that this is not really good style.
 

I guess it depends on whether you consider the two forms to represent 
one logical command or two logical commands.

The other thing to consider, though, is whether or not you want to store 
the ActionForms at session scope.   Session scope is problematic because 
you might end up accessing old data (if the user previously quit in the 
middle of a wizard).  Also, I imagine things would fail in a distributed 
application where the user's requests are randomly routed to multiple 
servers.The alternative is to use request level scope, but in this 
case the information entered in Form#1 has to be embedded in the output 
of JSP2 as hidden HTML variables.

Bill
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: AW: using multiple action forms in one action. Best practice?

2004-11-15 Thread Bill Keese
Hi Martin,
From this JSP I want to access a (hopefully) generic module to
get the access points. This module has to get some information (e. g. a
region to prefilter the addresses or access points already existing) from
JSP1.
I think you should  generate the input to the generic module, rather 
than passing the ActionForm directly:

  // get data from ActionForm1 needed to look up addresses
  AddressLookupInfo info = getAddressInfoFromActionForm1(AF1);
  // lookup addresses
  List res = AddressLookup.getAddresses(info);
   ...
Then your module can still be generic.
I could take the necessary information from AF1 to some POJO (or bean) on
model level (or controller level) and transfer it to AF2. This is 
probably
the cleanest solution but means to split each action into two, just 
to do
the data transfer.
 

You shouldn't need to split each action into two.  Action1's job is to 
handle the input from ActionForm1, and then do the setup to display 
JSP2, right?  So, just create the ActionForm2 manually inside Action1:

 // Create AF2 as an input/output form
 ActionForm2 af2 = new ActionForm2();
 session.setAttribute(actionForm2, af2);
 // ... and pre-populate it with the data the user has already input
 ActionForm1 af1 =
  (ActionForm1) getActionForm(mapping, form, request, session);
 af2.loadDataFromAF1(af1);
 // forward control to JSP2
 return (mapping.findForward(jsp2));
My current solution simply accesses both action forms, AF1 and AF2 
(getting
the one not available as the form-parameter by MyForm mf = 
(MyForm)session.getAttribute(AFi);
but my feeling is that this is not really good style.
 

I guess it depends on whether you consider the two forms to represent 
one logical command or two logical commands.

The other thing to consider, though, is whether or not you want to store 
the ActionForms at session scope.   Session scope is problematic because 
you might end up accessing old data (if the user previously quit in the 
middle of a wizard).  Also, I imagine things would fail in a distributed 
application where the user's requests are randomly routed to multiple 
servers.The alternative is to use request level scope, but in this 
case the information entered in Form#1 has to be embedded in the output 
of JSP2 as hidden HTML variables.

Bill
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: using multiple action forms in one action. Best practice?

2004-11-14 Thread Bill Keese
Martin Kindler wrote:
in my application I have a rather complex object to deal with. I have split
the process in several jsps (JSP1, ..., JSPn) using different ActionForms
(AF1, ..., AFm)...
2. merge all ActionForms to one big mega ActionForm
Pro: works
Con: no modularization; if I need to use one (partial) ActionForm in another
place, I have to take everything or replicate the needed part
 

You are talking about a wizard, right?  IE, one logical form split over 
several JSP pages.  In that case, I think you should just use one 
ActionForm with the data from all the JSP pages.  I think the manual 
says something to the same effect.   You can either:

 1. make the ActionForm a session level form (see 
http://www.ajug.org/archive/ajug-members/10203/msg00066.html)
 2. (or) make the ActionForm request level, in which case all your JSP 
pages must have hiden fields representing the data that has already been 
input on the previous JSP pages.

I'm not sure how to do the forwarding from one JSP page to the next page 
(preserving the contents of the partially filled ActionForm).  Do you 
need to write a dummy Action for each JSP page,  or can you/should you 
forward directly from one JSP page to the next one, like this?  Try it 
out and let me know, if you can.

   action
   path=/wizardPage1
   name=wizardForm
   forward=/wizardPage2.jsp
   /action
   action
   path=/wizardPage2
   name=wizardForm
   forward=/wizardPage3.jsp
   /action
Bill
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


using multiple action forms in one action. Best practice?

2004-11-12 Thread Martin Kindler
Hi,

in my application I have a rather complex object to deal with. I have split
the process in several jsps (JSP1, ..., JSPn) using different ActionForms
(AF1, ..., AFm) with them. I need information collected in one JSPi (using
AFi) in another JSPj (using AFj). How can I access both Afi and Afj in one
action? Or, is it wise to do so?

I can imagine three possibilities:
1. really use both ActionForms (they have to be session scoped) in one
action. One being passed as parameter, the other fetched from the session
when needed.
Pro: easy to implement
Con: I do not know whether there is an official way to access the second one
(never found it mentioned somewhere)

2. merge all ActionForms to one big mega ActionForm
Pro: works
Con: no modularization; if I need to use one (partial) ActionForm in another
place, I have to take everything or replicate the needed part

3. split the action in two: the first one using AFi and storing the
interesting part in some shared buffer, the second reading the buffer and
populating AFj accordingly:
Pro: theoretically clean
Con: a lot of extra actions

What would you suggest?

Martin



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



using multiple action forms in one action. Best practice?

2004-11-12 Thread Martin Kindler
Hi,

in my application I have a rather complex object to deal with. I have split
the process in several jsps (JSP1, ..., JSPn) using different ActionForms
(AF1, ..., AFm) with them. I need information collected in one JSPi (using
AFi) in another JSPj (using AFj). How can I access both Afi and Afj in one
action? Or, is it wise to do so?

I can imagine three possibilities:
1. really use both ActionForms (they have to be session scoped) in one
action. One being passed as parameter, the other fetched from the session
when needed.
Pro: easy to implement
Con: I do not know whether there is an official way to access the second one
(never found it mentioned somewhere)

2. merge all ActionForms to one big mega ActionForm
Pro: works
Con: no modularization; if I need to use one (partial) ActionForm in another
place, I have to take everything or replicate the needed part

3. split the action in two: the first one using AFi and storing the
interesting part in some shared buffer, the second reading the buffer and
populating AFj accordingly:
Pro: theoretically clean
Con: a lot of extra actions

What would you suggest?

Martin



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]