SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
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
more efficiently, and prepare for the future.
AboutTeamstudio
https://www.teamstudio.com/
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
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
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)
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
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
• Prior to that 12 years at IBM in the PC group
• Also…
– Certified Public Accountant
– Certified Information Systems Auditor (CISA)
– Certified Flight Instructor
6
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
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
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
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
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
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
• List
– Allows duplicates
– Ordered
• ArrayList, LinkedList
• Map, SortedMap
– Key/Value pairs
• HashMap, LinkedHashMap, TreeMap
15
Which one do I use?
16
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
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
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
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);
}
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
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
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
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
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();
}
}
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
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
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
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
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
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
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
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
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
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
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
#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!

Más contenido relacionado

La actualidad más candente

Gaelyk - SpringOne2GX - 2010 - Guillaume Laforge
Gaelyk - SpringOne2GX - 2010 - Guillaume LaforgeGaelyk - SpringOne2GX - 2010 - Guillaume Laforge
Gaelyk - SpringOne2GX - 2010 - Guillaume Laforge
Guillaume Laforge
 
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
Stephan H. Wissel
 
Plain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsPlain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticals
Angela Byron
 

La actualidad más candente (20)

The Grid the Brad and the Ugly: Using Grids to Improve Your Applications
The Grid the Brad and the Ugly: Using Grids to Improve Your ApplicationsThe Grid the Brad and the Ugly: Using Grids to Improve Your Applications
The Grid the Brad and the Ugly: Using Grids to Improve Your Applications
 
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
Uno! Deux! Three! Making Localization of XPages as Easy as 1-2-3
 
Eureka Moment UKLUG
Eureka Moment UKLUGEureka Moment UKLUG
Eureka Moment UKLUG
 
S.M.A.R.T. Biml - Standardize, Model, Automate, Reuse and Transform (SQLSatur...
S.M.A.R.T. Biml - Standardize, Model, Automate, Reuse and Transform (SQLSatur...S.M.A.R.T. Biml - Standardize, Model, Automate, Reuse and Transform (SQLSatur...
S.M.A.R.T. Biml - Standardize, Model, Automate, Reuse and Transform (SQLSatur...
 
Gaelyk - SpringOne2GX - 2010 - Guillaume Laforge
Gaelyk - SpringOne2GX - 2010 - Guillaume LaforgeGaelyk - SpringOne2GX - 2010 - Guillaume Laforge
Gaelyk - SpringOne2GX - 2010 - Guillaume Laforge
 
 Active Storage - Modern File Storage? 
 Active Storage - Modern File Storage?  Active Storage - Modern File Storage? 
 Active Storage - Modern File Storage? 
 
Microsoft SQL Server Query Tuning
Microsoft SQL Server Query TuningMicrosoft SQL Server Query Tuning
Microsoft SQL Server Query Tuning
 
Social Connections 2015 CrossWorlds and Domino
Social Connections 2015 CrossWorlds and DominoSocial Connections 2015 CrossWorlds and Domino
Social Connections 2015 CrossWorlds and Domino
 
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
SHOW107: The DataSource Session: Take XPages data boldly where no XPages data...
 
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next LevelMWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
 
Getting started with rails active storage wae
Getting started with rails active storage waeGetting started with rails active storage wae
Getting started with rails active storage wae
 
Plone pas.plugins.ldap user/group search
Plone pas.plugins.ldap user/group searchPlone pas.plugins.ldap user/group search
Plone pas.plugins.ldap user/group search
 
7 Stages of Scaling Web Applications
7 Stages of Scaling Web Applications7 Stages of Scaling Web Applications
7 Stages of Scaling Web Applications
 
Plain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsPlain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticals
 
A Notes Developer's Journey into Java
A Notes Developer's Journey into JavaA Notes Developer's Journey into Java
A Notes Developer's Journey into Java
 
Hibernate performance tuning
Hibernate performance tuningHibernate performance tuning
Hibernate performance tuning
 
Essbase Statistics DW: How to Automatically Administrate Essbase Using ODI
Essbase Statistics DW: How to Automatically Administrate Essbase Using ODIEssbase Statistics DW: How to Automatically Administrate Essbase Using ODI
Essbase Statistics DW: How to Automatically Administrate Essbase Using ODI
 
Eureka moment
Eureka momentEureka moment
Eureka moment
 
Advanced Zen
Advanced ZenAdvanced Zen
Advanced Zen
 
Don't Repeat Yourself - Agile SSIS Development with Biml and BimlScript (SQL ...
Don't Repeat Yourself - Agile SSIS Development with Biml and BimlScript (SQL ...Don't Repeat Yourself - Agile SSIS Development with Biml and BimlScript (SQL ...
Don't Repeat Yourself - Agile SSIS Development with Biml and BimlScript (SQL ...
 

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

Cassandra
CassandraCassandra
Cassandra
exsuns
 
What's new in pandas and the SciPy stack for financial users
What's new in pandas and the SciPy stack for financial usersWhat's new in pandas and the SciPy stack for financial users
What's new in pandas and the SciPy stack for financial users
Wes McKinney
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)
Paul Chao
 
ZendCon2010 The Doctrine Project
ZendCon2010 The Doctrine ProjectZendCon2010 The Doctrine Project
ZendCon2010 The Doctrine Project
Jonathan Wage
 
Things you can find in the plan cache
Things you can find in the plan cacheThings you can find in the plan cache
Things you can find in the plan cache
sqlserver.co.il
 
Entity Framework: Code First and Magic Unicorns
Entity Framework: Code First and Magic UnicornsEntity Framework: Code First and Magic Unicorns
Entity Framework: Code First and Magic Unicorns
Richie Rump
 

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

MWLUG Session- AD112 - Take a Trip Into the Forest - A Java Primer on Maps, ...
MWLUG Session-  AD112 - Take a Trip Into the Forest - A Java Primer on Maps, ...MWLUG Session-  AD112 - Take a Trip Into the Forest - A Java Primer on Maps, ...
MWLUG Session- AD112 - Take a Trip Into the Forest - A Java Primer on Maps, ...
 
Java SE 8 - New Features
Java SE 8 - New FeaturesJava SE 8 - New Features
Java SE 8 - New Features
 
Cassandra
CassandraCassandra
Cassandra
 
Skillwise - Enhancing dotnet app
Skillwise - Enhancing dotnet appSkillwise - Enhancing dotnet app
Skillwise - Enhancing dotnet app
 
Data mining with Weka
Data mining with WekaData mining with Weka
Data mining with Weka
 
2. Lecture2_NOSQL_KeyValue.ppt
2. Lecture2_NOSQL_KeyValue.ppt2. Lecture2_NOSQL_KeyValue.ppt
2. Lecture2_NOSQL_KeyValue.ppt
 
What's new in pandas and the SciPy stack for financial users
What's new in pandas and the SciPy stack for financial usersWhat's new in pandas and the SciPy stack for financial users
What's new in pandas and the SciPy stack for financial users
 
Scaling Web Applications with Cassandra Presentation.ppt
Scaling Web Applications with Cassandra Presentation.pptScaling Web Applications with Cassandra Presentation.ppt
Scaling Web Applications with Cassandra Presentation.ppt
 
AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)AI與大數據數據處理 Spark實戰(20171216)
AI與大數據數據處理 Spark實戰(20171216)
 
ZendCon2010 The Doctrine Project
ZendCon2010 The Doctrine ProjectZendCon2010 The Doctrine Project
ZendCon2010 The Doctrine Project
 
Where to save my data, for devs!
Where to save my data, for devs!Where to save my data, for devs!
Where to save my data, for devs!
 
Emerging technologies /frameworks in Big Data
Emerging technologies /frameworks in Big DataEmerging technologies /frameworks in Big Data
Emerging technologies /frameworks in Big Data
 
mongodb-aggregation-may-2012
mongodb-aggregation-may-2012mongodb-aggregation-may-2012
mongodb-aggregation-may-2012
 
Building a Complex, Real-Time Data Management Application
Building a Complex, Real-Time Data Management ApplicationBuilding a Complex, Real-Time Data Management Application
Building a Complex, Real-Time Data Management Application
 
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 TaipeiPostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
PostgreSQL 9.4, 9.5 and Beyond @ COSCUP 2015 Taipei
 
Things you can find in the plan cache
Things you can find in the plan cacheThings you can find in the plan cache
Things you can find in the plan cache
 
Jdbc Java Programming
Jdbc Java ProgrammingJdbc Java Programming
Jdbc Java Programming
 
MongoDB's New Aggregation framework
MongoDB's New Aggregation frameworkMongoDB's New Aggregation framework
MongoDB's New Aggregation framework
 
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
dotNet Miami - June 21, 2012: Richie Rump: Entity Framework: Code First and M...
 
Entity Framework: Code First and Magic Unicorns
Entity Framework: Code First and Magic UnicornsEntity Framework: Code First and Magic Unicorns
Entity Framework: Code First and Magic Unicorns
 

Más de Teamstudio

Más de Teamstudio (20)

Search Terms and Design Complexity: A Tutorial Before Modernizing or Migrating
Search Terms and Design Complexity: A Tutorial Before Modernizing or MigratingSearch Terms and Design Complexity: A Tutorial Before Modernizing or Migrating
Search Terms and Design Complexity: A Tutorial Before Modernizing or Migrating
 
SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!SmartNSF - 100% Smart - and in Color!
SmartNSF - 100% Smart - and in Color!
 
Back from the Dead: When Bad Code Kills a Good Server
Back from the Dead: When Bad Code Kills a Good ServerBack from the Dead: When Bad Code Kills a Good Server
Back from the Dead: When Bad Code Kills a Good Server
 
Understand Usage with Detailed Access Information
Understand Usage with Detailed Access InformationUnderstand Usage with Detailed Access Information
Understand Usage with Detailed Access Information
 
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
IBM Presents the Notes Domino Roadmap and a Deep Dive into Feature Pack 8
 
IBM Presents the IBM Notes and Domino Roadmap
IBM Presents the IBM Notes and Domino RoadmapIBM Presents the IBM Notes and Domino Roadmap
IBM Presents the IBM Notes and Domino Roadmap
 
Expanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate UsabilityExpanding XPages with Bootstrap Plugins for Ultimate Usability
Expanding XPages with Bootstrap Plugins for Ultimate Usability
 
Optimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep DiveOptimus XPages Part 2: The Deep Dive
Optimus XPages Part 2: The Deep Dive
 
Getting Started with the OpenNTF Domino API
Getting Started with the OpenNTF Domino APIGetting Started with the OpenNTF Domino API
Getting Started with the OpenNTF Domino API
 
Understand the True Business Usage of Notes Applications with Usage Auditor
Understand the True Business Usage of Notes Applications with Usage AuditorUnderstand the True Business Usage of Notes Applications with Usage Auditor
Understand the True Business Usage of Notes Applications with Usage Auditor
 
Optimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best PracticesOptimus XPages: An Explosion of Techniques and Best Practices
Optimus XPages: An Explosion of Techniques and Best Practices
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPages
 
Using Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino AppsUsing Cool New Frameworks in (Mobile) Domino Apps
Using Cool New Frameworks in (Mobile) Domino Apps
 
Ask the XPages Experts
Ask the XPages ExpertsAsk the XPages Experts
Ask the XPages Experts
 
Everything XControls
Everything XControlsEverything XControls
Everything XControls
 
Move Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast LaneMove Your XPages Applications to the Fast Lane
Move Your XPages Applications to the Fast Lane
 
An Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller PatternAn Introduction to the Model-View-Controller Pattern
An Introduction to the Model-View-Controller Pattern
 
Mobilisez vos Applications IBM Notes avec Teamstudio Unplugged ! (French Lang...
Mobilisez vos Applications IBM Notes avec Teamstudio Unplugged ! (French Lang...Mobilisez vos Applications IBM Notes avec Teamstudio Unplugged ! (French Lang...
Mobilisez vos Applications IBM Notes avec Teamstudio Unplugged ! (French Lang...
 
Domino, Notes, and Verse - Where are We and Whats the Future?
Domino, Notes, and Verse - Where are We and Whats the Future?Domino, Notes, and Verse - Where are We and Whats the Future?
Domino, Notes, and Verse - Where are We and Whats the Future?
 
App.Next - The Future of Domino Application Development
App.Next - The Future of Domino Application DevelopmentApp.Next - The Future of Domino Application Development
App.Next - The Future of Domino Application Development
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Último (20)

What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

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

  • 1. Take aTrip into the Forest:A Java Primer on Maps,Trees, and Collections Sep. 8, 2016
  • 2. This webinar is brought to you as part of the free monthly webinar series from:
  • 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
  • 19. Java HashMap Documentation 14 Java documentation on HashMap
  • 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. Which one do I use? 16
  • 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
  • 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. 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
  • 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. 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!