Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Take aTrip into the Forest:A Java Primer on
Maps,Trees, and Collections
Sep. 8, 2016
This webinar is brought to you as part of the
free monthly webinar series from:
Howard Greenberg
@TLCC
Paul Della-Nebbia
@PaulDN
Courtney Carter
@Teamstudio
Teamstudio provides products that help
organizations with customized business
applications implement best practices, work
...
https://www.teamstudio.com/
1
• Save hundreds and even Thousands of Dollars
on the most popular courses and packages:
XPages Development
Notes and D...
TLCC Development Services
• Let us help with your development needs
– Bootstrap
– Java
• Convert Notes Apps to mobile and ...
Upcoming and Recorded Webinars
• October – Bootstrap Data Tables with Michael Smith
• November – TBD
• December – Applicat...
Asking Questions – Q and A at the end
Use the Orange Arrow button to
expand the GoToWebinar panel
Then ask your questions ...
5
Take a Trip Into the Forest - A Java Primer on
Maps, Trees, and Collections
Your Presenter Today – Howard Greenberg
• Certified Lotus Instructor since R3
• Co-founded TLCC in 1997
• IBM Champion
• P...
Agenda
• Why Use Java Objects in Xpages?
• Introduction to Managed Beans
• Scoped Variables in SSJS
• Introduction to Maps...
Why Use Java in XPages?
• Performance (see my recorded webinar)
• Reporting
– Easily combine data from different sources
•...
Review - Managed Beans
• The XPages runtime manages the creation of your
“managed bean”
– Request, View, Session, or Appli...
Scoped Variables in SSJS
• sessionScope.testName
– read/write to a variable that is session scope
• Can store anything (st...
Some Java Terms - Collections, Interfaces and implementations
• Collections is a Framework/root interface
– Architecture f...
Collections Interface
12
Map Interface
13
Java HashMap Documentation
14
Java documentation on HashMap
Some Different Collection Implementations
• Set, SortedSet
– No duplicate elements
• HashSet, TreeSet, LinkedHashSet
• Lis...
Which one do I use?
16
Use Case: Configuration Data
• Goal
– Store configuration information
– Managed Bean with Application Scope
• Best choice ...
Working with Maps
• Creation
private HashMap<String,String> configData = new HashMap<String,
String>();
• Set a value
conf...
Steps
1. Notes view/form to hold configuration data
2. Create new Java Class
3. Add Managed Bean to faces-config
– Set sco...
More on HashMaps - Iterate through Map
• Get all the keys as a Set
– statesHashMap.keySet()
• Get all the values as a Set
...
LinkedHashMap
• A HashMap does not keep the insertion order (random)
• Need to keeps insertion order?  LinkedHashMap
• Go...
ArrayLists
• A list of objects (like an Array)
– Hold any data type/object
– Can search the values
– Can access an element...
Use Case: Return values to a Combo Box
• Stop doing @DbColumns
– Slow!
• Load values from a view, store in memory
– FAST!
...
Time Out for a Message!
• Do you Recycle?
– View looping
– NotesDateTime?
– columnValues with a Date creates NotesDateTime...
Code Comparison – The Old Way
25
private void initBean(Database curDb, String viewName) {
try {
View setupVw = curDb.getVi...
Code Comparison – The Domino API Way
26
private void initBean(Database curDb, String viewName) {
View setupVw = curDb.getV...
Ordered Lists
• Use Case
– Get a list of values always sorted by the value
• “Natural” sort order
– No duplicates
• TreeSe...
Custom Sorting of a TreeSet
• Suppose you don’t want the “natural” order???
– Use a custom sort when defining the TreeSet
...
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 ...
DataObject
• Way to implement an interface that works well
with the Expression Language
– Any data type
– Must implement c...
Filtering and Sorting
• Goal is to store information in the bean to allow fast
filtering and sorting
• Base storage is a L...
Data Model
32
Houston
LinkedHashMap<String,ArrayList
<Person>> customers
Key is City Name
Lorie Mason
Brad Hunt
Jessie Lan...
More on Filtering and Sorting
• Methods of the Bean are used to:
– Return data as an ArrayList to a Repeat
• Sorted (last ...
Homework and Resources
• TLCC’s Java Classes (two)
http://www.tlcc.com/admin/tlccsite.nsf/coursedetails.xsp?ccode=ND9XJVKP...
35
 Email: howardg@tlcc.com
 Twitter: @TLCCLtd
 Web: www.tlcc.com
Special Offer!!!
Save 20% (5% on sale items) on any T...
Questions????
Use the Orange Arrow button to
expand the GoToWebinar panel
Then ask your questions in the
Questions panel!
...
#XPages
@TLCCLtd
@Teamstudio
@PaulDN
Upcoming Events:
 ICON UK, London – Sept. 15th and 16th
 Connect 2017 in San Franci...
Upcoming SlideShare
Loading in …5
×

Take a Trip Into the Forest: A Java Primer on Maps, Trees, and Collections

400 views

Published on

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.

Published in: Technology
  • Be the first to comment

Take a Trip Into the Forest: A Java Primer on Maps, Trees, and Collections

  1. 1. Take aTrip into the Forest:A Java Primer on Maps,Trees, and Collections Sep. 8, 2016
  2. 2. This webinar is brought to you as part of the free monthly webinar series from:
  3. 3. Howard Greenberg @TLCC Paul Della-Nebbia @PaulDN Courtney Carter @Teamstudio
  4. 4. Teamstudio provides products that help organizations with customized business applications implement best practices, work more efficiently, and prepare for the future. AboutTeamstudio
  5. 5. https://www.teamstudio.com/
  6. 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. 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. 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. 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. 10. 5 Take a Trip Into the Forest - A Java Primer on Maps, Trees, and Collections
  11. 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. 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. 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. 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. 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. 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
  17. 17. Collections Interface 12
  18. 18. Map Interface 13
  19. 19. Java HashMap Documentation 14 Java documentation on HashMap
  20. 20. Some Different Collection Implementations • Set, SortedSet – No duplicate elements • HashSet, TreeSet, LinkedHashSet • List – Allows duplicates – Ordered • ArrayList, LinkedList • Map, SortedMap – Key/Value pairs • HashMap, LinkedHashMap, TreeMap 15
  21. 21. Which one do I use? 16
  22. 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. 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. 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. 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. 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. 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. 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. 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
  30. 30. Code Comparison – The Old Way 25 private void initBean(Database curDb, String viewName) { try { View setupVw = curDb.getView(viewName); String key = ""; String value = ""; ViewEntry tempEntry; if (setupVw != null) { ViewEntryCollection vwEntryCol = setupVw.getAllEntries(); ViewEntry entryDoc = vwEntryCol.getFirstEntry(); while (entryDoc != null){ Vector<?> colValues = entryDoc.getColumnValues(); key = (String) colValues.elementAt(0); value = (String) colValues.elementAt(1); this.configData.put(key , value); tempEntry = vwEntryCol.getNextEntry(entryDoc); entryDoc.recycle(); entryDoc = tempEntry; } } } catch (Exception e) { e.printStackTrace(); } }
  31. 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. 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. 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. 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. 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. 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
  37. 37. Data Model 32 Houston LinkedHashMap<String,ArrayList <Person>> customers Key is City Name Lorie Mason Brad Hunt Jessie Lang Mark Travis firstName lastName City State eMail Notes ID DocUNID Person ObjectDallas Austin ArrayList<Person> The customers HashMap stores all the people from a selected state
  38. 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. 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. 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. 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. 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!

×