. Checkpoint of WCM UI

- More implementation of the User sandboxes UI
   - added actions placeholders for Preview, Create and Browse for sandbox
   - Modified files list component framework and placeholder
 - Import Website Content dialog component framework pieces

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3791 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2006-09-14 14:18:26 +00:00
parent 66803daad8
commit 64f50671da
10 changed files with 605 additions and 50 deletions

View File

@@ -797,6 +797,15 @@ title_browse_website=Browse Website Sandboxes
website_info=Use this view to browse the staging area and user sandboxes for a website. website_info=Use this view to browse the staging area and user sandboxes for a website.
staging_sandbox=Staging Sandbox staging_sandbox=Staging Sandbox
user_sandboxes=User Sandboxes user_sandboxes=User Sandboxes
sandbox_preview=Preview Website
sandbox_create=Create New Content
sandbox_browse=Browse Website
import_website_content=Import Website Content
# Website actions and dialog messages
title_import_content=Import Content into Website
import_website_content_title=Import Content into Website
import_website_content_desc=Use this dialog to import an archive of content into the root of the website.
# New User Wizard messages # New User Wizard messages
new_user_title=New User Wizard new_user_title=New User Wizard

View File

@@ -0,0 +1,188 @@
/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.web.bean.wcm;
import java.io.File;
import java.text.MessageFormat;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.transaction.UserTransaction;
import org.alfresco.web.app.AlfrescoNavigationHandler;
import org.alfresco.web.app.Application;
import org.alfresco.web.bean.FileUploadBean;
import org.alfresco.web.bean.repository.Repository;
import org.alfresco.web.ui.common.Utils;
/**
* @author Kevin Roast
*/
public class ImportWebsiteDialog
{
protected File file;
protected String fileName;
private boolean isFinished = false;
/**
* @return Returns the name of the file
*/
public String getFileName()
{
// try and retrieve the file and filename from the file upload bean
// representing the file we previously uploaded.
FacesContext ctx = FacesContext.getCurrentInstance();
FileUploadBean fileBean = (FileUploadBean)ctx.getExternalContext().getSessionMap().
get(FileUploadBean.FILE_UPLOAD_BEAN_NAME);
if (fileBean != null)
{
this.file = fileBean.getFile();
this.fileName = fileBean.getFileName();
}
return this.fileName;
}
/**
* @param fileName The name of the file
*/
public void setFileName(String fileName)
{
this.fileName = fileName;
// we also need to keep the file upload bean in sync
FacesContext ctx = FacesContext.getCurrentInstance();
FileUploadBean fileBean = (FileUploadBean)ctx.getExternalContext().getSessionMap().
get(FileUploadBean.FILE_UPLOAD_BEAN_NAME);
if (fileBean != null)
{
fileBean.setFileName(this.fileName);
}
}
public boolean getFinishButtonDisabled()
{
return (this.fileName == null || this.fileName.length() == 0);
}
// ------------------------------------------------------------------------------
// Action event handlers
/**
* Action listener called when the add content dialog is called
*/
public void start(ActionEvent event)
{
clearUpload();
this.fileName = null;
}
/**
* Action handler called when the Finish button is pressed
*/
public String finish()
{
String outcome = null;
// check the isFinished flag to stop the finish button
// being pressed multiple times
if (this.isFinished == false)
{
this.isFinished = true;
UserTransaction tx = null;
try
{
FacesContext context = FacesContext.getCurrentInstance();
tx = Repository.getUserTransaction(context);
tx.begin();
//
// TODO: import the content
//
tx.commit();
outcome = AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
}
catch (Throwable e)
{
// rollback the transaction
try { if (tx != null) {tx.rollback();} } catch (Exception ex) {}
Utils.addErrorMessage(MessageFormat.format(
Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC),
e.getMessage(), e));
}
finally
{
// reset the flag so we can re-attempt the operation
this.isFinished = false;
}
}
return outcome;
}
/**
* Action handler called when the user wishes to remove an uploaded file
*/
public String removeUploadedFile()
{
clearUpload();
// also clear the file name
this.fileName = null;
// refresh the current page
return null;
}
/**
* Action handler called when the dialog is cancelled
*/
public String cancel()
{
clearUpload();
return AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
}
// ------------------------------------------------------------------------------
// Helper Methods
/**
* Deletes the uploaded file and removes the FileUploadBean from the session
*/
protected void clearUpload()
{
// delete the temporary file we uploaded earlier
if (this.file != null)
{
this.file.delete();
}
this.file = null;
// remove the file upload bean from the session
FacesContext ctx = FacesContext.getCurrentInstance();
ctx.getExternalContext().getSessionMap().remove(FileUploadBean.FILE_UPLOAD_BEAN_NAME);
}
}

View File

@@ -64,10 +64,11 @@ public class UIActions extends SelfRenderingComponent
private static final String ATTR_STYLECLASS = "styleClass"; private static final String ATTR_STYLECLASS = "styleClass";
private static final String ATTR_STYLE = "style"; private static final String ATTR_STYLE = "style";
private static final String ACTION_CONTEXT = "actionContext"; private static final String ACTION_CONTEXT = "actionContext";
private static final String RENDERER_ACTIONLINK = "org.alfresco.faces.ActionLinkRenderer";
private static final String COMPONENT_ACTIONLINK = "org.alfresco.faces.ActionLink"; public static final String RENDERER_ACTIONLINK = "org.alfresco.faces.ActionLinkRenderer";
private static final String COMPONENT_PERMISSIONEVAL = "org.alfresco.faces.PermissionEvaluator"; public static final String COMPONENT_ACTIONLINK = "org.alfresco.faces.ActionLink";
private static final String COMPONENT_ACTIONEVAL = "org.alfresco.faces.ActionInstanceEvaluator"; public static final String COMPONENT_PERMISSIONEVAL = "org.alfresco.faces.PermissionEvaluator";
public static final String COMPONENT_ACTIONEVAL = "org.alfresco.faces.ActionInstanceEvaluator";
private final static Class ACTION_CLASS_ARGS[] = {javax.faces.event.ActionEvent.class}; private final static Class ACTION_CLASS_ARGS[] = {javax.faces.event.ActionEvent.class};

View File

@@ -19,8 +19,10 @@ package org.alfresco.web.ui.wcm.component;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set; import java.util.Set;
import javax.faces.component.NamingContainer; import javax.faces.component.NamingContainer;
@@ -42,15 +44,23 @@ import org.alfresco.web.bean.wcm.AVMConstants;
import org.alfresco.web.ui.common.PanelGenerator; import org.alfresco.web.ui.common.PanelGenerator;
import org.alfresco.web.ui.common.Utils; import org.alfresco.web.ui.common.Utils;
import org.alfresco.web.ui.common.component.SelfRenderingComponent; import org.alfresco.web.ui.common.component.SelfRenderingComponent;
import org.alfresco.web.ui.common.component.UIActionLink;
import org.alfresco.web.ui.repo.component.UIActions;
import org.alfresco.web.ui.wcm.WebResources; import org.alfresco.web.ui.wcm.WebResources;
import org.springframework.web.jsf.FacesContextUtils; import org.springframework.web.jsf.FacesContextUtils;
import sun.swing.UIAction;
/** /**
* @author Kevin Roast * @author Kevin Roast
*/ */
public class UIUserSandboxes extends SelfRenderingComponent public class UIUserSandboxes extends SelfRenderingComponent
{ {
private static final String MSG_USERNAME = "username"; private static final String MSG_USERNAME = "username";
private static final String MSG_NAME = "name";
private static final String MSG_DESCRIPTION = "description";
private static final String MSG_MODIFIED = "modified_date";
private static final String MSG_ACTIONS = "actions";
/** website to show sandboxes for */ /** website to show sandboxes for */
private NodeRef value; private NodeRef value;
@@ -87,6 +97,22 @@ public class UIUserSandboxes extends SelfRenderingComponent
values[2] = this.expandedPanels; values[2] = this.expandedPanels;
return values; return values;
} }
/**
* @see javax.faces.component.UIComponentBase#getRendersChildren()
*/
public boolean getRendersChildren()
{
return true;
}
/**
* @see javax.faces.component.UIComponentBase#encodeChildren(javax.faces.context.FacesContext)
*/
public void encodeChildren(FacesContext context) throws IOException
{
// the child components are rendered explicitly during the encodeBegin()
}
/** /**
* @see javax.faces.component.UIComponentBase#decode(javax.faces.context.FacesContext) * @see javax.faces.component.UIComponentBase#decode(javax.faces.context.FacesContext)
@@ -127,11 +153,7 @@ public class UIUserSandboxes extends SelfRenderingComponent
ResponseWriter out = context.getResponseWriter(); ResponseWriter out = context.getResponseWriter();
if (getChildCount() == 0) ResourceBundle bundle = Application.getBundle(context);
{
// create any sub-component for the first time
}
AVMService avmService = getAVMService(context); AVMService avmService = getAVMService(context);
NodeService nodeService = getNodeService(context); NodeService nodeService = getNodeService(context);
UserTransaction tx = null; UserTransaction tx = null;
@@ -153,45 +175,92 @@ public class UIUserSandboxes extends SelfRenderingComponent
{ {
String username = users.get(i); String username = users.get(i);
// build the name of the main store for the user
String mainStore = storeRoot + '-' + username + AVMConstants.STORE_MAIN; String mainStore = storeRoot + '-' + username + AVMConstants.STORE_MAIN;
AVMStoreDescriptor store = avmService.getAVMStore(mainStore);
// for each user sandbox, generate an outer panel table // check it exists before we render the view
PanelGenerator.generatePanelStart(out, if (avmService.getAVMStore(mainStore) != null)
context.getExternalContext().getRequestContextPath(),
"white",
"white");
// components for the current username, preview, browse and modified items inner list
out.write("<table cellspacing=2 cellpadding=2 border=0 width=100%><tr><td>");
out.write(Utils.buildImageTag(context, WebResources.IMAGE_SANDBOX_32, 32, 32, ""));
out.write("</td><td width=100%>");
out.write("<b>");
out.write(Application.getMessage(context, MSG_USERNAME));
out.write(":</b>&nbsp;");
out.write(username); // TODO: convert to full name
out.write("</td><td><nobr>");
// direct actions for a sandbox
// TODO: add actions for a sandbox
out.write("(Preview) (Create) (Browse)");
out.write("</nobr></td></tr>");
// modified items panel
out.write("<tr><td></td><td colspan=2>");
String panelImage = this.expandedPanels.contains(username) ? WebResources.IMAGE_EXPANDED : WebResources.IMAGE_COLLAPSED;
out.write(Utils.buildImageTag(context, panelImage, 11, 11, "",
Utils.generateFormSubmit(context, this, getClientId(context), username)));
out.write("&nbsp;<b>Modified Items (3)</b>");
out.write("</td></tr></table>");
// end the outer panel for this sandbox
PanelGenerator.generatePanelEnd(out,
context.getExternalContext().getRequestContextPath(),
"white");
// spacer row
if (i < users.size() - 1)
{ {
out.write("<div style='padding:4px'></div>"); // for each user sandbox, generate an outer panel table
PanelGenerator.generatePanelStart(out,
context.getExternalContext().getRequestContextPath(),
"white",
"white");
// components for the current username, preview, browse and modified items inner list
out.write("<table cellspacing=2 cellpadding=2 border=0 width=100%><tr><td>");
out.write(Utils.buildImageTag(context, WebResources.IMAGE_SANDBOX_32, 32, 32, ""));
out.write("</td><td width=100%>");
out.write("<b>");
out.write(bundle.getString(MSG_USERNAME));
out.write(":</b>&nbsp;");
out.write(username); // TODO: convert to full name?
out.write("</td><td><nobr>");
// direct actions for a sandbox
Utils.encodeRecursive(context, aquireAction(
context, "sandbox_preview", "/images/icons/preview_website.gif"));
out.write("&nbsp;&nbsp;");
Utils.encodeRecursive(context, aquireAction(
context, "sandbox_create", "/images/icons/new_content.gif"));
out.write("&nbsp;&nbsp;");
Utils.encodeRecursive(context, aquireAction(
context, "sandbox_browse", "/images/icons/space_small.gif"));
out.write("</nobr></td></tr>");
// modified items panel
out.write("<tr><td></td><td colspan=2>");
String panelImage = WebResources.IMAGE_COLLAPSED;
if (this.expandedPanels.contains(username))
{
panelImage = WebResources.IMAGE_EXPANDED;
}
out.write(Utils.buildImageTag(context, panelImage, 11, 11, "",
Utils.generateFormSubmit(context, this, getClientId(context), username)));
out.write("&nbsp;<b>Modified Items (3)</b>");
if (this.expandedPanels.contains(username))
{
out.write("<div style='padding:2px'></div>");
out.write("<table cellspacing=2 cellpadding=2 border=0 width=100%>");
// header row
out.write("<tr align=left><th width=16></th><th>");
out.write(bundle.getString(MSG_NAME));
out.write("</th><th>");
out.write(bundle.getString(MSG_DESCRIPTION));
out.write("</th><th>");
out.write(bundle.getString(MSG_MODIFIED));
out.write("</th><th>");
out.write(bundle.getString(MSG_ACTIONS));
out.write("</th></tr>");
// row per modified doc item
// TODO: add modified items list for this sandbox user
out.write("<tr><td width=16>(O)</td><td>");
out.write("Some document.html");
out.write("</td><td>");
out.write("A description would go here");
out.write("</td><td>");
out.write("01-01-2006 11:58am");
out.write("</td><td>");
// TODO: add UI actions for this item
out.write("(P)&nbsp;(E)&nbsp;(T)&nbsp;(D)");
out.write("</td></tr>");
out.write("</table>");
}
out.write("</td></tr></table>");
// end the outer panel for this sandbox
PanelGenerator.generatePanelEnd(out,
context.getExternalContext().getRequestContextPath(),
"white");
// spacer row
if (i < users.size() - 1)
{
out.write("<div style='padding:4px'></div>");
}
} }
} }
@@ -204,6 +273,47 @@ public class UIUserSandboxes extends SelfRenderingComponent
} }
} }
private UIActionLink aquireAction(FacesContext fc, String name, String icon)
{
UIActionLink action = findAction(name);
if (action == null)
{
action = createAction(fc, name, icon);
}
return action;
}
private UIActionLink findAction(String name)
{
UIActionLink action = null;
String actionId = getId() + name;
for (UIComponent component : (List<UIComponent>)getChildren())
{
if (actionId.equals(component.getId()))
{
action = (UIActionLink)component;
break;
}
}
return action;
}
private UIActionLink createAction(FacesContext fc, String name, String icon)
{
javax.faces.application.Application facesApp = fc.getApplication();
UIActionLink control = (UIActionLink)facesApp.createComponent(UIActions.COMPONENT_ACTIONLINK);
control.setRendererType(UIActions.RENDERER_ACTIONLINK);
control.setId(getId() + name);
control.setValue(Application.getMessage(fc, name));
control.setShowLink(false);
control.setImage(icon);
this.getChildren().add(control);
return control;
}
private AVMService getAVMService(FacesContext fc) private AVMService getAVMService(FacesContext fc)
{ {
return (AVMService)FacesContextUtils.getRequiredWebApplicationContext(fc).getBean("AVMService"); return (AVMService)FacesContextUtils.getRequiredWebApplicationContext(fc).getBean("AVMService");

View File

@@ -563,6 +563,15 @@
</managed-property> </managed-property>
</managed-bean> </managed-bean>
<managed-bean>
<description>
The bean that backs up the Create Website Wizard
</description>
<managed-bean-name>ImportWebsiteDialog</managed-bean-name>
<managed-bean-class>org.alfresco.web.bean.wcm.ImportWebsiteDialog</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean> <managed-bean>
<description> <description>
The bean that backs up the Set Content Properties Dialog The bean that backs up the Set Content Properties Dialog

View File

@@ -907,4 +907,12 @@
</navigation-case> </navigation-case>
</navigation-rule> </navigation-rule>
<navigation-rule>
<from-view-id>/jsp/wcm/*</from-view-id>
<navigation-case>
<from-outcome>importContent</from-outcome>
<to-view-id>/jsp/wcm/import-content-dialog.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config> </faces-config>

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -74,6 +74,10 @@
<div class="mainSubText"><h:outputText value="#{msg.website_info}" id="msg3" /></div> <div class="mainSubText"><h:outputText value="#{msg.website_info}" id="msg3" /></div>
<div class="mainSubText"><h:outputText value="#{NavigationBean.nodeProperties.description}" id="msg4" /></div> <div class="mainSubText"><h:outputText value="#{NavigationBean.nodeProperties.description}" id="msg4" /></div>
</td> </td>
<td align=right>
<%-- Import website content action --%>
<a:actionLink value="#{msg.import_website_content}" image="/images/icons/import_website.gif" padding="2" action="dialog:importContent" actionListener="#{ImportWebsiteDialog.start}" />
</td>
</tr> </tr>
</table> </table>
@@ -96,11 +100,21 @@
<%-- Staging Sandbox Info here --%> <%-- Staging Sandbox Info here --%>
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %> <% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
---STAGING SANDBOX INFO HERE---<br> <table cellspacing=2 cellpadding=2 border=0 width=100%>
-------------------------------<br> <tr>
Last Updated: 1234<br> <td align=left width=32><h:graphicImage url="/images/icons/website_large.gif" width="32" height="32" /></td>
12 items currently being modified<br> <td align=left><h:outputText value="#{msg.staging_sandbox}" styleClass="mainSubTitle" /></td>
3 items pending approval <td align=right>(P)&nbsp;(E)&nbsp;(T)&nbsp;(D)</td>
</tr>
<tr>
<td></td>
<td colspan=2>
Last Updated: 20th September 2006<P>
12 items currently being modified<P>
3 items pending approval
</td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %> <% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</a:panel> </a:panel>

View File

@@ -0,0 +1,216 @@
<%--
Copyright (C) 2005 Alfresco, Inc.
Licensed under the Mozilla Public License version 1.1
with a permitted attribution clause. You may obtain a
copy of the License at
http://www.alfresco.org/legal/license.txt
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
either express or implied. See the License for the specific
language governing permissions and limitations under the
License.
--%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="/WEB-INF/alfresco.tld" prefix="a" %>
<%@ taglib uri="/WEB-INF/repo.tld" prefix="r" %>
<%@ page buffer="32kb" contentType="text/html;charset=UTF-8" %>
<%@ page isELIgnored="false" %>
<%@ page import="javax.faces.context.FacesContext" %>
<%@ page import="org.alfresco.web.app.Application" %>
<%@ page import="org.alfresco.web.bean.wcm.ImportWebsiteDialog" %>
<%@ page import="org.alfresco.web.app.servlet.FacesHelper" %>
<%@ page import="org.alfresco.web.ui.common.PanelGenerator" %>
<r:page titleId="title_import_content">
<f:view>
<%-- load a bundle of properties with I18N strings --%>
<f:loadBundle basename="alfresco.messages.webclient" var="msg"/>
<h:form acceptCharset="UTF-8" id="add-content-upload-start">
<%-- Main outer table --%>
<table cellspacing="0" cellpadding="2">
<%-- Title bar --%>
<tr>
<td colspan="2">
<%@ include file="../parts/titlebar.jsp" %>
</td>
</tr>
<%-- Main area --%>
<tr valign="top">
<%-- Shelf --%>
<td>
<%@ include file="../parts/shelf.jsp" %>
</td>
<%-- Work Area --%>
<td width="100%">
<table cellspacing="0" cellpadding="0" width="100%">
<%-- Breadcrumb --%>
<%@ include file="../parts/breadcrumb.jsp" %>
<%-- Status and Actions --%>
<tr>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_4.gif)" width="4"></td>
<td bgcolor="#EEEEEE">
<%-- Status and Actions inner contents table --%>
<%-- Generally this consists of an icon, textual summary and actions for the current object --%>
<table cellspacing="4" cellpadding="0" width="100%">
<tr>
<td width="32">
<h:graphicImage id="dialog-logo" url="/images/icons/add_content_large.gif" />
</td>
<td>
<div class="mainTitle"><h:outputText value="#{msg.import_website_content_title}" /></div>
<div class="mainSubText"><h:outputText value="#{msg.import_website_content_desc}" /></div>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with gradient shadow --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_7.gif" width="4" height="9"></td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/statuspanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/statuspanel_9.gif" width="4" height="9"></td>
</tr>
</h:form>
<%-- Details --%>
<tr valign=top>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_4.gif)" width="4"></td>
<td>
<table cellspacing="0" cellpadding="3" border="0" width="100%">
<tr>
<td width="100%" valign="top">
<a:errors message="#{msg.error_dialog}" styleClass="errorMessage" />
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "white", "white"); %>
<table cellpadding="2" cellspacing="2" border="0" width="100%">
<%
ImportWebsiteDialog bean = (ImportWebsiteDialog)FacesHelper.getManagedBean(FacesContext.getCurrentInstance(), "ImportWebsiteDialog");
boolean foundFile = (bean != null && bean.getFileName() != null);
if (foundFile == false) {
%>
<tr>
<td colspan="3" class="wizardSectionHeading"><h:outputText value="#{msg.upload_content}"/></td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td class="mainSubText" colspan="3">
<h:outputText id="text1" value="1. #{msg.locate_content}"/>
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<r:uploadForm>
<tr>
<td colspan="3">
<input style="margin-left:12px;" type="file" size="75" name="alfFileInput"/>
</td>
</tr>
<tr><td class="paddingRow"></td></tr>
<tr>
<td class="mainSubText" colspan="3">
2. <%=Application.getMessage(FacesContext.getCurrentInstance(), "click_upload")%>
</td>
</tr>
<tr>
<td colspan="3">
<input style="margin-left:12px;" type="submit" value="<%=Application.getMessage(FacesContext.getCurrentInstance(), "upload")%>" />
</td>
</tr>
</r:uploadForm>
<% } %>
<h:form acceptCharset="UTF-8" id="add-content-upload-end">
<% if (foundFile) { %>
<tr>
<td colspan="3">
<table border="0" cellspacing="2" cellpadding="2" class="selectedItems">
<tr>
<td colspan="2" class="selectedItemsHeader">
<h:outputText id="text2" value="#{msg.uploaded_content}" />
</th>
</tr>
<tr>
<td class="selectedItemsRow">
<h:outputText id="text3" value="#{ImportWebsiteDialog.fileName}" />
</td>
<td>
<a:actionLink image="/images/icons/delete.gif" value="#{msg.remove}"
action="#{ImportWebsiteDialog.removeUploadedFile}"
showLink="false" id="link1" />
</td>
</tr>
</table>
</td>
</tr>
<% } %>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "white"); %>
</td>
<td valign="top">
<% PanelGenerator.generatePanelStart(out, request.getContextPath(), "blue", "#D3E6FE"); %>
<table cellpadding="1" cellspacing="1" border="0">
<tr>
<td align="center">
<h:commandButton id="finish-button" styleClass="wizardButton"
value="#{msg.ok}"
action="#{ImportWebsiteDialog.finish}"
disabled="#{ImportWebsiteDialog.finishButtonDisabled}" />
</td>
</tr>
<tr>
<td align="center">
<h:commandButton id="cancel-button" styleClass="wizardButton"
value="#{msg.cancel}"
action="#{ImportWebsiteDialog.cancel}" />
</td>
</tr>
</table>
<% PanelGenerator.generatePanelEnd(out, request.getContextPath(), "blue"); %>
</td>
</tr>
</table>
</td>
<td style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_6.gif)" width="4"></td>
</tr>
<%-- separator row with bottom panel graphics --%>
<tr>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_7.gif" width="4" height="4"></td>
<td width="100%" align="center" style="background-image: url(<%=request.getContextPath()%>/images/parts/whitepanel_8.gif)"></td>
<td><img src="<%=request.getContextPath()%>/images/parts/whitepanel_9.gif" width="4" height="4"></td>
</tr>
</table>
</td>
</tr>
</table>
</h:form>
</f:view>
</r:page>