Wondering how to take advantage of Java and managed beans in XPages? To do this requires knowing how to store data in Java objects and a good understanding of maps, trees, lists, and sets. No, we're not talking about Google Maps or those big green things in forests, but different Java interfaces!
Come learn from Howard Greenberg of TLCC as he discusses different programming models to use when storing application configuration information, speeding up lookups to Domino data and feeding data to repeat and table controls. Learn how to build reports from different data sources. Plus, Howard will also look at working with dates and numbers in Java and Domino. Finally, he will review the Domino Java APIs and an alternative, the OpenNTF Domino API.
4. Teamstudio provides products that help
organizations with customized business
applications implement best practices, work
more efficiently, and prepare for the future.
AboutTeamstudio
6. 1
• Save hundreds and even Thousands of Dollars
on the most popular courses and packages:
XPages Development
Notes and Domino Development
Domino Administration
• Ends on September 30th
http://www.tlcc.com/fallsale
7. TLCC Development Services
• Let us help with your development needs
– Bootstrap
– Java
• Convert Notes Apps to mobile and the web!
• Modernize old Domino web applications
• Interface with backend data systems
• Skills transfer
2
8. Upcoming and Recorded Webinars
• October – Bootstrap Data Tables with Michael Smith
• November – TBD
• December – Application Modernization Options
www.tlcc.com/xpages-webinar
View Previous Webinars
(use url above)
9. Asking Questions – Q and A at the end
Use the Orange Arrow button to
expand the GoToWebinar panel
Then ask your questions in the
Questions pane!
We will answer your questions
verbally at the end of the
webinar
10. 5
Take a Trip Into the Forest - A Java Primer on
Maps, Trees, and Collections
11. Your Presenter Today – Howard Greenberg
• Certified Lotus Instructor since R3
• Co-founded TLCC in 1997
• IBM Champion
• Prior to that 12 years at IBM in the PC group
• Also…
– Certified Public Accountant
– Certified Information Systems Auditor (CISA)
– Certified Flight Instructor
6
12. Agenda
• Why Use Java Objects in Xpages?
• Introduction to Managed Beans
• Scoped Variables in SSJS
• Introduction to Maps
• The DataObject Implementation
• A Reporting Example
• Questions???
7
13. Why Use Java in XPages?
• Performance (see my recorded webinar)
• Reporting
– Easily combine data from different sources
• Portability
– Back end
– Front end
• Code Maintenance
• Lots of code/knowledge out there
8
14. Review - Managed Beans
• The XPages runtime manages the creation of your
“managed bean”
– Request, View, Session, or Application scope
• Refer to methods on your XPages or from other Java
code
• How to:
– Create an entry in the Faces-Config file
– Create your Java code
• Getters and Setters
• No argument constructor
• Don’t have to use Managed Beans!
9
SampleBean.java
SampleBeanDemo.xsp
15. Scoped Variables in SSJS
• sessionScope.testName
– read/write to a variable that is session scope
• Can store anything (string, Boolean, date, array, etc)
– Just don’t store Domino objects
• Why do we care???
– Scoped variables are stored as HashMaps
– Another way to access is:
• sessionScope.get(“testName”)
• sessionScope.put(“testName” , “A value”)
• Same as a Java Hash Map
– Let’s Learn more about these HashMaps!
10
16. Some Java Terms - Collections, Interfaces and implementations
• Collections is a Framework/root interface
– Architecture for representing collections
• Has Interfaces, Implementations, Algorithms
• Interfaces
– Abstract Data Type
– Defines a base used by all the classes that implement
• An interface in Java is similar to a class, but the body of
an interface can include only abstract methods and final fields
(constants). A class implements an interface by providing code for
each method declared by the interface.
• Implementations
– A class that uses an interface (we use this!)
11
22. Use Case: Configuration Data
• Goal
– Store configuration information
– Managed Bean with Application Scope
• Best choice is a HashMap
– Why? Back to the previous chart!
– Access values with a key
17
23. Working with Maps
• Creation
private HashMap<String,String> configData = new HashMap<String,
String>();
• Set a value
configData.put(key ,value);
• Get a value (and test to see if key is there)
public String getConfig(String key) {
String rtnString = "";
if (this.configData.containsKey(key)){
rtnString = this.configData.get(key);
}
return rtnString;
}
18
24. Steps
1. Notes view/form to hold configuration data
2. Create new Java Class
3. Add Managed Bean to faces-config
– Set scope as needed
4. Implement Serializable in the Java class
5. Create “private” variable for HashMap
6. Create constructor to initialize data
– Walk the view to load up the keys/values
7. Generate Getter/Setter
8. Use on XPage or in other Java code
19
ConfigBean.java
ConfigBeanDemo.xsp
25. More on HashMaps - Iterate through Map
• Get all the keys as a Set
– statesHashMap.keySet()
• Get all the values as a Set
– statesHashMap.values()
• Get the key and value as a Set
– statesHashMap.entrySet()
• Get the key with getKey() and the value with
getValue()
20
for (Entry<String, String> state :statesHashMap.entrySet()){
myString = state.getValue() + "|" + state.getKey() ;
debugMsg(myString);
}
26. LinkedHashMap
• A HashMap does not keep the insertion order (random)
• Need to keeps insertion order? LinkedHashMap
• Good when loading data from a Notes view (that is
ordered already)
– Keeps same (insertion) order
• Otherwise basically the same as HashMap
21
27. ArrayLists
• A list of objects (like an Array)
– Hold any data type/object
– Can search the values
– Can access an element in a certain position
• Perfect for feeding to:
– Values in a combo box, list box, etc.
– Repeats
– Data Tables
• To add at end:
– rtnList.add(stateLine);
22
28. Use Case: Return values to a Combo Box
• Stop doing @DbColumns
– Slow!
• Load values from a view, store in memory
– FAST!
• Use Expression Language
– configBean.statesHashMap
• Use same ConfigBean as before (application scope)
– Method in Java is getStatesHashMap()
– Returns a List
23
ConfigBean.java
ConfigBeanDemo.xsp
29. Time Out for a Message!
• Do you Recycle?
– View looping
– NotesDateTime?
– columnValues with a Date creates NotesDateTime objects
• Instead use the Domino API
– Simpler code patterns
– Never have to worry about recycle
– Try/Catch block not required
– Support for logging
– Lots of cool new stuff
• Available on OpenNTF – Link to version 3
– Get help via Slack/Stack Overflow
24
31. Code Comparison – The Domino API Way
26
private void initBean(Database curDb, String viewName) {
View setupVw = curDb.getView(viewName);
String key = "";
String value = "";
if (setupVw != null) {
for (ViewEntry entryDoc : setupVw.getAllEntries()){
Vector<?> colValues = entryDoc.getColumnValues();
key = (String) colValues.elementAt(0);
value = (String) colValues.elementAt(1);
this.configData.put(key , value);
}
}
}
No Recycle!
Uses a for loop
No Try/Catch block
ConfigBean2.java
DomAPIDemo.xsp
32. Ordered Lists
• Use Case
– Get a list of values always sorted by the value
• “Natural” sort order
– No duplicates
• TreeSet!
• Good for looping through a view, getting a value
from a column
– Add to TreeSet and then you always have a
sorted, unique list
27
TreeSetBean.java
TreeSetBeanDemo.xsp
33. Custom Sorting of a TreeSet
• Suppose you don’t want the “natural” order???
– Use a custom sort when defining the TreeSet
– Comparator function
– Will always sort using this new sort definition
28
public List<String> getArizonaTownsReversed() {
TreeSet<String> sorted = new TreeSet<String>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
sorted.addAll(ArizonaTowns);
return new ArrayList<String>(sorted);
}
TreeSetBean.java
TreeSetBeanDemo.xsp
34. Add all the towns in all the states in one object?
• Use a TreeMap
– Key,Value pair
• In this case, a state is the key, a list of towns
(TreeSet) is the value
– Sorted on the Key value, natural order
29
35. DataObject
• Way to implement an interface that works well
with the Expression Language
– Any data type
– Must implement certain methods
30
DataObjectBean.java
DataObjectBeanDemo.xsp
36. Filtering and Sorting
• Goal is to store information in the bean to allow fast
filtering and sorting
• Base storage is a LinkedHashMap
– Key is the city name
– Values are an ArrayList
• The ArrayList holds a Person object
–First and last name, city, state, email, etc.
–Universal doc id to retrieve Notes document
31
38. More on Filtering and Sorting
• Methods of the Bean are used to:
– Return data as an ArrayList to a Repeat
• Sorted (last name, city, email)
• Filter on a city or show all
– Switch to a different state
– Get the cities for the selected state (unique, ordered)
– Store information like:
• City filter
• Desired sorting
• Ascending or Descending sorting
33
ReportBean.java
ReportBeanDemo.xsp
39. Homework and Resources
• TLCC’s Java Classes (two)
http://www.tlcc.com/admin/tlccsite.nsf/coursedetails.xsp?ccode=ND9XJVKPG
• My Session on Xpages Performance (recorded)
– October, 2015
http://www.tlcc.com/admin/tlccsite.nsf/pages/recorded-xpages-
webinars?opendocument
• List of Collections with a summary of features
– http://www.janeve.me/articles/which-java-collection-to-use
• The Sun Java documentation (version 6, aka 1.6)
• StackOverflow
• Google!!!
34
40. 35
Email: howardg@tlcc.com
Twitter: @TLCCLtd
Web: www.tlcc.com
Special Offer!!!
Save 20% (5% on sale items) on any TLCC course or
package until 9/30
To take advantage of this offer or to download the demonstration databases
www.tlcc.com/mwlug
41. Questions????
Use the Orange Arrow button to
expand the GoToWebinar panel
Then ask your questions in the
Questions panel!
Remember, we will answer your
questions verbally
42. #XPages
@TLCCLtd
@Teamstudio
@PaulDN
Upcoming Events:
ICON UK, London – Sept. 15th and 16th
Connect 2017 in San Francisco, CA – Feb. 20th to 23rd
Question and Answer Time!
Teamstudio Questions?
contactus@teamstudio.com
978-712-0924
TLCC Questions?
howardg@tlcc.com paul@tlcc.com
888-241-8522 or 561-953-0095
Howard Greenberg
Courtney Carter
Paul Della-Nebbia
Save on TLCC Training with the Fall Sale!