Eclipse


Eclipse over the rainbow... Java up high...

Toujours plus haut dans les nuages avec Eclipse! Pourquoi se contenter de gérer les sources des projets sur des serveurs distants partagés, alors qu'il est désormais possible de se passer d'IDE? C'est en gros le message que vient de faire passer la fondation Eclipse en annonçant la naissance d'un nouveau projet dans son écosystème : Orion.

Mais il ne faut pas s'y tromper : le but ici n'est pas de porter l'IDE dans un navigateur, mais bien de présenter un tout nouveau paradigme dans le monde du développement. La tendance actuelle étant de tout orienter vers les navigateurs web (est-ce bien raisonnable au fond?), la fondation Eclipse ne pouvait manquer cette occasion pour repenser ses outils et envisager le navigateur comme une toute nouvelle plateforme de développement.

Orion a donc pour vocation de fournir un outil léger par l'intermédiaire d'une expérience web. Son état encore embryonnaire à ce jour ne permet pour le moment que l'écriture de code Javascript, mais le but est de fournir d'ici quelques mois un panel plus complet notamment par l'ajout du versionage des fichiers (grâce à une intégration avec Git) et du debug (à l'aide de Firebug). Son interface est entièrement codée en Javascript et communique avec des librairies Java/Osgi par l'intermédiaire de REST.

Le code d'Orion est d'ores-et-déjà testable et téléchargeable ici. Même s'il est pour l'instant très limité, il faut admettre que l'idée peut paraître intéressante et qu'il faudra donc garder un oeil attentif sur son évolution.

Comme précisé plus haut, ce projet s'inscrit dans la volonté future d'Oracle de déporter les utilisations actuelles de Java en général, comme l'illustre les liens ce-dessous. A ce titre, Java EE 6 et plus tard (2012 environ) Java EE 7 vont proposer toujours plus d'outils pour déployer les applications vers le web. Plusieurs sociétés se positionnent déjà en tant que prestataires PaaS, en particulier VMware qui a récemment annoncé un partenariat pour promouvoir ce concept au travers du projet VMforce.

Sources

Java in the cloud


Fichier(s) joint(s) :



[Swing] Limiter la saisie dans une combobox editable

Plus compliqué qu'il n'y parait!

Le composant qui permet de saisir du texte dans ce type de combobox est un simple JTextField, mais il est impossible de paramétrer son nombre de caractères maximal aussi simplement qu'avec un JTextField classique.

Le text field est accessible grâce au code suivant :

JTextField tf = (JTextField)(combo.getEditor().getEditorComponent());

La solution consiste donc à modifier l'objet Document associé au champ (ici la limite sera fixée à 32 caractères) :

tf.setDocument(new JTextFieldLimit(32));

class JTextFieldLimit extends PlainDocument {
    private int limit;
    JTextFieldLimit(int limit) {
        super();
        this.limit = limit;
    }
    @Override
    public void insertString(int offset, String str, AttributeSet attr) {
        try {
            if (str == null)
                return;
            if ((getLength() + str.length()) <= limit) {
                super.insertString(offset, str, attr);
             }
        } catch (BadLocationException e) {}
    }
}

Un problème persiste cependant : à chaque fois que l'utilisateur essaiera de taper plus de 32 caractères, une erreur sera levée dans la console :

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: bad position: 33
        at javax.swing.text.JTextComponent.moveCaretPosition(JTextComponent.java:1523)
        at org.jdesktop.swingx.autocomplete.AbstractAutoCompleteAdaptor.markText(AbstractAutoCompleteAdaptor.java:116)
        at org.jdesktop.swingx.autocomplete.AutoCompleteDocument.insertString(AutoCompleteDocument.java:161)
        at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1358)
...

Cette erreur est volontairement levée par le composant java afin de maximiser la rétro-compatibilité, comme justifié dans ce bug : Oracle bug database (4903033). Il faut donc s'en contenter ou arriver à encapsuler suffisamment le composant pour récupérer l'erreur.


Fichier(s) joint(s) :