Design decisions
The library is divided into several packages:
- core sends request and sets response
- profile represents PayPal user.
- request represents a single PayPal request.
- fields represnts fields which are/can be used in a request.
- util helper class (validation, formatting).
To add new request, implement Request
interface.
To create a new field, implement RequestFields
interface. The same is with the rest - code to interface.
To use the library, we need to create user/profile first.
We can use BaseProfile
class, or if you need
more complexity, you can implement Profile
interface and create new class.
BaseProfile
class uses
Joshua's Bloch
Builder pattern from his book
Effective Java.
This way it is thread safe and immutable.
Profile user = new BaseProfile.Builder("name", "password").signature("AfcWX...").build();
Then, instanciate PayPal
class with the new
profile/user
PayPal pp = new PayPal(user, Environment.SANDBOX);
Now, it is ready for sending requests and setting responses.
/* create new request */ GetBalance balance = new Balance(); /* send request and set response */ pp.setResponse(balance);
PayPal class does NOT have send
method, but it HAS
setResponse
method, which sets response on
supplied Request
object. This way, the request and
response are together in the appropriate object, in this case
inside balance
object.
Every Request
instance has:
getNVPRequest
method, which returns
Map
of Strings - name value pair request to be sent
to PayPal;
setNVPResponse
method, which is used by
PayPal
instance to set response from PayPal; and
getNVPResponse
method, which returns empty
Map
if request has not been sent or no reponse has
been returned. This way every request knows its request
parameters and response paramenters.
/* response */
Map<String, String> response = balance.getNVPResponse();