Proposing solution to bug 149993

7:33 AM / Comments (3) / by Kevin Vu

According to Tim deBeur, the best solution to fix this bug would be: to make the first dialog remembers the choice and default to the second dialog since merging 2 dialogs would be inefficient because they have different options.

Bug 149993: Breakpoint dialog code location

7:27 AM / Comments (1) / by Kevin Vu

I found the source code that creates the breakpoint dialog:

Code location for bug: 244862

7:07 AM / Comments (2) / by Kevin Vu



As Angel Vera suggested, to fix this bug I would need to create an event listener base on the knowledge from this function:

Eclipse WTP version 3.2M1b Stable

5:26 PM / Comments (1) / by Kevin Vu

This version is ready for download.

http://download.eclipse.org/webtools/downloads/drops/R3.2/S-3.2M1b-20090814143519/

Reproduce bug#: 149933

3:35 AM / Comments (0) / by Kevin Vu

STEPS TO REPRODUCE BUG#: 149933
Description: "Remember my decision" doesn't work for "Disable breakpoints" option in Run On Server dialog


1. Make sure the Java EE perspective is opened.


2. Add a new Tomcat server


3. Create a new Dynamic Project


4. Add a new JSP file


5. Add this line: <% out.println("Hello."); %> to the JSP and set a break point beside it


6. Start Server in Debug mode


7. Right-click on the JSP file and select "Run On Server"


8. Click Finish on the Run On Server Dialog


9. Select option: Disable Breakpoints and Continue and check on Remember my decision


10. Repeat step 7 and 8


RESULT:
The Run On Server Dialog appears again which is not expected since already checked on "Remember My Decision"




=> Expecting the JSP run with breakpoints disables

Reproducing Bug#: 244862

11:02 PM / Comments (2) / by Kevin Vu

Follow up with Tehereh's discoveries, the bug is reproduced successfully:

CASE 1: Deleting a server project doesn't call stop server

Step1: Create a server project





Step2: Start the server



Step3: Delete the server project



Step4: Create a new server project (Repeat step 1)


Step5: Start the new server



Step6: BUG OCCURS



CONCLUSION:
Deleting a server project should call stop server.

CASE 2: Closing a server project doesn't call stop server

Step 1: Create a new server project
(please check CASE1:step1)

Step 2: Start the server
(please check CASE1:step2)

Step 3: Close the server project



Step 4: Create a new server project
(please check CASE1:Step1

Step 5: Start the new server



Step 6: BUG OCCURS




CONCLUSION:
Closing a server project should call stop server

Dropping bug# 236976

8:26 PM / Comments (2) / by Kevin Vu

After my presentation last week, it seems that there are different opinions of what is the best way to fix this bug. As this bug involve with the presentation (interface), it would be difficult to change (fix) it without curtain surveys from users and it would take a lot more time to do survey than fixing the bug itself.

I'll look for another bug and will keep working on Tehereh'bug as the same time.

Bug#236976: UI improvement for Server Editor Page

1:54 AM / Comments (0) / by Kevin Vu


Reproduce:
UI for timeouts could be improved.
The current timeout GUI on the server editor allows the user to input the
timeout in seconds. It has a hover help to translate the value to mins and
seconds. However, most user will not notice and do not expect that hover help
function to show that.

A minor UI improvement is to show text box for seconds, and auto translate and
display min:sec as a text on the label for the timeout text field.


NEW UI PROPOSAL:

BEFORE:


AFTER:

Bug 264203 is fixed by Larry Issacs

5:10 PM / Comments (0) / by Kevin Vu

Larry posted his patch on bug zilla. I tested his patch and the bug is fixed. Although, he mentioned that he hasn't tested the patch on "publish after servers" scenarios and I'm not sure what does that term means to test it for him. Anyway, I posted a question regarding "publish after server" on newsgroup and will test these scenarios when I got a chance. Let hunt for another bug then.

Detail on patch: https://bugs.eclipse.org/bugs/attachment.cgi?id=132132

Working on bug 264203

9:13 PM / Comments (0) / by Kevin Vu

Thanks to Tehereh, After reading her blog I tried again and this bug does exist. Though, the way to reproduce is clearer now: So the scenario is like this:

1. Add new server (Stop state)
2. Add a dynamic web app.
3. Add a jsp file.
4. right-click on jsp and choose “Run on server”.
5. Server starts.
6. Browser get launched
==> NO BUG

7. Stop the server and close the browser
8. right-click on the jsp and choose “Run on server” again
9. Browser doesn’t get launched.
==> BUG

——————————————-
10. Delete server
11. Add new server (Stop state)
12. right-click on jsp file and choose “Run on server” again
13. Browser get launched
==> NO BUG

So basically, After the first time "Run on Server" with no bug. If we stop the server and try to "Run On Server" again. The bug occurs.

I'll be working on this bug then.

Screenshots:
First time "RUN ON SERVER" => NO BUG



The time after the first time "RUN ON SERVER" => BUG

Reproduce Bug 264203

8:38 AM / Comments (5) / by Kevin Vu

Bug 264203:
Steps To Reproduce from BugZilla:
1. Create a server (I tried tomcat 5.5 and the j2ee preview server)
2. Add a simple JSP file to the webcontent folder of a dynamic web project
3. Add the web project to the server.
4. Make sure the server is stopped
5. Right click on the JSP and select "run on server"
6. The server starts, but the web browser does not get launched.


MY REPRODUCE :
1. Create a server (I tried with both Tomcat 5.5 and 6.0)
2. Add Web Project
3. Add JSP file
4. Run on Server
5. Server starts, web browser get launched => No bug

Conclusion:
This bug is fixed for lastest build 3.1M6. I tried with both Tomcat 5.5 and 6.0. Notify and confirm this on Bugzilla

Some screenshots for reproduce steps:









MessageBox and the return values

11:31 PM / Comments (3) / by Kevin Vu

Good news for me since Peter Liu is looking into my bug :). His knowledge and experience is sure going to help speeding up the progress of this bug :). Anyway, This post is to answer his email and to clear up my first walk through a bit.

My first walk through ends at the saveALl() method which is belong to class: EditorManager.class (package: org.eclipse.ui.internal;)


Method: saveAll()
Package: org.eclipse.ui.internal

// Use a simpler dialog if there's only one
if (modelsToSave.size() == 1) {
Saveable model = (Saveable) modelsToSave.get(0);
String message = NLS.bind(WorkbenchMessages.EditorManager_saveChangesQuestion, model.getName());
// Show a dialog.
String[] buttons = new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL };
MessageDialog d = new MessageDialog(
shellProvider.getShell(), WorkbenchMessages.Save_Resource,
null, message, MessageDialog.QUESTION, buttons, 0);


int choice = SaveableHelper.testGetAutomatedResponse();
if (SaveableHelper.testGetAutomatedResponse() == SaveableHelper.USER_RESPONSE) {
choice = d.open();
}

// Branch on the user choice.
// The choice id is based on the order of button labels
// above.
switch (choice) {
case ISaveablePart2.YES: // yes
break;
case ISaveablePart2.NO: // no
return true;
default:
case ISaveablePart2.CANCEL: // cancel
return false;
}
}


From the blocks of codes above:
MessageDialog d = new MessageDialog(...);
will define the Save Resource dialog

choice=d.open()
will display the dialog and get the return values when user click YES,NO,or CANCEL.

METHOD THAT DEFINE THE MESSAGEDIALOG:

package org.eclipse.jface.dialogs;
MessageDialog.class


public MessageDialog(Shell parentShell, String dialogTitle,
Image dialogTitleImage, String dialogMessage, int dialogImageType,
String[] dialogButtonLabels, int defaultIndex) {
super(parentShell);
this.title = dialogTitle;
this.titleImage = dialogTitleImage;
this.message = dialogMessage;

switch (dialogImageType) {
case ERROR: {
this.image = getErrorImage();
break;
}
case INFORMATION: {
this.image = getInfoImage();
break;
}
case QUESTION: {
this.image = getQuestionImage();
break;
}
case WARNING: {
this.image = getWarningImage();
break;
}
}
this.buttonLabels = dialogButtonLabels;
this.defaultButtonIndex = defaultIndex;
}


METHOD THAT DISPLAY AND GET THE RETURN VALUE:

package org.eclipse.jface.window;
Window.class

public int open() {

if (shell == null || shell.isDisposed()) {
shell = null;
// create the window
create();
}

// limit the shell size to the display size
constrainShellSize();

// open the window
shell.open();

// run the event loop if specified
if (block) {
runEventLoop(shell);
}

return returnCode;
}

The runEvenLoop(shell) will display and wait until user select one of the button (YES, NO, CANCEL).
The returnCode will return the value that user selected. I tried with YES, NO, CANCEL and the return values are:
YES: returnCode=0
NO: returnCode=1
CANCEL: returnCode=2


GO back to the saveAll() method.

switch (choice) {
case ISaveablePart2.YES: // yes
break;
case ISaveablePart2.NO: // no
return true;
default:
case ISaveablePart2.CANCEL: // cancel
return false;
}

choice will have the return value of open() method above.
If choice=YES, the saveAll() will process on and save all changes (code below), go back out, and server is launched with new configuration.
if choice is NO or CANCEL, saveAll() wont save and just return true or false, go back out, and server is launched with old configuration.


CODES THAT SAVE THE SERVER EDITOR belong to saveAll() method above.

// Create save block.
final List finalModels = modelsToSave;
IRunnableWithProgress progressOp = new IRunnableWithProgress() {
public void run(IProgressMonitor monitor) {
IProgressMonitor monitorWrap = new EventLoopProgressMonitor(
monitor);
monitorWrap.beginTask("", finalModels.size()); //$NON-NLS-1$
for (Iterator i = finalModels.iterator(); i.hasNext();) {
Saveable model = (Saveable) i.next();
// handle case where this model got saved as a result of saving another
if (!model.isDirty()) {
monitor.worked(1);
continue;
}
SaveableHelper.doSaveModel(model, new SubProgressMonitor(monitorWrap, 1), shellProvider, closing || confirm);
if (monitorWrap.isCanceled()) {
break;
}
}
monitorWrap.done();
}
};

// Do the save.
return SaveableHelper.runProgressMonitorOperation(
WorkbenchMessages.Save_All, progressOp, runnableContext, shellProvider);

Bug240698: Walkthrough - Part 1

10:35 AM / Comments (1) / by Kevin Vu

BUG SUMMARY:
1/ Add new server
2/ Edit Server
3/ Start Server
4/ "Save Resource" prompts. Select "No".
BUG: "Save Resource" prompts again asking for saving changes again even though selected "No" => Wrong behavior (Supposed to prompt one)

WALKTHROUGH 01
Let start at the point when we start the server and walkthrough to the point of "Save Resource" prompts.

I./ StartAction.java
Class defines methods to start servers

Method: public static void start(IServer server, String launchMode, final Shell shell)
This method is to start the server. So let's set a breakpoint here and step into.


Notice the ServerUIPlugin.saveEditors(). Let's step into this method.

II./ ServerUIPlugin.java
The server UI plugin class

Method: public static boolean saveEditors()

save dirty editors, if applicable
@return boolean - Returns false if the user cancelled the operation



Notice method "saveAllEditors". Let step into this method

III./ Workbench.class
primary responsability is the management of workbench windows, dialogs,
wizards, and other workbench-related windows.

Method: public boolean saveAllEditors(boolean confirm)
is to save all server editors


Notice method "EditorManager.saveAll". Let step into this method.

IV./ EditorManager.class
Manage a group of element editors. Prevent the creation of two editors on the same element.

Method: public static boolean saveAll
Saves the given dirty editors and views, optionally prompting the user.
@return true on success, false if the user canceled the save




Notice the red circle. This is where the first SaveResource dialog prompts for saving changes. User have 3 options:

YES: saveAll() method will process on and save all changes.
NO: saveAll() method will return TRUE
CANCEL: saveAll() method will return FALSE.

Eclipse WTP 3.1M5

10:28 AM / Comments (0) / by Kevin Vu

So I downloaded the lastest stable build of Eclipse WTP, bug240698 is still there (was hoping for a miracle :D). Anyway, let fix the thing! ...

What method is triggerred when select "Start" from server context menu?

9:04 PM / Comments (2) / by Kevin Vu

I'm trying to identify the method that is called when right-click on Tomcat server and select "Start". If anyone come across this method, could you please let me know the name of it? Thanks in advance!

Eclipse Plugin Development

1:21 AM / Comments (1) / by Kevin Vu

I followed Jordan's link on Wiki and find this site: eclipsepluginsite is very helpful to learn developing Eclipse plugins. It provides a hand-on tutorial on how to develop a simple but fully functional eclipse plugin. I've decided to add it in my TODO list for this semester. I properly will take it slow and just do it as a side project beside my bug fix for WTP but will try to manage getting it done by end of this semester. From the first look, the tutorial seems to cover pretty well all the processes from Start (introductions of architectures) to Finish (shipping the plugin as a product) so I think, It will give me a very good fundamental knowledge on developing Eclipse plugins if I go through.

There are 14 chapters in total so the plan is 2 or more chapters per week.

Chapter 01: Introduction to Eclipse Plugin Development
Chapter 02: SWT (Standard Widget Tookit)
Chapter 03: JFace
Chapter 04: Perspectives
Chapter 05: Actions
Chapter 06: Dialogs and Wizards
Chapter 07: Views
Chapter 08: Track Resource Changes
Chapter 09: Preference Pages
Chapter 10: Properties
Chapter 11: Editors
Chapter 12: Builders Natures And Markers
Chapter 13: Help
Chapter 14: Internationalzation

A quick first inspection

2:57 PM / Comments (0) / by Kevin Vu

I'm trying to grab all the classes, methods that are involved in producing the bug. It seems to narrow down to these packages and classes:

package org.eclipse.wst.server.core.internal;
classes:
* ModulePublishInfo.java
Publish information for a specific module on a specific server.
/* Observed: This class could be the center of the investigation since it has the save() and saveResource() methods. */

package rg.eclipse.wst.server.ui.editor;
Classes:
* OverviewEditorPart.java
Server General Editor page. This class extend from ServerEditorPart.

* ServerEditorPart.java
Provide editor page with error messages which will be displayed on the status bar

package org.eclipse.wst.server.ui.internal;
classes:
* Messages.java
Translate messages. This class declares messages.

Checking out and Locating Code for Bug240698

2:14 PM / Comments (0) / by Kevin Vu

The bug that I'm working on is related to the "save resource" dialog when editing server configuration (detail here). I've just located the code related to the bug successfully. Thanks to Mr. Angel Vera for his wonderful presentation and John Dang for his awesome "how to". At first, I missed the step where I actually have to check out the code first before doing the search. How silly was I trying to search without checking out :D. Spending almost 1h pulling my hair trying to figure out how come I got 0 result for all keywords I tried :( :D. Thank John for his how to. I read it again and figured out what I was missing. Anyway, I got the code at hand now. Starting the investigation ;).


The Procedures to locate the code:
1. Identify Bug's component: wst.server

2. Open CVS Repository Exploring Perspective

3. Expands "HEAD" -> Select and check out all items that begin with: org.eclipse.wst.server.* (19 items)

4. Search menu -> choose Search to search for "SaveResource".

5. Double click on the result to view the codes



A way to keep track of blogs I'm interested in.

8:58 AM / Comments (3) / by Kevin Vu

There are many free and good RSS Reader out there such as NewszCrawler, FeedDemon, Bloglines, etc. (more ...) but I like Google Reader. It has a simple, clean interface, easy to manage and the best part is I can just use my existing gmail account to login and don't have to register a new account for a new service.

1. Login to Google Reader: http://reader.google.com
javascript:void(0)
2. Click on Add A Subscription on the left panel -> Paste a feed URL(like below)-> Click Add

list of my fellows WTP Blogs:
Peter Liu: http://pliu.wordpress.com/
Jatinder Singh: http://jsinghfoss.wordpress.com/
Jian Feng Allen Xie: http://www.heyqule.net/blog/cat/oss
John Dang: http://jdeport.wordpress.com/
Nabeel Khan: http://opensourceproject.wordpress.com/
Tommy Lo: http://tlo5.blogspot.com/
Kevin Vu: http://kvuhome.blogspot.com/
Jesse Valianes: http://jvalianes.blogspot.com/



NOTE: I can take note in my reader, Add Star to keep track of interested Post, etc.

Reproduce Eclipse WTP Bug240698 - Severity Normal - Priority P3

11:44 PM / Comments (1) / by Kevin Vu

After hours of searching, I finally decided to work on Bug240698

STEPS TO REPRODUCE:

1. Run Eclipse WTP -> Change Perspective to JavaEE.

2. Right-Click on Server Tab -> New -> Server


3. Select Apache Tomcat 6.0 -> Click Next button


4. Browse to select your Tomcat Directory -> Click Finish


5. Press F3 to open Server editor

OR Right-Click on Tomcat Server -> Select Open


6. Make modification (change anything or just modify like below) BUT DO NOT SAVE


7. Right-Click on Tomcat Server -> Start


8. WTP prompt to Save Resource -> press No -> Dialog dismissed BUT REAPPEAR AGAIN (BUG) -> press No again -> Dialog permanently dismissed




Note: BUG doesn't occur if Yes or Cancel is pressed when Save Resource first prompt.

Observed: On the second prompt if Yes is pressed, modification will be saved.

Class Demo

12:08 PM / Comments (2) / by Kevin Vu

Hello, I'm in class right now ...;.

Reproducing Eclipse WTP Bug#: 173912

9:33 PM / Comments (2) / by Kevin Vu

This is my first time I try to reproduce an Eclipse WTP Bug and It was successfully reproduced the same just as Ian He, the reporter, reported.




Steps To Reproduce: (Bug#: 173912)
1. Create a dynamic web app named app1. Aim it at an APP server.
2. Create a class, com.whatever.MyClass, add the following methid, and save and
close.
public String getGreeting() {
return "Number one!";
}
3. Create a JSP, index.jsp, in the project's Web Content folder. Add the
following use bean directive just before the "META" tags:
<jsp:useBean id="bean" class="com.whatever.MyClass"
type="com.whatever.MyClass"></jsp:useBean>
Add the following expression in the BODY:
<p><%=bean.getGreeting()%></P>
4. Create a nother dynamic web project named app2.
5. Create a jsp index.jsp in app2 and also create com.whatever.MyClass and
change "Number one!" to "Number two!".
6. Set a breakpoint on the bean expression in app2's index.jsp.
7. Add both projects to the server.
8. Restart the server in debug mode.
9. Run app2's index.jsp on the server.
10. When the breakpoint is hit, select "bean" in the Variables view in the
debugger. Do <context menu>-->Open declared type. The Java editor will open,
but on app1's com.whatever.MyClass.

Revolution OS

10:16 PM / Comments (1) / by Kevin Vu

I've just finished watching this documentary. Very Interesting, entertain and informative. The pace is quick, make the 85 minutes time length went fast. Give you a good understanding about Linux and Open Source movements. Linus Torvalds, Richard Stallmans, Eric Raymond, etc. , those guys are so devoted and just so awesome with their passions and intelligences.

You can watch the video online here: Revolution OS

How to Install Apache Tomcat

7:15 PM / Comments (14) / by Kevin Vu

PART 01: INSTALLING APACHE TOMCAT 6.0.18
1/ Go to Tomcat Download site: http://tomcat.apache.org/download-60.cgi
2/ Look for 6.0.18->Binary Distributions->Core. Download and save the zip file (apache-tomcat-6.0.18.zip) to C:\ drive
3/ Extract the zip file to have C:\apache-tomcat-6.0.18\
4/ Rename folder “apache-tomcat-6.0.18” to “Apache
5/ Copy the following JAR files from apache lib folder (C:\Apache\lib\) to JDK's jre\lib\ext\ folder(C:\Program Files\Java\jdk1.6.0_11\jre\lib\ext\)
servlet-api.jar
jsp-api.jar
el-api.jar
tomcat-dhcp.jar

Note: Those 4 files above contains Java classes that need to be available to the JDK and JRE when you develop servlets and JSPs.

PART 02: SETTING JAVA_HOME ENVIRONMENT VARIABLE
1/ Browse to C:\Apache\bin\. Right click on “catalina.bat” and choose Edit
2/ Look for the following lines:
rem $Id: catalina.bat 656834 2008-05-15 21:04:04Z markt $
rem ---------------------------------------------------------------------------

rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%

3/ Add this line: set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_11\ in between like below:
rem $Id: catalina.bat 656834 2008-05-15 21:04:04Z markt $
rem ---------------------------------------------------------------------------
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_11\
rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%

4/ Save and close catalina.bat file.

PART 03: STARTING TOMCAT
1/ Open the command prompt (Start->Run->Type in cmd->click OK)
2/ Use DOS command (cd \Apache\bin) to navigate to C:\Apache\bin
3/ Type “startup” and hit enter. Tomcat will start and a Tomcat window will appear.

PART 04: STOPPING TOMCAT
Close the Tomcat window or type “shutdow” (C:\Apache\bin\shutdown) and hit enter at the DOS command prompt.

PART 05: TESTING TOMCAT
1/ Start Tomcat.
2/ Open your web browser.
3/ You can test the following addresses with your web browser:
http://localhost:8080/
http://localhost:8080/examples/servlets/
http://localhost:8080/examples/jsp/

Test Message

8:53 PM / Comments (1) / by Kevin Vu

Testing 1-2-3

WTP Getting Started!

6:31 PM / Comments (1) / by Kevin Vu

Finally I have finished registering and setting up all my pages and software. It was fun bookmarking and keeping track all my accounts :D. I'm really eager to dig into WTP Project right now but, I think, It would be best if I spend this week reviewing and sharpening my Java skills. Long break sure made me slow :(.