180 likes | 194 Views
ProCol ~ A jEdit Plugin for Remote Project Collaboration Justin Dieters Spring 2004 CS470 Final Presentation. What is ProCol?. Plugin for the jEdit text editor Facilitates on-line collaboration between developers Small groups (2-10 people) Small to medium sized projects
E N D
ProCol ~ A jEdit Plugin for Remote Project Collaboration Justin Dieters Spring 2004 CS470 Final Presentation
What is ProCol? • Plugin for the jEdit text editor • Facilitates on-line collaboration between developers • Small groups (2-10 people) • Small to medium sized projects • Provides file repository, users are able to check out files • Provides communication and project management functions • Quick and easy to set up and use • Current solutions - CVS, SourceForge, gForge, etc. • Complex to set up • Time-consuming to maintain • Not practical for small projects
Requirements • Not developed for a specific client • Requirements developed by looking at existing solutions • Possible improvements • Past experience • Scope of project was fairly large • Open-ended requirements • Goal: Release usable beta version by end of class • Development continued as an open-source software project (GPL) • Able to be extended by others • Clients for other development environments • Web-based clients
Client Requirements • Compact and simple graphical interface • Able to integrate well with jEdit's user interface • Complex functionality in separate dialog windows • File tree • Indicate checkout status with bold text • Get information about individual files • User list • Windows for file transfer, messaging, etc • Able to be docked • Project snapshot
Server Requirements • Handles multiple simultaneous connections from clients • Uses SSL sockets for security • Information stored on disk in properties files • Readable by the Java Properties class • Do not need separate database • Java uses hash tables for this • Maintain project and user information • Simple configuration files • Store versioning/changelog information for each file • Store communication and project management messages • Automatic file backup • Accidental or malicious deletion/changes
Plugin Interface Options Connect Help Project Info Change Project File Tree Checked-out File Popup Menu Upload file/directory New file/directory Snapshot User List Private Messages Bug List Public Messages Todo List Progress Bar
Connecting to Server Connect Login Join Project
File Management File Info File Check-in
Communication Tools Reading messages Composing a message
Project Management Tools Bug List Posting a New Bug
Client Architecture GUI Model Dockable Windows Project Message Composers User Misc. Dialogs Messages Sections communicate using Observer/Observable pattern Network ProColClient Communication from Server Communication to Server IncomingMessageHandler OutgoingMessageHandler MessageFactory PacketFactory
Server Architecture Model Projects Users ServerConnection maintains reference to currently opened project ProColServer Network ServerConnection Communication from Client Communication to Client IncomingMessageHandler OutgoingMessageHandler MessageFactory PacketFactory
Network Protocol Data (0 to 2032 bytes) Header (16 bytes) messageID requestType dataRemain dataSize DataSection Packet (2048 bytes max) • Messages are broken into packets of maximum 2048 bytes • 16 byte header followed by optional data section • Allows low priority messages to be interrupted to send high priority message • Less than 1% overhead per packet for full data section • PacketFactory class generates packets to be sent • Data can be drawn from Strings, byte arrays, files, etc • Automatically determines which packet to send next based on priority • MessageFactory class reassembles packets into original messages • Handed off to Observers for handling
What Worked? • Networking • Spent large percentage of time developing networking • Packets and priority queues • Anonymous SSL security • Open, easy protocol, able to be used by other ProCol clients/servers • Dockable windows • Integrate well with jEdit • Able to use as normal window or docked • Store settings in Properties files • Labels, buttons, error messages, etc • Central location for changes, applied throughout program
What Did Not Work? • NIO (New I/O) • Java's new I/O API • Good in theory, bad in implementation • Many problems in Sun's code that I was unable to work around • 2 weeks wasted with troubleshooting and rewriting • Rewrote large portions of networking code to revert back to classic networking • Too many features • Not enough time to implement everything I wanted • All required features implemented, but some are rather basic
Conclusion • Was project successful? • Yes, all requirements satisfied • Proved usable during testing • Interest expressed by jEdit community • Will be released under GPL • May continue development • What did I learn? • Java features – SSL, NIO, Threads, Properties • Implementing design patterns – Observer, MVC, Factory • jEdit – Plugin programming, Beanshell scripting • Apache Ant – automated compiling and packaging
Questions? Justin Dieters Spring 2004 CS470 Final Presentation