- Extension ID
- What's new?
- In what situation should you install this extension?
- Supported Google Web Toolkit (GWT) framework items
- Function Point, Quality and Sizing support
- CAST AIP compatibility
- Supported DBMS servers
- Prerequisites
- Dependencies with other extensions
- Download and installation instructions
- What results can you expect?
- Modules
- Views and event handlers
- Activities
- Remote resource services and remote operations
- Support of RestyGWT
- Support of AsyncProvider
- Limitations
Summary: This document provides basic information about the extension providing support for analyzing JEE applications (via the JEE Analyzer) that use the Google Web Toolkit (GWT) framework.
Extension ID
com.castsoftware.gwt
What's new?
Please see Google Web Toolkit - 1.0 - Release Notes for more information.
In what situation should you install this extension?
- If you have some imports starting with "com.google.gwt." in your java code.
- If you have some files with the extensions ".gwt.xml" and ".ui.xml" with your java code.
Supported Google Web Toolkit (GWT) framework items
- Modules present in files "*.gwt.xml".
- Views present in files "*.ui.xml" and links to their handler methods present in java code.
- Client/server links created through "@RemoteServiceRelativePath" java interface annotation.
Function Point, Quality and Sizing support
- Function Points (transactions): a green tick indicates that OMG Function Point counting and Transaction Risk Index are supported
- Quality and Sizing: a green tick indicates that CAST can measure size and that a minimum set of Quality Rules exist
Function Points (transactions) | Quality and Sizing |
---|---|
CAST AIP release | Supported |
---|---|
8.3.x |
Supported DBMS servers
This extension is compatible with the following DBMS servers:
CSS/PostgreSQL |
---|
Prerequisites
An installation of any compatible release of AIP Core (see table above) |
Dependencies with other extensions
Some CAST extensions require the presence of other CAST extensions in order to function correctly. The Google Web Toolkit extension requires that the following other CAST extensions are also installed:
- JEE Analyzer
- Web Services Linker
- com.castsoftware.internal.platform (internal extension)
The JEE Analyzer is not strictly a dependency, but since this extension is always installed with AIP Core, you do not need to do anything.
Download and installation instructions
Please see:
What results can you expect?
Objects
The following objects are displayed in CAST Enlighten:
Icon | Description |
---|---|
GWT Module | |
GWT View | |
GWT Activity | |
GWT Event Handler | |
GWT Remote resource service | |
GWT Remote Operation | |
GWT Post resource service | |
GWT Get resource service | |
GWT Put resource service | |
GWT Delete resource service |
Modules
MobileWebApp.gwt.xml:
- The "rename-to" value is used as the module name.
- The "entry-point" tag is used for the class which contains the UI initialisation.
<module rename-to='mobilewebapp'> <!-- Inherit the core Web Toolkit stuff. --> <inherits name='com.google.gwt.activity.Activity'/> ... <!-- Specify the app entry point class. --> <entry-point class='com.google.gwt.sample.mobilewebapp.client.MobileWebApp'/> ... </module>
MobileWebApp.java:
import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; public class MobileWebApp implements EntryPoint { public void onModuleLoad() { ClientFactory clientFactory = GWT.create(ClientFactory.class); clientFactory.getApp().run(RootLayoutPanel.get()); } }
Links from the module to the initialisation java methods are created.
Views and event handlers
View and java class have the same file names, but differ by their extension (".ui.xml" for the view and ".java" for the class). Handler and view are matched using "ui:field" value in view and "@UiField" class members.
MobileTaskEditView.ui.xml (view code):
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:app="urn:import:com.google.gwt.sample.mobilewebapp.client.ui"> ... <g:Button ui:field="saveButton" addStyleNames="{style.button}">Done</g:Button> ... </ui:UiBinder>
MobileTaskEditView.java (Event handler code):
import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; public class MobileTaskEditView extends Composite implements TaskEditView { @UiField Button saveButton; public MobileTaskEditView() { initWidget(uiBinder.createAndBindUi(this)); nameEditor = EditorDecorator.create(nameField.asEditor(), nameViolation); driver.initialize(this); saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { if (presenter != null) { presenter.saveTask(); } } }); } }
A view can be linked directly to a java method when the java method is annotated with "@UiHandler":
ValidationView.ui.xml
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> ... <g:Button styleName="{style.close}" ui:field="closeButton">Close</g:Button> ... </ui:UiBinder>
ValidationView.java
public class ValidationView extends Composite { @UiHandler("closeButton") public void doClick(ClickEvent e) { dialogBox.hide(); sendButton.setEnabled(true); sendButton.setFocus(true); } }
Activities
import com.google.gwt.activity.shared.AbstractActivity; public class TraitementASideBarActivity extends AbstractActivity implements TraitementASideBarView.Presenter { public void start(AcceptsOneWidget panel, EventBus eventBus) { } }
A callLink is created to the "start", "mayStop", "onCancel", "onStop" class methods.
Remote resource services and remote operations
They are created when the interface "@RemoteServiceRelativePath" annotation is present.
GreetingService.java
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @RemoteServiceRelativePath("greet") public interface GreetingService extends RemoteService { SafeHtml greetServer(Person name); }
GreetingServiceImpl.java
import com.google.gwt.sample.validation.client.GreetingService; public class GreetingServiceImpl extends RemoteServiceServlet implements GreetingService { public SafeHtml greetServer(Person person) { ... } }
The operation is created from the class implementing the interface. The difficult part is to find from where the resource service is called, and because there is no class implementing the interface on the client side, an instance is created directly from the interface using GWT.create. For example:
GreetingServiceAsync greetingService = GWT.create(GreetingService.class); ... greetingService.greetServer(...);
Support of RestyGWT
import org.fusesource.restygwt.client.RestService; public interface IDetailServiceAsync extends RestService { @GET @Path("resupererDossier") public void listeContrat(...); @POST @Path("verificationPerimetreContrat/{codeOfrCial}/{codeSysInfo}/{codeAppli}") public void verificationPerimetreContrat(...); }
Support of AsyncProvider
Classes which inherit from "com.google.gwt.core.client.AsyncProvider" have a "get" method. A link is created from their constructor to this method.
import com.google.gwt.core.client.AsyncProvider; public class AnalyseDemandeAsyncProvider implements AsyncProvider<Activity, Throwable> { @Override public void get(final Callback<? super Activity, ? super Throwable> callback) { } }
Limitations
- Resource services corresponding to com.google.gwt.http.client.RequestBuilder.sendRequest" and using "com.google.gwt.http.client.RequestBuilder".