Posted on by & filed under Content - Highlights and Reviews.

We received our fourth LEARN SOMETHING NEW TEAM CHALLENGE submission. Thank you for participating, Joseph and David.

The team will post updates in the comments section of this post so please check back regularly to hear how this Property Management System project is coming along.

Here are the details so far.

PROJECT DETAILS

Project Name: Property Management System

Current Situation or Problem: In July 2009 I left full time employment to start my company Lincore. My background is a C developer, but over the years I moved into project management. I now find myself having (I mean enjoying) to re-skill and become a hand on developer again. In addition I have chosen to switch to java and opensource databases and operating systems. I have now secured some client work to develop a multi-teir application for the real estate lettings industry and have chosen to use the netbeans RCP framework and development tools to build the Desktop Client. I feel Like a beginner again, but I know I can access the learning resources I need to complete the project via safaribooksonline.

Purpose and Details of the Project: To develop a multi-teir application for the real estate lettings industry. The application requires to be modular and scalable using local databases and remote web services. I have chosen to use the netbeans RCP framework and development tools to build the Solution. leveraging Java 1.6, Swing, Hibernate, Mysql, REST & PHP. The initial cutdown version of application has begun, and we hope to complete in mid august 2010.

Roles of Members on the Team: Myself (J Bennie) Architect/ lead developer David Beer , Freelance Contractor, assisting with some POJO development.

Learning Objectives:
J Bennie – Learn netbeans, java, hibernate to a level that allows the application to be developed using the netbeans RCP framework. David Beer – Transition from the Eclipses RCP to Netbeans RCP and develop at least 1 custom swing component – a service Authorisation/Subscription/Login component.

Resources

 

   Book Title: 100 Netbeans IDE Tips & Tricks
Author: Ruth Kustererer
Publisher: Prentice Hall
   
Book Title: NETBeans IDE Field Guild: Developing Desktop, Web, Enterprise and mobile applications , second edition
Author: Patrick Keegan
Publisher: Prentice Hall
  Book Title: Rich Client Programming:Plugging into Netbeans Platform
Author: Tim Boudreau
Publisher: Prentice Hall
 

Due Date: August 14th 2010

Comments:  I have to deal with ever changing technology and without safari online I wouldn’t be able to keep pace with people on full training budgets. Then there is the diversity of my clients request, On monday past I needed to resolve a question on MS Exchange 2003 , a quick check of one of the titles and problem solved. I’ve never used Exchange before!

Tags: coder challenge, learn something new team challenge, property management system, Safari Books Online,

67 Responses to “4th Team Challenge Submission: Property Management System by Joseph & David”

  1. jbennie

    Hi All, being the first post, wanted to set out the project plan so you can benchmark were we are and what we are focusing on:

    Week 1: Has already gone, we were getting to grips with the TopComponent class and the basics of the Netbeans 6.9 IDE. The tutorials are at The Netbeans Quickstart Tutorials and should be the first stop if you are new. I recommend the CRUD (Create, Read, Update, Delete) tutorial for anyone looking to get a basic example of a vanilla database example. The tutorial used JPA, but I have a gut instinct that we should be using Hibernate? at this stage if you have any thoughts on the pros/cons please let me know. For Hibernate I also found this quick Start Guide on SafaribooksOnline Getting started with Hibernate I’ve still to read, I will let you know my thoughts in a day or to.

    Week 2: Now…. Well after filling my head with ideas and writing some POJO to hold the business logics I need to wire up the business logic to the GUI… It all looked very easy last week. I’ll give you more in the next post. I’m currently reading the Rich Client Programming book above and the ideas and concepts introduced in the netbeans tutorials are starting to make sense. I’m now starting to get my head around the Modules concepts and the Lookup Interfaces.

    Week 3: In theory we will have a working GUI, local storage via MYSQL and XML structures and some idea of how the business logic interacts with the backend storage. We also need to implement a basic REST service for the Remote Authentication, and David will be making this happen and building a module and GUI Components for the sign in/Authentication processes.

    Week 4: Real data and testing … apparently there is a concept known as iterative testing and a tool called hudson… all new to me next if only i had more time to write the tests first. but as in real life testing is best done last.

    Week 5: Submission and thoughts on what we might have done better and what went well.

  2. jbennie

    Sat 24 OpenJPA vs Hibernate – David and I have been discussing how we should persist the business data. At the moment I have a design in mind for an Object Orientated DB that will persist the data in a generic Entity Table. The entity table has a reference , a type and (TBC) are ref to an xml file or the actual xml data. The objective will be to instantiate the OODB using factory and parser patterns and a simple chained writer to serialise the object into a txt format. The benefits are flexibility, full text search over the data and an easy way to avoid temporal and context issues when dealing with multiple identical data items that only differ due to context. David has reminded me of the downsides and that the reading/writing/parsing of the xml are very slow relative to DB operations, and the complex relations my be overcome using either hibernate or OpenJPA? Having not used either I’d like to open this up for debate. Please not that performance is not critical … slow may be fast enough in this scenario.

  3. jbennie

    Top Tip: Being new to netbeans I’m finding a few gotcha type bugs/features. My first real compile error was a problem using the javax….grouplayout class verses the legacy swing.grouplayout component.

    The solution: Make sure that if you are compiling for Java 1.6 that the Layout Generation Style is set to Standard java 6, then remove the broken dependency from the library. i.e. don’t try to fix the broken dependency, the swing library is obsolete, it was consolidated into the core javax 1.6 framework [July 2010])

    how to do it: Select the offending GUI form/control in design mode -> go to the form Inspector editor -> select the Form Node from the list then change the Properties Layout Generation Style to “standard java 6 code”, then close/save, view the code, view the designer (this forces the editor to rebuild the code on the fly). Now go to the module dependencies and remove the scored out Library (swing extensions). Re save the module and rebuild.

    The problem was really annoying because the code is within the non editable region managed by the IDE form templates.

  4. Damian

    Great project guys, and I’d like to be your first customer once it’s up and running.

  5. Berni Elbourn

    Just wishing Jay and David all the best on this. Flexibly designed, easy to support property management systems are in short supply.

    • Joseph Bennie

      Thanks Berni, I hope your also shouting this out via hampshire and Surrey Lug IRC :)

  6. Joseph Bennie

    Mon 26: I’m ecstatic I have my first working code. I used the tutorial in chapter 24 of the RCP book and cut out the needless audio parts and replaced with a simple hello world module.

    The src is available from my site.

    ….lincore.com/lincore/publicfiles/ModifiedAudioStationexample.tar.bz2

      • Joseph Bennie

        Thanks, no time to rest though, We still have a long way to go :) David is still researching and planning how to tackle the Web service based application subscription/Login and I still have to learn how to read/write xml files and use a database persistence layer :{

  7. Joseph Bennie

    A quick round up on the RCP book.

    Chapters 1-10 are essential reading and sum up the essential api’s and design patterns of the netbeans platform. The remaining chapters provided interesting applications of some of the more advance api functions and the last 4 chapters are solid tutorials to consolidate your learning.

    Overall its a good place to start. In just over a week I’ve read the book and built my first more than basic application. Prior to picking up the book I was still stumbling through tutorials on the netbeans site and not realising any benefits for my hard work.

  8. Joseph Bennie

    A quick roundup on the other 3 netbeans books:

    Netbeans : The definitive guide. It was written for netbeans 3.1 and the api’s used are generally out of date. There were some useful overviews around xml parsing, javabeans and the debugger, but generally the book was orientated towards understanding the IDE rather than how to use the API’s and due to the API’s now being version 6 going on 7 I fear the information that is there is of minimal use.

    Netbeans 5.0… it was written for an older version of the IDE (v4&5) and the text is not written for end to end reading. I may come back to it because its one of those books that is better used as a samples resource.

    101 Netbeans Tips and tricks : you can skim read it in about 30mins, and I picked up at least 5 things that would have been good to know yesterday.

  9. Joseph Bennie

    Tue 27: David is convincing me to use JPA. He sent me the email below which I have finally read, and the info at the links, but I’m still a little lost. I get the concept but … I still need all these parts to start gelling together, both in my head and in code. I’m sure it will start coming together by the end of the week.

    ————–
    On 24/07/10 22:50, David Beer wrote:
    Hi Jay

    JPA (JAVA persistence API) is an API to allow the persistence of standard POJO objects to be persisted to a database. You work totally in the OO side of things so for example a Tenant class which represents the Tenant object would equate to a Tenant Table with the same values as the class. JPA is very powerful and capable of handling complex relationships.

    Bellow are some links which might help a bit more.

    http://openjpa.apache.org/

    http://dl.dropbox.com/u/1979126/ref-card-jpa_start.pdf – This is a Ref-Card which contains information on how to get started with JPA

    • Joseph Bennie

      Just realised its now week 3 … What happened to the weekend?

      I’ll be collecting coffee and buy one get one free pizza vouchers tomorrow for some all night coding sessions. I might even have a pack of those penguin caffeine things in the emergency bug fix box.

  10. David Beer

    o/ We have a Data Model working and can persist data to a database for storage. After much trial and error. We can now push on with work for the display and manipulation of data. We intend on using a custom FileSystem using the NetBeans FieSystem API and concept.

    • Joseph Bennie

      We didn’t need to override the file system in the end it was sufficient to create and subclass of Abstract node. The node then reads the TEntity information from the database via the JPA modules and creates DataObjects for the paths defined. The PAths point to XML files and the root Namespace implies the type of file. an this is were NB rules. the datafile and Nodes APIs and interlinked hence once the file is specified to the data Object, a Node can be grabbed via the getDelegateNode method.

      • Joseph Bennie

        /// code for the Visual Component that will display the Nodes.

        @Override
        public void componentOpened() {

        try {
        TStore.getDefault().readAll();// Loads data into
        PMSpc = new PMSProjectChildren();

        // Node rootNode = DataObject.find(ui)

        // PMSpc.aStore.readAll();
        em.setRootContext(new AbstractNode(PMSpc));
        em.getRootContext().setDisplayName(“Address Book”);
        } catch (Exception ex) {
        Logger.getLogger(“global”).log(Level.WARNING, ex.getMessage(),ex);
        }
        }

      • Joseph Bennie

        // the PMSProjectChildren Class

        // An Example of how to construct a custom Node tree that still uses DataNodes and actual filetypes.

        public class PMSProjectChildren extends Children.Keys {

        public static final TStore aStore = TStore.getDefault();
        public List Contacts;

        // private final List datastore = new ArrayList();
        public PMSProjectChildren() {
        Contacts = aStore.getDataStore();
        }

        @Override
        protected Node[] createNodes(Object Key) {

        TEntityProxy anEntity = (TEntityProxy) Key;

        FileObject contactfile = null;

        // TEntityProxy is my custom class and getFilePath() just returns the path to the XMLFile.

        File arealfile = new java.io.File(anEntity.getFilePath());
        contactfile = FileUtil.toFileObject(arealfile);
        // There are lots of ways to use FileUtils but sometimes all you need is the obvious. in fact Examples for FileUtils is a bit misleading because it is designed for situations where you want a file explorer that operates on a root node and cascades through the file tree. Here we just want the specific file not the filesystem. Later we will extend the returned node via its DataObject Class to return a custom Node hierarchy based on the relationships defined in the DB. i.e. select contact expands to show Contract Nodes, which in turn displays Property and Contact Nodes … etc etc.

        // new java.io.File(“./data/”+anEntity.getFilePath());
        DataObject contactDobj = null;
        Node n = new AbstractNode(LEAF);
        n.setDisplayName(“Invalid Path: ” + anEntity.getFilePath());

        if (contactfile != null) {
        try {
        contactDobj = DataObject.find(contactfile);
        n = contactDobj.getNodeDelegate();
        n.setDisplayName(anEntity.getKnownAs());
        // add detail to the node.

        } catch (DataObjectNotFoundException ex) {
        Exceptions.printStackTrace(ex);
        }
        }
        return new Node[]{n};
        }

        @Override
        protected void addNotify() {
        //replace { with greater than and } with less than i.e. generics
        List{TEntityProxy} keys = new ArrayList{TEntityProxy}(Contacts);
        setKeys(keys);
        }
        }

  11. Joseph Bennie

    1st August – In short i was a tough week. we have grossly underestimated how much of a learning curve there in becoming competent with an RCP framework. Not to mention JPA. While the technology is awesome I’ve spent 4 hours banning my head on the desk for this top tip:

    Wrong code =>

    public static List LazyLoad() {
    EntityManager em1 = TStore.conn.getEm();
    EntityTransaction et = em1.getTransaction();
    et.begin();

    Query q = em1.createNativeQuery(“Select * from t_entity”); // this code results in any access to the List raising the err “Invalid type cast – TPersistEntity not available”.

    List data = (List) q.getResultList();
    et.commit();
    return data;
    }

    the right code =>

    public static List LazyLoad() {

    EntityManager em1 = TStore.conn.getEm();
    EntityTransaction et = em1.getTransaction();
    et.begin();

    Query q = em1.createNativeQuery(“Select * from t_entity”,TPersistEntity.class); // because it is a nativeQuery, the Type must be made explicitly. i.e. it is not inferred as it would be with a namedQuery.

    List data = (List) q.getResultList();
    et.commit();
    return data;

    }

    I would be happy but this was only dummy code to populate some Nodes. aaaarrrrgh! on the positive at least now I have data flowing to the UI from the DB and the UI is able to provided view on the basic data types.

    My next step is to wire up the actions for the DataObjects associated with these nodes … I get the feeling i may be gone for some time!

    Other: For the DB we are working with the H2 Database and so far … on the positive its pure java and embedded into the app and working. The Negative is it only accepts a single connection at a time, and I need to force a delay to ensure its alive and ready to use. Apparently there is Server Mode, but it not obvious how to enable it or what the effect will be.

    • Joseph Bennie

      please not the the generic typecasting was removed when i posted. The List Collections are cast as TPersistEntity types.

      • Joseph Bennie

        // Notes

        In the code you will see two types relating the the Entities.

        TEntityProxy and TPersistEntity. The TEntityProxy is used in higher level code and is not attached to the DB layer. It is directly created from TPersistEntity or can be created independently.

        The TPersistEnity is the JPA Object. It is the type returned from the database queries and is bound to the DB once created. Because it is bound it is difficult to use across modules without including the JPA layer as a dependance.

        The TEntityProxy is defined in the API Module which is available to any module this minimising the dependancy chain.

  12. Joseph Bennie

    6th August . Hi all I’ve been away for a few days and I’m now a little worried about the deadline. but I now have a clear run for the next 3 days to see how far we can get.

    So far we have implemented the H2 Database, with an Open JPA layer. and the schema is very simple (1 table to store an Entity and another to store Entity Relations. at a later date we will also add Tables for the Accounting records, i.e. Positions, Transactions and Holdings.) The actual data for entities is Hierarchical in nature and we are currently storing using a mix of JSON and XML in files, the paths are held in the entity objects.

    This adds to processing but allow me to reuse the capabilities in netbeans to manage File Types, and simplifies the overall design. This is want i’m currently working on as we have a simple viewerComponent being populated by 2 Entities, and the intent is for the dbl click to invoke the DataObject for the filetype associated with the Node. I can tell from my first attempt i have something wrong in my understanding of the relationship between Nodes and DataObjects and I hope to be able to resolve this for TContact and TRentalContract FileTypes today.

    • Joseph Bennie

      hi all, we found a great example of how to achieve what we want with Nodes and dataObjects on Tom Wheeler’s site under the code examples for his todolist demo.

      David and I have spent a few hours studying and working out how to do the same using the 6.9 api. The original 5.5 code is here source code for todo app Thank you Tom.

      It was good to find we were almost there from following the examples in the RCP book. but the last few details were eluding us and Toms code saved the day. David is currently refactoring the offending code. so we are on track to have the TContact Example completed today.

      • Joseph Bennie

        We will share a snapshot of the amended code later, once we’ve added comments

  13. Joseph Bennie

    We’ve been promoting this blog in a other few channels , The facebook Group “I love programming” , Linkenin “Netbeans Developers” and Twitter “LincoreLtd”.

    From that I had some feedback from the “I love programming” group.They would like to speak with someone in SafariBooksonline Marketing team about a co-run promotion with the prize being a 1 year subscription for Unlimited SafariOnline.

    Links: I love Programming
    Netbeans developer Group on linked in

    • Joseph Bennie

      I just received an email to confirm Geertjan is now following me on twitter ..ooh I feel famous .. even with just 4 followers LOL and Hi Geertjan thank you for the support.

  14. Juergen Kapfhamer

    Jay, David,

    I look forward to see the first prototype of your online application. There is definitely a market for your application out there. Keep up the good work. It’s good to see that the online book library allows both of you to get the knowledge you need in-time and at the level you need.

    Juergen

  15. Joseph Bennie

    Ok so in the morning we will check the nodes & dataloaders work. Then we need to start reading and writing xml files. Again this is new to me in respect of java , so I searched safaribooksonline and found this Java SOA Cookbook, 1st Edition By: Eben Hewitt

    It wasn’t immediately obvious this book would help but there is an excellent chapter (ch3) that sums up xml document processing and gives concrete and easy to follow examples. and another that sums up Java EE RESTServices (ch8) as Tech books go this author is really good, a great example to follow.

  16. Joseph Bennie

    Licenses etc, While this is a commercial app there is along way to go to get to that level of quality, and there will be a lot of generic code with real value in the early codebase for people learning netbeans.

    Hence as a firm believer in the principle of giver’s gain all the non sensitive code will be released into the public domain for others to study.

    Also such this will be the only open source property management system on Sourceforge.net with code committed to the repo. There are other projects defined in the category but there is no code/activity.

    Re the Licence – we will likely use GPL excl Class-path Licence, but have to check the details before we publish. just in case.

      • Joseph Bennie

        Monday 9th. We had some success on sat. and took the day off yesterday to think and plan.

        We have a working app, the data loads, Nodes are created in the tree and if you click a node the correct datafile is opened using the correct editor.

        There are a few gotchas,

        1. The file paths are in my local dir /Users/jbennie/repo … todo we have started a module to setup and manage the Environment so the repo location can be controlled via the app options and a Wizard runs at launch. this however wont make it into the releases this week unless david has something up his sleeve.

        2. The custom editor window is a dumb example only. TODO… we are first going to implement the Contracts File types then come back to the Contacts File type. Why… We need to prioritise, and now we have the basics we can copy what we have for the Contracts File type and implement the main user interface.

      • Joseph Bennie

        I have to prepare and uploading this to sourceforge as release cpmsbuild_20100808v0001.tar

        as mentioned there is also a repo directory that need to be in /User/jbennie

        untar the file repoExample.tar into it.

        so that the paths in the h2 database resolve (..build../data/pms…) the paths are /User/jbennie/repo/dummycontact.xml

      • Joseph Bennie

        sourceforge didn’t like the size of the full build directory. you can however setup the project using what i have uploaded there provided you also download the svn content.

        hence to setup quickly. Go to and download the full tarball etc.

        Ongoing I’ll publish snapshots to lincore, and keep the SVN on sourceforge.net up to date with current source (working or not)

  17. Juergen Kapfhamer

    I can see a good potential for this web application. Reviewing properties online with good graphical description will make it easier for prospective tenants/buyers to make a decision before actually seeing a property.

    Good luck with the coding,

    Juergen

  18. David Beer

    I have spent some time investigating and looking at how we can use web services to authenticate users. The process of adding a webservice client to the NetBeans Platform and Project is not that difficult what has become more apparent is how customers will want to manage their users. I have come to the conclusion that it would be better to allow the users/customers to decide how they wish user authentication to be done. we intend on adding a module that will allow the webservice location to be configured and used. We are also thinking of supplying a small DB with dummy users so that people can just see how the application will work.

    For now I am just going to add a swing based widget that appears on startup that will prompt a user for a username and password. The user will have 3 attempts to login before the application closes.

    As for thoughts on how user authentication and roles can be applied to the application once logged. I would suggest using a method of building up menus and toolbars depending on the users roles this can also be used to restrict them to the number of functions and data they can look at.

    • Joseph Bennie

      PS The default user/password is a/a for anyone using the current SVN code.

    • Joseph Bennie

      we are now autheticating via a live REST service the new u/p is joe/abc… all thanks to davids hard work

    • Joseph Bennie

      Why am I using XML DataBinding? Well remember that the entities mentioned above refer to more complex data types and these data types are stored as XML. The original intent was to use a Factory and parser pattern to read/write the POJO’s to and from the xml file… but as always some one has done this before and thats where JAXB comes in. JAXB is a standard Java 5+ API that allows the direct conversion of properly formed POJO’s into plain xml. I’m currently implementing the the new POJO Objects and hooking up the load/save methods of the FileType DataObjects in the Netbeans API. When done, the Netbeans API will open a file, the File Load method will be called and the xml passed to the static constructor of the TContractWorkbook Class. and hey presto the date is available as a plain object and can then be bound to the GUI forms etc.

    • Joseph Bennie

      so far so good…

      I have the marshalling/Unmarshalling of JAXB working however the xml created does not contain the xmlnamespace values needed for the file to be mapped to the Netbeans datatypes.
      .
      as such I’ve created a plain xml file using the element (root xmlns=”com.lincore.pms.contractworkbook”)(/root)

      I used an a STaX.WritexmlProcessinginstruction(String S) to insert the JAXB Stringwriter content into the (root) element… in effect a valid xml file within valid xml file. It Looks messy hence will clean up later… by either stripping out the inner XML DOC tags or converting the inner string into something more compressed i.e. UUencode.

      The neat thing with this is that the file is simply a container for the inner xml hence the inner xml could simply be written into a database as a text string or passed to a web service etc.

  19. Joseph Bennie

    Friday 13th … oh no!! Well this morning went true to form! I spent 5 hours trying to implement the 2nd panel of a MultiView Control (see chapter 24, Netbeans RCP ). in the last few pages there is a comment about registering the interface in META-INF/services so that the Lookup can dynamically discover the new Implementation. however the author assumed this would be obvious…. :(

    hence TOP TIP is:
    on the new Implementation you nee to decorate the class with this… (adjust the interface class as required)

    @ServiceProvider (service=contractWKBKViewDescriptor.class)
    public class contractWKBKPropertyEditorPanelMVDesc implements contractWKBKViewDescriptor, Serializable{

    in this example the Interface is contractWKBKViewDescriptor, and the new implementation (which is in another module) is contractWKBKPropertyEditorPanelMVDesc

    The effect of the decoration is to notify the build tool to create the META-INF/services file and make the correct entries.

    • Joseph Bennie

      just to be clear the decoration is put on the implementation class

  20. Joseph Bennie

    Sat 14: after another late night coding, i decided it was time to start telling people about what we are doing at my lug group, so i gave a 30minute presentation to 25ish people on the competition, our entry and the what, why, how on netbeans and our app. It was well received, thanks for the applause and the votes guys. And i will follow up and give the talk at the opensolaris meeting in a few weeks. surrey lug meeting

    • Joseph Bennie

      its 3.47am Sunday … and the app is finally starting to look like one rather than a bunch of api’s and assorted files. That said I’ve had more than my fair share of tweaking Custom Mode definitions to allow the TopComponents to display in the correct relative positions… and these gui widgets are still just empty shells. I expect there will be more tweaking when i get up. That said, the end is in sight and I took some time to knock together a splash screen and I’m quite pleased with it because it makes the app look quite polished even if it the majority of the GUI is still missing.
      TODO’s
      1. Fix the startup settings… out of the dev environment there is no access to the database… it needs a custom setup script to create and seed the DB.
      2. Then bind the data for the main UI, but this means fixing the few remaining JAXB errors.
      I think if i get that done and may be a wizard to create a new contract. I will have done more than enough to justify that I’ve learned how to use netbeans. and there is already a huge amount of code up on Source forge… there should be I’ve spent at least 20days reading , coding and pulling my hair out over subtle details. also as far as i can tell david has finished his part on the login, but I think I’m still using the static auth version.

      • Joseph Bennie

        The rest of Sunday came and went. its 23:21 I’ve been calling friends and tweeting about the blog and the contest. David spent some time implementing the REST part of the login and I managed to retest last nights build and started a todo list of essential cleanups for tomorrows release. I’m about to read up on the wizard tools in netbeans, so far we’ve built little scripts to seed the database and create the files because they changed so much. but for the release we want something more elegant to create Contract and Contract Entity Types.

      • Joseph Bennie

        TOP TIP:
        One of the cleanup tasks was to remove the buildnumber from the main form window. Even following the branding instructions we could not remove the Netbeans platform build number, until Geertjan pointed us in the right direction. Thanks.

        in short, in our EnvironmentSetup module in the installer class we simply added the following

        public class Installer extends ModuleInstall {

        @Override
        public void restored() {
        System.setProperty("netbeans.buildnumber", "");
        // sets the build number to an empty string.
        }
        }

        The link to Geertjans blog article (more advanced example)

        The Netbeans wiki article, that we used

      • Joseph Bennie

        TOP TIP: The netbeans platform has a lot of powerful capabilities and how to know what to ask/look for is a little overwhelming untill you realise that for the declarative bits .. i.e. all the xml files the DTD is specified at the top of the xml.

        I was't obviouse to me and I'm sure most reader will go past this often as well...The DTD defines all the options, enum values and in good DTD's there are comments explaining how to use the Elements and the Options to control that aspect of the functionality.

        For Example

        //!DOCTYPE mode PUBLIC "-//NetBeans//DTD Mode Properties 2.3//EN"
        "http://www.netbeans.org/dtds/mode-properties2_3.dtd"

        //exscript from the dtd

      • Joseph Bennie

        (!– Element kind
        “type” kind of mode “editor” or “view” or “sliding”.
        –)
        (!ELEMENT kind EMPTY )
        (!ATTLIST kind
        type (editor | view | sliding) #REQUIRED
        )

        (!– Element sliding side
        “side” direction of slide
        –)
        (!ELEMENT slidingSide EMPTY )
        (!ATTLIST slidingSide
        side (left | right | bottom) #REQUIRED
        )

  21. Joseph Bennie

    The last few hours… We have done alot and learned alot. The core netbeans apis, some java api’s (jaxb, jpa, stax, xmldom, io. File ) to name a few and from that learning we built the basics and more to leaveraged netneans, REST, and and embeded H2 database to bring you our first cut of the app…. Appologies that its not finished in the requirements sence but the code completed to date uses alot of advanced and basic concepts you can reuse in your own work. We will continue to update svn on an ongoing basis but we are really pleased with the effort so far given my minimal java exp and this being my first netbeans app. Finally id just like to thank david, geertjan and the orielly team for all they have done on the project. David and I would not be where we are without.you and the safaribooksonline service.
    Ps we are uploading a release tonight just cleaning up and adding notes. Thanks J and David

  22. David Beer

    Well this it we finally have our deliverable and an alpha release. File can be found at http://sourceforge.net/projects/lettingagentpro/files under Alpha Release – 20100816. Download the cpms.zip and the default-db.zip and default-repo.zip.

    This will provide the demo data that you need. if you open the README.txt file in the same release dir it explains exactly where to extract the default-db.zip and the default-repo.zip

    Thanks David and J

    • David Beer

      I forget to mention that the login credentials are as follows:

      username Joe

      password abc

      Thanks David

  23. Safari Books Online

    Thank you so much for participating and for sharing your struggles and triumphs. I enjoyed reading your updates and following your coding and learning journey.

    Rose
    Safari Books Online

  24. Kevin

    Congratulations guys! Was fun competing against you in this challenge :)

    Wish you all the best with your product!

    Regards,
    Kevin & Amit.

  25. seoricardo

    Appealing information you have provided. It gained me more knowledge and idea. Please keep up the good because i like the way you are writing. Thanks!

    Dallas Property Management

Trackbacks/Pingbacks

  1.  Safari Books Online Announces “Learn Something New Team Challenge” Winners « Safari Books Online's Official Blog
  2.  Press Release: Competition Helps Programmers Meet Key Performance Objectives and Stand Out to Peers and Supervisors « Safari Books Online's Official Blog