Skip to main content

Posts

Project in Review - Part 1: Lessons learned

At this point, I think it's fair to call my project a success. So while everything is fresh in my mind, I want to get down things I felt worked very well for me, and things I felt did not, and lessons learned along the way. This is mainly for myself, but if anyone else learns anything, so much the better. Lessons learned the hard way MVC: So trying to adopt MVC was a challenge. It was the first time I'd done it, though I'd read enough I was familiar with the ideas, and I had many mis-starts along the way - some of which got corrected and some didn't. In fact, I could write a whole series of blog posts on lessons learned here - and most of them come from a lot of reading on Java. But if I had to refine it to a single idea, it's "keep your concept clear". I spent a lot of time trying to shoehorn everything into my model classes and I wasn't really clear what belonged in the controller except as something between the model and the front end - which se...

Killing SSJS - Passing a parameter using Expression Language - Part 3

Quick, but important, footnote to this series. I discovered some serialization problems related to this technique due to the GetMap being transient. The fix is to replace this: transient private GetMap<boolean> readOnlyGetter = new GetMap<boolean>() { @Override public Boolean get(final Object key) { if(null==unid || !(unid instanceof String)){ throw new IllegalArgumentException(); } return isReadOnly(key); } public GetMap<boolean> getReadOnly() { return readOnlyGetter; } with this: public GetMap<boolean> getReadOnly() { readOnlyGetter = new GetMap<boolean>() { @Override public Boolean get(final Object key) { if(null==unid || !(unid instanceof String)){ throw new IllegalArgumentException(); } return isReadOnly(key); } return readOnlyGetter; }

XPages Application Framework (Part 2 of ?)

In my last post, I offered a very rough overview of the framework I've been building and adapting. Full credit where it's due, I've been borrowing and adapting from Jesse Gallagher's XPages Scaffolding - an awesome project that I've learned a great deal dissecting. This is one of those projects that, if you make the effort to truly understand it, will give you entirely new tools and approaches for problems. As usual, I've learned the most changin g things and breaking them. My project differ s f rom Jesse's mostly in that it supports 8.5.3 and doesn't require any relaxed security permissions - bec ause I'm on 8.5.3 and because the admins h ere will not grant any relaxed permissions.

Killing SSJS - Passing a parameter using Expression Language - Part 2

In part 1, I showed how you can expand the DataObject implementation to allow you to pass a parameter to a method and return the result. It's not a perfectly elegant solution, and it has some limitations, but it's a very solid technique and not at all difficult to implement or maintain. But I kept running into roadblocks. What if I have to compute part of the expression? What if I have to get a value based on another parameterized getter? You can't compute part of an EL expression in your EL. So after some research and experimentation, I created the GetMap. This isn't a new concept - it was developed for JSF 1.1 (which is what XPages is built on) but the rest of the world has moved on to JSF 2.0 and so some of these older techniques can be a little tricky to unearth since this hasn't been an issue in the JSF world for years.

XPages Application Framework (Part 1?)

Note: I changed projects and priorities after my last POI article, resulting in a long hiatus. I anticipate using that framework on my current project and will likely refine and complete my related article series. For the past several months, I've been fortunate enough to lead a project overhaul from traditional Domino Webapp to XPages. I had a few goals in mind, but the top three were integrating Bootstrap, embracing MVC principles, and eliminating all SSJS . I imagine the motivation for Bootstrap integration is self-explanatory. There is an OpenNTF project out there called Bootstrap4XPages. I didn't use that for a number of reasons - the main being a policy in the current environment. But you may ask yourself (if you didn't follow that link), why so much hatred for SSJS? I have a litany of reasons. It impacts readability of the XPage source; it hurts maintainability when logic is scattered across dozens of XPages, custom controls, and script libraries; it mixes log...

POI Spreadsheet Manager - Part 3

Between the holidays and some deadline pressure, it's taken longer to get to this than I'd like. But at last, here it is. This is my CellStyleManager and CellStyles enum. public class CellStyleManager {     public static final int BORDERLOC_NONE = 0;     public static final int BORDERLOC_TOP = 1;     public static final int BORDERLOC_BOTTOM = 2;     public static final int BORDERLOC_LEFT = 4;     public static final int BORDERLOC_RIGHT = 8;     public static final int BORDERLOC_ALL = BORDERLOC_BOTTOM | BORDERLOC_TOP | BORDERLOC_LEFT | BORDERLOC_RIGHT;     public static final int BORDERLOC_SIDES = BORDERLOC_LEFT | BORDERLOC_RIGHT;     public static final int BORDERLOC_TB = BORDERLOC_TOP | BORDERLOC_BOTTOM;     private final Workbook wb;     private final Map<cellstyles cellstyle=""> styleMap;     private final FontManag...