One of my peers was talking to me about the pain he was having getting data from another system into UCM. I have done a lot of Java programming, so my thinking was to help out with a java solution. It works. Could this be done differently. Of course! I just picked one way that wouldn’t take up a lot of time. I did including a couple of third party libraries though.
In the first iteration, I was given a sample csv file, the expected result hda file, and a quick mapping of the metadata fields that were defined in the csv file. The initial idea was that each csv might have a different structure, so having a map file that listed which metadata fields were in the file would solve this. I said, “uh huh.” I left to code this. I put on my headphones and had this working in less than an hour.
I’m laughing because I didn’t give the code to my peer for another three or four hours. Seems simple. Just compile the code, and email a class, and two jar files. Should be simple. Not! Well, maybe it is, but I couldn’t get this to run outside of my development environment (A directory with several sub-directories for src, classes, libs, build, etc.). I kept getting a class not found error. I felt like the dumbest smart person for a while, which can happen a lot, just doesn’t last long in most cases. Well here, the feeling lasted a while. Honestly, I still don’t know what I was doing wrong. I already had a compiled class that worked fine in my ANT environment defined in the build.xml file. I finally created a jar file for the class, and added information in the manifest to point to the main class, and added the two jar files in the classpath. Now it works.
So on with the story.
I send over the three jar files and a quick command line call. With the Commons CLI, I setup the call to include three parameters, -csv, -src, and -out. I was sitting at my desk feeling great for about eight seconds, which was the time it took for my peer to walk over to my desk. Okay, maybe a minute, as he had to run the program before coming over to my desk.
The conversation kind of went like this. “You forgot to set this up to allow default values to be added. Also, there needs to be a way to add another metadata field that actually points to data in the csv file.”
Welcome to the life of a programmer.
On to the next iteration. I added the changes and the code works fine. Not exactly what was asked for, but it gets the job done. There may be another interation or two or three… But the bulk of the code is stable. The file is on the Downloads page. It is only about 130 lines of code, and most of that was for setting up for specific parameters in a specific format. Always those requirements – everything is in the details!
If anyone figures out or knows how to make this work with just the third party jars and the class file, please let me know. Must be something obvious!
You will need to download the commons CLI and opencsv libraries, and add these two jar files. Happy coding!