<%
/*******************************************************************************
 * Copyright (c) 2001, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
%>
<%@ page contentType="text/html; charset=UTF-8" import="org.eclipse.wst.ws.internal.explorer.platform.uddi.actions.*,
                                                        org.eclipse.wst.ws.internal.explorer.platform.uddi.constants.*,
                                                        org.eclipse.wst.ws.internal.explorer.platform.uddi.perspective.*,
                                                        org.eclipse.wst.ws.internal.explorer.platform.constants.*,
                                                        org.eclipse.wst.ws.internal.explorer.platform.util.*" %>

<jsp:useBean id="controller" class="org.eclipse.wst.ws.internal.explorer.platform.perspective.Controller" scope="session"/>
<%
   UDDIPerspective uddiPerspective = controller.getUDDIPerspective();
%>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script language="javascript" src="<%=response.encodeURL(controller.getPathWithContext("scripts/browserdetect.js"))%>">
</script>
<jsp:include page="/uddi/scripts/uddipanes.jsp" flush="true"/>
</head>
<body dir="<%=org.eclipse.wst.ws.internal.explorer.platform.util.DirUtils.getDir()%>">
<%
   // Prepare the action.
   UpdateServiceAction action = new UpdateServiceAction(controller);

   // Load the parameters for the action from the servlet request.
   boolean inputsValid = action.populatePropertyTable(request);

   if (!inputsValid)
   {
%>
<script language="javascript">
  propertiesContent.location = "<%=response.encodeURL(controller.getPathWithContext("uddi/properties_content.jsp"))%>";
  statusContent.location = "<%=response.encodeURL(controller.getPathWithContext("uddi/status_content.jsp"))%>";
</script>
<%
   }
   else
   {
     boolean refreshServiceResult = action.refreshFromRegistry();
     boolean refreshBusinessResult = action.refreshBusinessFromRegistry();
     if (!refreshServiceResult)
     {
       session.setAttribute(UDDIActionInputs.PUBLISH_ACTION,action);
       if (!refreshBusinessResult)
       {
%>
<script language="javascript">
  if (confirm("<%=HTMLUtils.JSMangle(uddiPerspective.getMessage("MSG_QUESTION_SERVICE_PUBLISH_BUSINESS"))%>"))
    perspectiveWorkArea.location = "<%=response.encodeURL(controller.getPathWithContext("uddi/actions/UpdateServiceNewPublishBusinessActionJSP.jsp"))%>";
  else
    propertiesContent.requestSubmitted = false;
</script>
<%
       }
       else
       {
%>
<script language="javascript">
  if (confirm("<%=HTMLUtils.JSMangle(uddiPerspective.getMessage("MSG_QUESTION_PUBLISH_ITEM"))%>"))
    perspectiveWorkArea.location = "<%=response.encodeURL(controller.getPathWithContext("uddi/actions/UpdateNewPublishActionJSP.jsp"))%>";
  else
    propertiesContent.requestSubmitted = false;
</script>
<%
       }
     }
     else
     {
%>
<%@ include file="/uddi/actions/NewNodeAction.inc" %>
<%
     }
   }
%>
</body>
</html>
