== JDEE Resources ==
 * [http://jdee.sunsite.dk/ JDEE Home]
 * [http://maven.apache.org/reference/plugins/jdee/index.html Maven JDEE Plugin]

== My JDEE emacs lisp functions ==
{{{
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                               ;;
;;    ToString Wizard - yoonforh edition                                         ;;
;;                                                                               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defcustom jde-wiz-tostring-sort-variables nil
  "*Specifies whether or not to sort the list of variables in the
  generated method or list them in the order defined in the file."
  :group 'jde-wiz
  :type 'boolean)

(defcustom jde-wiz-tostring-stringbuffer-size "100"
  "*Specifies the initial size of the StringBuffer used to create the
  result for the toString().  It is best to set this to a value large
  enough for most of your work to prevent expansion of the
  StringBuffer at runtime.  You can always change the value in the
  generated code to a smaller or larger one as needed."
  :group 'jde-wiz-tostring
  :type 'string)

(defcustom jde-wiz-tostring-variable-separator "\", \""
  "*Specifies the string between each variable to separate them.
  Examples: 2 spaces (the default), a comma and a space, newline, or a
  method call (as long as the return value is a String).

  Note: Remember this must result in a String in Java!"
  :group 'jde-wiz-tostring
  :type 'string)

(defcustom jde-wiz-tostring-static-members nil
  "If on (nonnil), `jde-wiz-tostring' generates information of 
 static members of the class in the current buffer."
  :group 'jde-wiz
  :type 'boolean)

(defun jde-wiz-tostring()
  "Generates a toString() method for tbe class at point. The method
returns a string comprising the values of the member variables defined
by the class. The string lists the variables in alphabetical 
order if `jde-wiz-tostring-sort-variables' is on. The string uses the
string specified by `jde-wiz-tostring-variable-separator' to separate
the variables. The generated method uses a string buffer of the size
specified by `jde-wiz-tostring-stringbuffer-size' to build the string."
 (interactive)
 (let* ((class-name 
	 (jde-parse-get-unqualified-name
	  (jde-parse-get-class-at-point)))
	(variables 
	 (semantic-find-nonterminal-by-token 
	  'variable 
	  (jde-wiz-get-class-parts 
	   class-name 
	   (semantic-find-nonterminal-by-token 
	    'type 
	    (semantic-bovinate-toplevel t)
	    ))))
	(method
	 (concat
	  "/**\n"
	  " * {@inheritDoc}\n"
	  " */\n"
	  "public String toString()"
	  (if jde-gen-k&r " {\n" "\n{\n")
	  "return \"" class-name "(")))
;; 	  "final int sbSize = " jde-wiz-tostring-stringbuffer-size  ";\n"
;; 	  "final String variableSeparator = " jde-wiz-tostring-variable-separator ";\n"
;; 	  "final StringBuffer sb = new StringBuffer(sbSize);\n\n")))

   (setq variables (jde-wiz-filter-variables-by-typemodifier variables))

   (if jde-wiz-tostring-sort-variables
       (setq variables (semantic-sort-tokens-by-name-increasing variables)))

   (setq size (length variables))

   (while variables
     (let* ((var (car variables))
	   (name (semantic-token-name var)) ;;variable name
	   (type (semantic-token-type var)) ;;variable type i.e. boolean
	   (staticp
	    (member "static"
		    (semantic-token-variable-modifiers var))) ;;is it static
	   (finalp
	    (member "final"
                   (semantic-token-variable-modifiers var)))) ;;is it final

       (if (or (not staticp) jde-wiz-tostring-static-members)
	   (if (> (length variables) 1)
	       (setq method (concat method name " - \" + " name "\n+ \", "))
	     (setq method 
		   (concat method name " - \" + " name "\n+ \")\";\n}\n")))
         (setq size (- size 1))
         )

       (setq variables (cdr variables))))
;;   (setq method (concat method "[" (number-to-string size) "]"))
   (if (= size 0)
       (setq method 
             (concat method ")\";\n}\n")))

   (insert method))

 (jde-wiz-indent (point)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                               ;;
;;    jde-wiz-constructor - by yoonforh                                          ;;
;;                                                                               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun jde-wiz-constructor()
  "Generates a constructor() method for tbe class at point. The method
returns a string comprising the values of the member variables defined
by the class. The string lists the variables in alphabetical 
order if `jde-wiz-tostring-sort-variables' is on. The string uses the
string specified by `jde-wiz-tostring-variable-separator' to separate
the variables. The generated method uses a string buffer of the size
specified by `jde-wiz-tostring-stringbuffer-size' to build the string."
 (interactive)
 (let* ((class-name 
	 (jde-parse-get-unqualified-name
	  (jde-parse-get-class-at-point)))
	(variables 
	 (semantic-find-nonterminal-by-token 
	  'variable 
	  (jde-wiz-get-class-parts 
	   class-name 
	   (semantic-find-nonterminal-by-token 
	    'type 
	    (semantic-bovinate-toplevel t)
	    ))))
	(method
	 (concat
	  "public " class-name "("))
        (body)
        )

   (setq variables (jde-wiz-filter-variables-by-typemodifier variables))

   (if jde-wiz-tostring-sort-variables
       (setq variables (semantic-sort-tokens-by-name-increasing variables)))

   (setq size (length variables))

   (while variables
     (let* ((var (car variables))
	   (name (semantic-token-name var)) ;;variable name
	   (type (semantic-token-type var)) ;;variable type i.e. boolean
	   (staticp
	    (member "static"
		    (semantic-token-variable-modifiers var))) ;;is it static
	   (finalp
	    (member "final"
                   (semantic-token-variable-modifiers var)))) ;;is it final

       (if (or (not staticp) jde-wiz-tostring-static-members)
           (progn 
                   (if (> (length variables) 1)
                       (setq method (concat method type " " name ", "))
                     (setq method 
                           (concat method type " " name (if jde-gen-k&r ") {\n" ")\n{\n")))
                     )
                   (setq body (concat body "this." name " = " name ";\n"))
                   ))
       (if staticp (setq size (- size 1)))
       (if finalp (setq size (- size 1)))

       (setq variables (cdr variables))))
;;   (setq method (concat method "[" (number-to-string size) "]"))
   (if (= size 0)
       (setq method 
             (concat method (if jde-gen-k&r ") {\n" ")\n{\n"))))
   (setq method 
         (concat method body "}\n"))

   (insert method))

 (jde-wiz-indent (point)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                               ;;
;;    jde-wiz-log-method - by yoonforh                                           ;;
;;                                                                               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;###autoload
(defun jde-wiz-log-method()
  "insert logger statement of a method or constructor"
  (interactive)
  (if (not (eq major-mode 'jde-mode))
      (error "Major mode must be 'jde-mode'"))
  (let ((found (jde-javadoc-nonterminal-at-line)))
    (if (not found)
        (error "No tag found at point")
      (let* ((modifiers  (semantic-tag-modifiers found))
            (type       (semantic-tag-type               found))
            (name       (semantic-tag-name               found))
            (arguments       (semantic-tag-function-arguments found))
            (throws     (semantic-tag-function-throws    found))
        (string
	 (concat
	  "if (logger.isLoggable(Level.FINEST))"
	  (if jde-gen-k&r " {\n" "\n{\n")
	  "logger.finest(\""
          name
          "(")))

        (setq size (length arguments))

        (while arguments
          (let* ((arg (car arguments))
                 (name (semantic-tag-name arg)) ;;argument name
                 (type (semantic-tag-type arg)) ;;argument type i.e. boolean
                 )

            (if (> (length arguments) 1)
                (setq string (concat string name " - \" + " name " + \", "))
              (setq string 
                    (concat string name " - \" + " name " + \")\");\n}\n\n")))

            (setq arguments (cdr arguments))))
;;        (setq string (concat string "[" (number-to-string size) "]"))
        (if (= size 0)
            (setq string
                  (concat string ")\");\n}\n\n")))
        (insert string)
        ))

    (jde-wiz-indent (point))
    ))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                               ;;
;;    jde-wiz-logger-decl - by yoonforh                                          ;;
;;                                                                               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun jde-wiz-logger-decl()
  "insert logger declaration statement of current class"
  (interactive)
  (if (not (eq major-mode 'jde-mode))
      (error "Major mode must be 'jde-mode'"))
  (let* ((class-name 
	 (jde-parse-get-unqualified-name
	  (jde-parse-get-class-at-point)))
        (package (jde-wiz-get-package-name)))
    (progn
      (if (not package)
          (setq string (concat "private static Logger logger = Logger.getLogger(" class-name ".class.getName());\n\n"))
        (setq string (concat "private static Logger logger = Logger.getLogger(\"" package "\");\n\n"))
      (insert string)
      (jde-wiz-indent (point)))
    ))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                               ;;
;;    jde-wiz-assign-args - by yoonforh                                          ;;
;;                                                                               ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;###autoload
(defun jde-wiz-assign-args()
  "insert assign statements for each args of a method or constructor"
  (interactive)
  (if (not (eq major-mode 'jde-mode))
      (error "Major mode must be 'jde-mode'"))
  (let ((found (jde-yoonforh-nonterminal-at-line)))
    (if (not found)
        (error "No tag found at point")
      (let* ((modifiers  (semantic-tag-modifiers found))
            (type       (semantic-tag-type               found))
            (name       (semantic-tag-name               found))
            (arguments       (semantic-tag-function-arguments found))
            (throws     (semantic-tag-function-throws    found)))
        (while arguments
          (let* ((arg (car arguments))
                 (name (semantic-tag-name arg)) ;;argument name
                 (type (semantic-tag-type arg)) ;;argument type i.e. boolean
                 )

            (insert (concat "this." name " = " name ";\n"))
            (setq arguments (cdr arguments))))
;;        (setq string (concat string "[" (number-to-string size) "]"))
        ))

    (jde-wiz-indent (point))
    ))


(global-set-key [?\C-c?\C-v?l] 'jde-wiz-log-method)
(global-set-key [?\C-c?\C-v?s] 'jde-wiz-tostring)
(global-set-key [?\C-c?\C-v?a] 'jde-wiz-assign-args)
(global-set-key [?\C-c?\C-v?c] 'jde-wiz-constructor)
(global-set-key [?\C-c?\C-v?p] 'jde-wiz-logger-decl)
}}}

== Binding for keymap jde-mode-map ==
As of JDEE 2.3.4

{{{
key             binding
---             -------

<f4>		html-script-release-region
C-c		Prefix Command
/		c-electric-slash
*		c-electric-star
,		c-electric-semi&comma
DEL		c-electric-backspace
C-d		c-electric-delete-forward
TAB		c-indent-command
ESC		Prefix Command
)		c-electric-paren
(		c-electric-paren
:		c-electric-colon
#		c-electric-pound
;		c-electric-semi&comma
}		c-electric-brace
{		c-electric-brace

C-c C-v		Prefix Command
C-c .		c-set-style
C-c C-t		c-toggle-auto-hungry-state
C-c C-s		c-show-syntactic-information
C-c C-o		c-set-offset
C-c C-d		c-toggle-hungry-state
C-c C-c		comment-region
C-c C-b		c-submit-bug-report
C-c C-a		c-toggle-auto-state
C-c C-\		c-backslash-region
C-c C-q		c-indent-defun
C-c C-u		c-up-conditional
C-c C-p		c-backward-conditional
C-c C-n		c-forward-conditional

ESC q		c-fill-paragraph
ESC j		c-indent-new-comment-line
ESC C-j		c-indent-new-comment-line
ESC e		c-end-of-statement
ESC a		c-beginning-of-statement
ESC C-q		c-indent-exp
ESC C-h		c-mark-function

C-c C-v .	jde-complete-in-line
C-c C-v C-.	jde-complete
C-c C-v C-]	jde-run-etrace-next
C-c C-v ESC	jde-run-etrace-prev
C-c C-v z	jde-import-all
C-c C-v t	jde-gen-try-catch-wrapper
C-c C-v o	jde-wiz-override-method
C-c C-v j	jde-javadoc-autodoc-at-line
C-c C-v i	jde-wiz-implement-interface
C-c C-v f	jde-gen-try-finally-wrapper
C-c C-v e	jde-wiz-extend-abstract-class
C-c C-v C-z	jde-import-find-and-import
C-c C-v C-y	jde-open-class-at-point
C-c C-v C-x	jde-show-superclass-source
C-c C-v C-w	jde-help-symbol
C-c C-v C-t	jde-jdb-menu-debug-applet
C-c C-v C-s	speedbar-frame-mode
C-c C-v C-r	jde-run
C-c C-v C-q	jde-wiz-update-class-list
C-c C-v C-p	jde-save-project
C-c C-v C-n	jde-help-browse-jdk-doc
C-c C-v C-l	jde-gen-println
C-c C-v C-k	jde-bsh-run
C-c C-v C-g	jde-open-class-at-point
C-c C-v C-f	jde-find
C-c C-v C-d	jde-debug
C-c C-v C-c	jde-compile
C-c C-v C-b	jde-build
C-c C-v C-a	jde-run-menu-run-applet
}}}