Jul 29, 2007

Δημιουργώντας extensions στον JDeveloper

Κατόπιν του πρόσφατου άρθρου στο OTN σχετικά με τη δημιουργία extensions στον JDeveloper (http://www.oracle.com/technology/products/jdev/howtos/1013/extension/extension.html) μου γεννήθηκε το ενδιαφέρον διερεύνησης αυτής της δυνατότητας του προϊόντος. Για πρότυπο παράδειγμα διάλεξα μια λειτουργία που αποζητούσα στον JDeveloper εδώ και χρόνια: της διαγραφής ενός project ή ενός workspace και όλων των περιεχόμενων τους. Μέχρις στιγμής, η διαγραφή ενός project αφορά μόνο το .jpr αρχείο στο δίσκο και όχι την αφαίρεση όλων των λογικών και φυσικών περιεχόμενων του (π.χ. αρχεία, φακέλους, βιβλιοθήκες, κλπ) Το ίδιο συμβαίνει και με τα workspaces. Με την λειτουργία προς κατασκευή θα είναι η δυνατή η αφαίρεση και αυτών των στοιχείων, ενώ η πρόσβαση σε αυτήν θα προσφέρεται κάνοντας δεξί click στο project ή το workspace προς διαγραφή.

Μελετώντας το ανωτέρω άρθρο στο OTN είναι εξαιρετικά σύντομο να ξεκινήσει να γράφει κάποιος τα δικά του extensions: απλά αντιγράφει ένα από τα πολλά παραδείγματα που ταιριάζει περισσότερο στις απαιτήσεις του και αρχίζει να το διαμορφώνει υλοποιώντας την ιδέα του. Δεδομένου πως το ίδιο το προϊόν είναι κατασκευασμένο σε Java, είναι απλό και εύκολο να δημιουργηθούν επεκτάσεις, να εμφανιστούν παράθυρα και φόρμες εισαγωγής κ.ο.κ, αφού στην ουσία πρόκειται για μια συντήρηση μιας Java εφαρμογής, γεγονός που μειώνει δραματικά τον χρόνο ανάπτυξης και αυξάνει την παραγωγικότητα. Δυνατότητες που εμφανίζονται σε άλλα περιβάλλοντα ανάπτυξης μπορούν να υλοποιηθούν στον JDeveloper σε μικρό χρόνο.

Μιλώντας τώρα για τις λεπτομέρειες υλοποίησης, ακολουθούν κάποιες γενικές, κατευθυντήριες γραμμές:
  • η κλάση μας που θα αποδίδει μια νέα λειτουργία θα πρέπει να κληρονομεί από τα interfaces Addin και Controller
  • Στην μέθοδο initialize() που θα πρέπει να υλοποιηθεί, ορίζουμε το πότε θα ενεργοποιηθεί η υπηρεσία μας, εγγράφοντας τον κώδικα μας για ειδοποίηση με το που θα συμβεί ένα σχετικό γεγονός (π.χ. μια επιλογή ενός μενού ή το πάτημα ενός κουμπιού), και λαμβάνει χώρα με την έναρξη του JDeveloper. Για παράδειγμα όπως διαφαίνεται στον ακόλουθο κώδικα, ορίζεται κάτι ανάλογο για την κλάση μας, μόλις γίνει δεξί click πάνω σε ένα project:
Project prj = Ide.getActiveProject();
final Class matchingNodeType = prj.getClass();
/** @snippet_reference {@start WorkspaceManager.1} */ NavigatorManager.getWorkspaceNavigatorManager().addContextMenuListener(ctxMenuLstnr, matchingNodeType);
  • H δεύτερη σημαντική συνάρτηση είναι η handleEvent() που εκτελείται με την πραγματοποίηση του γεγονότος (event) στο οποίο έχει εγγραφεί η κλάση μας. Πρακτικά, είναι το σημείο στο οποίο θα προσθέσουμε τον κώδικα λειτουργίας της υπηρεσίας μας.
Στο παράδειγμά μας, το αποτέλεσμα θα εμφανίζεται ως εξής:

ενώ η επιλογή για διαγραφή μπορεί να οδηγήσει σε οθόνη επιβεβαίωσης, που κατασκευάζεται με απλό Java Swing προγραμματισμό:

Τα αποτελέσματα της επεξεργασίας εμφανίζονται στο παράθυρο Log:

και το σχετικό project έχει διαγραφεί επιτυχώς, όπως φαίνεται και στο file browser:

Ολόκληρο το code listing της εφαρμογής είναι διαθέσιμο. Ομολογουμένως εντυπωσιάστηκα με την ευχέρεια ανάπτυξης extensions.

1 comment:

Eduardo Rodrigues said...

The link registered for JDeveloper auto-update is invalid:

http://www.freefilehosting.net/files/NTY5OQ/remove-ext-updatecenter.1_1.zip

I'm unable to download your extension.