JBoss Tools SVN: r1997 - in trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui: views and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: rob.stryker(a)jboss.com
Date: 2007-05-03 14:23:35 -0400 (Thu, 03 May 2007)
New Revision: 1997
Modified:
trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/ArchivesUIMessages.java
trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java
Log:
Removed the null pointer error.
Behavior upon closing and re-opening view is still buggy.
Attachment added. If anyone is familiar with global selection service
and what might be causing this feel free to advise.
Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/ArchivesUIMessages.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/ArchivesUIMessages.java 2007-05-03 16:52:14 UTC (rev 1996)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/ArchivesUIMessages.java 2007-05-03 18:23:35 UTC (rev 1997)
@@ -9,9 +9,7 @@
public static String NewJARWizard_windowTitle_editJAR;
public static String PackageInfoWizardPage_compressedButton_label;
- public static String PackageInfoWizardPage_customManifest_label;
public static String PackageInfoWizardPage_destination_label;
- public static String PackageInfoWizardPage_error_noManifest;
public static String PackageInfoWizardPage_error_noPackageName;
public static String PackageInfoWizardPage_error_packageAlreadyExists;
public static String PackageInfoWizardPage_error_noDestination;
Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java 2007-05-03 16:52:14 UTC (rev 1996)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java 2007-05-03 18:23:35 UTC (rev 1997)
@@ -25,8 +25,11 @@
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
+import org.eclipse.ui.INullSelectionListener;
import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;
@@ -55,14 +58,25 @@
public ProjectArchivesView() {
instance = this;
selectionListener = createSelectionListener();
- PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().addSelectionListener(selectionListener);
+ }
+
+ public void init(IViewSite site) throws PartInitException {
+ super.init(site);
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().addPostSelectionListener(selectionListener);
ArchivesCore.getInstance().addModelListener(this);
}
+ public void dispose() {
+ super.dispose();
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().removePostSelectionListener(selectionListener);
+ ArchivesCore.getInstance().removeModelListener(this);
+ }
+
protected ISelectionListener createSelectionListener() {
- return new ISelectionListener() {
+ return new INullSelectionListener() {
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ System.out.println("selection changed: " + selection);
if (!(selection instanceof IStructuredSelection))
return;
17 years, 8 months
JBoss Tools SVN: r1996 - in trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui: views/server and 2 other directories.
by jbosstools-commits@lists.jboss.org
Author: rob.stryker(a)jboss.com
Date: 2007-05-03 12:52:14 -0400 (Thu, 03 May 2007)
New Revision: 1996
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/JBossServerTableViewer.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/ServerTableViewer.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/JBossServerViewExtension.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/ServerViewProvider.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/FilesetViewProvider.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/ModuleViewProvider.java
Log:
Changes to API for the viewer in response to EXIN-150 and EXIN-149
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java 2007-05-03 14:47:03 UTC (rev 1995)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/JBossServerUIPlugin.java 2007-05-03 16:52:14 UTC (rev 1996)
@@ -22,16 +22,13 @@
package org.jboss.ide.eclipse.as.ui;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.wst.server.core.IServer;
import org.jboss.ide.eclipse.as.core.JBossServerCorePlugin;
import org.jboss.ide.eclipse.as.ui.views.server.extensions.ServerViewProvider;
import org.osgi.framework.BundleContext;
@@ -107,11 +104,11 @@
- public ServerViewProvider[] getEnabledViewProviders() {
+ public ServerViewProvider[] getEnabledViewProviders(IServer server) {
ServerViewProvider[] serverViewExtensions = getAllServerViewProviders();
ArrayList list = new ArrayList();
for( int i = 0; i < serverViewExtensions.length; i++ ) {
- if( serverViewExtensions[i].isEnabled()) {
+ if( serverViewExtensions[i].isEnabled() && serverViewExtensions[i].supports(server)) {
list.add(serverViewExtensions[i]);
}
}
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/JBossServerTableViewer.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/JBossServerTableViewer.java 2007-05-03 14:47:03 UTC (rev 1995)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/JBossServerTableViewer.java 2007-05-03 16:52:14 UTC (rev 1996)
@@ -1,6 +1,9 @@
package org.jboss.ide.eclipse.as.ui.views.server;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import org.eclipse.jface.action.Action;
@@ -186,7 +189,10 @@
public Object[] getElements(Object inputElement) {
if( inputElement == null ) return new Object[0];
- return JBossServerUIPlugin.getDefault().getEnabledViewProviders();
+ IServer tmp = (IServer)getInput();
+ if( tmp == null )
+ return new Object[0];
+ return JBossServerUIPlugin.getDefault().getEnabledViewProviders(tmp);
}
public Object[] getChildren(Object parentElement) {
@@ -225,7 +231,8 @@
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- ServerViewProvider[] providers = JBossServerUIPlugin.getDefault().getEnabledViewProviders();
+ ServerViewProvider[] providers = JBossServerUIPlugin.getDefault().
+ getEnabledViewProviders(newInput instanceof IServer ? (IServer)newInput : null);
for( int i = 0; i < providers.length; i++ ) {
try {
providers[i].getDelegate().getContentProvider().inputChanged(viewer, oldInput, newInput);
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/ServerTableViewer.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/ServerTableViewer.java 2007-05-03 14:47:03 UTC (rev 1995)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/ServerTableViewer.java 2007-05-03 16:52:14 UTC (rev 1996)
@@ -86,7 +86,7 @@
public class TrimmedServerContentProvider implements IStructuredContentProvider, ITreeContentProvider {
public Object[] getElements(Object element) {
- return ServerConverter.getDeployableServersAsIServers();
+ return ServerCore.getServers();
}
public void inputChanged(Viewer theViewer, Object oldInput, Object newInput) {
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/JBossServerViewExtension.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/JBossServerViewExtension.java 2007-05-03 14:47:03 UTC (rev 1995)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/JBossServerViewExtension.java 2007-05-03 16:52:14 UTC (rev 1996)
@@ -1,5 +1,6 @@
package org.jboss.ide.eclipse.as.ui.views.server.extensions;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
@@ -8,6 +9,9 @@
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.wst.server.core.IServer;
+import org.jboss.ide.eclipse.as.core.server.JBossServer;
+import org.jboss.ide.eclipse.as.core.server.attributes.IDeployableServer;
import org.jboss.ide.eclipse.as.ui.preferencepages.ViewProviderPreferenceComposite;
import org.jboss.ide.eclipse.as.ui.views.server.JBossServerView;
import org.jboss.ide.eclipse.as.ui.views.server.JBossServerTableViewer.ContentWrapper;
@@ -99,4 +103,20 @@
protected void addElement(Object parent, Object child) {
JBossServerView.getDefault().getJBViewer().add(new ContentWrapper(parent, provider), new ContentWrapper(child, provider));
}
+
+ // what servers should i show for?
+ protected boolean supports(IServer server) {
+ if( server == null ) return false;
+ return isJBossDeployable(server);
+ }
+
+ // show for anything that's jboss deployable
+ protected boolean isJBossDeployable(IServer server) {
+ return (IDeployableServer)server.loadAdapter(IDeployableServer.class, new NullProgressMonitor()) != null;
+ }
+
+ // show only for full jboss servers
+ protected boolean isJBossServer(IServer server) {
+ return (JBossServer)server.loadAdapter(JBossServer.class, new NullProgressMonitor()) != null;
+ }
}
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/ServerViewProvider.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/ServerViewProvider.java 2007-05-03 14:47:03 UTC (rev 1995)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/extensions/ServerViewProvider.java 2007-05-03 16:52:14 UTC (rev 1996)
@@ -5,6 +5,7 @@
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.server.core.IServer;
import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin;
import org.osgi.framework.Bundle;
@@ -108,6 +109,9 @@
}
}
+ public boolean supports(IServer server) {
+ return getDelegate().supports(server);
+ }
public int getWeight() {
return weight;
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/FilesetViewProvider.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/FilesetViewProvider.java 2007-05-03 14:47:03 UTC (rev 1995)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/FilesetViewProvider.java 2007-05-03 16:52:14 UTC (rev 1996)
@@ -78,15 +78,17 @@
createFilter = new Action() {
public void run() {
IDeployableServer server = (IDeployableServer)contentProvider.server.loadAdapter(IDeployableServer.class, new NullProgressMonitor());
- FilesetDialog d = new FilesetDialog(new Shell(), server);
- if( d.open() == Window.OK ) {
- Fileset fs = d.getFileset();
- Fileset[] filesetsNew = new Fileset[filesets.length + 1];
- System.arraycopy(filesets, 0, filesetsNew, 0, filesets.length);
- filesetsNew[filesetsNew.length-1] = fs;
- filesets = filesetsNew;
- saveFilesets(true);
- refreshViewer();
+ if( server != null ) {
+ FilesetDialog d = new FilesetDialog(new Shell(), server);
+ if( d.open() == Window.OK ) {
+ Fileset fs = d.getFileset();
+ Fileset[] filesetsNew = new Fileset[filesets.length + 1];
+ System.arraycopy(filesets, 0, filesetsNew, 0, filesets.length);
+ filesetsNew[filesetsNew.length-1] = fs;
+ filesets = filesetsNew;
+ saveFilesets(true);
+ refreshViewer();
+ }
}
}
};
@@ -186,7 +188,7 @@
public IServer server;
public Object[] getChildren(Object parentElement) {
if( parentElement instanceof ServerViewProvider ) {
- return filesets;
+ return filesets == null ? new Object[]{} : filesets;
} else if( parentElement instanceof Fileset ) {
Fileset fs = (Fileset)parentElement;
IPath[] paths = ArchivesCore.findMatchingPaths(
@@ -227,12 +229,14 @@
IServer server = contentProvider.server;
if( server != null ) {
IDeployableServer jbs = (IDeployableServer)server.loadAdapter(IDeployableServer.class, new NullProgressMonitor());
- ServerAttributeHelper helper = jbs.getAttributeHelper();
- List tmp = helper.getAttribute(FILESET_KEY, new ArrayList());
- String[] asStrings = (String[]) tmp.toArray(new String[tmp.size()]);
- filesets = new Fileset[asStrings.length];
- for( int i = 0; i < asStrings.length; i++ ) {
- filesets[i] = new Fileset(asStrings[i]);
+ if( jbs != null ) {
+ ServerAttributeHelper helper = jbs.getAttributeHelper();
+ List tmp = helper.getAttribute(FILESET_KEY, new ArrayList());
+ String[] asStrings = (String[]) tmp.toArray(new String[tmp.size()]);
+ filesets = new Fileset[asStrings.length];
+ for( int i = 0; i < asStrings.length; i++ ) {
+ filesets[i] = new Fileset(asStrings[i]);
+ }
}
}
}
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/ModuleViewProvider.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/ModuleViewProvider.java 2007-05-03 14:47:03 UTC (rev 1995)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/ModuleViewProvider.java 2007-05-03 16:52:14 UTC (rev 1996)
@@ -118,6 +118,10 @@
return labelProvider;
}
+ public boolean supports(IServer server) {
+ return true;
+ }
+
class ModuleContentProvider implements ITreeContentProvider {
17 years, 8 months
JBoss Tools SVN: r1995 - trunk/documentation/GettingStartedGuide/docs/userguide/en.
by jbosstools-commits@lists.jboss.org
Author: afedosik
Date: 2007-05-03 10:47:03 -0400 (Thu, 03 May 2007)
New Revision: 1995
Modified:
trunk/documentation/GettingStartedGuide/docs/userguide/en/master.xml
Log:
Modified: trunk/documentation/GettingStartedGuide/docs/userguide/en/master.xml
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/master.xml 2007-05-03 14:44:22 UTC (rev 1994)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/master.xml 2007-05-03 14:47:03 UTC (rev 1995)
@@ -3,13 +3,11 @@
"../../../../resources/support/docbook-dtd/docbookx.dtd"
[<!ENTITY GettingStartedWithRHDS SYSTEM "modules/GettingStartedWithRHDS.xml">
+<!ENTITY GettingStartedGuideforJSFwithHibernate SYSTEM "modules/GettingStartedGuideforJSFwithHibernate.xml">
+<!ENTITY GettingStartedGuideforJavaServerFaces SYSTEM "modules/GettingStartedGuideforJavaServerFaces.xml">
<!ENTITY GettingStartedForCreatingaJSFApplication SYSTEM "modules/GettingStartedForCreatingAJSFApplication.xml">
<!ENTITY GettingStartedGuideforCreatingaStrutsApplication SYSTEM "modules/GettingStartedGuideforCreatingaStrutsApplication.xml">
<!ENTITY GettingStartedStrutsValidationExamples SYSTEM "modules/GettingStartedStrutsValidationExamples.xml">
-<!ENTITY GettingStartedGuideforJSFwithHibernate SYSTEM "modules/GettingStartedGuideforJSFwithHibernate.xml">
-<!ENTITY GettingStartedGuideforJavaServerFaces SYSTEM "modules/GettingStartedGuideforJavaServerFaces.xml">
-
-
]>
<book>
@@ -29,10 +27,10 @@
&GettingStartedWithRHDS;
+&GettingStartedGuideforJSFwithHibernate;
&GettingStartedForCreatingaJSFApplication;
&GettingStartedGuideforCreatingaStrutsApplication;
&GettingStartedStrutsValidationExamples;
-&GettingStartedGuideforJSFwithHibernate;
<!--
&GettingStartedGuideforJavaServerFaces;
-->
17 years, 8 months
JBoss Tools SVN: r1994 - trunk.
by jbosstools-commits@lists.jboss.org
Author: max.andersen(a)jboss.com
Date: 2007-05-03 10:44:22 -0400 (Thu, 03 May 2007)
New Revision: 1994
Removed:
trunk/deprecated/
trunk/jsr88/
Log:
remove non-working/non-maintained plugin.
17 years, 8 months
JBoss Tools SVN: r1993 - trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards.
by jbosstools-commits@lists.jboss.org
Author: rob.stryker(a)jboss.com
Date: 2007-05-03 10:06:58 -0400 (Thu, 03 May 2007)
New Revision: 1993
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/AbstractJBossServerWizardFragment.java
Log:
EXIN-148 - added index = -1 check, best I can do on such little information
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/AbstractJBossServerWizardFragment.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/AbstractJBossServerWizardFragment.java 2007-05-03 11:03:01 UTC (rev 1992)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/AbstractJBossServerWizardFragment.java 2007-05-03 14:06:58 UTC (rev 1993)
@@ -314,7 +314,8 @@
break;
case JRE_CHANGED:
int sel = jreCombo.getSelectionIndex();
- selectedVM = (IVMInstall) installedJREs.get(sel);
+ if( sel != -1 )
+ selectedVM = (IVMInstall) installedJREs.get(sel);
break;
case CONFIG_CHANGED:
break;
17 years, 8 months
JBoss Tools SVN: r1992 - in trunk/documentation/GettingStartedGuide/docs/userguide/en: modules and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: smukhina
Date: 2007-05-03 07:03:01 -0400 (Thu, 03 May 2007)
New Revision: 1992
Added:
trunk/documentation/GettingStartedGuide/docs/userguide/en/images/install.png
trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedForCreatingaJSFApplication.xml
trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforCreatingaStrutsApplication.xml
trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJSFwithHibernate.xml
trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJavaServerFaces.xml
trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedStrutsValidationExamples.xml
trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml
trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml.bak
Log:
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/images/install.png
===================================================================
(Binary files differ)
Property changes on: trunk/documentation/GettingStartedGuide/docs/userguide/en/images/install.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedForCreatingaJSFApplication.xml
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedForCreatingaJSFApplication.xml (rev 0)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedForCreatingaJSFApplication.xml 2007-05-03 11:03:01 UTC (rev 1992)
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="GettingStartedForCreatingAJSFApplication" xreflabel="GettingStartedForCreatingAJSFApplication">
+ <?dbhtml filename="GettingStartedForCreatingAJSFApplication.html"?>
+ <chapterinfo>
+ <keywordset>
+ <keyword>Red Hat Developer Studio</keyword>
+ <keyword>JSF application</keyword>
+ <keyword>Java</keyword>
+ </keywordset>
+ </chapterinfo>
+
+ <title>Getting Started Guide for
+Creating a JSF Application</title>
+<section id="CreatingAJSFApplication">
+<?dbhtml filename="GettingStartedForCreatingAJSFApplication.html"?>
+<title>Creating a Simple JSF Application</title>
+<para>We are going to show you how to create a simple JSF application using the Red Hat Developer Studio
+ plug-in for Eclipse. The completed application will ask a user to enter a name and click
+a button. The resulting new page will display the familiar message, "Hello <name>!"
+This document will show you how to create such an application from the beginning, along
+the way demonstrating some of the powerful features of Red Hat Developer Studio. You will design the
+JSF application and then run the application from inside Red Hat Developer Studio.
+We'll assume that you have already launched Eclipse with Red Hat Developer Studio installed and
+also that the Red Hat Developer Studio perspective is the current perspective. (If not, make it active by
+selecting Window/Open Perspective/Red Hat Developer Studio from the menu bar or by selecting Window/
+Open Perspective/Other... from the menu bar and then selecting Red Hat Developer Studio from
+the Select Perspective dialog box.)</para>
+</section>
+<section id="SettingUpTheProject">
+<?dbhtml filename="SettingUpTheProject.html"?>
+<title>Setting Up the Project</title>
+<para>We are first going to create a new project for the application.</para>
+<orderedlist>
+<listitem><para>Go to the menu bar and select File/New/Project... .</para></listitem>
+<listitem><para>Select Red Hat Developer Studio/JSF Project in the New Project dialog box.</para></listitem>
+<listitem><para>Click Next</para></listitem>
+<listitem><para>Enter jsfHello as the project name.</para></listitem>
+<listitem><para>Leave everything else as is, and click Finish.</para></listitem>
+
+</orderedlist>
+</section>
+<section id="TheJSFApplicationConfigurationFile">
+<?dbhtml filename="TheJSFApplicationConfigurationFile.html"?>
+<title>The JSF Application Configuration File</title>
+<para>A jsfHello node should appear in the upper-left Package Explorer view.</para>
+<orderedlist continuation="continues">
+<listitem><para>Click the plus sign next to jsfHello to reveal the child nodes.</para></listitem>
+<listitem><para>Click the plus sign next to WebContent under jsfHello.</para></listitem>
+<listitem><para>Click the plus sign next to WEB-INF under WebContent.</para></listitem>
+
+<listitem><para>Then double-click on the faces-config.xml node to display the JSF application configuration file editor.</para></listitem>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+</orderedlist>
+</section>
+<section id="AddingNavigationToTheApplication">
+<?dbhtml filename="AddingNavigationToTheApplication.html"?>
+<title>Adding Navigation to the Application</title>
+<para>In our simple application, the flow is defined as a single navigation rule connecting two
+views (presentation files). At this point, we will create the placeholders for the two JSP presentation
+files and then the navigation rule to connect them as views. Later, we will complete
+the coding for the JSP presentation files. With Red Hat Developer Studio, we can do all of this in the
+Diagram mode of the configuration file editor.</para>
+<section id="AddingTwoViews(JSPPages)">
+<?dbhtml filename="AddingTwoViews(JSPPages).html"?>
+<title>Adding Two Views (JSP Pages)</title>
+<orderedlist continuation="continues">
+<listitem><para>Right-click anywhere on the diagram and select New View... from the pop-up
+menu</para></listitem>
+<listitem><para>In the dialog box, type pages/inputname as the value for From-view-id</para></listitem>
+<listitem><para>Leave everything else as is</para></listitem>
+<listitem><para>Click Finish.</para>
+<para>If you look in the Package Explorer view you should see a pages folder under WebContent. Opening it
+will reveal the JSP file you just created</para>
+</listitem>
+<listitem><para>Back on the diagram, right-click anywhere and select New View... from the popup
+menu</para></listitem>
+<listitem><para>In the dialog box, type pages/greeting as the value for From-view-id</para></listitem>
+<listitem><para>Leave everything else as is</para></listitem>
+<listitem><para>Click Finish</para></listitem>
+</orderedlist>
+<section id="CreatingTheTransition(NavigationRule)">
+<?dbhtml filename="CreatingTheTransition(NavigationRule).html"?>
+<title>Creating the Transition (Navigation Rule)</title>
+<orderedlist continuation="continues">
+<listitem><para>In the diagram, select the connection icon third from the top along the upper left
+side of the diagram</para></listitem>
+</orderedlist>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+
+<para>to get an arrow cursor with a two-pronged plug at the arrow's bottom.</para>
+<orderedlist continuation="continues">
+<listitem><para>Click on the pages/inputname page icon and then click on the pages/greeting page icon</para></listitem>
+
+</orderedlist>
+<para>A transition should appear between the two icons.</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<orderedlist continuation="continues">
+<listitem><para>Select File/Save from the menu bar.</para></listitem>
+</orderedlist>
+</section>
+</section>
+</section>
+<section id="AddingAManagedBeanToTheApplication">
+<?dbhtml filename="AddingAManagedBeanToTheApplication.html"?>
+<title>Adding a Managed Bean to the Application</title>
+<para>To store data in the application, we will use a managed bean.</para>
+<orderedlist continuation="continues">
+<listitem><para>Click on the Tree tab at the bottom of the editing window</para></listitem>
+<listitem><para>Select the Managed Beans node and then click the Add... button displayed along
+the right side of the editor window</para></listitem>
+<listitem><para>Type in jsfHello.PersonBean for Class and personBean for Name. Leave
+Scope as is and Generate Source Code as is (checked)</para></listitem>
+<listitem><para>Click Finish</para></listitem>
+<listitem><para>personBean will now be selected and three sections of information, Managed
+Bean, Properties, and Advanced, will be displayed about it. Under the Properties
+section, click the Add... button</para></listitem>
+<listitem><para>For Property-Name type in name. Leave everything else as is. (When Property-
+Class is not filled in, String is the assumed type.)</para></listitem>
+<listitem><para>Click Finish</para></listitem>
+<listitem><para>Select the personBean node in the tree</para></listitem>
+</orderedlist>
+<para>You should see this now:</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<orderedlist continuation="continues">
+<listitem><para>Select File/Save from the menu bar.</para></listitem>
+</orderedlist>
+<para>You have now registered the managed bean and created a stub-coded class file for it.</para>
+</section>
+<section id="EditingTheJSPViewFiles">
+<?dbhtml filename="EditingTheJSPViewFiles.html"?>
+<title>Editing the JSP View Files</title>
+
+<para>Now we will finish editing the JSP files for our two "views" using Exadel's JSP Visual Page</para>
+<section id="Inputname.jsp">
+<title>inputname.jsp</title>
+<orderedlist continuation="continues">
+<listitem><para>Click on the Diagram tab for the configuration file editor</para></listitem>
+<listitem><para>Open the editor for this first JSP file by double-clicking on the /pages/inputname.
+jsp icon</para></listitem>
+</orderedlist>
+
+<para>The Visual Page Editor will open in a screen split between source code along the top and
+a WYSIWIG view along the bottom:</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<para>Some JSF code will already be in the file because we selected a template when creating the page.</para>
+<orderedlist continuation="continues">
+<listitem><para>Select the Visual tab, so we can work with the editor completely in its WYSIWYG
+mode</para></listitem>
+<listitem><para>To the right of the editor, in the Exadel Palette, expand the JSF HTML palette folder
+by selecting it</para></listitem>
+</orderedlist>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<orderedlist continuation="continues">
+<listitem><para>34. Click on form within this folder, drag the cursor over to the editor,
+and drop it inside the red box in the editor</para></listitem>
+
+<listitem><para>Another red box will appear inside the first red box.</para></listitem>
+
+<listitem><para>Right-click on the innermost box and select <h:form> Attributes from the menu</para></listitem>
+<listitem><para>In the value field next to id, type greeting and click on the Close button</para></listitem>
+<listitem><para>Type Please enter name: inside the boxes</para></listitem>
+<listitem><para>Select inputText within the JSF HTML palette folder and drag it into the innermost
+box in the editor after "Please enter name:"</para></listitem>
+<listitem><para>In the attributes dialog, click in the value field next to the value attribute and click
+on the ... button</para></listitem>
+<listitem><para>Then, select the Managed Beans/personBean/name node and click on the Ok
+button</para></listitem>
+<listitem><para>Back in the attributes dialog, select the Advanced tab, type in name as the value
+for the id attribute, and then click on the Finish button</para></listitem>'
+<listitem><para>Select commandButton within the JSF HTML palette folder and drag it into the
+innermost box in the editor after the input box</para></listitem>
+<listitem><para>In the attributes dialog, click in the value field next to the action attribute and click
+on the ... button</para></listitem>
+<listitem><para>Then, select the View Actions/greeting node and click on the Ok button</para></listitem>
+<listitem><para>Back in the attributes dialog box, type in Say Hello as the value for the value
+attribute ("Say Hello") and then click on the Finish button</para></listitem>
+</orderedlist>
+<para>The source coding should be something like this now:</para>
+<programlisting role="XML"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<html>
+<head>
+<title></title>
+</head>
+<body>
+<f:view>
+<h:form id="greeting">
+<para>Please enter a name:</para>
+<h:inputText id="name" value="#{personBean.name}"/>
+<h:commandButton value=" Say Hello " action="greeting"/>
+</h:form>
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<para>The editor should look like this:</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<orderedlist continuation="continues">
+<listitem><para>Save the file by selecting File/Save from the menu bar.</para></listitem>
+</orderedlist>
+</section>
+<section id="Greeting.jsp">
+<title>greeting.jsp</title>
+<orderedlist continuation="continues">
+<listitem><para>Click on the faces-config.xml tab to bring the diagram back</para></listitem>
+<listitem><para>Open the editor for the second file by double-clicking on the /pages/greeting.jsp
+icon</para></listitem>
+<listitem><para>Select the Visual tab, so we can work with the editor completely in its WYSIWYG
+mode</para></listitem>
+<listitem><para>Type Hello (note space after hello) into the box</para></listitem>
+<listitem><para>Select outputText within the JSF HTML palette folder and drag it into the innermost
+box in the editor after "Hello"</para></listitem>
+<listitem><para>In the attributes dialog, click in value field next to the value attribute and click on
+the ... button</para></listitem>
+<listitem><para>Then, select the Managed Beans/personBean/name node, click on the Ok button,
+and then click on the Finish button</para></listitem>
+<listitem><para>Right after the output field, type an exclamation point (!)</para></listitem>
+</orderedlist>
+<para>The source coding should be something like this now:</para>
+<programlisting role="XML"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<html>
+<head>
+<title></title>
+</head>
+<body>
+<f:view>
+Hello <h:outputText value="#{personBean.name}"/>!
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>Save the file.</para></listitem></orderedlist>
+</section>
+</section>
+<section id="CreatingTheStartPage">
+<?dbhtml filename="CreatingTheStartPage.html"?>
+<title>Creating the Start Page</title>
+<para>You also need to create a start page as an entry point into the application.</para>
+<orderedlist continuation="continues">
+<listitem><para>In the Package Explorer view to the left, right-click jsfHello/WebContent and select
+New/JSP File</para></listitem>
+<listitem><para>For Name type in index, for Template select JSPRedirect and click Finish.</para></listitem>
+</orderedlist>
+<para>A JSP editor will open up on the newly created file.</para>
+
+<orderedlist continuation="continues">
+<listitem><para>In the Source part of the split screen, type /pages/inputname.jsf in between
+the quotes for the page attribute</para></listitem>
+</orderedlist>
+<para>The source coding should look like this now:</para>
+<programlisting role="JSP"><![CDATA[<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head></head>
+<body>
+<jsp:forward page="/pages/inputname.jsf" />
+</body>
+</html>
+]]></programlisting>
+
+<para>Note the .jsf extension for the file name. This is a mapping defined in the web.xml file
+for the project for invoking JavaServer Faces when you run the application.</para>
+<orderedlist continuation="continues">
+<listitem><para>Select File/Save from the menu bar.</para></listitem>
+</orderedlist>
+</section>
+<section id="RunningTheApplicationJSF">
+<?dbhtml filename="RunningTheApplicationJSF.html"?>
+<title>Running the Application</title>
+<para>Everything is now ready for running our application without having to leave Red Hat Developer Studio
+by using the Tomcat engine that comes with the Red Hat Developer Studio plug-in. For controlling
+Tomcat within Red Hat Developer Studio, the toolbar contains a special panel</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<orderedlist continuation="continues">
+<listitem><para>Start up Tomcat by clicking on the first icon from left. (If Tomcat is already running,
+stop it by clicking on the third icon from the left and then start it again. Remember,
+the JSF run-time requires restarting the servlet engine when any changes have been
+made.) After the messages in the Console tabbed view stop scrolling, Tomcat is available.</para></listitem>
+
+<listitem><para>Click on the Red Hat run icon in the toolbar:</para></listitem>
+</orderedlist>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<para>This is the equivalent of launching the browser and typing http://localhost:8080/jsfHello into your
+ browser. Our JSF application should now appear.</para>
+ </section>
+ </chapter>
\ No newline at end of file
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforCreatingaStrutsApplication.xml
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforCreatingaStrutsApplication.xml (rev 0)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforCreatingaStrutsApplication.xml 2007-05-03 11:03:01 UTC (rev 1992)
@@ -0,0 +1,420 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<chapter id="GettingStartedGuideforCreatingaStrutsApplication" xreflabel="GettingStartedGuideforCreatingaStrutsApplication">
+ <?dbhtml filename="GettingStartedGuideforCreatingaStrutsApplication.html"?>
+ <title>Getting Started Guide for Creating a Struts Application</title>
+<para>We are going to show you how to create a simple Struts application using the Red Hat Developer Studio
+plug-in for Eclipse. The completed application will ask a user to enter a name and click a button.
+The resulting new page will display the familiar message, Hello <name>!</para>
+<para>This document will show you how to create such an application from the beginning, along
+the way demonstrating some of the powerful features of Red Hat Developer Studio. You will design the
+application, generate stub code for the application, fill in the stub coding, compile the application,
+and run the application all from inside Red Hat Developer Studio.</para>
+<para>Well assume that you have already launched Eclipse with Exadel Studio or Exadel Studio
+Pro installed and also that the Red Hat Developer Studio perspective is the current perspective. (If not,
+make it active by selecting Window/Open Perspective/Red Hat Developer Studio from the menu bar.)</para>
+
+ <section id="StartingUp">
+ <title>Starting Up</title>
+<para>We are first going to create a new project for the application.</para>
+ <orderedlist>
+<listitem><para>Go to the menu bar and select File/New/Project... .</para></listitem>
+<listitem><para>Select Exadel Studio/Struts/Struts Project in the New Project dialog box.</para></listitem>
+<listitem><para>Click Next >.</para></listitem>
+<listitem><para>Enter StrutsHello as the project name.</para></listitem>
+<listitem><para>Leave everything else as is, and click Next >.</para></listitem>
+<listitem><para>Click Next> again.</para></listitem>
+ <listitem><para>7. Make sure that struts-bean.tld, struts-html.tld, and struts-logic.tld are checked in the list of included tag libraries and then click Finish.</para></listitem>
+</orderedlist>
+<para>A StrutsHello node should appear in the upper-left Package Explorer view.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Click the plus sign next to StrutsHello to reveal the child nodes.</para></listitem>
+<listitem><para>Click the plus sign next to WebContent under StrutsHello.</para></listitem>
+<listitem><para>Click the plus sign next to WEB-INF under WebContent.</para></listitem>
+ <listitem><para>Then, double-click on the struts-config.xml node to display a diagram of the Struts application configuration file in the editing area.</para></listitem>
+ </orderedlist>
+<para>At this point, its empty except for the background grid lines.</para>
+ </section>
+
+ <section id="CreatingtheApplicationComponents">
+ <?dbhtml filename="CreatingtheApplicationComponents.html"?>
+ <title>Creating the Application Components</title>
+<para>Now, we will design the application by creating the individual components as placeholders
+first. (We dont have to complete all of the details inside the components until afterwards.)</para>
+ <section id="CreatingJSPPagePlaceholders">
+ <title>Creating JSP Page Placeholders</title>
+<para>Next, lets create and place two JSP pages. We will not write any code for the files, but only
+create them as placeholders so that we can create links to them in the diagram. We will write
+the code a little bit later.</para>
+ <section id="CreatingthePagePlaceholders">
+ <title>Creating the Page Placeholders</title>
+ <orderedlist continuation="continues">
+<listitem><para>Bring the Web Projects view to the front of the Package Explorer view by selecting the Web Projects tab next to that tab.</para></listitem>
+<listitem><para>Right-click the StrutsHello/WEB-ROOT (WebContent) folder in the Web Projects view and select New/Folder... .</para></listitem>
+<listitem><para>Enter pages for a folder name and click Finish.</para></listitem>
+
+<listitem><para>We will keep our presentation files in this folder.</para></listitem>
+
+<listitem><para>Right-click the pages folder and select New/File/JSP... .</para></listitem>
+ <listitem><para>16. For Name type in inputname (the JSP extension will be automatically added to the file), for Template select StrutsForm, and then click on the Finish button.</para></listitem>
+<listitem><para>Right-click the pages folder again and select New/File/JSP... .</para></listitem>
+<listitem><para>For Name type in greeting , for Template leave as Blank, and then click on the Finish button.</para></listitem>
+ </orderedlist>
+<para>Just leave these files as is for now.</para>
+ </section>
+ <section id="PlacingthePagePlaceholders">
+ <title>Placing the Page Placeholders</title>
+<para>Lets now place the two pages just created on the diagram.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Click on the struts-config.xml tab in the Editing area to bring the diagram to the front.</para></listitem>
+<listitem><para>Click on the inputname.jsp page in the Web Projects view, drag it onto the diagram, and drop it.</para></listitem>
+<listitem>Click on the greeting.jsp page in the Web Projects view, drag it onto the diagram,
+and drop it to the right of the /pages/inputname.jsp icon with some extra space.</listitem>
+</orderedlist>
+<para>You should now have two JSP pages in the diagram.</para>
+ </section>
+ </section>
+ <section id="CreatinganActionMappings">
+ <title>Creating an Action Mappings</title>
+<para>Using a context menu on the diagram, we are next going to create an Action mapping.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Right-click between the two icons and select Add/Action</para></listitem>
+<listitem><para>Enter the following values:</para></listitem>
+ </orderedlist>
+ <table>
+ <tgroup cols="2">
+ <row>
+ <entry>path</entry>
+ <entry>/greeting</entry>
+ </row>
+ <row>
+ <entry>name</entry>
+ <entry>GetNameForm</entry>
+ </row>
+ <row>
+ <entry>scope</entry>
+ <entry>request</entry>
+ </row>
+ <row>
+ <entry>type</entry>
+ <entry>sample.GreetingAction</entry>
+ </row>
+ <row>
+ <entry>validate</entry>
+ <entry><leave blank></entry>
+ </row>
+ </tgroup>
+ </table>
+<para>(GetNameForm is the name for a form bean that we will create later.)</para>
+<orderedlist continuation="continues">
+ <listitem><para>Click Finish.</para></listitem>
+</orderedlist>
+
+<para>The /greeting action should appear in two places, in the diagram and also under the action-mappings node under the struts-config.xml node in the Outline view. Also, note the
+asterisk to the right of the name, struts-config.xml, in the Outline view showing that the file has been changed, but not saved to disk.</para>
+ </section>
+ <section id="CreatingaLink">
+ <title>Creating a Link</title>
+<para>Lets now create a link from the inputname.jsp page to the action.</para>
+ <orderedlist continuation="continues">
+<listitem><para>On the left-hand side of the diagram in the column of icons, click on this icon:</para></listitem>
+ <listitem><para>26. In the connect-the-components mode you are in now, click on the /pages/inputname.jsp icon in the diagram and then click on the /greeting action.</para></listitem>
+ </orderedlist>
+<para>A link will be created from the page to the action.</para>
+ </section>
+ <section id="CreatingaForward">
+ <title>Creating a Forward</title>
+<para>Next, we are going to create a forward for the action.</para>
+ <orderedlist continuation="continues">
+<listitem><para>On the left-hand side of the diagram in the column of icons, click on this icon, again:</para></listitem>
+<listitem><para>Click on the /greeting action icon in the diagram and then click on the /pages/greeting.jsp icon.</para></listitem>
+
+<listitem><para>Thats it. A link will be drawn from the actions new greeting forward to the greeting.jsp JSP page. Note that the forwards name will be set based on the name of the target JSP file
+name. If you dont like it, you can easily change it.</para></listitem>
+
+<listitem><para>Select the Tree tab at the bottom of the editor window (between Diagram and Source).</para></listitem>
+<listitem><para>Expand the struts-config.xml/action-mappings//greeting node and then select the greeting forward.</para></listitem>
+<listitem><para>In the Properties Editor to the right, change the text to sayHello in the Name field.</para></listitem>
+<listitem><para>Select the Diagram tab at the bottom of the editor window and see how the diagram is also updated to reflect the change.</para></listitem>
+ </orderedlist>
+ </section>
+ <section id="CreatingaGlobalForward">
+ <title>Creating a Global Forward</title>
+<para>One last component that we need to create in the diagram is a global forward.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Somewhere in the top-left corner of diagram, right-click and select Add/Global Forward....</para></listitem>
+<listitem><para>Enter getName in the Name field.</para></listitem>
+<listitem><para>Select the Change... button for Path.</para></listitem>
+<listitem><para>In the Edit Path window, switch to the Pages tab.</para></listitem>
+<listitem><para>Expand the StrutsHello/WEB-ROOT (WebContent)/pages node and then select the inputname.jsp page.</para></listitem>
+<listitem><para>Click Ok.</para></listitem>
+<listitem><para>Leave the rest of the fields blank and click Ok.</para></listitem>
+ </orderedlist>
+<para>A forward object now appears on the diagram and also in the global-forwards folder in the Outline view.</para>
+ <orderedlist continuation="continues">
+ <listitem><para>Tidy up the diagram, by clicking and dragging around each icon, so that the diagram looks something like this:</para></listitem>
+ </orderedlist>
+ </section>
+ <section id="CreatingaFormBean">
+ <title>Creating a Form Bean</title>
+<para>One last thing that we need to do is to create a form bean.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Switch to the Tree viewer in the editor for the struts-config.xml file, by selecting the Tree tab at the bottom of the editor window.</para></listitem>
+<listitem><para>Right-click struts-config.xml/form-beans and select Create Form Bean.</para></listitem>
+<listitem><para>Enter GetNameForm in the name field and sample.GetNameForm for type.</para></listitem>
+<listitem><para>Click Finish.</para></listitem>
+<listitem><para>To save your changes to struts-config.xml, select File/Save from the menu bar.</para></listitem>
+ </orderedlist>
+<para>Note the disappearance of the asterisk next to the name, struts-config.xml.</para>
+</section>
+</section>
+
+ <section id="GeneratingStubCoding">
+ <?dbhtml filename="GeneratingStubCoding.html"?>
+ <title>Generating Stub Coding</title>
+ <para>We are done with designing the application through the diagram. Now we need to write
+ code for the action component. We also need to write an action class for the /greeting mapping
+ along with a FormBean. To aid in the coding phase, Exadel Studio can generate Java class
+ stubs for all of the components shown in the diagram.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Switch back to the diagram, by selecting the Diagram tab at the bottom of the editor window.</para></listitem>
+<listitem><para>Right-click a blank space in the diagram and select Generate Java Code.</para></listitem>
+<listitem><para>Leave everything as is in the dialog box and click Generate .</para></listitem>
+</orderedlist>
+<para>You should see a screen that says:</para>
+<para>Generated classes: 2</para>
+<para>Actions: 1</para>
+<para>Form beans: 1</para>
+ <orderedlist continuation="continues">
+<listitem><para>Click Finish.</para></listitem>
+ </orderedlist>
+<para>The Java files will be generated in a JavaSource/sample folder that you can see in the Package
+ Explorer view under the StrutsHello node. One Action stub and one FormBean stub will have been generated.</para>
+ </section>
+ <section id="CodingtheVariousFiles">
+ <?dbhtml filename="CodingtheVariousFiles.html"?>
+ <title>Coding the Various Files</title>
+<para>We will now code both the Java stub classes just generated, the JSP files left in as placeholders
+ from previous steps, and a new start JSP page we will have to create.</para>
+ <section id="JavaStubClasses">
+ <title>Java Stub Classes</title>
+ <orderedlist continuation="continues">
+ <listitem><para>To finish the two Java classes, switch to the Package Explorer view and expand the JavaSource/sample folder.</para></listitem>
+ </orderedlist>
+ <section id="GetNameForm.java">
+ <title>GetNameForm.java</title>
+ <orderedlist continuation="continues">
+<listitem><para>Double-click GetNameForm.java for editing.</para></listitem>
+
+<listitem><para>You are looking at a Java stub class that was generated by Exadel Studio. Now we are going to edit the file.</para></listitem>
+
+<listitem><para>Add the following attributes at the beginning of the class:</para></listitem>
+ </orderedlist>
+<para>private String name = "";</para>
+<para>private String greetName = "";</para>
+ <orderedlist continuation="continues">
+<listitem><para>Inside the reset method, delete the TO DO and throw lines and add:</para></listitem>
+</orderedlist>
+<para>this.name = "";</para>
+<para>this.greetName = "";</para>
+ <orderedlist continuation="continues">
+<listitem><para>Inside the validate method, delete the TO DO and throw lines and add:</para></listitem>
+ </orderedlist>
+<para>ActionErrors errors = new ActionErrors();</para>
+<para>return errors;</para>
+ <orderedlist continuation="continues">
+<listitem><para>Right-click and select Source/Generate Getters and Setters... from the context menu.</para></listitem>
+<listitem><para>In the dialog box, check the check boxes for name and greetName, select First method for Insertion point, and click on the OK button.</para></listitem>
+ </orderedlist>
+<para>The final GetNameForm.java file should look like this:</para>
+<programlisting role="JAVA"><![CDATA[
+package sample;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+public class GetNameForm extends org.apache.struts.action.ActionForm {
+private String name = "";
+private String greetName = "";
+public String getName() {
+return name;
+}
+public void setName(String name) {
+this.name = name;
+}
+public String getGreetName() {
+return greetName;
+}
+public void setGreetName(String greetName) {
+this.greetName = greetName;
+}
+public GetNameForm() {
+}
+public void reset(ActionMapping actionMapping, HttpServletRequest
+request) {
+this.name = "";
+this.greetName = "";
+}
+public ActionErrors validate(ActionMapping actionMapping,
+Exadel Studio: Getting Started Guide for Creating a Struts Application
+page 7 of 11
+HttpServletRequest request) {
+ActionErrors errors = new ActionErrors();
+return errors;
+}
+}
+]]></programlisting>
+
+<orderedlist continuation="continues">
+<listitem><para>Save the file.</para></listitem>
+</orderedlist>
+</section>
+ <section id="GreetingAction.java">
+ <title>GreetingAction.java</title>
+ <orderedlist continuation="continues">
+<listitem><para>Open GreetingAction.java for editing.</para></listitem>
+<listitem><para>Inside the execute method, delete the TO DO and throw lines and add the following:</para></listitem>
+ </orderedlist>
+
+ <programlisting role="JAVA"><![CDATA[
+String name = ((GetNameForm)form).getName();
+String greeting = "Hello, "+name+"!";
+((GetNameForm)form).setGreetName(greeting);
+return mapping.findForward(FORWARD_sayHello);
+The final version of GreetingAction.java should look like this:
+package sample;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+public class GreetingAction extends org.apache.struts.action.Action {
+// Global Forwards
+public static final String GLOBAL_FORWARD_getName = "getName";
+// Local Forwards
+public static final String FORWARD_sayHello = "sayHello";
+public GreetingAction() {
+}
+public ActionForward execute(ActionMapping mapping, ActionForm form,
+HttpServletRequest request, HttpServletResponse response) throws
+Exception {
+String name = ((GetNameForm)form).getName();
+String greeting = "Hello, "+name+"!";
+((GetNameForm)form).setGreetName(greeting);
+return mapping.findForward(FORWARD_sayHello);
+}
+}
+]]></programlisting>
+ <orderedlist continuation="continues">
+<listitem><para>Save the file.</para></listitem>
+<listitem><para>Close the editors for the two Java files.</para></listitem>
+ </orderedlist>
+<para>The last thing left to do is to code the JSP files whose editors should still be open from having been created as placeholders.</para>
+ </section>
+ </section>
+ <section id="JSPPages">
+ <title>JSP Pages</title>
+ <section id="inputname.jsp">
+ <title>inputname.jsp</title>
+<para>In this page, the user will enter any name and click the submit button. Then, the greeting action will be called through the form.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Click on the inputname.jsp tab in the Editing area to bring its editor forward.</para></listitem>
+<listitem><para>In the Web Projects view, expand StrutsHello/Configuration/default/strutsconfig.xml/action-mappings and select /greeting.</para></listitem>
+<listitem><para>Drag it and drop it between the quotes for the action attribute to the html:form element in the Source pane of the editor.</para></listitem>
+<listitem><para>Then type this text on a new line just below this line:</para></listitem>
+
+<listitem><para>Input name:</para></listitem>
+
+<listitem><para>Select the Visual pane of the editor.</para></listitem>
+<listitem><para>Then, in the Exadel Palette, expand the Struts Form library, select text, and drag it onto the box.</para></listitem>
+<listitem><para>In the Insert Tag dialog box, type in name for property and select Finish.</para></listitem>
+<listitem><para>In the Struts Form library in the Exadel Palette, select submit, and drag it to right after the the text box in the Visual pane of the editor.</para></listitem>
+<listitem><para>Right-click the submit button and select <html:submit> Attributes from the context menu.</para></listitem>
+<listitem><para>In the Attributes dialog box, select the value field and type in Say Hello! for its value.</para></listitem>
+ </orderedlist>
+<para>After tidying the page source, the Editor window for the file should look something like this:</para>
+ </section>
+ <section id="greeting.jsp">
+ <title>greeting.jsp</title>
+<para>Next, we will fill in the result page.</para>
+<orderedlist continuation="continues">
+<listitem><para>Click on the greeting.jsp tab in the Editing area to bring its editor forward.</para></listitem>
+<listitem><para>Type in the following code:</para></listitem>
+ </orderedlist>
+<programlisting role="XML"><![CDATA[
+<html>
+<head>
+<title>Greeting</title>
+</head>
+<body>
+<p>
+</p>
+</body>
+</html>
+]]></programlisting>
+
+<para>To complete editing of this file, we will use macros from the Exadel Palette. This palette is a view that should be available to the right of the editing area.</para>
+ <orderedlist continuation="continues">
+<listitem><para>Click on the Struts Common folder in the Exadel Palette to open it.</para></listitem>
+<listitem><para>Position the cursor at the beginning of the greeting.jsp file in the Source pane and then click on bean taglib in the Exadel Palette.</para></listitem>
+</orderedlist>
+<para>This will insert the following line at the top of the file:</para>
+<programlisting role="JAVA"><![CDATA[
+<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>Click on the Struts Bean folder in the Exadel Palette to open it.</para></listitem>
+<listitem><para>Position the cursor inside the p element.</para></listitem>
+<listitem><para>Click on write in the Exadel Palette.</para></listitem>
+<listitem><para>Type in GetNameForm for the name attribute and add a property attribute with greetName as its value.</para></listitem>
+ </orderedlist>
+<para>The editor should should now look like this:</para>
+ </section>
+ <section id="index.jsp">
+ <title>index.jsp</title>
+<para>Finally, we will need to create and edit an index.jsp page. This page will use a Struts forward to simply redirect us to the getName global forward.</para>
+ <orderedlist continuation="continues">
+<listitem><para>In the Web Projects view, right-click on StrutsHello/WEB-ROOT(WebContent)</para>
+<para>node and select New/File/JSP... .</para>
+</listitem>
+<listitem><para>Type index for Name and click on the Finish button.</para></listitem>
+<listitem><para>On the Exadel Palette, select the Struts Common folder of macros by clicking on it in the palette.</para></listitem>
+<listitem><para>Click on the logic taglib icon.</para></listitem>
+<listitem><para>Press the Enter key in the editor to go to the next line.</para></listitem>
+<listitem><para>Back on the palette, select the Struts Logic folder of macros.</para></listitem>
+<listitem><para>Click on redirect.</para></listitem>
+<listitem><para>Delete the ending tag, put a forward slash in front of the closing angle bracket, and type forward=getName in front of the slash.</para></listitem>
+ </orderedlist>
+<para>The finished code for the page is shown below:</para>
+<programlisting role="JAVA"><![CDATA[
+<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
+<logic:redirect forward="getName"/>
+]]></programlisting>
+ <orderedlist continuation="continues">
+<listitem><para>To save all the edits to files, select File/Save All from the menu bar.</para></listitem>
+ </orderedlist>
+ </section>
+ </section>
+ </section>
+ <section id="CompilingtheClasses">
+ <?dbhtml filename="CompilingtheClasses.html"?>
+ <title>Compiling the Classes</title>
+ <para>Because this is the Eclipse environment, no explicit compilation step is required. By default,
+ Eclipse compiles as you go.</para>
+ </section>
+ <section id="RunningtheApplication">
+ <?dbhtml filename="RunningtheApplication.html"?>
+ <title>Running the Application</title>
+ <para>Everything is now ready for running our applicationwithout having to leave Red Hat Developer Studio
+ by using the Tomcat engine that comes with the Red Hat Developer Studio plug-in. For controlling
+ Tomcat within Red Hat Developer Studio, the toolbar contains a panel.</para>
+ <orderedlist continuation="continues">
+<listitem>Start up Tomcat by clicking on the first icon from left in this panel. (If Tomcat is
+ already running, stop it by clicking on the third icon from the left and then start it
+ again. Remember, the Struts run-time requires restarting the servlet engine when
+ any changes have been made.)</listitem>
+<listitem>After the messages in the Console tabbed view stop scrolling, Tomcat is available.
+ At this point, right-click on the getName global forward in the struts-config.xml
+ diagram view and select Run on Server.</listitem>
+ </orderedlist>
+<para>The browser should appear with the application started.</para>
+ </section>
+</chapter>
\ No newline at end of file
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJSFwithHibernate.xml
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJSFwithHibernate.xml (rev 0)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJSFwithHibernate.xml 2007-05-03 11:03:01 UTC (rev 1992)
@@ -0,0 +1,521 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<chapter id="GettingStartedGuideforJSFwithHibernate" xreflabel="GettingStartedGuideforJSFwithHibernate">
+ <?dbhtml filename="GettingStartedGuideforJSFwithHibernate.html"?>
+ <title>Getting Started Guide for JSF with Hibernate</title>
+<para>In this guide, we will show you how to take a very simple ready-made JSF application and convert it to use a database with the help of Exadel Studio. After downloading, we will first</para>
+<para>set up and run the application without persistence, and then with persistence.</para>
+<para>The application itself is a simple JSF-based application that asks the user to enter a UserID. It tries to locate a record for the entered User ID (entered during the application session).</para>
+<para>If the record is found, details are displayed. If the record is not found, you are asked to create this record. This application, of course, only runs as long as the Tomcat server is running. Once we stop the server all of the data is lost as all information is saved only in the application session context.</para>
+<para>With the help of Exadel Studio, we will convert this application to use the lightweight hsqldb database (included with the downloaded project). We will use Exadel Studio special features for object-relational mapping for this conversion After the conversion, even if we restart the server, the data we entered will have been saved in a database and thus available to the application.</para>
+<para>Before we start, we assume that you have Eclipse, and have installed Exadel Studio Pro with Tomcat server.</para>
+
+<section id="InstallingTheProject">
+<?dbhtml filename="InstallingTheProject.html"?>
+<title>Installing the Project</title>
+<para>We are first going to download and import this project (ormHibernate3-jsf) into Eclipse.</para>
+
+<orderedlist>
+<listitem><para>Download: http://webdownload.exadel.com/dirdownloads/ormhib/examples/ormHibernate3-...</para></listitem>
+<listitem><para>Unzip this file into your Eclipse workspace folder.</para></listitem>
+<listitem><para>Launch Eclipse.</para></listitem>
+<listitem><para>In Eclipse, select File/Import/JSF Project.</para></listitem>
+<listitem><para>Click Next.</para></listitem>
+<listitem><para>Browse to where the project was unzipped.</para></listitem>
+<listitem><para>Find the web.xml file inside the WebContent folder in the WEB-INF folder, select it, and Click Finish.</para></listitem>
+</orderedlist>
+<para>The ormHibernate3-jsf project should appear in the Package Explorer with a standard Web application
+structure. As we mentioned before, this is a JSF application. To see the JSF configuration file, browse to
+ WebContent/WEB-INF/faces-config.xml.</para>
+<para>In the JavaSource folder, you will find the following Java source files. We will briefly explain these
+ files and then run the application.</para>
+ <table>
+ <title>JavaSource Folder</title>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Class Name</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>demo/Address.java</entry>
+ <entry>holds the user address</entry>
+ </row>
+ <row>
+ <entry>demo/User.java</entry>
+ <entry>holds user information</entry>
+ </row>
+ <row>
+ <entry>demo/GetUserIdBean.java</entry>
+ <entry>holds user Id and determines navigation (JSF Backing Bean)</entry>
+ </row>
+ <row>
+ <entry>demo/UserFormBean.java</entry>
+ <entry>holds new user input (JSF Backing Bean)</entry>
+ </row>
+ <row>
+ <entry>demo.bundle/Messages.properties</entry>
+ <entry>holds label messages used in the application</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+</section>
+
+<section id="RunningWithoutADatabase">
+<?dbhtml filename="RunningWithoutADatabase.html"?>
+<title>Running Without a Database</title>
+
+<para>We are ready to run this project in a Web browser and see how it looks. We don't need to
+ compile these classes, because Eclipse did it for us when we imported the project.</para>
+
+<orderedlist continuation="continues">
+<listitem><para>Start Tomcat.</para></listitem>
+<listitem><para>Click on the running-man-and-blue-butterfly icon from the toolbar.</para></listitem>
+<listitem><para>Go ahead and play with the application.</para></listitem>
+</orderedlist>
+<para>Initially users don't exist, so entering any ID will prompt you to enter user details. Once you have saved a user, you can go back to the main page by clicking on the Back to Login Page link. If you then enter that user's id again, the application will locate and display the user's details.</para>
+
+</section>
+
+<section id="ConvertingforUseWithaDatabase">
+<?dbhtml filename="ConvertingforUseWithaDatabase.html"?><title>Converting for Use With a Database</title>
+<para>Now we are ready to convert this application to use with a database with the help of ExadelStudio. To convert the application for use with a database, we need to set things up in three different places:</para>
+
+
+<itemizedlist><listitem><para>The Application</para></listitem></itemizedlist>
+<itemizedlist><listitem><para>The Database</para></listitem></itemizedlist>
+<itemizedlist><listitem><para>The Application Server</para></listitem></itemizedlist>
+
+</section>
+
+<section id="SettingUpTheApplication">
+<?dbhtml filename="SettingUpTheApplication.html"?>
+<title>Setting up the Application</title>
+<para>Setting up the Application</para>
+<para>Let's start by using Red Hat Developer Studio with the application project. First, we create
+the object/relational mapping from our simple object model to a database schema after adding Hibernate
+capabilities to our project.</para>
+<orderedlist continuation="continues">
+<listitem><para>Right-click on ormHibernate3-jsf in the Package Explorer view and select Exadel</para></listitem>
+<listitem><para>Studio/Add Hibernate Capability... from the context menu.</para></listitem>
+<listitem><para>Click on Yes in the the dialog box with Add Hibernate Jars selected.</para></listitem>
+<listitem><para>In the Configuration Wizard, click twice in the Value field for dialect and select org.hibernate.dialect.HSQLDialect from the pop-up menu.</para></listitem>
+<listitem><para>Click Finish</para></listitem>
+<listitem><para>Select Object to Schema for the Mapping Approach.</para></listitem>
+</orderedlist>
+<para>We are only interested in saving the User class in a database, so we are going to create a mapping for the User class to a database table.</para>
+<orderedlist continuation="continues">
+<listitem><para>In the Persistent Classes Wizard dialog that appears next, click on the SelectClasses.</para></listitem>
+<listitem><para>Leave all other values as they are in the next dialog box and click Finish.</para></listitem>
+</orderedlist>
+</section>
+
+<section id="EditTheHibernateConfiguration">
+<?dbhtml filename="EditTheHibernateConfiguration.html"?>
+<title>Edit the Hibernate Configuration</title>
+<para>Afterwards, the Hibernate configuration file, hibernate.cfg.xml, will appear in an editor window.
+So, let's adjust this file first.</para>
+
+<orderedlist continuation="continues">
+<listitem><para>Replace these two lines:</para></listitem>
+</orderedlist>
+
+
+<programlisting role="XML"><![CDATA[<property
+name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</
+property>
+<property
+name="hibernate.connection.url">jdbc:hsqldb:hsql:[hostname]</
+property>
+]]></programlisting>
+
+<para>With this single line:</para>
+
+<programlisting role="XML"><![CDATA[
+<property name="hibernate.connection.datasource">java:comp/env/
+jdbc/kickstart</property>
+]]></programlisting>
+<para>(Make sure this is one line in the file and not two lines as displayed because of wordwrapping.)</para>
+<para>Your file should now look like this:</para>
+
+<programlisting role="XML"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration
+DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
+<hibernate-configuration>
+<session-factory>
+<property name="hibernate.connection.datasource">java:comp/env/jdbc/
+kickstart</property>
+Exadel Studio 3.0
+page 4 of 10
+<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</
+property>
+<mapping resource="demo/User.hbm.xml"/>
+</session-factory>
+</hibernate-configuration>
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>Save the file.</para></listitem>
+</orderedlist>
+</section>
+
+<section id="EdittheMappingFile">
+<?dbhtml filename="EdittheMappingFile.html"?>
+<title>Edit the Mapping File</title>
+<para>Next, we need to make on slight change to the mapping file, User.hbm.xml.</para>
+
+<orderedlist continuation="continues">
+<listitem><para>In the ORM Explorer view, reveal the
+ormHibernate3-jsf/JavaSource/hibernate.cfg.xml/demo/User -> user node, right-click it, and select
+Open Mapping from the context menu.</para></listitem>
+<listitem><para>In the editor that opens up for the mapping file, just change the class
+attribute for generator to a value of assigned and you're done with this file.</para></listitem>
+</orderedlist>
+
+
+<para>Here is what the edited User.hbm.xml file should now look like:</para>
+
+<programlisting role="XML"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+<para>"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"></para>
+<hibernate-mapping package="demo">
+<class name="User" table="user" optimistic-lock="none">
+<id name="id" type="string" unsaved-value="null" column="id">
+<generator class="assigned"/>
+</id>
+<property name="firstName" type="string" column="first_name"/>
+<property name="lastName" type="string" column="last_name"/>
+<property name="email" type="string" column="email"/>
+<component name="address" update="true" insert="true" class="demo.Address">
+<property name="city" type="string" column="address_city"/>
+<property name="state" type="string" column="address_state"/>
+<property name="street" type="string" column="address_street"/>
+<property name="zip" type="string" column="address_zip"/>
+</component>
+</class>
+</hibernate-mapping>
+]]></programlisting>
+
+
+<orderedlist continuation="continues">
+<listitem><para>Save the file.</para></listitem>
+</orderedlist>
+</section>
+<section id="AddAGeneralClassForIncorporatingHibernate">
+<?dbhtml filename="AddAGeneralClassForIncorporatingHibernate.html"?>
+<title>Add a General Class for Incorporating Hibernate</title>
+<para>Next, we will need to create a special Java class for incorprating Hibernate into our application.</para>
+
+<orderedlist continuation="continues">
+<listitem><para>Switch to the Package Explorer view and create the class,
+HibernateHelper.java, in JavaSource/demo with this content and save it.</para></listitem>
+</orderedlist>
+<programlisting role="JAVA"><![CDATA[
+package demo;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.cfg.Configuration;
+public class HibernateHelper {
+/**
+* Reference to SessionFactory.
+*/
+private static SessionFactory sf;
+public static final ThreadLocal session = new ThreadLocal();
+public static synchronized void init() {
+if (sf != null) return;
+System.out.println("Initializing Hibernate");
+try {
+Configuration cfg = new Configuration().configure();
+sf = cfg.buildSessionFactory();
+} catch (Exception he) {
+System.err.println("Unable to create session factory from
+configuration");
+he.printStackTrace();
+throw new RuntimeException("Unable to create session factory from
+configuration", he);
+}
+System.out.println("Hibernate initialized");
+}
+/**
+* Return the SessionFactory.
+* @return The SessionFactory for this application session
+*/
+public static SessionFactory sessionFactory() {
+if (sf == null) init();
+return sf;
+}
+public static void destroy() {
+if (sf != null) {
+try {
+sf.close();
+} catch (HibernateException he) {
+he.printStackTrace();
+}
+}
+sf = null;
+System.out.println("Hibernate resources released");
+}
+/**
+* Closes an hibernate {@link Session}, releasing its resources.
+* @throws HibernateException if an hibernate error occurs
+*/
+public static void closeSession() throws HibernateException {
+Session s = (Session)session.get();
+session.set(null);
+if (s != null) {
+s.close();
+Exadel Studio Pro
+page 6 of 9
+}
+}
+/**
+* Returns an hibernate {@link Session} from the session factory.
+* @return an hibernate {@link Session}
+* @throws HibernateException if an error occurs
+*/
+public static Session openSession() throws HibernateException {
+if (sf == null) init();
+Session s = (Session)session.get();
+if (s == null) {
+s = sf.openSession();
+session.set(s);
+}
+return (s);
+}
+}
+]]></programlisting>
+</section>
+
+<section id="EdittheTwoBeanClasses">
+<?dbhtml filename="EdittheTwoBeanClasses.html"?>
+<title>Edit the Two Bean Classes</title>
+
+<para>We also need to modify the two bean classes in our application to "Hibernate-ize" them.</para>
+
+<orderedlist continuation="continues">
+<listitem><para>Modify the GetUserIdBean.java class in JavaSource/demo by adding these imports:
+
+</para></listitem>
+</orderedlist>
+<programlisting role="JAVA"><![CDATA[import org.hibernate.Session;
+import javax.faces.application.FacesMessage;
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>Then, replace the action() method with this code and save.</para></listitem>
+
+</orderedlist>
+<programlisting role="JAVA"><![CDATA[{
+public String action()
+throws Exception
+UserFormBean ufb;
+User user;
+String actionResult = "inputuser"; // new user by default
+Map sessionMap =
+FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
+if (sessionMap != null) {
+ufb = new UserFormBean();
+ufb.setId(id);
+try {
+Session hSession = HibernateHelper.openSession();
+user = (User)hSession.get(User.class, id);
+HibernateHelper.closeSession();
+} catch (Exception e) {
+FacesContext context = FacesContext.getCurrentInstance();
+context.addMessage(null, new
+FacesMessage(FacesMessage.SEVERITY_ERROR,e.toString(), null));
+return "failed";
+}
+if (user==null || !user.getId().equals(id)) {
+user = new User();
+user.setId(id);
+sessionMap.put("user", user);
+} else {
+// fill UserFormBean with user information
+loadUser(ufb,user);
+actionResult="greeting";
+}
+sessionMap.put("UserFormBean", ufb);
+}
+return actionResult;
+}
+private void loadUser(UserFormBean userForm,User user) {
+userForm.setId(user.getId());
+userForm.setFirstName(user.getFirstName());
+userForm.setLastName(user.getLastName());
+userForm.setEmail(user.getEmail());
+userForm.setStreet(user.getAddress().getStreet());
+userForm.setCity(user.getAddress().getCity());
+userForm.setState(user.getAddress().getState());
+userForm.setZip(user.getAddress().getZip());
+}
+]]></programlisting>
+
+<orderedlist continuation="continues">
+<listitem><para>Modify the UserFormBean.java class in JavaSource/demo by adding these
+ imports:</para></listitem>
+</orderedlist>
+<programlisting role="JAVA"><![CDATA[import org.hibernate.Session;
+import org.hibernate.Transaction;
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>Then, replace the save() method with this code and save the class.</para></listitem>
+</orderedlist>
+<programlisting role="JAVA"><![CDATA[public String save() throws Exception {
+Map sessionMap =
+FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
+if (sessionMap != null) {
+UserFormBean ufb=(UserFormBean)sessionMap.get("UserFormBean");
+try {
+Session hSession = HibernateHelper.openSession();
+Transaction tran = hSession.beginTransaction();
+User user = (User)hSession.get(User.class, id);
+if (user == null) {
+user = new User();
+user.setId(id);
+hSession.save(user);
+}
+saveUser(ufb, user);
+tran.commit();
+HibernateHelper.closeSession();
+} catch (Exception e) {
+return "failed";
+}
+}
+return "greeting";
+}
+]]></programlisting>
+
+</section>
+
+<section id="SettinguptheDatabase">
+<?dbhtml filename="SettinguptheDatabase.html"?>
+<title>Setting up the Database</title>
+<para>To set up the database end, we need to use Red Hat Developer Studio and our HSQL database engine to create a
+database table corresponding to the class we are trying to persist and make the database available.</para>
+
+</section>
+<section id="CreatingtheDatabaseTable">
+<?dbhtml filename="CreatingtheDatabaseTable.html"?>
+<title>Creating the Database Table</title>
+<para>Let's first create the script for our database table in Red Hat Developer Studio.</para>
+<orderedlist continuation="continues">
+<listitem><para>In the ORM Explorer view, right-click on JavaSource/hibernate.cfg.xml and select "Generate DDL Wizard".</para></listitem>
+
+<listitem><para>Select HSQL as the Dialect and leave Location as is.</para></listitem>
+<listitem><para>Click Finish.</para></listitem>
+</orderedlist>
+<para>A DDL file called schema.sql will be created in the root of the project and will be opened in an
+ editor window.</para>
+ </section>
+ <section id="MakingTheDatabaseAvailableForTheApplication">
+ <?dbhtml filename="MakingTheDatabaseAvailableForTheApplication.html"?>
+<title>Making the Database Available for the Application</title>
+<para>The databse server, HSQLDB, is provided with the project. It's located in the ormHibernate3-jsf/hsqldb folder.</para>
+<orderedlist continuation="continues">
+<listitem><para>Start the database server: .../ormHibernate3-jsf/hsqldb/bin/server.bat</para></listitem>
+<listitem><para>In a separate window, start the admin tool: .../ormHibernate3-jsf/hsqldb/bin/dbadmin.bat</para></listitem>
+</orderedlist>
+<para>This will launch a small GUI application, HSQL Database Manager.</para>
+<orderedlist continuation="continues">
+<listitem><para>Leave all values as they are, only change URL: to the following: jdbc:hsqldb:hsql://localhost</para></listitem>
+<listitem><para>Click OK.</para></listitem>
+<listitem><para>Select File/Open Script... from the menu bar of HSQL Database Manager.</para></listitem>
+<listitem><para>Find and open the the DDL file we just created.</para></listitem>
+<listitem><para>Click Execute back in the main screen of the Database Manager.</para></listitem>
+<listitem><para>38. Select View/Refresh Tree from the menu bar.</para></listitem>
+</orderedlist>
+<para>The User database should now appear in the expand/collapse tree to the left.</para>
+<orderedlist continuation="continues">
+<listitem><para>Select File/Exit from the menu bar.</para></listitem>
+<listitem><para>Stop the database server: .../ormHibernate3-jsf/hsqldb/bin/shutdown.bat</para></listitem>
+</orderedlist>
+</section>
+
+<section id="SettinguptheApplicationServer">
+<?dbhtml filename="SettinguptheApplicationServer.html"?>
+<title>Setting up the Application Server</title>
+
+<para>Finally, we need to set up the application server before we can run the database-enabled
+application in a Web browser. To do this, we'll need to modify the application context in the-
+Tomcat server.xml file.</para>
+<orderedlist continuation="continues">
+<listitem><para>Stop the Tomcat server, if it's running.</para></listitem>
+<listitem><para>Locate the server.xml file in the Package Explorer view under the Tomcat Server
+node under Servers.</para></listitem>
+<listitem><para>Double-click the file to open an editor on it.</para></listitem>
+<listitem><para>Find the Context tag for your application in the file. It will have a path attribute
+with a value of /ormHibernate3-jsf.</para></listitem>
+</orderedlist>
+<para>You'll need to convert this "empty" XML element into one with beginning and ending tags,
+so we can insert the special resource tags for Tomcat to run this application with a database.</para>
+<orderedlist continuation="continues">
+<listitem><para>Delete the closing slash at the end of the Context tag.</para></listitem>
+<listitem><para>Insert a blank line after the tag and then start another line.</para></listitem>
+<listitem><para>On this line, insert a closing tag:</para></listitem>
+</orderedlist>
+<programlisting role="JAVA"><![CDATA[</Context>
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>On the blank line between the starting and ending tags, add the following resource definition coding.</para></listitem>
+</orderedlist>
+<programlisting role="XML"><![CDATA[<Resource name="jdbc/kickstart" scope="Shareable"
+type="javax.sql.DataSource"/>
+<ResourceParams name="jdbc/kickstart">
+<parameter>
+<name>factory</name>
+<value>org.apache.commons.dbcp.BasicDataSourceFactory</
+value>
+</parameter>
+<parameter>
+<name>url</name>
+<value>jdbc:hsqldb:hsql://localhost</value>
+</parameter>
+<parameter>
+<name>driverClassName</name>
+<value>org.hsqldb.jdbcDriver</value>
+</parameter>
+<parameter>
+<name>username</name>
+<value>sa</value>
+</parameter>
+<parameter>
+<name>password</name>
+<value></value>
+</parameter>
+<parameter>
+<name>maxWait</name>
+<value>3000</value>
+</parameter>
+<parameter>
+<name>maxIdle</name>
+<value>100</value>
+</parameter>
+<parameter>
+<name>maxActive</name>
+<value>10</value>
+</parameter>
+</ResourceParams>
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>Finally, copy .../ormHibernate3-jsf/hsqldb/lib/hsqldb.jar to your
+Tomcat .../common/lib folder.</para></listitem>
+</orderedlist>
+</section>
+
+<section id="RunningOurNewApplication">
+<?dbhtml filename="RunningOurNewApplication.html"?>
+<title>Running Our New Application</title>
+<orderedlist continuation="continues">
+<listitem><para>Start the database server: .../ormHibernate3-jsf/hsqldb/bin/server.bat</para></listitem>
+<listitem><para>Start the Tomcat server.</para></listitem>
+<listitem><para>Run the application.</para></listitem>
+</orderedlist>
+<para>Play with the application. Restart Tomcat and the database server. If you run the application
+again and enter a user that you already saved, the application should retrieve it from the database
+and display its details.</para>
+</section>
+</chapter>
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJavaServerFaces.xml
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJavaServerFaces.xml (rev 0)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedGuideforJavaServerFaces.xml 2007-05-03 11:03:01 UTC (rev 1992)
@@ -0,0 +1,1271 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<chapter id="GettingStartedGuideforJavaServerFaces" xreflabel="GettingStartedGuideforJavaServerFaces">
+ <?dbhtml filename="GettingStartedGuideforJavaServerFaces.html"?>
+ <title>Getting Started Guide for Java Server Faces</title>
+ <chapterinfo>
+ <keywordset>
+ <keyword>Red Hat Developer Studio</keyword>
+ <keyword>RHDS</keyword>
+ <keyword>Java</keyword>
+ <keyword>JSF Component</keyword>
+ </keywordset>
+ </chapterinfo>
+<section id="Introduction">
+<?dbhtml filename="Introduction.html"?>
+<title>Introduction</title>
+<para>JavaServer Faces is a technology that helps to build a user interface based on the
+components approach. Using UI Components as building blocks simplifies the development,
+slashes the number of code lines, and allows reusing the same components from one project to
+the next.</para>
+<para>What are the components we are speaking about? The Sun reference implementation of JSF
+provides just a few very common components for Web forms, primitive tags for page layout, and
+"dataTable" as a way to show the data set. The open source implementations of JSF don't
+provide much more. The commercial implementation of GUI Tools for JSF such as WebSphere
+Application Developer and Java Studio Creator do come with significant additions to the set of
+components that allows creating interfaces similar to that of Swing applications. However,
+traditionally, the Web interface lacks all of the richness of thick-client analogs. A customer
+might have an existing design that is not covered by the set of standard controls. Third-party
+components vendors will try to create the most common components with a multitude of custom
+parameters, but still these do not match the requirements for an individual Web application.</para>
+<para>The JSF Specification in Section 1.2.2 mentions the Component Writer role along with Page
+Writer and Application Developer roles. Writing a specific component set for a particular Web
+application might be a good solution instead of trying to use existing ones that a customer might
+not even accept.</para>
+<para>Is it easy to write your own JSF UI component? Sun's J2EE tutorial provides a section
+dedicated to this topic. This paragraph describes an example with Map components giving an
+overview of almost all the features you might need in developing your own components.
+However, the example itself seems too complicated to use it as a beginning "kick start" type of
+application. It gives a good overview of the technology, but does not give enough details for the
+specific steps you would need to go through to write your own components.</para>
+<para>This tutorial is dedicated to closing this gap. It is written in a step-by-step manner where
+each step is extremely easy to understand. The provided example does not cover all the aspects
+of components development, but it is a very good start to understand the idea. Topics not covered
+in this tutorial are set forth in the last section.</para>
+</section>
+<section id="BuildingInstructionsForThisTutorial">
+<?dbhtml filename="BuildingInstructionsForThisTutorial.html"?>
+<title>Building Instructions for This Tutorial</title>
+<para>The tutorial consists of seven separate steps for building up an example application. Each
+step adds new code to the previous example. The tutorial includes code representing the result of
+each step. If you are lost, you can compare these target results with your results. Also, you might
+want to add some extra feature to the code to test how it works. If this messes things up, you can
+just replace your code with the included code to go on to the next step.</para>
+<para>The tutorial material is divided into seven folders with the names Step1, Step2, Step3, Step4,
+Step5, Step6, and Step7. Each folder contains only one subfolder named "ticker". This subfolder
+contains a working example that represents the result up to that particular step. Additionally, a
+folder named Step0 contains the skeleton for starting the JSF project.</para>
+<para>For this tutorial, you can use any tools that allow you to work directly with source code. We
+recommend you to use Red Hat Developer Studio. Developer Studio allows the running of JSF applications
+without redeployment. This is extremely important when you play with the code by adding new
+features to test how they work. At the same time, Developer Studio allows you to have full control over
+the source code. We even recommend turning on the "Use Source Tab as a default for multi-tab
+editors" option in the Preferences Editor (Red Hat->Editors section). You can always use the GUI
+feature of Developer Studio later to slash the development time when you start to understand enough
+how things works on the source code level. The provided example is fully adapted to work with
+Red Hat Developer Studio.</para>
+<para>Red Hat Developer Studio allows debugging Web applications in the same manner in which you can
+debug a regular Java application within the Eclipse environment. This is an extremely important
+feature for learning.</para>
+<para>To start working with the tutorial example, copy the "ticker" folder to a new place on the
+disk. If you use Red Hat Developer Studio, copy this folder to the Eclipse workspace folder (or wherever you
+usually keep projects) and then import this project using the Eclipse File->Import menu. Leave
+the server.xml registration option checked on the second screen of wizard. This allows you to
+change and then run an application without any special redeployment.</para>
+<para>Each ticker folder contains four subfolders:</para>
+<itemizedlist>
+<listitem><para>Ant</para></listitem>
+<listitem><para>ExtLib</para></listitem>
+<listitem><para>JavaSource</para></listitem>
+<listitem><para>WebContent</para></listitem>
+</itemizedlist>
+<section id="AntFolder">
+<?dbhtml filename="AntFolder.html"?>
+<title>Ant Folder</title>
+<para>The ant folder contains the build.xml file that can be used to compile the example and
+deploy it to a target servlet container to run. In order to use this script be sure that ant is in your
+system path. The default Ant target is "deploy", so if you launch Ant without parameters, it
+create an additional folder named deploy and puts the deployable war file into it. If you want,
+you can provide another folder as the target for deployment. Open the build.xml file for editing
+and set the "deploy-dir" Ant property to the different target folder.</para>
+</section>
+<section id="ExtLibFolder">
+<?dbhtml filename="ExtLibFolder.html"?>
+<title>ExtLib Folder</title>
+<para>The ExtLib folder just contains the servlet.jar file that is required to be in the classpath to
+have the code compiled. This jar file is added to the classpath only when you use the Ant script.
+(This file is not used by Developer Studio). If you want, you can any replace it with you own library
+that contains required classes for compilation. Replace the property with name 'servlet.path' for
+this purpose.</para>
+</section>
+<section id="JavaSourceFolder">
+<?dbhtml filename="JavaSourceFolder.html"?>
+<title>JavaSource Folder</title>
+<para>The JavaSource folder contains the java source files and resource bundle files.</para>
+</section>
+<section id="WebContentFolder">
+<?dbhtml filename="WebContentFolder.html"?>
+<title>WebContent Folder</title>
+<para>The WebContent folder contains the pre-deployment structure for a standard J2EE
+application.</para>
+</section>
+<section id="RootFolder">
+<?dbhtml filename="RootFolder.html"?>
+<title>Root Folder</title>
+<para>Additionally, the root folder contains four files start with dot. Those files contain the
+configuration for JSF Studio only.</para>
+</section>
+</section>
+<section if="GeneralTipsForBuildingComponents">
+<?dbhtml filename="GeneralTipsForBuildingComponents.html"?>
+<title>General Tips for Building Components</title>
+<para>
+<itemizedlist>
+<listitem>Simulate a rendered result before implement it. Use any HTML editor with a
+preview option to see how the HTML you are going to produce works buy itself. If
+some HTML construction doesn't work for you, you save time seeing the problem
+before you start to implement the component that produces the unsatisfactory HTML
+code.</listitem>
+<listitem>Localize the JavaScript functions. If the rendered code contains JavaScript, be sure
+this JavaScript code doesn't collide with JavaScript coding in other components that
+will work on the same page.</listitem>
+<listitem>Test how your component works together with other JSF Components. Check the
+situation where your components insert other components or are themselves inserted
+as children for other components.</listitem>
+<listitem>Check how the rendered code works in the different browser. Avoid browser-specific
+tags or attributes.</listitem>
+</itemizedlist>
+</para>
+</section>
+<section id="Step1ComponentsSkeleton">
+<?dbhtml filename="Step1ComponentsSkeleton.html"?>
+<title>Step 1: Components Skeleton</title>
+<para>Before we start, let's see what we have at the beginning. The initial project taken from the
+Step0 folder contains a short example that does nothing except open the bannerpage.jsp page
+when the application starts. This JSP page will be used as a testing area for testing the rendered
+component output.</para>
+<para>After the final step we have got a scrollable area with the text inside. It will look like the
+following picture:</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<para>In the first step we create a component that will be rendered into the following code in the
+resulting HTML page:</para>
+<programlisting role="HTML"><![CDATA[<div>Hello JSF Component</div>
+]]></programlisting>
+<para>On the original JSF page we will have:</para>
+<programlisting role="HTML"><![CDATA[<d:ticker>
+<f:verbatim>Hello JSF Component</f:verbatim>
+</d:ticker>
+]]></programlisting>
+<para>Let's start with creating the tag library definition file. Open the WEB-INF folder and create
+a "ticker.tld" file that contains the following code:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+<tlib-version>1.0</tlib-version>
+<jsp-version>1.2</jsp-version>
+<short-name>d</short-name>
+<uri>http://jsftutorials.com/</uri>
+<tag>
+<name>ticker</name>
+<tag-class>ticker.TickerTag</tag-class>
+<body-content>JSP</body-content>
+</tag>
+</taglib>
+]]></programlisting>
+<para>We have declared the new tag with the name "ticker"and defined ticker.TickerTag as a tag
+class. Open JavaSource folder; create a package "ticker" there and the class TickerTag there that
+contains the following code:</para>
+<programlisting role="JAVA"><![CDATA[package ticker;
+import javax.faces.component.UIComponent;
+import javax.faces.webapp.UIComponentTag;
+public class TickerTag extends UIComponentTag{
+public void release() {
+// the super class method should be called
+super.release();
+}
+protected void setProperties(UIComponent component) {
+// the super class method should be called
+super.setProperties(component);
+}
+public String getComponentType() {
+return "ticker";
+}
+public String getRendererType() {
+// null means the component renders itself
+return null;
+}
+}
+]]></programlisting>
+<para>The class TickerTag processes the <emphasis role="italic"><property>"tag"</property></emphasis> attribute. Such a class name has the suffix "Tag" by a
+naming convention. The TickerTag class extends UIConponentTag and implements four
+methods.</para>
+<para>The getComponentType() method returns the symbolic name of the component type. We
+will define the class for this type latter in the faces-config file.</para>
+<para>The getRendererType() method returns the symbolic name of the renderer. If
+getRendererType() returns null, it means that the renderer name is not defined and the
+component will render it by itself.</para>
+<para>The release() method releases any resources allocated during the execution of this tag
+handler. We will use this method to reset the attribute values. The release() method should call
+the release() method of the super class.</para>
+<para>And the last (but not least) method, setProperties(UIComponent component), is used to pass
+attributes taken from the JSP page to the renderer. You can use the JSF Expression Language in
+the value for the tag attribute. This is also resolved by the setProperties method. We will return
+back to this theme in step 4 of this tutorial.</para>
+<para>Now let's define the component class for the component type declared above. Open WEBINF/
+faces-config.xml and put the declaration there. The faces-config.xml should contain the
+following code:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
+"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
+<faces-config>
+<component>
+<component-type>ticker</component-type>
+<component-class>ticker.UITicker</component-class>
+</component>
+<lifecycle/>
+<application>
+<locale-config/>
+</application>
+<factory/>
+</faces-config>
+]]></programlisting>
+<para>We have defined the ticker.UITicker class as a component class for the "ticker" type. By a
+naming convention, such a class starts with the "UI" prefix. The component class provides a
+rendering user interface, state saving and restoring, and processing of user input.</para>
+<para>Create the tickerUITicker class with the following content:</para>
+<programlisting role="JAVA"><![CDATA[package ticker;
+import java.io.IOException;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+public class UITicker extends UIOutput {
+public void encodeBegin(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.startElement("div", this);
+}
+public void encodeEnd(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.endElement("div");
+}
+}
+]]></programlisting>
+<para>Because our custom component does not provide for any user input, we extend the class
+from the UIOutput. The UITicker class implements two methods encodeBegin(FacesContext
+context) and encodeEnd(FacesContext context). The first method encodes the opening tag; the
+second one encodes the closing tag. However, if your tags do not contain a body, it is
+recommended to encode everything using only the encodeEnd(FacesContext context) method.</para>
+<para>Now let's create the page where our custom tag will be used. Open the bannerpage.jsp page
+located inside the WebContent folder and add a taglib declaration and our tag with test output.
+The page should look like:</para>
+<programlisting role="XML"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://jsftutorials.com/" prefix="d" %>
+<html>
+<head>
+<title>Show Custom Component</title>
+</head>
+<body>
+<f:view>
+<d:ticker>
+<f:verbatim>Hello JSF Component</f:verbatim>
+</d:ticker>
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<para>There are two things important to mention here. The first thing concerns the URI attribute.
+Many people think that this attribute must be a reference to an existing URL, but this is not quite
+true. A URI is not the same as a URL. The target of this attribute is defining the unique string
+that will distinguish this particular taglib from the others.</para>
+<para>The second important thing is using <emphasis role="bold"><property><f:verbatim></property></emphasis> <emphasis role="bold"><property></f:verbatim></property></emphasis> around the plain text. When
+the JSF Components tree is rendered, it contains only the JSF Components. So, any children in
+the hierarchy must be JSF components. If you run the first example, there might not be any
+difference, because <emphasis role="bold"><property><d:ticker></property></emphasis> is a root node of the JSF Component hierarchy. However, in case
+you add <emphasis role="bold"><property><h:gridPanel></property></emphasis>, for example, around it, you will find that the plain text without
+<emphasis role="bold"><property><f:verbatim></property></emphasis> will be pushed out of the <emphasis role="bold"><property><div></property></emphasis><emphasis role="bold"><property></div></property></emphasis> in the rendered page.</para>
+<para>At this point, our first step has been finished. We can compile, deploy, and run the result
+application. If you use Ant to do this job, run Ant so that the ticker.war file is copied to the
+servlet container to run.</para>
+<para>If you're using Red Hat Developer Studio, click the Start Tomcat Server button on the toolbar, and then
+click the Run Web Application button. The default browser should be launched and show the
+result of page rendering.</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<para>You can see the "Hello JSF Component" text in the browser window. Because <emphasis role="bold"><property><div></property></emphasis> itself
+does not provide any visual effect, you can recognize that the page is rendered as we expected
+only if you look at the source of the result page. It should contain the "<emphasis role="bold"><property><div></property></emphasis>Hello JSF
+Component<emphasis role="bold"><property></div></property></emphasis>" text. If so, the first step is done. You have already written you first JSF
+Component. Of course, it has very limited functionality, but we just laid the foundation. The
+component will be improved in the next step.</para>
+<para>Before we go any further, let's survey the relationships among the different JSF artifacts we
+are using here. The following picture shows this relationship:</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+</section>
+<section id="Step2AddingSimpleAttributes">
+<?dbhtml filename="Step2AddingSimpleAttributes.html"?>
+<title>Step 2: Adding Simple Attributes</title>
+<para>This step is devoted to adding attributes to our custom tag. As we mentioned for the first
+step, tag <emphasis role="bold"><property><div></property></emphasis> does not provide any visible effect. So, in the second step, we will add attributes
+that make more visible results. Commonly, visual JSF tags define the tag style directly with style
+and styleClass attributes or indirectly by using the Cascading Style Sheet file.</para>
+<para>Let's start with the style attribute. Add it to the JSP page. The JSP page will look like this:</para>
+<programlisting role="HTML"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://jsftutorials.com/" prefix="d" %>
+<html>
+<head>
+<title>Show Custom Component</title>
+</head>
+<body>
+<f:view>
+<d:ticker style="border:1px solid darkblue;width:100px">
+<f:verbatim>Hello JSF Component</f:verbatim>
+</d:ticker>
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<para>Add the tag attribute to the ticker.tld file:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+<tlib-version>1.0</tlib-version>
+<jsp-version>1.2</jsp-version>
+<short-name>d</short-name>
+<uri>http://jsftutorials.com/</uri>
+<tag>
+<name>ticker</name>
+<tag-class>ticker.TickerTag</tag-class>
+<body-content>JSP</body-content>
+<attribute>
+<name>style</name>
+</attribute>
+</tag>
+</taglib>
+]]></programlisting>
+<para>Add the following code marked with bold to the TickerTag class:</para>
+<programlisting role="JAVA"><![CDATA[import javax.faces.component.UIComponent;
+import javax.faces.webapp.UIComponentTag;
+public class TickerTag extends UIComponentTag{
+String style;
+public String getStyle() {
+return style;
+}
+public void setStyle(String style) {
+this.style = style;
+public void release() {
+// the super class method should be called
+super.release();
+style = null ;
+}
+protected void setProperties(UIComponent component) {
+// the super class method should be called
+super.setProperties(component);
+if(style != null)
+component.getAttributes().put("style", style);
+}
+public String getComponentType() {
+return "ticker";
+}
+public String getRendererType() {
+// null means the component renders itself
+return null;
+}
+}
+]]></programlisting>
+<para>First, we have added a new property with the name "style" and provided the getter and setter
+for it. Then, we reset the property in the release() method. Finally, we have set the new value for
+the component property in the setProperties(UIComponent component) method. The last step is
+important. If you forget to do so, you cannot get to the value in the component type class later
+on.</para>
+<para>Add the code marked with bold to the ticker.UITicker class:</para>
+<programlisting role="JAVA"><![CDATA[import java.io.IOException;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+public class UITicker extends UIOutput {
+public void encodeBegin(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.startElement("div", this);
+String style = (String)getAttributes().get("style");
+if (style!=null)
+writer.writeAttribute("style", style, null);
+}
+public void encodeEnd(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.endElement("div");
+}
+}
+]]></programlisting>
+<para>In the first added line, we have taken the value of the style attribute, checked if it's set, and
+then assigned the style attribute with the new value. Do not forget to check for null, otherwise
+you will get a NullPointer Exception when a tag without this attribute set is rendered.</para>
+<para>Now, we are done with the style attribute. If you use Red Hat Developer Studio just click the Run Web
+Application button to get a result. If you are using an Ant script, run it, deploy the result war file
+under the servlet container, then launch your browser and type the application URL.</para>
+<para>The result page should see the box with dark blue border and the Hello JSF Component text
+inside this box.</para>
+<para>Adding the styleClass component is very similar to what we did for style. Here is a
+bannerpage.jsp content:</para>
+<programlisting role="HTML"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://jsftutorials.com/" prefix="d" %>
+<html>
+<head>
+<title>Show Custom Component</title>
+<style>
+.banner {
+border: 1px solid darkblue;
+padding: 5px 5px 5px 5px;
+}
+</style>
+</head>
+<body>
+<f:view>
+<d:ticker styleClass="banner" style="width:100px">
+<f:verbatim>Hello JSF Component</f:verbatim>
+</d:ticker>
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<para>This is the ticker.tld file content:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+<tlib-version>1.0</tlib-version>
+<jsp-version>1.2</jsp-version>
+<short-name>d</short-name>
+<uri>http://jsftutorials.com/</uri>
+<tag>
+<name>ticker</name>
+<tag-class>ticker.TickerTag</tag-class>
+<body-content>JSP</body-content>
+<attribute>
+<name>style</name>
+</attribute>
+<attribute>
+<name>styleClass</name>
+</attribute>
+</tag>
+</taglib>
+]]></programlisting>
+<para>This is the TickerTag.java class content:</para>
+<programlisting role="JAVA"><![CDATA[import javax.faces.component.UIComponent;
+import javax.faces.webapp.UIComponentTag;
+public class TickerTag extends UIComponentTag{
+String style;
+String styleClass;
+public String getStyle() {
+return style;
+}
+public void setStyle(String style) {
+this.style = style;
+}
+public String getStyleClass() {
+return styleClass;
+}
+public void setStyleClass(String styleClass) {
+this.styleClass = styleClass;
+}
+public void release() {
+// the super class method should be called
+super.release();
+style = null ;
+styleClass = null ;
+}
+protected void setProperties(UIComponent component) {
+// the super class method should be called
+super.setProperties(component);
+if(style != null)
+component.getAttributes().put("style", style);
+if(styleClass != null)
+component.getAttributes().put("styleClass", styleClass);
+}
+public String getComponentType() {
+return "ticker";
+}
+public String getRendererType() {
+// null means the component renders itself
+return null;
+}
+}
+]]></programlisting>
+<para>This is the UITicker.java file content:</para>
+<programlisting role="JAVA"><![CDATA[import java.io.IOException;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+public class UITicker extends UIOutput {
+public void encodeBegin(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.startElement("div", this);
+String style = (String)getAttributes().get("style");
+if (style!=null)
+writer.writeAttribute("style", style, null);
+String styleClass = (String)getAttributes().get("styleClass");
+if (styleClass!=null)
+writer.writeAttribute("class", styleClass, null);
+}
+public void encodeEnd(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.endElement("div");
+}
+}
+]]></programlisting>
+<para>Now, step 2 is done. Run the resulting application. The browser window should show the
+bordered box with the Hello JSF Component text inside. Unlike the previous run, you will see 5
+pixels of space between the text and the border.</para>
+</section>
+<section id="Step3AddingJSFSupportAttributes">
+<?dbhtml filename="Step3AddingJSFSupportAttributes.html"?>
+<title>Step 3: Adding JSF Support Attributes</title>
+<para>Looking at the source code of pages rendered by the JSF run-time you can see that most
+components have an id. They have this attribute assigned even you don't explicitly define it for
+the JSF tags.</para>
+<para>Also, JSF has its own naming convention for the component id. While you might specify
+something like id="myId" for h:inputText, the rendered code will contain something like
+id="_id0:myId". This is done to ensure the uniqueness of each element in the JSF Component
+tree. It is especially important for components that process user input. Having the full control
+over the rendered code you can assign any value for id, but we recommend you to follow the
+rules of the game.</para>
+<para>In step 3, we will assign a value for our component that will be the same value that JSF runtime
+assigns for it.</para>
+<para>Any attribute should be present in the tag library definition file. So, open our ticker.tld file
+and add the following code snippet next to the other tag attributes:</para>
+<programlisting role="XML"><![CDATA[<attribute>
+<name>id</name>
+</attribute>
+]]></programlisting>
+<para>Add the following code marked with bold in the encodeBegin method of the UITicker.java:</para>
+<programlisting role="JAVA"><![CDATA[public void encodeBegin(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.startElement("div", this);
+writer.writeAttribute("id", getClientId(context), null);
+String style = (String)getAttributes().get("style");
+if (style!=null)
+writer.writeAttribute("style", style, null);
+String styleClass = (String)getAttributes().get("styleClass");
+if (styleClass!=null)
+writer.writeAttribute("class", styleClass, null);
+}
+]]></programlisting>
+<para>When you run the application at this point, you can see that the id attribute of the <emphasis role="bold"><property><div></property></emphasis> tag
+is assigned. Because the id attribute has no visual effect, you have to open the source of the
+resulting page to see it.</para>
+<para>Provide your id for the <emphasis role="bold"><property><d:ticker></property></emphasis> component and run the application again. Then, you will
+see that the id you have for the rendered code is the same that you assign. This happens because
+the <emphasis role="bold"><property><d:ticker></property></emphasis> is a root element of the component tree. If you add <emphasis role="bold"><property><h:form></property></emphasis> or <emphasis role="bold"><property><h:subview></property></emphasis>
+around it, you can the that the same prefix is added to the value you assigned for id.</para>
+<para>We are done with <emphasis role="italic"><property>"id"</property></emphasis> attribute. Now, let's use the <emphasis role="italic"><property>"rendered"</property></emphasis> attribute. This attribute can
+be used with any JSF Component, because it is inherited from the UIComponent class, the top
+level of the JSF Component hierarchy. The <emphasis role="italic"><property>"rendered"</property></emphasis> attribute itself is not passed through to the HTML code as a tag attribute, but, if it has been set to “false,” the tag with all of its children will
+not be rendered at all.</para>
+<para>It is pretty easy to add a <emphasis role="italic"><property>"rendered"</property></emphasis> attribute. Just add it into the ticker.tld and all is set.</para>
+<programlisting role="XML"><![CDATA[<attribute>
+<name>rendered</name>
+</attribute>
+]]></programlisting>
+<para>Add rendered="false" to the <emphasis role="bold"><property><d:ticker></property></emphasis> tag, run the application and see what happens. The
+browser should show the empty page. When you assign the "true" value, the page will show the
+box with a greeting again.</para>
+<para>This is a good time to show why <emphasis role="bold"><property><f:verbatim></property></emphasis> is important for this construction. Remove
+<emphasis role="bold"><property><f:verbatim></property></emphasis> around the Hello JSF Component text, write rendered="false" and run the
+application. You can see that the box disappears, but the greeting text is still there. Looking at
+the resulting code, you can realize that the <emphasis role="bold"><property><div></property></emphasis> tag is stripped out.</para>
+</section>
+<section id="Step4AttributeBinding">
+<?dbhtml filename="Step4AttributeBinding.html"?>
+<title>Step 4: Attribute Binding</title>
+<para>Attribute <emphasis role="bold"><property><binding></property></emphasis> is one of the most powerful JSF features. You can take the value from a
+bean property or resource bundle property rather than just hardcode it into your JSP file. In step
+4, we add one new attribute with the name "title" whose value will be taken from the resource
+bundle instead of defining it directly in the JSP file (that's also possible).</para>
+<para>In order to separate the designed component and the code that test it, lets create an additional
+package with the name "demo" within the JavaSource folder. In the "demo" package, create the
+file with the name "resources.properties" with the following content:</para>
+<programlisting role="XML"><![CDATA[banner_title=Creating JSF Components. Step-By-Step Tutorial.
+]]></programlisting>
+<para>Add the new attribute with the name "title" to the ticker.tld file next to the other attribute of
+the "ticker" tag.</para>
+<programlisting role="XML"><![CDATA[<attribute>
+<name>title</name>
+</attribute>
+]]></programlisting>
+
+<para>Add the text marked with bold to the ticker.TickerTag.java file:</para>
+<programlisting role="JAVA"><![CDATA[package ticker;
+import javax.faces.component.UIComponent;
+import javax.faces.el.ValueBinding;
+import javax.faces.webapp.UIComponentTag;
+public class TickerTag extends UIComponentTag{
+String style;
+String styleClass;
+String title;
+public String getStyle() {
+return style;
+}
+public void setStyle(String style) {
+this.style = style;
+}
+public String getStyleClass() {
+return styleClass;
+}
+public void setStyleClass(String styleClass) {
+this.styleClass = styleClass;
+}
+public String getTitle() {
+return title;
+}
+public void setTitle(String title) {
+this.title = title;
+}
+public void release() {
+// the super class method should be called
+super.release();
+style = null ;
+styleClass = null ;
+title = null;
+}
+protected void setProperties(UIComponent component) {
+// the super class method should be called
+super.setProperties(component);
+if(style != null)
+component.getAttributes().put("style", style);
+if(styleClass != null)
+component.getAttributes().put("styleClass", styleClass);
+if (title != null) {
+if (isValueReference(title)) {
+ValueBinding vb =
+getFacesContext().getApplication().
+createValueBinding(title);
+component.setValueBinding("title", vb);
+} else {
+component.getAttributes().put("title", title);
+}
+}
+}
+public String getComponentType() {
+return "ticker";
+}
+public String getRendererType() {
+// null means the component renders itself
+return null;
+}
+}
+]]></programlisting>
+<para>The most important part of the added code is inside the SetProperties method. We check
+there to see if this value is referenced and if so we create the value binding. Otherwise, we just
+pass the value taken from the JSP page.</para>
+<para>The other code is similar to what we did previously. Add the code marked with bold to the
+encodeBegin method of the ticker.UITicker.java file:</para>
+<programlisting role="HTML"><![CDATA[public void encodeBegin(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.startElement("div", this);
+writer.writeAttribute("id", getClientId(context), null);
+String style = (String)getAttributes().get("style");
+if (style!=null)
+writer.writeAttribute("style", style, null);
+String styleClass = (String)getAttributes().get("styleClass");
+if (styleClass!=null)
+writer.writeAttribute("class", styleClass, null);
+String title = (String)getAttributes().get("title");
+if (title!=null)
+writer.writeAttribute("title", title, null);
+}
+]]></programlisting>
+<para>Add the following code marked with bold to the bannerpage.jsp file:</para>
+<programlisting role="JSP"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://jsftutorials.com/" prefix="d" %>
+<f:loadBundle basename="demo.resources" var="bundle" />
+<html>
+<head>
+<title>Show Custom Component</title>
+<style>
+.banner {
+border: 1px solid darkblue;
+padding: 5px 5px 5px 5px;
+}
+</style>
+</head>
+<body>
+<f:view>
+<d:ticker id="banner"
+styleClass="banner"
+style="width:100px"
+rendered="true"
+title="#{bundle.banner_title}">
+<f:verbatim>Hello JSF Component</f:verbatim>
+</d:ticker>
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<para>We have added here the reference to our bundle and taken the banner_title property as a <emphasis role="italic"><property>"title"</property></emphasis>
+attribute for the <emphasis role="bold"><property><d:ticker></property></emphasis> tag.</para>
+<para>Now, we are done with step 4 of our tutorial. Run the application and hold the mouse cursor
+over the box. The tip message should appear. If you look at the source code on the rendered
+page, you can see the <emphasis role="italic"><property>"title"</property></emphasis> attribute set to a value taken from the resource bundle property.</para>
+</section>
+<section id="Step5ComponentBinding">
+<?dbhtml filename="Step5ComponentBinding.html"?>
+<title>Step 5: Component Binding</title>
+<para>One more powerful feature of the JSF technology is component binding. Unlike value
+binding, component binding allows controlling all of the aspects of a bound component and its
+child hierarchy from a Java class that is usually called a "backing bean."</para>
+<para>In step 5, we will demonstrate how this mechanism works. We will add a form with two
+buttons to our bannerpage.jsp page. One button will hide the box for our greeting message; the
+other button will return it back to the page. We will also create a backing bean that will control
+the form and the component located inside the form.</para>
+<para>Actually, the binding mechanism is provided by the super class of our component. All we
+have to do it to add a new attribute with the name "binding" to the ticker.tld file. All other stuff
+added on this step has a testing purpose.</para>
+<para>So, this is our ticker.tld file content:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+<tlib-version>1.0</tlib-version>
+<jsp-version>1.2</jsp-version>
+<short-name>d</short-name>
+<uri>http://jsftutorials.com/</uri>
+<tag>
+<name>ticker</name>
+<tag-class>ticker.TickerTag</tag-class>
+<body-content>JSP</body-content>
+<attribute>
+<name>style</name>
+</attribute>
+<attribute>
+<name>styleClass</name>
+</attribute>
+<attribute>
+<name>id</name>
+</attribute>
+<attribute>
+<name>rendered</name>
+</attribute>
+<attribute>
+<name>title</name>
+</attribute>
+<attribute>
+<name>binding</name>
+</attribute>
+</tag>
+</taglib>
+]]></programlisting>
+<para>Add the code marked with bold to the faces-config.xml file:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE faces-config
+PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
+"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
+<faces-config>
+<component>
+<component-type>ticker</component-type>
+<component-class>ticker.UITicker</component-class>
+</component>
+<managed-bean>
+<managed-bean-name>BannerPageBean</managed-bean-name>
+<managed-bean-class>demo.BannerPageBean</managed-bean-class>
+<managed-bean-scope>request</managed-bean-scope>
+<managed-property>
+<property-name>rendered</property-name>
+<property-class>java.lang.Boolean</property-class>
+<value>true</value>
+</managed-property>
+</managed-bean>
+<lifecycle/>
+<application>
+<locale-config/>
+</application>
+<factory/>
+</faces-config>
+]]></programlisting>
+<para>We have added the managed bean with name BannerPageBean that will play the role on
+backing bean for our form. We also have defined the "rendered" property that is set to true by
+default.</para>
+<para>Create new file with the name BannerPageBean.java inside the "demo" package. Here is the
+content of this file:</para>
+<programlisting role="XML"><![CDATA[package demo;
+import ticker.UITicker;
+public class BannerPageBean {
+Boolean rendered;
+UITicker ticker;
+public Boolean getRendered() {
+return rendered;
+}
+public void setRendered(Boolean rendered) {
+this.rendered = rendered;
+}
+public UITicker getTicker() {
+return ticker;
+}
+public void setTicker(UITicker ticker) {
+this.ticker = ticker;
+}
+public UITicker getTiker() {
+return ticker;
+}
+public void setTiker(UITicker tiker) {
+this.ticker = tiker;
+}
+public String TurnOn() {
+ticker.setRendered(true);
+return null;
+}
+public String TurnOff() {
+ticker.setRendered(false);
+return null;
+}
+}
+]]></programlisting>
+<para>The bean has two properties: rendered that has a Boolean type and ticker that has a type of
+our UITicker class. The two last methods will be called when you click the buttons on the page.
+Those methods call the setter of the "rendered" property of the ticker. Actually, you have full
+control over the ticker component here and can change any attribute you need.</para>
+<para>The bannerpage.jsp file should contain the following:</para>
+<programlisting role="JSP"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://jsftutorials.com/" prefix="d" %>
+<f:loadBundle basename="demo.resources" var="bundle" />
+<html>
+<head>
+<title>Show Custom Component</title>
+<style>
+.banner {
+border: 1px solid darkblue;
+padding: 5px 5px 5px 5px;
+}
+</style>
+</head>
+<body>
+<f:view>
+<h:form>
+<h:commandButton value="Turn Off" action="#{BannerPageBean.TurnOff}"/>
+<h:commandButton value="Turn On" action="#{BannerPageBean.TurnOn}"/>
+<d:ticker id="banner"
+styleClass="banner"
+style="width:100px"
+title="#{bundle.banner_title}"
+binding="#{BannerPageBean.ticker}">
+<f:verbatim>Hello JSF Component</f:verbatim>
+</d:ticker>
+</h:form>
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<para>The <emphasis role="italic"><property>"binding"</property></emphasis> attribute of our component refers to the “ticker” property of the backing bean.
+The buttons <emphasis role="italic"><property>"action"</property></emphasis> attribute calls the corresponding method.</para>
+<para>We are done with step 5. When you launch your application you can see our fancy box and
+two buttons above them. Click the "Turn Off" button and the box disappears, click the "Turn
+On" button and the box appears again.</para>
+</section>
+<section id="Step6FinalVersion">
+<?dbhtml filename="Step6FinalVersion.html"?>
+<title>Step 6: Final Version</title>
+<para>In this step, we set up our component with the look and feel we mentioned in the first step.
+Additionally, we assign a couple new attributes: <emphasis role="italic"><property>"width"</property></emphasis> and <emphasis role="italic"><property>"height"</property></emphasis>. It will be more convenient to
+define the value directly rather then use the style attribute. If you define width and height in the
+style and add width and height attributes for the custom tag at the same time, the attributes will
+overwrite the values defined with the style.</para>
+<para>Add <emphasis role="italic"><property>"width"</property></emphasis> and <emphasis role="italic"><property>"heght"</property></emphasis> attribute to the ticker.tld file. Here is the final version of it:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+<taglib>
+<tlib-version>1.0</tlib-version>
+<jsp-version>1.2</jsp-version>
+<short-name>d</short-name>
+<uri>http://jsftutorials.com/</uri>
+<tag>
+<name>ticker</name>
+<tag-class>ticker.TickerTag</tag-class>
+<body-content>JSP</body-content>
+<attribute>
+<name>style</name>
+</attribute>
+<attribute>
+<name>styleClass</name>
+</attribute>
+<attribute>
+<name>id</name>
+</attribute>
+<attribute>
+<name>rendered</name>
+</attribute>
+<attribute>
+<name>title</name>
+</attribute>
+<attribute>
+<name>binding</name>
+</attribute>
+<attribute>
+<name>width</name>
+</attribute>
+<attribute>
+<name>height</name>
+</attribute>
+</tag>
+</taglib>
+]]></programlisting>
+<para>Add the code marked with bold to the TickerTag.java file:</para>
+<programlisting role="JAVA"><![CDATA[package ticker;
+import javax.faces.component.UIComponent;
+import javax.faces.el.ValueBinding;
+import javax.faces.webapp.UIComponentTag;
+public class TickerTag extends UIComponentTag{
+String style;
+String styleClass;
+String title;
+String width;
+String height;
+public String getHeight() {
+return height;
+}
+public void setHeight(String height) {
+this.height = height;
+}
+public String getWidth() {
+return width;
+}
+public void setWidth(String width) {
+this.width = width;
+}
+public String getStyle() {
+return style;
+}
+public void setStyle(String style) {
+this.style = style;
+}
+public String getStyleClass() {
+return styleClass;
+}
+public void setStyleClass(String styleClass) {
+this.styleClass = styleClass;
+}
+public String getTitle() {
+return title;
+}
+public void setTitle(String title) {
+this.title = title;
+}
+public void release() {
+// the super class method should be called
+super.release();
+style = null ;
+styleClass = null ;
+title = null;
+height = null;
+width = null;
+}
+protected void setProperties(UIComponent component) {
+// the super class method should be called
+super.setProperties(component);
+if(style != null)
+component.getAttributes().put("style", style);
+if(styleClass != null)
+component.getAttributes().put("styleClass", styleClass);
+if(width != null)
+component.getAttributes().put("width", width);
+if(height != null)
+component.getAttributes().put("height", height);
+if (title != null) {
+if (isValueReference(title)) {
+ValueBinding vb =getFacesContext().getApplication().
+createValueBinding(title);
+component.setValueBinding("title", vb);
+} else {
+component.getAttributes().put("title", title);
+}
+}
+}
+public String getComponentType() {
+return "ticker";
+}
+public String getRendererType() {
+// null means the component renders itself
+return null;
+}
+}
+]]></programlisting>
+<para>This is a final version of the UITicker.java file:</para>
+<programlisting role="JAVA"><![CDATA[package ticker;
+import java.io.IOException;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+public class UITicker extends UIOutput {
+public void encodeBegin(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.startElement("div", this);
+writer.writeAttribute("id", getClientId(context), null);
+String width = (String)getAttributes().get("width");
+String height = (String)getAttributes().get("height");
+String style = (String)getAttributes().get("style");
+style= (style!=null) ? style + ";" : "";
+if (width != null) style += "width:" + width + ";";
+if (height != null) style += "height:" + height+ ";";
+writer.writeAttribute("style", style, null);
+String styleClass = (String)getAttributes().get("styleClass");
+if (styleClass!=null)
+writer.writeAttribute("class", styleClass, null);
+String title = (String)getAttributes().get("title");
+if (title!=null)
+writer.writeAttribute("title", title, null);
+}
+public void encodeEnd(FacesContext context) throws IOException {
+ResponseWriter writer = context.getResponseWriter();
+writer.endElement("div");
+}}
+]]></programlisting>
+<para>The HTML <emphasis role="bold"><property><div></property></emphasis> tag itself does not have the <emphasis role="italic"><property>"width"</property></emphasis> and <emphasis role="italic"><property>"height"</property></emphasis> attributes. So, we use a
+little trick here. We add the width and height to the tail of the <emphasis role="italic"><property>"style"</property></emphasis> attribute. If <emphasis role="italic"><property>"style"</property></emphasis> attribute
+does not exist we create it.</para>
+<para>This is a final version of the bannerpage.jsp file:</para>
+<programlisting role="JSP"><![CDATA[<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<%@ taglib uri="http://jsftutorials.com/" prefix="d" %>
+<f:loadBundle basename="demo.resources" var="bundle" />
+<html>
+<head>
+<title>Show Custom Component</title>
+<style>
+.banner {
+border: 1px solid darkblue;
+padding: 5px 5px 5px 5px;
+overflow: auto;
+}
+</style>
+</head>
+<body>
+<f:view>
+<h:form>
+<h:commandButton value="Turn Off" action="#{BannerPageBean.TurnOff}"/>
+<h:commandButton value="Turn On" action="#{BannerPageBean.TurnOn}"/>
+<d:ticker id="banner"
+width="300px"
+height="200px"
+styleClass="banner"
+title="#{bundle.banner_title}"
+binding="#{BannerPageBean.ticker}">
+<h:panelGrid columns="1">
+<h:outputText value="Introduction"/>
+<h:outputText value="Building Instructions for This Tutorial"/>
+<h:outputText value="General Tips for Building Components"/>
+<h:outputText value="Step 1: Components Skeleton"/>
+<h:outputText value="Step 2: Adding Simple Attributes"/>
+<h:outputText value="Step 3: Adding JSF Support Attributes"/>
+<h:outputText value="Step 4: Attribute Binding"/>
+<h:outputText value="Step 5: Component Binding"/>
+<h:outputText value="Step 6: Final Version"/>
+<h:outputText value="Step 7: Creating a Deployable Jar File"/>
+<h:outputText value="What Next?"/>
+</h:panelGrid>
+</d:ticker>
+</h:form>
+</f:view>
+</body>
+</html>
+]]></programlisting>
+<para>We have added the "overflow: auto" to the style class to make our text area scrollable,
+replaced a style attribute with the two size attributes and, finally, replaced the text greeting
+message with something new one. You can put any other code here if you want.</para>
+<para>Run and test the application. It should show the scrollable text area with the dark blue border
+around it. If you see this, you have successfully passed the tutorial. We have only one more question to answer: How to distribute what we have done? We will dedicate the last step to this
+question.</para>
+</section>
+<section id="Step7CreatingADeployableJarFile">
+<?dbhtml filename="Step7CreatingADeployableJarFile.html"?>
+<title>Step 7: Creating a Deployable Jar File</title>
+<para>OK. We have created our own JSF component or, even have written a whole custom tag
+library. How do we make it reusable? How do we distribute it?</para>
+<para>Of course, you can copy your classes and TLD file to the new project and add records to the
+faces-config.xml file. It will work. However, this would be inconvenient to do each time,
+especially if your library contains several dozen tags with double that number of class files all
+requiring filling in the faces-config.xml file with references to those classes. No, this is definitely
+not a good way. We will choice another one.</para>
+<para>We will gather all of the information inside just one jar file and this will be the only one file
+we have to distribute.</para>
+<para>To make a long story short, this is the structure of our taglib jar file:</para>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<para>The package "ticker" contains compiled classes for our ticker component. The top level
+META-INF folder contains the TLD file. It also contains the faces-config.xml file where the
+components, but nothing else are defined.</para>
+<para>To separate the components configuration from other stuff in the configuration file, let's
+split faces-config.xml into two files.</para>
+<para>Create the WEB-INF/faces-config-demo.xml file with the following content:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
+"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
+<faces-config>
+<managed-bean>
+<managed-bean-name>BannerPageBean</managed-bean-name>
+<managed-bean-class>demo.BannerPageBean</managed-bean-class>
+<managed-bean-scope>request</managed-bean-scope>
+<managed-property>
+<property-name>rendered</property-name>
+<property-class>java.lang.Boolean</property-class>
+<value/>
+</managed-property>
+</managed-bean>
+<application>
+<locale-config/>
+</application>
+<factory/>
+<lifecycle/>
+</faces-config>
+]]></programlisting>
+<para>Remove the information about the managed bean from the faces-config.xml file. The
+resulting content of this file will then be the following:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
+"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
+<faces-config>
+<component>
+<component-type>ticker</component-type>
+<component-class>ticker.UITicker</component-class>
+</component>
+<application>
+<locale-config/>
+</application>
+<factory/>
+<lifecycle/>
+</faces-config>
+]]></programlisting>
+<para>To have our demo application working, we have to add the information about the new
+configuration file into the web.xml. This will be the content of this file:</para>
+<programlisting role="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd" version="2.4">
+<context-param>
+<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
+<param-value>server</param-value>
+</context-param>
+<context-param>
+<param-name>javax.faces.CONFIG_FILES</param-name>
+<param-value>/WEB-INF/faces-config.xml,/WEB-INF/faces-config-demo.xml</param-value>
+</context-param>
+<listener>
+<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
+</listener>
+<servlet>
+<servlet-name>Faces Servlet</servlet-name>
+<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+<load-on-startup>1</load-on-startup>
+</servlet>
+<servlet-mapping>
+<servlet-name>Faces Servlet</servlet-name>
+<url-pattern>*.jsf</url-pattern>
+</servlet-mapping>
+</web-app>
+]]></programlisting>
+<para>To make assembling the resulting jar file archive easier, we need to add the following code
+into the build.xml file:</para>
+<programlisting role="XML"><![CDATA[<property name="taglib.distname" value="mylib.jar"/>
+<property name="taglibdeploy.dir" value="deploy"/>
+<target name="createtaglib" depends="compile"
+description="Create deployable tag libraries file">
+<delete dir="${build.dir}"/>
+<mkdir dir="${build.dir}"/>
+<mkdir dir="${build.dir}/META-INF"/>
+<copy todir="${build.dir}/ticker">
+<fileset dir="${webinf.dir}/classes/ticker"/>
+</copy>
+<copy file="${webinf.dir}/faces-config.xml" todir="${build.dir}/META-INF"/>
+<copy file="${webinf.dir}/ticker.tld" todir="${build.dir}/META-INF"/>
+<mkdir dir="${taglibdeploy.dir}"/>
+<jar basedir="${build.dir}" jarfile="${taglibdeploy.dir}/${taglib.distname}"/>
+</target>
+]]></programlisting>
+<para>In this file, the first property defines the name of the result archive. The second one defines
+the folder where the archive will be placed. To use the new Ant target coding we added, go to the
+Ant folder and run the script by typing from the command line:</para>
+<programlisting role="XML"><![CDATA[ant createtaglib
+]]></programlisting>
+<para>To see how this works now, copy the mylib.jar file to the WEB-INF/lib folder of any JSF
+project. Then insert your new custom tag on one of the JSP pages. Don't forget to insert at the
+top of the page the definition:</para>
+<programlisting role="XML"><![CDATA[<%@ taglib uri="http://jsftutorials.com/" prefix="d" %>
+]]></programlisting>
+<para>If you do everything right, the custom tag should work properly.</para>
+</section>
+<section id="WhatNext?">
+<?dbhtml filename="WhaNext.html"?>
+<title>What Next?</title>
+<para>In this tutorial we have created new JSF components all the way from scratch to a
+deployable package. In this example, we have covered the major points you will need in order to
+create any JSF component. However, our example does not show all of the aspects of JSF
+component building. You now have just the basic knowledge. If writing JSF components is
+going to be your job, you will need to learn more before you will become an expert in this area.</para>
+<section id="AdditionalTopics">
+<?dbhtml filename="AdditionalTopics.html"?>
+<title>Addititional Topics</title>
+<para>Some of the aspects you will need to learn that were not covered in this tutorial are
+mentioned below.</para>
+<para>Processing user input. If your component accepts data entered or selected by the user, you
+need to take care of encoding or decoding the date. Such a component might need to support
+validators, value changed listener, data converters.</para>
+<para>Working with Facets. Facets are similar to children, but they have names. It is up to the
+component how to process them. For example, the gridPanel from the standard JSF library has
+two facet elements for header and footer. It does not matter where the facet is located in the JSP
+code, the renderer always puts the header at the top and footer at the bottom.</para>
+<para>Custom rendering of the existing components. In our example, the getRendererType
+method of the TickerTag returns null. This means that the component renders itself. If this
+method returns any value, it makes it possible to overwrite the default rendering provided by the
+UITicker class. For this purpose, you or anybody else can add a new renderer with the defined
+name to the render-kit section of the faces configuration file. In the same way, you can
+implement rendered for any standard JSF components. All of the render type names can be found
+in the JSF specification.</para>
+<para>Action components. You can extend your component from the UICommand class. This
+allows you to write components similar to a command button or a link, but with advanced
+behavior. For example, you can implement tabbed panels or drop-down menus.</para>
+</section>
+<section id="JSFResources">
+<?dbhtml filename="JSFResources.html"?>
+<title>JSF Resources</title>
+<para>Beyond this tutorial, there are many resources that will help you go further with JSF. There
+are already a number of published books dedicated to JavaServer Faces. We recommend reading
+chapter 9 of the Core JavaServer Faces book by David Geary and Cay Horstmann. It contains
+very useful information regarding JSF component development.</para>
+<para>There are also several other types of resources available. We support the jsftutorials.net Web
+site where you can read other JSF tutorials. Also, if you or your company are interesting in
+learning JSF technology, Red Hat, Inc. has introduced a new JSF Course. You can read
+information about it on this CD. We are going to prepare several more courses that cover all
+levels from beginner to expert. The first course for beginners will be completed in the near
+future. For more information visit our corporate Web site at www.jboss.org</para>
+</section>
+</section>
+
+</chapter>
\ No newline at end of file
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedStrutsValidationExamples.xml
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedStrutsValidationExamples.xml (rev 0)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedStrutsValidationExamples.xml 2007-05-03 11:03:01 UTC (rev 1992)
@@ -0,0 +1,240 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<chapter id="GettingStartedStrutsValidationExamples" xreflabel="GettingStartedStrutsValidationExamples">
+ <?dbhtml filename="GettingStartedStrutsValidationExamples.html"?>
+ <chapterinfo>
+ <keywordset>
+ <keyword>Red Hat Developer Studio</keyword>
+ <keyword>Struts</keyword>
+ <keyword>Struts Validation</keyword>
+ </keywordset>
+ </chapterinfo>
+<title>Getting Started Struts Validation Examples</title>
+
+<para>Validation of input is an important part of any Web application. All Apache Jakarta frameworks,
+including Struts, can use a common Jakarta Validation Framework for streamlining this aspect of Web
+application development. The Validation Framework allows the developer to define validation rules and then
+ apply these rules on the client-side or the server-side.</para>
+
+<para>Red Hat Developer Studio makes using the Validation Framework in Struts even easier through a specialized editor
+ for the XML files that control validation in a project. In this document, we'll show you how this all
+ works by creating some simple client-side validation and server-side validation examples.</para>
+
+<section id="StartingPoint">
+<?dbhtml filename="StartingPoint.html"?>
+<title>Starting Point</title>
+<para>The example assumes that you have already created our sample StrutsHello application from the
+Getting Started Guide for Creating a Struts Application. You should have the Red Hat Developer Studio perspective
+ open on this StrutsHello project.</para>
+</section>
+
+<section id="DefiningTheValidationRule">
+<?dbhtml filename="DefiningTheValidationRule.html"?>
+<title>Defining the Validation Rule</title>
+<para>In these steps you will set up the validation that can be used for either client-side or
+serverside validation. You need to enable validation as part of the project, define an error message,
+and tie it into the appropriate part of the application.</para>
+
+<orderedlist>
+<listitem><para>Right-click the plug-ins node under the StrutsHello/Configuration/default/
+struts-config.xml node in the Web Projects view and select Create Special Plugin/Validators from the context
+ menu.</para></listitem>
+<listitem><para>Further down in the Web Projects view, right-click on the
+StrutsHello/ResourceBundles node and select New/Properties File... from the context menu.</para></listitem>
+<listitem><para>In the dialog box, click on the Browse... button next to the Folder field, expand the
+JavaSource folder in this next dialog box, select the sample subfolder, and click on the OK button.</para></listitem>
+<listitem><para>Back in the first dialog box, type in applResources for the Name field and
+click on the Finish button.</para></listitem>
+<listitem><para>Right-click the newly created file and select Add/Default Error Messages
+ from the context menu.</para></listitem>
+
+<listitem><para>Drag up the sample.applResources icon until you can drop it on the resources folder under struts-config.xml.</para></listitem>
+<listitem><para>Select File/Save All from the menu bar.</para></listitem>
+<listitem><para>Select validation.xml under the StrutsHello/Validation node and double-click it to open it with the Exadel Studio Validation Editor.</para></listitem>
+<listitem><para>Expand the form-beans node under the StrutsHello/Configuration/default/ struts-config.xml node. Then, drag the form bean GetNameForm and drop it onto formset (default) in the Validation Editor.</para></listitem>
+<listitem><para>In the Validation Editor, expand the formset node, right-click GetNameForm, and select Add Field... from the context menu.</para></listitem>
+<listitem><para>Enter name for Property in the dialog box.</para></listitem>
+<listitem><para>In the properties for the name field to the right of the "tree" for the validation.xml file, click on the Change... button next to the Depends entry field.</para></listitem>
+<listitem><para>In the displayed double list, select required from the left list and then click Add->.</para></listitem>
+<listitem><para>Click Ok.</para></listitem>
+<listitem><para>Right-click name and select Add Arg... from the context menu.</para></listitem>
+<listitem><para>In the Add Arg dialog box, click on the Change... button next to the Key field.</para></listitem>
+<listitem><para>In the Key dialog box that appears now, click on the Add button.</para></listitem>
+<listitem><para>Enter name.required in the Name field, and enter A person's name in the Value field.</para></listitem>
+<listitem><para>Click Finish, then Ok, and then Ok again.</para></listitem>
+<listitem><para>Select File/Save All from the menu bar.</para></listitem>
+</orderedlist>
+</section>
+
+<section id="Client-SideValidation">
+<?dbhtml filename="Client-SideValidation.html"?>
+<title>Client-Side Validation</title>
+<para>Client-side validation uses a scripting language (like JavaScript) running in the client browser</para>
+<para>to actually do the validation. In a Struts application using the Validation Framework, however,</para>
+<para>you don't actually have to do any of the script coding. The Validation Framework handles this.</para>
+<para>To see how this works in our application, you'll just need to make a couple of modifications to one of the JSP files.</para>
+<orderedlist continuation="continues">
+<listitem><para>Double-click inputname.jsp under StrutsHello/WEB-ROOT (WebContent)/ pages to open it for editing.</para></listitem>
+<listitem><para>Find the tag near the top and hit Return to make a new line under it.</para></listitem>
+<listitem><para>In the Red Hat Palette view to the right, open the HTML folder and click on the javascript tag.</para></listitem>
+
+<listitem><para>Back in the editor, just in front of the closing slash for this inserted tag, hit Ctrlspace and select formName from the prompting menu.</para></listitem>
+<listitem><para>Over in the Web Projects view, select GetNameForm under the StrutsHello/Configuration/ default/struts-config.xml/form-beans node, drag it, and drop it between the quotes in the editor.</para></listitem>
+<listitem><para>Modify the >html:form< tag by inserting this attribute:</para></listitem>
+</orderedlist>
+<para>onsubmit="return validateGetNameForm(this)"</para>
+<para>The file should now look like this:</para>
+<programlisting role="HTML"><![CDATA[
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+<html:html>
+<head>
+<title>Input name</title>
+<html:javascript formName="GetNameForm"/>
+</head>
+<body>
+<html:form action="/greeting.do" onsubmit="return
+<para>validateGetNameForm(this)"></para>
+<table border="0" cellspacing="0" cellpadding="0">
+<tr>
+<td><b>Input name:</b></td>
+</tr>
+<tr>
+<td>
+<html:text property="name" />
+<html:submit value=" Say Hello! " />
+</td>
+</tr>
+</table>
+</html:form>
+</body>
+</html:html>
+]]></programlisting>
+<orderedlist continuation="continues">
+<listitem><para>Select File/Save from the menu bar.</para></listitem>
+<listitem><para>28. Start Tomcat by clicking on its icon (a right-pointing arrow) in the toolbar.</para></listitem>
+<listitem><para>29. Click on the Run icon in the toolbar.</para></listitem>
+</orderedlist>
+<figure>
+<title></title>
+<mediaobject>
+ <imageobject>
+ <imagedata fileref="img/"/>
+ </imageobject>
+</mediaobject>
+</figure>
+<itemizedlist><listitem><para>30. In the browser window, click on the Say Hello! button without having entered any name in the form.</para></listitem></itemizedlist>
+<para>A JavaScript error message should be displayed in an alert box.</para>
+</section>
+<section id="Server-SideValidation">
+<?dbhtml filename="Server-SideValidation.html"?>
+<title>Server-Side Validation</title>
+<para>Server-side validation does the validation inside the application on the server. In a Struts
+application using the Validation Framework, you still don't have to do any of the actual validation
+coding. The Validation Framework handles this. You will, though, have to make a few changes to the JSP
+file you modified for client-side validation along with a change to an action and a few changes to the
+ form bean class.</para>
+</section>
+
+<section id="EditingTheJSPFile">
+<?dbhtml filename="EditingTheJSPFile.html"?>
+<title>Editing the JSP File</title>
+<orderedlist continuation="continues">
+<listitem><para>Reopen inputname.jsp for editing.</para></listitem>
+<listitem><para>Delete the onsubmit attribute in the >html:form< element that you put in for client-side validation.</para></listitem>
+
+<listitem><para>Add an >html:errors/> tag after the >/html:form> tag.</para></listitem>
+</orderedlist>
+<para>The JSP file should now look like this:</para>
+
+<programlisting role="HTML"><![CDATA[
+<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
+<html:html>
+<head>
+<title>Input name</title>
+<html:javascript formName="GetNameForm"/>
+</head>
+<body>
+<html:form action="/greeting.do">
+<table border="0" cellspacing="0" cellpadding="0">
+<tr>
+<td><b>Input name:</b></td>
+</tr>
+<tr>
+<td>
+<html:text property="name" />
+<html:submit value=" Say Hello! " />
+</td>
+</tr>
+</table>
+</html:form>
+<html:errors />
+</body>
+</html:html>
+]]></programlisting>
+
+</section>
+
+<section id="EditingTheAction">
+<?dbhtml filename="EditingTheAction.html"?>
+<title>Editing the Action</title>
+<orderedlist continuation="continues">
+<listitem><para>In the Web Projects view, expand the node under the StrutsHello/Configuration/ default/struts-config.xml/action-mappings node, right-click the /greeting action, and then select Properties... from the context menu.</para></listitem>
+
+<listitem><para>In the Edit Properties window, insert the cursor into the value column for the input property and click on the ... button.</para></listitem>
+
+<listitem><para>In the dialog box, make sure the Pages tab is selected, select StrutsHello/WEBROOT( WebContent)/pages/ inputname.jsp, click the Ok button, and then click on the Close button.</para></listitem>
+</orderedlist>
+</section>
+<section id="EditingTheFormBean">
+<?dbhtml filename="EditingTheFormBean.html"?>
+
+<title>Editing the Form Bean</title>
+<orderedlist continuation="continues">
+<listitem><para>Right-click the /greeting action again and select Open Form-bean Source to open the GetNameForm.java file for editing.</para></listitem>
+<listitem><para>Change the class that it extends to from: org.apache.struts.action.ActionForm to: org.apache.struts.validator.ValidatorForm</para></listitem>
+<listitem><para>Comment out out the validate method.</para></listitem>
+</orderedlist>
+<para>The file should now look like this:</para>
+<programlisting role="JAVA"><![CDATA[
+package sample;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.struts.action.ActionErrors;
+import org.apache.struts.action.ActionMapping;
+public class GetNameForm extends
+org.apache.struts.validator.ValidatorForm {
+private String name = "";
+/**
+* @return Returns the name.
+*/
+public String getName() {
+return name;
+}
+/**
+* @param name The name to set.
+*/
+public void setName(String name) {
+this.name = name;
+}
+public GetNameForm () {
+}
+public void reset(ActionMapping actionMapping, HttpServletRequest
+request) {
+this.name = "";
+}
+// public ActionErrors validate(ActionMapping actionMapping,
+HttpServletRequest request) {
+// ActionErrors errors = new ActionErrors();
+// return errors;
+// }
+}
+]]></programlisting>
+
+
+<para>Select File/Save All from the menu bar.</para>
+<orderedlist continuation="continues">
+<listitem><para>Reload the application into Tomcat by clicking on the Change Time Stamp icon (a finger pointing with a little star) in the toolbar.</para></listitem>
+<listitem><para>Run the application.</para></listitem>
+<listitem><para>In the browser window, click on the Say Hello! button without having entered any name in the form.</para></listitem>
+</orderedlist>
+<para>The error message should appear in a refreshed version of the form.</para>
+</section>
+</chapter>
\ No newline at end of file
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml (rev 0)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml 2007-05-03 11:03:01 UTC (rev 1992)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="GettingStartedWithRHDS" xreflabel="GettingStartedWithRHDS">
+ <?dbhtml filename="GettingStartedWithRHDS.html"?>
+ <chapterinfo>
+ <keywordset>
+ <keyword>Red Hat Developer Studio</keyword>
+ <keyword>Eclipse</keyword>
+ <keyword>Java</keyword>
+ <keyword>Tomcat</keyword>
+ </keywordset>
+ </chapterinfo>
+ <title>Getting Started with Red Hat Developer Studio</title>
+ <section id="TechnicalRequirements">
+ <?dbhtml filename="TechnicalRequirements.html"?>
+<title>Technical Requirements</title>
+ <section id="Java">
+ <title>Java</title>
+ <para>Before installing Red Hat Developer Studio, make sure you have one of the following versions of Java
+ installed:</para>
+ <itemizedlist>
+ <listitem><para>JDK 1.4.2 or higher</para></listitem>
+ </itemizedlist>
+ <para>It must be the full JDK, not just the JRE (Java Runtime Environment). For more information about
+ target operating environments and compatible Java versions, refer to the JBoss web site. Please note
+ that the Eclipse documentation states that you only need a Java Runtime Environment for Eclipse, but usage of Red Hat Developer Studio requires a full JDK in order to compile Java classes and JSP pages.</para>
+ </section>
+ <section id="OperatingSystems">
+ <?dbhtml filename="OperatingSystems.html"?>
+ <title>Operating Systems</title>
+ <itemizedlist>
+ <listitem><para>Windows</para></listitem>
+ <listitem><para>Linux</para></listitem>
+ </itemizedlist>
+ </section>
+ </section>
+ <section id="Installing">
+ <?dbhtml filename="Installing.html"?>
+<title>Installing</title>
+ <section id="Inst from down ver">
+ <title>Installing from the downloaded version</title>
+ <itemizedlist>
+ <listitem>
+ <para>Download the appropriate installation file for your platform from www.exadel.com/web/portal/download.</para>
+ </listitem>
+ <listitem>
+ <para>Run install.jar and follow the instructions presented by the installation wizard.</para>
+ </listitem>
+ </itemizedlist>
+
+ <figure>
+ <title>Red Hat Developer Studio Installation Wizard</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/install.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>After installation process you will have all required platforms to run Red Hat Developer Studio:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Eclipse 3.2.2</para>
+ </listitem>
+ <listitem>
+ <para>JBoss Application Server</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Red Hat Developer Studio comes with the following plug-ins:</para>
+ <itemizedlist>
+ <listitem><para>WTP runtime 1.5</para></listitem>
+ <listitem><para>GEF runtime 3.2</para></listitem>
+ <listitem><para>JEM runtime 1.2</para></listitem>
+ <listitem><para>EMF and SDO runtime 2.2</para></listitem>
+ <listitem><para>XSD runtime 2.2</para></listitem>
+ <listitem>Hibernate-tools-3.1.0 beta5 (without WTP, EMF, GEF, and other non-Hibernate plug-ins from
+ Hibernate-tools-3.1.0 beta5)</listitem>
+ <listitem><para>QuickImage 0.2.0</para></listitem>
+ <listitem><para>Spring IDE 1.3.2</para></listitem>
+ <listitem><para>Sun Glassfish 0.3</para></listitem>
+ </itemizedlist>
+
+ </section>
+ <section id="InstallingthroughTheUpdateSite">
+ <?dbhtml filename="InstallingthroughTheUpdateSite.html"?>
+ <title>Installing through the update Site</title>
+ TBD
+ </section>
+
+
+ </section>
+ <section id="RunningForTheFirstTime">
+ <?dbhtml filename="RunningForTheFirstTime.html"?>
+ <title>Running for the First Time</title>
+ <itemizedlist>
+ <listitem><para> Launch Eclipse</para></listitem>
+ <listitem><para> Select Window/Open Perspective.../Other...</para></listitem>
+ <listitem><para> Select Red Hat Developer Studio from the perspective list</para></listitem>
+ </itemizedlist>
+ <para>We recommend starting Eclipse with VM arguments to make more memory (heap) available for large-scale projects. Open the file <eclipse>\eclipse.ini and set the following:</para>
+ <para>eclipse -clean -vmargs -Xms512m -Xmx512m -XX:MaxPermSize=128m</para>
+ <para>This setting will allow the Java heap to grow to 512MB.</para>
+ </section>
+ <section id="Upgrading">
+ <?dbhtml filename="Upgrading.html"?>
+ <title>Upgrading</title>
+ <para>To upgrade, just uninstall your current version and install the new version.</para>
+
+ <itemizedlist>
+ <listitem><para> Make sure Eclipse is not running.</para>
+<para>Uninstall your current version of Exadel Studio. You can do one of the following:</para>
+</listitem>
+<listitem><para>Run the Red Hat Developer Studio uninstaller</para></listitem>
+ <listitem><para>Delete the file {EclipseHome}/links/com.exadel.studio.link</para>
+<para>Either method will uninstall Exadel Studio.</para>
+</listitem>
+<listitem>Start Eclipse:
+ <para>eclipse -clean</para></listitem>
+ </itemizedlist>
+
+ <itemizedlist>
+ <listitem><para>Close Eclipse</para></listitem>
+ <listitem><para>Install the new version of Red Hat Developer Studio.</para></listitem>
+ <listitem>After installation, start Eclipse with the -clean option:
+ <para>eclipse -clean</para></listitem>
+ </itemizedlist>
+
+ <para>This step is very important as it will clear the Eclipse cache of the old uninstalled plug-in.</para>
+ <note>
+ <title>Note:</title>
+ <para>It is recommended to uninstall Red Hat Developer along with Eclipse and install Red Hat Developer
+ Studio into a new clean Eclipse</para>
+ </note>
+ </section>
+ <section id="Uninstalling">
+ <?dbhtml filename="Uninstalling.html"?>
+ <title>Uninstalling</title>
+
+ <para> Make sure Eclipse is not running.</para>
+ <para> Uninstall your current version of Red Hat Developer Studio. You can do one of the following:</para>
+ <itemizedlist>
+ <listitem><para>Run the Red Hat Developer Studio uninstaller</para></listitem>
+ <listitem><para>Delete the file {EclipseHome}/links/com.exadel.studio.link</para>
+<para>Either method will uninstall Red Hat Developer Studio.</para>
+</listitem>
+</itemizedlist>
+ <itemizedlist>
+ <listitem><para>Start Eclipse with the -clean option:</para>
+<para>eclipse -clean</para>
+</listitem>
+</itemizedlist>
+ <para>This step is very important as it will clear the Eclipse cache of the uninstalled plug-in.</para>
+ </section>
+ <section id="Subscription">
+ <?dbhtml filename="Subscription.html"?>
+ <title>Subscription</title>
+ TBD
+ </section>
+ <section id="Support">
+ <?dbhtml filename="Support.html"?>
+ <title>Support</title>
+ <para>If you have comments or questions, you can send them to
+ <ulink url="mailto:support@exadel.com">support(a)exadel.com</ulink> or
+ <ulink url="http://www.jboss.com/index.html?module=bb&op=viewforum&f=258">Red Hat Developer Studio Forum</ulink>.</para>
+ <para>When writing to support, please include the following information:</para>
+ <itemizedlist>
+ <listitem><para>Eclipse version</para></listitem>
+ <listitem><para> Red Hat Developer Studio version</para></listitem>
+ <listitem><para>Exact error message</para></listitem>
+ <listitem><para>Exact steps you took to get the error</para></listitem>
+ </itemizedlist>
+ </section>
+
+</chapter>
+
Added: trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml.bak
===================================================================
--- trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml.bak (rev 0)
+++ trunk/documentation/GettingStartedGuide/docs/userguide/en/modules/GettingStartedWithRHDS.xml.bak 2007-05-03 11:03:01 UTC (rev 1992)
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<chapter id="GettingStartedWithRHDS" xreflabel="GettingStartedWithRHDS">
+ <?dbhtml filename="GettingStartedWithRHDS.html"?>
+ <chapterinfo>
+ <keywordset>
+ <keyword>Red Hat Developer Studio</keyword>
+ <keyword>Eclipse</keyword>
+ <keyword>Java</keyword>
+ <keyword>Tomcat</keyword>
+ </keywordset>
+ </chapterinfo>
+ <title>Getting Started with Red Hat Developer Studio</title>
+ <section id="TechnicalRequirements">
+ <?dbhtml filename="TechnicalRequirements.html"?>
+<title>Technical Requirements</title>
+ <section id="Java">
+ <title>Java</title>
+ <para>Before installing Red Hat Developer Studio, make sure you have one of the following versions of Java
+ installed:</para>
+ <itemizedlist>
+ <listitem><para>JDK 1.4.2 or higher</para></listitem>
+ </itemizedlist>
+ <para>It must be the full JDK, not just the JRE (Java Runtime Environment). For more information about
+ target operating environments and compatible Java versions please refer to the JBoss web site. Please note
+ that the Eclipse documentation states that you only need a Java Runtime Environment for Eclipse, but to
+ use Red Hat Developer Studio requires a full JDK in order to compile Java classes and JSP pages.</para>
+ </section>
+ <section id="OperatingSystems">
+ <?dbhtml filename="OperatingSystems.html"?>
+ <title>Operating Systems</title>
+ <itemizedlist>
+ <listitem><para>Windows</para></listitem>
+ <listitem><para>Linux</para></listitem>
+ </itemizedlist>
+ </section>
+ </section>
+ <section id="Installing">
+ <?dbhtml filename="Installing.html"?>
+<title>Installing</title>
+ <section id="Inst from down ver">
+ <title>Installing from the downloaded version</title>
+ <itemizedlist>
+ <listitem>
+ <para>Download the appropriate installation file for your platform from www.exadel.com/web/portal/download.</para>
+ </listitem>
+ <listitem>
+ <para>Run install.jar and follow the instructions presented by the installation wizard.</para>
+ </listitem>
+ </itemizedlist>
+
+ <figure>
+ <title>Red Hat Developer Studio Installation Wizard</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/install.png"/>
+ </imageobject>
+ </mediaobject>
+ </figure>
+
+ <para>After installation process you will have all required platforms to run Red Hat Developer Studio:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Eclipse 3.2.2</para>
+ </listitem>
+ <listitem>
+ <para>JBoss Application Server</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Red Hat Developer Studio comes with the following plug-ins:</para>
+ <itemizedlist>
+ <listitem><para>WTP runtime 1.5</para></listitem>
+ <listitem><para>GEF runtime 3.2</para></listitem>
+ <listitem><para>JEM runtime 1.2</para></listitem>
+ <listitem><para>EMF and SDO runtime 2.2</para></listitem>
+ <listitem><para>XSD runtime 2.2</para></listitem>
+ <listitem>Hibernate-tools-3.1.0 beta5 (without WTP, EMF, GEF, and other non-Hibernate plug-ins from
+ Hibernate-tools-3.1.0 beta5)</listitem>
+ <listitem><para>QuickImage 0.2.0</para></listitem>
+ <listitem><para>Spring IDE 1.3.2</para></listitem>
+ <listitem><para>Sun Glassfish 0.3</para></listitem>
+ </itemizedlist>
+
+ </section>
+ <section id="InstallingthroughTheUpdateSite">
+ <?dbhtml filename="InstallingthroughTheUpdateSite.html"?>
+ <title>Installing through the update Site</title>
+ TBD
+ </section>
+
+
+ </section>
+ <section id="RunningForTheFirstTime">
+ <?dbhtml filename="RunningForTheFirstTime.html"?>
+ <title>Running for the First Time</title>
+ <itemizedlist>
+ <listitem><para> Launch Eclipse</para></listitem>
+ <listitem><para> Select Window/Open Perspective.../Other...</para></listitem>
+ <listitem><para> Select Red Hat Developer Studio from the perspective list</para></listitem>
+ </itemizedlist>
+ <para>We recommend starting Eclipse with VM arguments to make more memory (heap) available for large-scale projects. Open the file <eclipse>\eclipse.ini and set the following:</para>
+ <para>eclipse -clean -vmargs -Xms512m -Xmx512m -XX:MaxPermSize=128m</para>
+ <para>This setting will allow the Java heap to grow to 512MB.</para>
+ </section>
+ <section id="Upgrading">
+ <?dbhtml filename="Upgrading.html"?>
+ <title>Upgrading</title>
+ <para>To upgrade, just uninstall your current version and install the new version.</para>
+
+ <itemizedlist>
+ <listitem><para> Make sure Eclipse is not running.</para>
+<para>Uninstall your current version of Exadel Studio. You can do one of the following:</para>
+</listitem>
+<listitem><para>Run the Red Hat Developer Studio uninstaller</para></listitem>
+ <listitem><para>Delete the file {EclipseHome}/links/com.exadel.studio.link</para>
+<para>Either method will uninstall Exadel Studio.</para>
+</listitem>
+<listitem>Start Eclipse:
+ <para>eclipse -clean</para></listitem>
+ </itemizedlist>
+
+ <itemizedlist>
+ <listitem><para>Close Eclipse</para></listitem>
+ <listitem><para>Install the new version of Red Hat Developer Studio.</para></listitem>
+ <listitem>After installation, start Eclipse with the -clean option:
+ <para>eclipse -clean</para></listitem>
+ </itemizedlist>
+
+ <para>This step is very important as it will clear the Eclipse cache of the old uninstalled plug-in.</para>
+ <note>
+ <title>Note:</title>
+ <para>It is recommended to uninstall Red Hat Developer along with Eclipse and install Red Hat Developer
+ Studio into a new clean Eclipse</para>
+ </note>
+ </section>
+ <section id="Uninstalling">
+ <?dbhtml filename="Uninstalling.html"?>
+ <title>Uninstalling</title>
+
+ <para> Make sure Eclipse is not running.</para>
+ <para> Uninstall your current version of Red Hat Developer Studio. You can do one of the following:</para>
+ <itemizedlist>
+ <listitem><para>Run the Red Hat Developer Studio uninstaller</para></listitem>
+ <listitem><para>Delete the file {EclipseHome}/links/com.exadel.studio.link</para>
+<para>Either method will uninstall Red Hat Developer Studio.</para>
+</listitem>
+</itemizedlist>
+ <itemizedlist>
+ <listitem><para>Start Eclipse with the -clean option:</para>
+<para>eclipse -clean</para>
+</listitem>
+</itemizedlist>
+ <para>This step is very important as it will clear the Eclipse cache of the uninstalled plug-in.</para>
+ </section>
+ <section id="Subscription">
+ <?dbhtml filename="Subscription.html"?>
+ <title>Subscription</title>
+ TBD
+ </section>
+ <section id="Support">
+ <?dbhtml filename="Support.html"?>
+ <title>Support</title>
+ <para>If you have comments or questions, you can send them to
+ <ulink url="mailto:support@exadel.com">support(a)exadel.com</ulink> or
+ <ulink url="">Red Hat Developer Studio Forum</ulink>.</para>
+ <para>When writing to support, please include the following information:</para>
+ <itemizedlist>
+ <listitem><para>Eclipse version</para></listitem>
+ <listitem><para> Red Hat Developer Studio version</para></listitem>
+ <listitem><para>Exact error message</para></listitem>
+ <listitem><para>Exact steps you took to get the error</para></listitem>
+ </itemizedlist>
+ </section>
+
+</chapter>
+
17 years, 8 months
JBoss Tools SVN: r1991 - in trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui: preferences and 2 other directories.
by jbosstools-commits@lists.jboss.org
Author: rob.stryker(a)jboss.com
Date: 2007-05-02 14:15:00 -0400 (Wed, 02 May 2007)
New Revision: 1991
Modified:
trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/PrefsInitializer.java
trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/preferences/MainPreferencePage.java
trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/providers/ArchivesContentProvider.java
trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java
Log:
Added project-specific preferences
Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/PrefsInitializer.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/PrefsInitializer.java 2007-05-02 18:14:57 UTC (rev 1990)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/PrefsInitializer.java 2007-05-02 18:15:00 UTC (rev 1991)
@@ -8,6 +8,7 @@
import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.jboss.ide.eclipse.archives.core.CorePreferenceManager;
public class PrefsInitializer extends AbstractPreferenceInitializer {
@@ -54,12 +55,39 @@
}
+ /**
+ * Get the global pref value for this key
+ * @param key
+ * @return
+ */
public static boolean getBoolean(String key) {
- return getBoolean(key, null);
+ return getBoolean(key, null, true);
}
- public static boolean getBoolean(String key, IAdaptable adaptable) {
+
+ /**
+ * Get the *effective* value of this preference upon this adaptable / resource
+ * Effective values are the stored value if project-specific prefs are turned on.
+ * Effective values are the global value if project-specific prefs are *NOT* turned on.
+ *
+ * @param key
+ * @param adaptable
+ * @return
+ */
+// public static boolean getBoolean(String key, IAdaptable adaptable) {
+// return getBoolean(key, adaptable, true);
+// }
+
+ /**
+ *
+ * @param key the preference to be gotten
+ * @param adaptable the project / resource where the pref might be stored
+ * @param effective whether or not to get the raw pref value or the effective value
+ * (based on whether project specific prefs are turned on)
+ * @return
+ */
+ public static boolean getBoolean(String key, IAdaptable adaptable, boolean effective) {
QualifiedName name = new QualifiedName(PackagesUIPlugin.PLUGIN_ID, key);
- if( adaptable != null ) {
+ if( adaptable != null && CorePreferenceManager.areProjectSpecificPrefsEnabled(adaptable)) {
IResource project = (IResource)adaptable.getAdapter(IResource.class);
try {
if( project != null && project.getPersistentProperty(name) != null) {
Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/preferences/MainPreferencePage.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/preferences/MainPreferencePage.java 2007-05-02 18:14:57 UTC (rev 1990)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/preferences/MainPreferencePage.java 2007-05-02 18:15:00 UTC (rev 1991)
@@ -3,6 +3,7 @@
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
@@ -22,8 +23,9 @@
private Button showPackageOutputPath, showFullFilesetRootDir;
private Button showProjectRoot, showAllProjects;
- private Button automaticBuilder;
+ private Button automaticBuilder, overrideButton;
private Group corePrefGroup, viewPrefGroup;
+ private Composite overrideComp;
public MainPreferencePage() {
@@ -44,28 +46,54 @@
}
protected void fillValues() {
+ if( getElement() != null )
+ overrideButton.setSelection(CorePreferenceManager.areProjectSpecificPrefsEnabled(getElement()));
automaticBuilder.setSelection(CorePreferenceManager.isBuilderEnabled(getElement()));
showAllProjects.setSelection(
- PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_ALL_PROJECTS, getElement()));
+ PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_ALL_PROJECTS, getElement(), false));
showPackageOutputPath.setSelection(
- PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_PACKAGE_OUTPUT_PATH, getElement()));
+ PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_PACKAGE_OUTPUT_PATH, getElement(), false));
showFullFilesetRootDir.setSelection(
- PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_FULL_FILESET_ROOT_DIR, getElement()));
+ PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_FULL_FILESET_ROOT_DIR, getElement(), false));
showProjectRoot.setSelection(
- PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_PROJECT_ROOT, getElement()));
+ PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_PROJECT_ROOT, getElement(), false));
showAllProjects.setEnabled(showProjectRoot.getSelection());
if (!showProjectRoot.getSelection())
showAllProjects.setSelection(false);
+
+ if( getElement() != null ) {
+ setWidgetsEnabled(overrideButton.getSelection());
+ }
}
protected void createOverridePrefs(Composite main) {
- System.out.println(getElement());
if( getElement() != null ) {
+ overrideComp = new Composite(main, SWT.NONE);
+ overrideComp.setLayout(new FillLayout());
+ overrideButton = new Button(overrideComp, SWT.CHECK);
+ overrideButton.setText("Enable Project Specific Settings");
+ overrideButton.addSelectionListener(new SelectionListener(){
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ public void widgetSelected(SelectionEvent e) {
+ setWidgetsEnabled(overrideButton.getSelection());
+ }
+ });
}
}
+ protected void setWidgetsEnabled(boolean val) {
+ showPackageOutputPath.setEnabled(val);
+ showProjectRoot.setEnabled(val);
+ showFullFilesetRootDir.setEnabled(val);
+ if( showProjectRoot.getSelection())
+ showAllProjects.setEnabled(val);
+ automaticBuilder.setEnabled(val);
+ }
+
protected void createCorePrefs(Composite main) {
corePrefGroup = new Group(main, SWT.NONE);
corePrefGroup.setText("Core Preferences");
@@ -118,6 +146,9 @@
}
public boolean performOk() {
+ if( getElement() != null ) {
+ CorePreferenceManager.setProjectSpecificPrefs(getElement(), overrideButton.getSelection());
+ }
CorePreferenceManager.setBuilderEnabled(getElement(), automaticBuilder.getSelection());
PrefsInitializer.setBoolean(PrefsInitializer.PREF_SHOW_PACKAGE_OUTPUT_PATH, showPackageOutputPath.getSelection(), getElement());
PrefsInitializer.setBoolean(PrefsInitializer.PREF_SHOW_FULL_FILESET_ROOT_DIR, showFullFilesetRootDir.getSelection(), getElement());
@@ -125,24 +156,6 @@
PrefsInitializer.setBoolean(PrefsInitializer.PREF_SHOW_ALL_PROJECTS, showAllProjects.getSelection(), getElement());
ProjectArchivesView.getInstance().refreshViewer(null);
- /*
- *
- *
- IProject[] projects;
- if( getElement() == null )
- projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
- else
- projects = new IProject[]{ (IProject)getElement().getAdapter(IProject.class)};
-
- for( int i = 0; i < projects.length; i++ ) {
- CorePreferenceManager.setBuilderEnabled(getElement(), automaticBuilder.getSelection());
- PrefsInitializer.setBoolean(PrefsInitializer.PREF_SHOW_PACKAGE_OUTPUT_PATH, showPackageOutputPath.getSelection(), getElement());
- PrefsInitializer.setBoolean(PrefsInitializer.PREF_SHOW_FULL_FILESET_ROOT_DIR, showFullFilesetRootDir.getSelection(), getElement());
- PrefsInitializer.setBoolean(PrefsInitializer.PREF_SHOW_PROJECT_ROOT, showProjectRoot.getSelection(), getElement());
- PrefsInitializer.setBoolean(PrefsInitializer.PREF_SHOW_ALL_PROJECTS, showAllProjects.getSelection(), getElement());
- }
-
- */
return true;
}
}
Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/providers/ArchivesContentProvider.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/providers/ArchivesContentProvider.java 2007-05-02 18:14:57 UTC (rev 1990)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/providers/ArchivesContentProvider.java 2007-05-02 18:15:00 UTC (rev 1991)
@@ -1,16 +1,13 @@
package org.jboss.ide.eclipse.archives.ui.providers;
-import java.util.ArrayList;
-
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
-import org.jboss.ide.eclipse.archives.core.model.ArchivesCore;
import org.jboss.ide.eclipse.archives.core.model.ArchivesModel;
import org.jboss.ide.eclipse.archives.core.model.IArchiveModelNode;
import org.jboss.ide.eclipse.archives.core.model.IArchiveNode;
import org.jboss.ide.eclipse.archives.ui.PrefsInitializer;
+import org.jboss.ide.eclipse.archives.ui.views.ProjectArchivesView;
public class ArchivesContentProvider implements ITreeContentProvider {
@@ -41,14 +38,7 @@
if( parentElement instanceof IArchiveModelNode && showProjectRoot()) {
IProject[] projects;
if( PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_ALL_PROJECTS)) {
- IProject[] projects2 = ResourcesPlugin.getWorkspace().getRoot().getProjects();
- ArrayList list = new ArrayList();
- for( int i = 0; i < projects2.length; i++ ) {
- if( ArchivesCore.packageFileExists(projects2[i])) {
- list.add(projects2[i]);
- }
- }
- projects = (IProject[]) list.toArray(new IProject[list.size()]);
+ projects = ProjectArchivesView.getInstance().getAllProjectsWithPackages();
} else {
projects = new IProject[] { ((IArchiveModelNode)parentElement).getProject()};
}
@@ -79,6 +69,9 @@
}
public boolean hasChildren(Object element) {
+ if( element == null || getChildren(element) == null ) {
+ System.out.println("pause");
+ }
return getChildren(element).length > 0;
}
Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java 2007-05-02 18:14:57 UTC (rev 1990)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.ui/src/main/org/jboss/ide/eclipse/archives/ui/views/ProjectArchivesView.java 2007-05-02 18:15:00 UTC (rev 1991)
@@ -5,6 +5,7 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ISelection;
@@ -37,6 +38,7 @@
import org.jboss.ide.eclipse.archives.core.model.ArchivesCore;
import org.jboss.ide.eclipse.archives.ui.ArchivesUIMessages;
import org.jboss.ide.eclipse.archives.ui.ExtensionManager;
+import org.jboss.ide.eclipse.archives.ui.PrefsInitializer;
import org.jboss.ide.eclipse.archives.ui.actions.NewArchiveAction;
import org.jboss.ide.eclipse.archives.ui.providers.ArchivesContentProvider;
import org.jboss.ide.eclipse.archives.ui.providers.ArchivesLabelProvider;
@@ -205,7 +207,11 @@
else {
this.project = project;
book.showPage(loadingPackagesComposite);
- registerProject(project);
+ if( PrefsInitializer.getBoolean(PrefsInitializer.PREF_SHOW_ALL_PROJECTS, project, true)) {
+ registerProjects(getAllProjectsWithPackages(), this.project);
+ } else {
+ registerProjects(new IProject[] {this.project}, this.project);
+ }
return;
}
} else {
@@ -220,16 +226,33 @@
return project;
}
- protected void registerProject(final IProject project) {
+ /**
+ * Registers the projects if and only if a file exists already
+ * @param projects
+ * @param projectToShow
+ */
+ protected void registerProjects(final IProject[] projects, final IProject projectToShow) {
getSite().getShell().getDisplay().asyncExec(new Runnable () {
public void run () {
- ArchivesModel.instance().registerProject(project, loadingProgress);
+ for( int i = 0; i < projects.length; i++ ) {
+ ArchivesModel.instance().registerProject(projects[i], loadingProgress);
+ }
book.showPage(viewerComposite);
- packageViewer.setInput(ArchivesModel.instance().getRoot(project));
+ packageViewer.setInput(ArchivesModel.instance().getRoot(projectToShow));
}
});
}
+ public IProject[] getAllProjectsWithPackages() {
+ IProject[] projects2 = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ ArrayList list = new ArrayList();
+ for( int i = 0; i < projects2.length; i++ ) {
+ if( ArchivesCore.packageFileExists(projects2[i])) {
+ list.add(projects2[i]);
+ }
+ }
+ return (IProject[]) list.toArray(new IProject[list.size()]);
+ }
public IStructuredSelection getSelection() {
return (IStructuredSelection)packageViewer.getSelection();
}
17 years, 8 months
JBoss Tools SVN: r1990 - trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core.
by jbosstools-commits@lists.jboss.org
Author: rob.stryker(a)jboss.com
Date: 2007-05-02 14:14:57 -0400 (Wed, 02 May 2007)
New Revision: 1990
Modified:
trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/CorePreferenceManager.java
Log:
Added project-specific preferences
Modified: trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/CorePreferenceManager.java
===================================================================
--- trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/CorePreferenceManager.java 2007-05-02 15:43:35 UTC (rev 1989)
+++ trunk/core/plugins/org.jboss.ide.eclipse.archives.core/src/main/org/jboss/ide/eclipse/archives/core/CorePreferenceManager.java 2007-05-02 18:14:57 UTC (rev 1990)
@@ -41,10 +41,12 @@
*/
public class CorePreferenceManager extends AbstractPreferenceInitializer {
public static final String AUTOMATIC_BUILDER_ENABLED = "org.jboss.ide.eclipse.archives.core.automaticBuilderEnabled";
+ public static final String PROJECT_SPECIFIC_PREFS = "org.jboss.ide.eclipse.archives.core.projectSpecificPreferencesEnabled";
+
public static boolean isBuilderEnabled(IAdaptable adaptable) {
QualifiedName name = new QualifiedName(ArchivesCorePlugin.PLUGIN_ID, AUTOMATIC_BUILDER_ENABLED);
- if( adaptable != null ) {
+ if( adaptable != null && areProjectSpecificPrefsEnabled(adaptable)) {
IResource resource = (IResource)adaptable.getAdapter(IResource.class);
// if the resource is null or the resource has no preference val, use global val
@@ -84,4 +86,36 @@
prefs.flush();
} catch (BackingStoreException e) { }
}
+
+ public static boolean areProjectSpecificPrefsEnabled(IAdaptable adaptable) {
+ QualifiedName name = new QualifiedName(ArchivesCorePlugin.PLUGIN_ID, PROJECT_SPECIFIC_PREFS);
+ if( adaptable != null ) {
+ IResource resource = (IResource)adaptable.getAdapter(IResource.class);
+
+ // if the resource is null or the resource has no preference val, use global val
+ try {
+ if( resource != null && resource.getPersistentProperty(name) != null) {
+ return Boolean.parseBoolean(resource.getPersistentProperty(name));
+ }
+ } catch( CoreException ce ) {}
+ }
+ return false;
+ }
+
+ public static void setProjectSpecificPrefs(IAdaptable adaptable, boolean value) {
+ QualifiedName name = new QualifiedName(ArchivesCorePlugin.PLUGIN_ID, PROJECT_SPECIFIC_PREFS);
+ if( adaptable != null ) {
+ IResource resource = (IResource)adaptable.getAdapter(IResource.class);
+
+ // if the resource is null or the resource has no preference val, use global val
+ try {
+ if( resource != null) {
+ resource.setPersistentProperty(name, new Boolean(value).toString());
+ return;
+ }
+ } catch( CoreException ce ) {}
+ }
+ }
+
+
}
17 years, 8 months
JBoss Tools SVN: r1989 - trunk/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/module.
by jbosstools-commits@lists.jboss.org
Author: rob.stryker(a)jboss.com
Date: 2007-05-02 11:43:35 -0400 (Wed, 02 May 2007)
New Revision: 1989
Modified:
trunk/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/module/Ejb30ArtifactAdapter.java
Log:
artifact adapter didnt account for IProject
Modified: trunk/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/module/Ejb30ArtifactAdapter.java
===================================================================
--- trunk/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/module/Ejb30ArtifactAdapter.java 2007-05-02 12:27:51 UTC (rev 1988)
+++ trunk/ejb3/plugins/org.jboss.ide.eclipse.ejb3.wizards.core/src/main/org/jboss/ide/eclipse/ejb3/core/module/Ejb30ArtifactAdapter.java 2007-05-02 15:43:35 UTC (rev 1989)
@@ -21,7 +21,9 @@
*/
package org.jboss.ide.eclipse.ejb3.core.module;
+import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IModuleArtifact;
import org.eclipse.wst.server.core.internal.ModuleFactory;
@@ -47,8 +49,14 @@
}
public IModuleArtifact getModuleArtifact(Object obj) {
+ IJavaProject jp = null;
if( obj instanceof IJavaProject ) {
- IJavaProject jp = (IJavaProject)obj;
+ jp = (IJavaProject)obj;
+ } else if( obj instanceof IProject ) {
+ jp = JavaCore.create((IProject)obj);
+ }
+
+ if( jp != null ) {
ModuleFactory mf = getModuleFactory();
IModule mod = mf.getModule(jp.getElementName());
if( mod != null ) {
17 years, 8 months
JBoss Tools SVN: r1986 - trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/types.
by jbosstools-commits@lists.jboss.org
Author: rob.stryker(a)jboss.com
Date: 2007-05-01 17:58:32 -0400 (Tue, 01 May 2007)
New Revision: 1986
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/types/EjbArchiveType.java
Log:
ensuring wtp projects have package types correct
Modified: trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/types/EjbArchiveType.java
===================================================================
--- trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/types/EjbArchiveType.java 2007-05-01 21:58:30 UTC (rev 1985)
+++ trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/packages/types/EjbArchiveType.java 2007-05-01 21:58:32 UTC (rev 1986)
@@ -1,7 +1,11 @@
package org.jboss.ide.eclipse.as.core.packages.types;
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.wst.server.core.IModule;
import org.jboss.ide.eclipse.archives.core.model.IArchive;
public class EjbArchiveType extends J2EEArchiveType {
@@ -21,11 +25,27 @@
public IArchive createDefaultConfiguration(IProject project, IProgressMonitor monitor) {
IArchive topLevel = createGenericIArchive(project, null, project.getName() + ".jar");
+ fillDefaultConfiguration(project, topLevel, monitor);
return fillDefaultConfiguration(project, topLevel, monitor);
}
public IArchive fillDefaultConfiguration(IProject project, IArchive topLevel, IProgressMonitor monitor) {
+ IModule mod = getModule(project);
+ // TODO: module artifact to adapt a jboss ejb 30 to a module is MIA. CREATE IT
+ if( mod == null ) {
+
+ } else {
+ if( mod.getModuleType().getId().equals("jst.ejb")
+ || mod.getModuleType().getId().equals("jbide.ejb30")) {
+ try {
+ IJavaProject proj = JavaCore.create(project);
+ IPath outputLoc = proj.getOutputLocation();
+ addFileset(project, topLevel, outputLoc.toOSString(), null);
+ } catch( Exception e ) {
+ }
+ }
+ }
return topLevel;
}
17 years, 8 months