You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wookie.apache.org by sc...@apache.org on 2009/10/20 19:59:20 UTC

svn commit: r827748 - in /incubator/wookie/trunk/src/org/apache/wookie: WidgetAdminServlet.java manifestmodel/IManifestModel.java messages.properties messages_nl.properties util/WidgetPackageUtils.java

Author: scottbw
Date: Tue Oct 20 17:59:19 2009
New Revision: 827748

URL: http://svn.apache.org/viewvc?rev=827748&view=rev
Log:
Added checks for default start files as well as custom start files in config.xml, and added some error messages for different error conditions associated with this. See also WOOKIE-45

Modified:
    incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java
    incubator/wookie/trunk/src/org/apache/wookie/manifestmodel/IManifestModel.java
    incubator/wookie/trunk/src/org/apache/wookie/messages.properties
    incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties
    incubator/wookie/trunk/src/org/apache/wookie/util/WidgetPackageUtils.java

Modified: incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java?rev=827748&r1=827747&r2=827748&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/WidgetAdminServlet.java Tue Oct 20 17:59:19 2009
@@ -40,6 +40,7 @@
 import org.apache.wookie.manager.IWidgetAdminManager;
 import org.apache.wookie.manager.impl.WidgetAdminManager;
 import org.apache.wookie.manifestmodel.IManifestModel;
+import org.apache.wookie.manifestmodel.impl.ContentEntity;
 import org.apache.wookie.server.LocaleHandler;
 import org.apache.wookie.util.WidgetManifestUtils;
 import org.apache.wookie.util.StartPageJSParser;
@@ -57,7 +58,7 @@
  *
  */
 public class WidgetAdminServlet extends HttpServlet implements Servlet {
-	
+
 	// our list of allowed operations
 	private enum Operation {
 		ADDNEWSERVICE, ADDNEWWHITELISTENTRY, LISTSERVICES, LISTSERVICESFORADDITION, 
@@ -65,10 +66,10 @@
 		REVISETYPES, SETDEFAULTWIDGET, SETWIDGETTYPES, UPLOADWIDGET, VIEWWHITELIST, REGISTERGADGET,
 		LISTAPIKEYS, REVOKEAPIKEY
 	}	
-	 	 	
+
 	// Get the logger
 	static Logger _logger = Logger.getLogger(WidgetAdminServlet.class.getName());	
-	
+
 	// jsp page handles
 	private static final String fAddNewServicesPage = "/admin/addnewservice.jsp"; //$NON-NLS-1$
 	private static final String faddToWhiteListPage = "/admin/addtowhitelist.jsp"; //$NON-NLS-1$
@@ -82,11 +83,11 @@
 	private static final String fViewWhiteListPage = "/admin/viewwhitelist.jsp"; //$NON-NLS-1$
 	private static final String fRegisterGadgetPage = "/admin/registergadget.jsp"; //$NON-NLS-1$
 	private static final String fListAPIKeysPage = "/admin/keys.jsp"; //$NON-NLS-1$
-		
+
 	private static final long serialVersionUID = -3026022301561798524L;;	
-			
-	
-    /*
+
+
+	/*
 	 * (non-Java-doc)
 	 * 
 	 * @see javax.servlet.http.HttpServlet#HttpServlet()
@@ -94,7 +95,7 @@
 	public WidgetAdminServlet() {
 		super();
 	}   	
-	
+
 
 	/**
 	 * Add a new service type to the DB
@@ -145,14 +146,14 @@
 	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
 		HttpSession session = request.getSession(true);						
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);	
-		
+
 		IWidgetAdminManager manager = (IWidgetAdminManager)session.getAttribute(WidgetAdminManager.class.getName());
 		if(manager == null){
 			manager = new WidgetAdminManager(localizedMessages);
 			session.setAttribute(WidgetAdminManager.class.getName(), manager);
 		}
 		Configuration properties = (Configuration) session.getServletContext().getAttribute("properties"); //$NON-NLS-1$
-		
+
 		session.setAttribute("error_value", null); //$NON-NLS-1$
 		session.setAttribute("message_value", null); //$NON-NLS-1$
 		session.setAttribute("widget_defaults", null); //$NON-NLS-1$
@@ -171,119 +172,119 @@
 		}	
 		if(op!=null){
 			switch (op) {
-				case ADDNEWWHITELISTENTRY: {
-					addWhiteListEntry(session, request, manager);					
-					listWhiteListOperation(session, manager);
+			case ADDNEWWHITELISTENTRY: {
+				addWhiteListEntry(session, request, manager);					
+				listWhiteListOperation(session, manager);
+				doForward(request, response, faddToWhiteListPage);
+				break;
+			}
+			case VIEWWHITELIST: {
+				listWhiteListOperation(session, manager);
+				if(request.getParameter("param").equalsIgnoreCase("list")){											 //$NON-NLS-1$ //$NON-NLS-2$
+					doForward(request, response, fViewWhiteListPage);
+				}
+				else if(request.getParameter("param").equalsIgnoreCase("add")){					 //$NON-NLS-1$ //$NON-NLS-2$
 					doForward(request, response, faddToWhiteListPage);
-					break;
 				}
-				case VIEWWHITELIST: {
-					listWhiteListOperation(session, manager);
-					if(request.getParameter("param").equalsIgnoreCase("list")){											 //$NON-NLS-1$ //$NON-NLS-2$
-						doForward(request, response, fViewWhiteListPage);
-					}
-					else if(request.getParameter("param").equalsIgnoreCase("add")){					 //$NON-NLS-1$ //$NON-NLS-2$
-						doForward(request, response, faddToWhiteListPage);
-					}
-					else if(request.getParameter("param").equalsIgnoreCase("remove")){					 //$NON-NLS-1$ //$NON-NLS-2$
-						doForward(request, response, fremoveWhiteListPage);						
-					}
-					break;
+				else if(request.getParameter("param").equalsIgnoreCase("remove")){					 //$NON-NLS-1$ //$NON-NLS-2$
+					doForward(request, response, fremoveWhiteListPage);						
 				}
-				case REMOVEWIDGET: {
-					removeWidget(session, request, properties, manager);										
+				break;
+			}
+			case REMOVEWIDGET: {
+				removeWidget(session, request, properties, manager);										
+				listOperation(session, manager, false);					
+				doForward(request, response, fListWidgetsForDeletePage);					
+				break;
+			}
+			case REVISETYPES: {
+				reviseTypes(session, request, manager);					
+				doForward(request, response, fUpLoadResultsPage);
+				break;
+			}
+			case ADDNEWSERVICE: {
+				addNewService(session, request, manager);	
+				retrieveServices(session, manager);
+				doForward(request, response, fAddNewServicesPage);
+				break;
+			}
+			case UPLOADWIDGET: {
+				uploadOperation(request, properties, manager, session);						
+				doForward(request, response, fUpLoadResultsPage);
+				break;
+			}
+			case LISTWIDGETS: {
+				if(request.getParameter("param").equalsIgnoreCase("remove")){ //$NON-NLS-1$ //$NON-NLS-2$
 					listOperation(session, manager, false);					
-					doForward(request, response, fListWidgetsForDeletePage);					
-					break;
+					doForward(request, response, fListWidgetsForDeletePage);
 				}
-				case REVISETYPES: {
-					reviseTypes(session, request, manager);					
-					doForward(request, response, fUpLoadResultsPage);
-					break;
-				}
-				case ADDNEWSERVICE: {
-					addNewService(session, request, manager);	
-					retrieveServices(session, manager);
-					doForward(request, response, fAddNewServicesPage);
-					break;
-				}
-				case UPLOADWIDGET: {
-					uploadOperation(request, properties, manager, session);						
-					doForward(request, response, fUpLoadResultsPage);
-					break;
+				else{
+					listOperation(session, manager, true);					
+					doForward(request, response, fListWidgetsPage);						
 				}
-				case LISTWIDGETS: {
-					if(request.getParameter("param").equalsIgnoreCase("remove")){ //$NON-NLS-1$ //$NON-NLS-2$
-						listOperation(session, manager, false);					
-						doForward(request, response, fListWidgetsForDeletePage);
-					}
-					else{
-						listOperation(session, manager, true);					
-						doForward(request, response, fListWidgetsPage);						
-					}
-					break;
+				break;
+			}
+			case LISTSERVICES: {
+				retrieveServices(session, manager);
+				if(request.getParameter("param").equalsIgnoreCase("list")){											 //$NON-NLS-1$ //$NON-NLS-2$
+					doForward(request, response, fListServicesPage);
 				}
-				case LISTSERVICES: {
-					retrieveServices(session, manager);
-					if(request.getParameter("param").equalsIgnoreCase("list")){											 //$NON-NLS-1$ //$NON-NLS-2$
-						doForward(request, response, fListServicesPage);
-					}
-					else if(request.getParameter("param").equalsIgnoreCase("add")){					 //$NON-NLS-1$ //$NON-NLS-2$
-						doForward(request, response, fAddNewServicesPage);
-					}
-					else if(request.getParameter("param").equalsIgnoreCase("remove")){					 //$NON-NLS-1$ //$NON-NLS-2$
-						doForward(request, response, fRemoveServicesPage);
-					}
-					break;
+				else if(request.getParameter("param").equalsIgnoreCase("add")){					 //$NON-NLS-1$ //$NON-NLS-2$
+					doForward(request, response, fAddNewServicesPage);
 				}
-				case SETWIDGETTYPES: {
-					updateWidgetTypes(session, request, manager);
-					listOperation(session, manager, true);											
-					doForward(request, response, fListWidgetsPage);
-					break;
-				}				
-				case REMOVESERVICE:{
-					removeServiceOperation(session, request, manager);
+				else if(request.getParameter("param").equalsIgnoreCase("remove")){					 //$NON-NLS-1$ //$NON-NLS-2$
 					doForward(request, response, fRemoveServicesPage);
-					break;
-			    }
-				case REMOVEWHITELISTENTRY: {
-					removeWhiteListEntry(session, request, manager);										
-					listWhiteListOperation(session, manager);
-					doForward(request, response, fremoveWhiteListPage);
-					break;
-				}
-				case REMOVESINGLEWIDGETTYPE:{
-					removeSingleWidgetTypeOperation(session, request, manager);
-					listOperation(session, manager, true);
-					doForward(request, response, fListWidgetsPage);
-					break;
-			    }
-				case SETDEFAULTWIDGET:{
-					setDefaultWidgetOperation(session, request, manager);
-					doForward(request, response, fListWidgetsPage);
-					break;
-			    }
-				case REGISTERGADGET:{
-					registerOperation(request, properties, manager, session);
-					doForward(request, response,fRegisterGadgetPage);
-					break;
-				}
-				case LISTAPIKEYS:{
-					listAPIKeysOperation(session, request, manager);
-					doForward(request, response, fListAPIKeysPage);
-					break;
-				}
-				case REVOKEAPIKEY:{
-					revokeAPIKeyOperation(session, request, manager);
-					doForward(request, response, fListAPIKeysPage);
-					break;
-				}
-				
-				default: {
-					session.setAttribute("error_value", localizedMessages.getString("WidgetAdminServlet.5"));// need to i18n this //$NON-NLS-1$ //$NON-NLS-2$ 
-					doForward(request, response, fMainPage);
 				}
+				break;
+			}
+			case SETWIDGETTYPES: {
+				updateWidgetTypes(session, request, manager);
+				listOperation(session, manager, true);											
+				doForward(request, response, fListWidgetsPage);
+				break;
+			}				
+			case REMOVESERVICE:{
+				removeServiceOperation(session, request, manager);
+				doForward(request, response, fRemoveServicesPage);
+				break;
+			}
+			case REMOVEWHITELISTENTRY: {
+				removeWhiteListEntry(session, request, manager);										
+				listWhiteListOperation(session, manager);
+				doForward(request, response, fremoveWhiteListPage);
+				break;
+			}
+			case REMOVESINGLEWIDGETTYPE:{
+				removeSingleWidgetTypeOperation(session, request, manager);
+				listOperation(session, manager, true);
+				doForward(request, response, fListWidgetsPage);
+				break;
+			}
+			case SETDEFAULTWIDGET:{
+				setDefaultWidgetOperation(session, request, manager);
+				doForward(request, response, fListWidgetsPage);
+				break;
+			}
+			case REGISTERGADGET:{
+				registerOperation(request, properties, manager, session);
+				doForward(request, response,fRegisterGadgetPage);
+				break;
+			}
+			case LISTAPIKEYS:{
+				listAPIKeysOperation(session, request, manager);
+				doForward(request, response, fListAPIKeysPage);
+				break;
+			}
+			case REVOKEAPIKEY:{
+				revokeAPIKeyOperation(session, request, manager);
+				doForward(request, response, fListAPIKeysPage);
+				break;
+			}
+
+			default: {
+				session.setAttribute("error_value", localizedMessages.getString("WidgetAdminServlet.5"));// need to i18n this //$NON-NLS-1$ //$NON-NLS-2$ 
+				doForward(request, response, fMainPage);
+			}
 			}						
 		} 
 		else {
@@ -301,7 +302,7 @@
 	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 		doGet(request, response);
 	}
-	
+
 	private void listOperation(HttpSession session, IWidgetAdminManager manager, boolean getDefaults){
 		retrieveWidgets(session, manager);	
 		if(getDefaults){
@@ -319,7 +320,7 @@
 	private void listWhiteListOperation(HttpSession session, IWidgetAdminManager manager) {
 		session.setAttribute("whitelist", Whitelist.findAll()); //$NON-NLS-1$
 	}  	
-		
+
 	private void removeServiceOperation(HttpSession session, HttpServletRequest request, IWidgetAdminManager manager) {
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		String serviceId = request.getParameter("serviceId"); //$NON-NLS-1$
@@ -331,7 +332,7 @@
 		}
 		retrieveServices(session, manager);
 	}
-	
+
 	private void removeSingleWidgetTypeOperation(HttpSession session,
 			HttpServletRequest request, IWidgetAdminManager manager) {
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
@@ -345,7 +346,7 @@
 		}	
 		session.setAttribute("widgets", null);						 //$NON-NLS-1$
 	}
-	
+
 	private void removeWhiteListEntry(HttpSession session, HttpServletRequest request, IWidgetAdminManager manager) {
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		String entryId = request.getParameter("entryId"); //$NON-NLS-1$
@@ -356,7 +357,7 @@
 			session.setAttribute("error_value", localizedMessages.getString("WidgetAdminServlet.11")); //$NON-NLS-1$ //$NON-NLS-2$ 
 		}				
 	}
-	
+
 	private void removeWidget(HttpSession session, HttpServletRequest request, Configuration properties, IWidgetAdminManager manager) {
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		String widgetId = request.getParameter("widgetId"); //$NON-NLS-1$
@@ -373,17 +374,17 @@
 			session.setAttribute("error_value", localizedMessages.getString("WidgetAdminServlet.14")); //$NON-NLS-1$ //$NON-NLS-2$ 
 		}
 	}		
-	
+
 	private void retrieveServices(HttpSession session, IWidgetAdminManager manager){						
 		session.setAttribute("services", WidgetService.findAll());						 //$NON-NLS-1$
 	}
-	
+
 	private void retrieveWidgets(HttpSession session, IWidgetAdminManager manager){
 		session.setAttribute("widgets", Widget.findAll()); //$NON-NLS-1$
 	}
 
-	
-	
+
+
 	private void reviseTypes(HttpSession session, HttpServletRequest request, IWidgetAdminManager manager) {
 		retrieveServices(session, manager);
 		session.setAttribute("hasValidated", Boolean.valueOf(true)); //$NON-NLS-1$
@@ -393,28 +394,28 @@
 		session.setAttribute("isMaxable", Boolean.valueOf(isMaxable)); //$NON-NLS-1$
 		session.setAttribute("dbkey", Integer.parseInt(dbkey)); //$NON-NLS-1$
 	}
-	
+
 	private void setDefaultWidgetOperation(HttpSession session, HttpServletRequest request, IWidgetAdminManager manager){
 		String widgetId = request.getParameter("widgetId"); //$NON-NLS-1$
 		String widgetType = request.getParameter("widgetType");		 //$NON-NLS-1$
 		manager.setDefaultWidget(Integer.parseInt(widgetId), widgetType);
 		listOperation(session, manager, true);
 	}
-	
+
 	private void updateWidgetTypes(HttpSession session, HttpServletRequest request, IWidgetAdminManager manager) throws IOException{
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		boolean canMax = false;
-	   
-	    String maximize = request.getParameter("max"); //$NON-NLS-1$
-	    if(maximize!=null){
-	    	canMax = Boolean.valueOf(maximize);
-	    }
-	    int dbKey = Integer.parseInt(request.getParameter("dbkey")); //$NON-NLS-1$
-	    String[] widgetTypes = request.getParameterValues("widgetTypes"); //$NON-NLS-1$
-	    manager.setWidgetTypesForWidget(dbKey, widgetTypes, canMax);
+
+		String maximize = request.getParameter("max"); //$NON-NLS-1$
+		if(maximize!=null){
+			canMax = Boolean.valueOf(maximize);
+		}
+		int dbKey = Integer.parseInt(request.getParameter("dbkey")); //$NON-NLS-1$
+		String[] widgetTypes = request.getParameterValues("widgetTypes"); //$NON-NLS-1$
+		manager.setWidgetTypesForWidget(dbKey, widgetTypes, canMax);
 		session.setAttribute("message_value", localizedMessages.getString("WidgetAdminServlet.15")); 		 //$NON-NLS-1$ //$NON-NLS-2$ 
 	}  
-	
+
 	private void registerOperation(HttpServletRequest request, Configuration properties, IWidgetAdminManager manager, HttpSession session){
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		Widget widget = null;
@@ -431,7 +432,7 @@
 		}
 
 	}
-	
+
 	private void listAPIKeysOperation(HttpSession session, HttpServletRequest request, IWidgetAdminManager manager){
 		session.setAttribute("keys", ApiKey.findAll());
 	}
@@ -444,7 +445,7 @@
 			session.setAttribute("error_value", "Key could not be revoked");
 		}
 	}
-	
+
 	private void uploadOperation(HttpServletRequest request, Configuration properties, IWidgetAdminManager manager, HttpSession session) {
 		Messages localizedMessages = LocaleHandler.localizeMessages(request);
 		session.setAttribute("hasValidated", Boolean.valueOf(false)); //$NON-NLS-1$
@@ -457,60 +458,53 @@
 			session.setAttribute("error_value", localizedMessages.getString("WidgetAdminServlet.28") + "\n" + ex.getMessage()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			return;
 		}
-		
+
 		try {	
 			if(zipFile.exists()){
 				ZipFile zip = new ZipFile(zipFile);
 				if (WidgetPackageUtils.hasManifest(zip)){
 					// build the model
 					IManifestModel widgetModel = WidgetManifestUtils.dealWithManifest(WidgetPackageUtils.extractManifest(zip), localizedMessages);															
-					// get the src value from content
-					if (widgetModel.getContent() == null) throw new BadManifestException("No start file found");
-					if (widgetModel.getContent().getSrc() == null) throw new BadManifestException("No start file found");					
-					String src =  widgetModel.getContent().getSrc();
-					// check if the start file exists in the zip file
-					if(zip.getEntry(src)!=null){
-						// get the widget identifier
-						String manifestIdentifier = widgetModel.getIdentifier();						
-						// create the folder structure to unzip the zip into
-						File newWidgetFolder = WidgetPackageUtils.createUnpackedWidgetFolder(request, properties, manifestIdentifier);
-						// now unzip it into that folder
-						WidgetPackageUtils.unpackZip(zip, newWidgetFolder);							
-						// get the url to the start page
-						String relativestartUrl = (WidgetPackageUtils.getURLForWidget(properties, manifestIdentifier, src));
-						// update the model version of the start page
-						widgetModel.getContent().setSrc(relativestartUrl);
-						// now update the js links in the start page
-						File startFile = new File(newWidgetFolder.getCanonicalPath() + File.separator + src);							
-						if(startFile.exists()){								
-							StartPageJSParser parser = new StartPageJSParser(startFile, widgetModel);
-							parser.doParse();
-						}							
-						// get the path to the root of the unzipped folder
-						String localPath = WidgetPackageUtils.getURLForWidget(properties, manifestIdentifier, "");
-						// now pass this to the model which will prepend the path to local resources (not web icons)
-						widgetModel.updateIconPaths(localPath);							
-						// check to see if this widget already exists in the DB - using the ID (guid) key from the manifest
-						if(!manager.doesWidgetAlreadyExistInSystem(manifestIdentifier)){									
-							int dbkey = manager.addNewWidget(widgetModel, new String[]{});
-							// widget added
-							session.setAttribute("message_value", "'"+ widgetModel.getFirstName() +"' - " + localizedMessages.getString("WidgetAdminServlet.19")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-							retrieveServices(session, manager);
-							session.setAttribute("hasValidated", Boolean.valueOf(true));																	 //$NON-NLS-1$
-							session.setAttribute("dbkey", dbkey); //$NON-NLS-1$
-							boolean isMaxable = manager.isWidgetMaximized(dbkey);
-							session.setAttribute("isMaxable", Boolean.valueOf(isMaxable)); //$NON-NLS-1$
-						}	
-						else{
-							// TODO - call the manager to update required resources
-							// widget updated
-							session.setAttribute("message_value", "'"+ widgetModel.getFirstName() +"' - " + localizedMessages.getString("WidgetAdminServlet.20")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-						}						
-					}
+
+					// get the start file; if there is no valid start file an exception will be thrown
+					String src = WidgetPackageUtils.locateStartFile(widgetModel, zip, localizedMessages);
+					// get the widget identifier
+					String manifestIdentifier = widgetModel.getIdentifier();						
+					// create the folder structure to unzip the zip into
+					File newWidgetFolder = WidgetPackageUtils.createUnpackedWidgetFolder(request, properties, manifestIdentifier);
+					// now unzip it into that folder
+					WidgetPackageUtils.unpackZip(zip, newWidgetFolder);							
+					// get the url to the start page
+					String relativestartUrl = (WidgetPackageUtils.getURLForWidget(properties, manifestIdentifier, src));
+					// update the model version of the start page (or create one if none exists)
+					if (widgetModel.getContent() == null) widgetModel.setContent(new ContentEntity()); 
+					widgetModel.getContent().setSrc(relativestartUrl);
+					// now update the js links in the start page
+					File startFile = new File(newWidgetFolder.getCanonicalPath() + File.separator + src);							
+					if(startFile.exists()){								
+						StartPageJSParser parser = new StartPageJSParser(startFile, widgetModel);
+						parser.doParse();
+					}							
+					// get the path to the root of the unzipped folder
+					String localPath = WidgetPackageUtils.getURLForWidget(properties, manifestIdentifier, "");
+					// now pass this to the model which will prepend the path to local resources (not web icons)
+					widgetModel.updateIconPaths(localPath);							
+					// check to see if this widget already exists in the DB - using the ID (guid) key from the manifest
+					if(!manager.doesWidgetAlreadyExistInSystem(manifestIdentifier)){									
+						int dbkey = manager.addNewWidget(widgetModel, new String[]{});
+						// widget added
+						session.setAttribute("message_value", "'"+ widgetModel.getFirstName() +"' - " + localizedMessages.getString("WidgetAdminServlet.19")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+						retrieveServices(session, manager);
+						session.setAttribute("hasValidated", Boolean.valueOf(true));																	 //$NON-NLS-1$
+						session.setAttribute("dbkey", dbkey); //$NON-NLS-1$
+						boolean isMaxable = manager.isWidgetMaximized(dbkey);
+						session.setAttribute("isMaxable", Boolean.valueOf(isMaxable)); //$NON-NLS-1$
+					}	
 					else{
-						// the start page as defined in config.xml does not exist in zip file
-						throw new BadWidgetZipFileException(localizedMessages.getString("WidgetAdminServlet.22")); //$NON-NLS-1$
-					}
+						// TODO - call the manager to update required resources
+						// widget updated
+						session.setAttribute("message_value", "'"+ widgetModel.getFirstName() +"' - " + localizedMessages.getString("WidgetAdminServlet.20")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					}						
 				}
 				else{
 					// no manifest file found in zip archive
@@ -538,11 +532,10 @@
 			_logger.error(ex);			
 			session.setAttribute("error_value", ex.getMessage()); //$NON-NLS-1$
 		}
-		
-		
+
+
 	}
 
 
-	
+
 }
- 
\ No newline at end of file

Modified: incubator/wookie/trunk/src/org/apache/wookie/manifestmodel/IManifestModel.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/manifestmodel/IManifestModel.java?rev=827748&r1=827747&r2=827748&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/manifestmodel/IManifestModel.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/manifestmodel/IManifestModel.java Tue Oct 20 17:59:19 2009
@@ -55,4 +55,6 @@
 	public String getViewModes();
 
 	public List<IDescriptionEntity> getDescriptions();
+	
+	public void setContent(IContentEntity content);
 }

Modified: incubator/wookie/trunk/src/org/apache/wookie/messages.properties
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/messages.properties?rev=827748&r1=827747&r2=827748&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/messages.properties (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/messages.properties Tue Oct 20 17:59:19 2009
@@ -20,11 +20,14 @@
 WidgetAdminServlet.19=Widget was successfully imported into the system.
 WidgetAdminServlet.20=Widget was successfully updated in the system.
 WidgetAdminServlet.21=The id of this widget cannot be empty - please modifiy the manifest xml attribute 'id' of the widget element and try again.
-WidgetAdminServlet.22=Referenced start page not found in zip file
-WidgetAdminServlet.23=Unable to find manifest file in uploaded content.
+WidgetAdminServlet.22=A custom start file was defined in config.xml, but was not found in the zip file
+WidgetAdminServlet.23=Invalid Widget:Unable to find config.xml in uploaded content.
 WidgetAdminServlet.24=No file found uploaded to server
 WidgetAdminServlet.25=Unable to parse the config.xml file
 WidgetAdminServlet.26=test
+WidgetAdminServlet.27=Invalid Widget: No custom start file was specified, and no default start file can be located
+WidgetAdminServlet.28=Invalid Widget: Root element of config.xml was not "Widget"
+WidgetAdminServlet.28=Invalid Widget: Bad zip file
 
 WidgetServiceServlet.0=No valid requestid was found.
 WidgetServiceServlet.1=completed

Modified: incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties?rev=827748&r1=827747&r2=827748&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/messages_nl.properties Tue Oct 20 17:59:19 2009
@@ -24,6 +24,10 @@
 WidgetAdminServlet.23=Unable to find manifest file in uploaded content.(dutch)
 WidgetAdminServlet.24=No file found uploaded to server(dutch)
 WidgetAdminServlet.25=Unable to parse the config.xml file(dutch)
+WidgetAdminServlet.26=Test
+WidgetAdminServlet.27=Invalid Widget: No custom start file was specified, and no default start file can be located(dutch)
+WidgetAdminServlet.28=Invalid Widget: Root element of config.xml was not "Widget"(dutch)
+WidgetAdminServlet.28=Invalid Widget: Bad zip file(dutch)
 
 WidgetServiceServlet.0=No valid requestid was found.(dutch)
 WidgetServiceServlet.1=completed(dutch)

Modified: incubator/wookie/trunk/src/org/apache/wookie/util/WidgetPackageUtils.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/util/WidgetPackageUtils.java?rev=827748&r1=827747&r2=827748&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/util/WidgetPackageUtils.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/util/WidgetPackageUtils.java Tue Oct 20 17:59:19 2009
@@ -34,6 +34,10 @@
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadBase;
 import org.apache.log4j.Logger;
+import org.apache.wookie.Messages;
+import org.apache.wookie.exceptions.BadManifestException;
+import org.apache.wookie.exceptions.BadWidgetZipFileException;
+import org.apache.wookie.manifestmodel.IManifestModel;
 import org.apache.wookie.manifestmodel.IW3CXMLConfiguration;
 
 /**
@@ -43,6 +47,42 @@
  */
 public class WidgetPackageUtils {
 	static Logger _logger = Logger.getLogger(WidgetPackageUtils.class.getName());
+	
+	public static final String[] START_FILES = {"index.htm","index.html","index.svg","index.xhtml","index.xht"};
+	
+	/**
+	 * Identify the start file for a given zipfile and manifest, or throw an exception
+	 * @param widgetModel
+	 * @param zip
+	 * @param localizedMessages
+	 * @return the name of the start file
+	 * @throws BadWidgetZipFileException if a custom start file is specified, but is not present
+	 * @throws BadManifestException if no custom start file is found, and no default start file can be located
+	 */
+	public static String locateStartFile(IManifestModel widgetModel, ZipFile zip, Messages localizedMessages) throws BadWidgetZipFileException, BadManifestException{
+		String startFile = null;
+		// Check for a custom start file
+		if (widgetModel.getContent() != null) {
+			if (widgetModel.getContent().getSrc() == null){
+				startFile = widgetModel.getContent().getSrc();
+				// Check that the specified custom start file exists
+				if (zip.getEntry(startFile)==null){
+					startFile = null;
+					throw new BadWidgetZipFileException(localizedMessages.getString("WidgetAdminServlet.22")); //$NON-NLS-1$
+				}
+			}
+		}
+		// If no custom start file exists, look for defaults
+		for (String s: START_FILES){
+			if (startFile == null && zip.getEntry(s)!=null){
+				startFile = s;
+			}
+		}
+		// If no start file has been found, throw an exception
+		if (startFile == null) 
+			throw new BadManifestException("WidgetAdminServlet.27"); //$NON-NLS-1$
+		return startFile;
+	}
 
 	public static File createUnpackedWidgetFolder(HttpServletRequest request, Configuration properties, String folder) throws IOException{
 		folder = convertIdToFolderName(folder);