/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.adminweb;
import java.io.IOException;
import java.io.StringWriter;
import javax.mail.MessagingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.enonic.esl.containers.ExtendedMap;
import com.enonic.esl.containers.MultiValueMap;
import com.enonic.esl.xml.XMLTool;
import com.enonic.vertical.engine.VerticalEngineException;
import com.enonic.cms.core.security.user.User;
import com.enonic.cms.core.service.AdminService;
public class ContentHandlerHandlerServlet
extends AdminHandlerBaseServlet
{
public String buildContentHandlerXML( ExtendedMap formItems )
throws ClassNotFoundException
{
StringWriter sw = new StringWriter();
Document doc = XMLTool.createDocument();
// Create unit element
Element contentHandler = XMLTool.createRootElement( doc, "contenthandler" );
if ( formItems.containsKey( "key" ) )
{
contentHandler.setAttribute( "key", formItems.getString( "key" ) );
}
XMLTool.createElement( doc, contentHandler, "name", formItems.getString( "name" ) );
String className = formItems.getString( "class", "" );
this.getClass().getClassLoader().loadClass( className );
XMLTool.createElement( doc, contentHandler, "class", className );
String description = formItems.getString( "description", "" );
if ( description == null || description.length() == 0 )
{
XMLTool.createElement( doc, contentHandler, "description" );
}
else
{
XMLTool.createElement( doc, contentHandler, "description", description );
}
Element xmlConfig = XMLTool.createElement( doc, contentHandler, "xmlconfig" );
// <config>
String config = formItems.getString( "config", "" );
if ( config == null || config.length() == 0 )
{
XMLTool.createElement( doc, xmlConfig, "config" );
}
else
{
Document temp = XMLTool.domparse( config );
Element root = temp.getDocumentElement();
if ( root.getNodeName().equals( "config" ) )
{
xmlConfig.appendChild( doc.importNode( root, true ) );
}
else
{
XMLTool.createElement( doc, xmlConfig, "config" );
}
}
// <indexparameters>
String indexparameters = formItems.getString( "indexparameters", "" );
if ( indexparameters == null || indexparameters.length() == 0 )
{
XMLTool.createElement( doc, xmlConfig, "indexparameters" );
}
else
{
Document temp = XMLTool.domparse( indexparameters );
Element root = temp.getDocumentElement();
if ( root.getNodeName().equals( "indexparameters" ) )
{
xmlConfig.appendChild( doc.importNode( root, true ) );
}
else
{
XMLTool.createElement( doc, xmlConfig, "indexparameters" );
}
}
// <ctydefault>
String ctydefault = formItems.getString( "ctydefault", "" );
if ( ctydefault == null || ctydefault.length() == 0 )
{
XMLTool.createElement( doc, xmlConfig, "ctydefault" );
}
else
{
Document temp = XMLTool.domparse( ctydefault );
Element root = temp.getDocumentElement();
if ( root.getNodeName().equals( "ctydefault" ) )
{
xmlConfig.appendChild( doc.importNode( root, true ) );
}
else
{
XMLTool.createElement( doc, xmlConfig, "ctydefault" );
}
}
XMLTool.printDocument( sw, doc );
return sw.toString();
}
public void handlerBrowse( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems )
throws VerticalAdminException
{
User user = securityService.getLoggedInAdminConsoleUser();
Document doc = admin.getContentHandlers().getAsDOMDocument();
// Parameters
ExtendedMap parameters = new ExtendedMap();
addCommonParameters( admin, user, request, parameters, -1, -1 );
addSortParamteres( "name", "ascending", formItems, session, parameters );
parameters.put( "page", String.valueOf( request.getParameter( "page" ) ) );
transformXML( request, response, doc, "contenthandler_browse.xsl", parameters );
}
public void handlerForm( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems )
throws VerticalAdminException
{
boolean createHandler = false;
Document doc;
String xmlData;
User user = securityService.getLoggedInAdminConsoleUser();
String keyStr = request.getParameter( "key" );
if ( keyStr == null || keyStr.length() == 0 )
{
// Blank form, make dummy document
doc = XMLTool.createDocument();
createHandler = true;
}
else
{
// Edit content handler
doc = admin.getContentHandler( Integer.parseInt( keyStr ) ).getAsDOMDocument();
}
// Parameters
ExtendedMap parameters = new ExtendedMap();
addCommonParameters( admin, user, request, parameters, -1, -1 );
addSortParamteres( "name", "ascending", formItems, session, parameters );
parameters.put( "page", String.valueOf( request.getParameter( "page" ) ) );
if ( createHandler )
{
parameters.put( "create", "1" );
}
else
{
parameters.put( "create", "0" );
}
transformXML( request, response, doc, "contenthandler_form.xsl", parameters );
}
public void handlerUpdate( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems )
throws VerticalAdminException, VerticalEngineException
{
try
{
User user = securityService.getLoggedInAdminConsoleUser();
String xmlData = buildContentHandlerXML( formItems );
admin.updateContentHandler( user, xmlData );
MultiValueMap queryParams = new MultiValueMap();
queryParams.put( "page", formItems.get( "page" ) );
queryParams.put( "op", "browse" );
redirectClientToAdminPath( "adminpage", queryParams, request, response );
}
catch ( ClassNotFoundException cnfe )
{
String message = "Could not find class: %t";
VerticalAdminLogger.errorAdmin(message, cnfe );
}
}
public void handlerCreate( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems )
throws VerticalAdminException, VerticalEngineException
{
try
{
User user = securityService.getLoggedInAdminConsoleUser();
String xmlData = buildContentHandlerXML( formItems );
admin.createContentHandler( user, xmlData );
MultiValueMap queryParams = new MultiValueMap();
queryParams.put( "page", formItems.get( "page" ) );
queryParams.put( "op", "browse" );
redirectClientToAdminPath( "adminpage", queryParams, request, response );
}
catch ( ClassNotFoundException cnfe )
{
String message = "Could not find class: %t";
VerticalAdminLogger.errorAdmin(message, cnfe );
}
}
public void handlerRemove( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems, int key )
throws VerticalAdminException, VerticalEngineException
{
User user = securityService.getLoggedInAdminConsoleUser();
admin.removeContentHandler( user, key );
redirectClientToReferer( request, response );
}
public void handlerCustom( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin,
ExtendedMap formItems, String operation )
throws VerticalAdminException, VerticalEngineException, MessagingException, IOException
{
if ( "regenerateindex".equals( operation ) )
{
int contentHandlerKey = formItems.getInt( "contenthandlerkey" );
admin.regenerateIndexForContentHandler( contentHandlerKey );
redirectClientToReferer( request, response );
}
else
{
super.handlerCustom( request, response, session, admin, formItems, operation );
}
}
}