Date post: | 09-Jan-2017 |
Category: |
Technology |
Upload: | teamstudio |
View: | 217 times |
Download: | 0 times |
Teamstudio provides products that help organizations with customized business
applications implement best practices, work more efficiently, and prepare for the future.
About Teamstudio
1
• Save hundreds and even Thousands of Dollars on the most popular courses and packages:XPages DevelopmentNotes and Domino DevelopmentDomino 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
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.javaSampleBeanDemo.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
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
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
• Creationprivate HashMap<String,String> configData = new HashMap<String, String>();
• Set a valueconfigData.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.javaConfigBeanDemo.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.javaConfigBeanDemo.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 loopNo Try/Catch block
ConfigBean2.javaDomAPIDemo.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.javaTreeSetBeanDemo.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.javaTreeSetBeanDemo.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.javaDataObjectBeanDemo.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
firstNamelastNameCityStateeMailNotes IDDocUNID
Person ObjectDallas
Austin
ArrayList<Person>
The customers HashMapstores 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.javaReportBeanDemo.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, 2015http://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: [email protected] 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 [email protected]
978-712-0924
TLCC [email protected] [email protected]
888-241-8522 or 561-953-0095
Howard Greenberg
Courtney Carter
Paul Della-Nebbia
Save on TLCC Training with the Fall Sale!