/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.ralasafe.EntityExistException;
import org.ralasafe.group.Node;
public abstract class AbstractTreeAction extends Action {
private static final Log log=LogFactory.getLog( AbstractTreeAction.class );
public abstract AbstractTreeHandler createTreeHandler( HttpServletRequest req );
protected void doGet( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {
String oper=req.getParameter( "oper" );
if( log.isDebugEnabled() ) {
log.debug( "oper=" + oper );
}
AbstractTreeHandler handler=createTreeHandler( req );
req.setAttribute( "treeHandler", handler );
if( "menu".equals( oper ) ) {
// get current edit node
int id=handler.getId( req );
Object node=handler.getNode( id );
req.setAttribute( "node", node );
// goto context menu page
WebUtil.forward( req, resp, handler.getContextMenuPage() );
} else if( "preCreate".equals( oper ) ) {
// goto preCreate page
WebUtil.forward( req, resp, handler.getCreatePage() );
} else if( "preCopy".equals( oper ) ) {
int id=handler.getId( req );
Object node=handler.getNode( id );
req.setAttribute( "node", node );
// goto preCopy page
WebUtil.forward( req, resp, handler.getCopyPage() );
} else if( "preModify".equals( oper ) ) {
// get current edit node
int id=handler.getId( req );
Object node=handler.getNode( id );
req.setAttribute( "node", node );
// goto preModify page
WebUtil.forward( req, resp, handler.getModifyPage() );
} else if( "isNameValid".equals( oper ) ) {
String name=req.getParameter( "name" );
Node node=handler.getNode( name );
String sId=req.getParameter( "id" );
boolean valid=false;
if( node==null || ("n"+node.getId()).equals( sId ) ) {
valid=true;
}
resp.setContentType("application/json;charset=UTF-8");
PrintWriter writer=resp.getWriter();
writer.write( valid+"" );
writer.flush();
} else {
// default: goto main jsp page
WebUtil.forward( req, resp, handler.getTreePage() );
return;
}
}
protected void doPost( HttpServletRequest req, HttpServletResponse resp )
throws ServletException, IOException {
String oper=req.getParameter( "oper" );
if( log.isDebugEnabled() ) {
log.debug( "oper=" + oper );
}
AbstractTreeHandler handler=createTreeHandler( req );
req.setAttribute( "treeHandler", handler );
if( "add".equals( oper ) ) {
Object node=handler.getNode( req );
try {
handler.addNode( node );
} catch( EntityExistException e ) {
log.error( "", e );
throw new ServletException( e );
}
} else if( "copy".equals( oper ) ) {
Object node=handler.getNode( req );
try {
handler.copyNode( node );
} catch( EntityExistException e ) {
log.error( "", e );
throw new ServletException( e );
}
} else if( "delete".equals( oper ) ) {
int id=handler.getId( req );
handler.deleteNode( id );
} else if( "update".equals( oper ) ) {
Object node=handler.getNode( req );
try {
handler.updateNode( node );
} catch( EntityExistException e ) {
log.error( "", e );
throw new ServletException( e );
}
} else if( "move".equals( oper ) ) {
int parentId=handler.getParentId( req );
int id=handler.getId( req );
int position=handler.getPosition( req );
handler.moveNode( parentId, id, position );
} else if( "loadTree".equals( oper ) ) {
//print tree xml data
String treeJson=handler.getTree();
if( log.isDebugEnabled() ) {
log.debug( "Json:" + treeJson );
}
resp.setContentType("application/json;charset=UTF-8");
PrintWriter writer=resp.getWriter();
writer.write( treeJson );
writer.flush();
}
}
}