package net.cyklotron.cms.modules.actions.category; import java.util.Arrays; import java.util.regex.Pattern; import org.jcontainer.dna.Logger; import org.objectledge.context.Context; import org.objectledge.coral.security.Subject; import org.objectledge.coral.session.CoralSession; import org.objectledge.coral.store.Resource; import org.objectledge.parameters.Parameters; import org.objectledge.pipeline.ProcessingException; import org.objectledge.templating.TemplatingContext; import org.objectledge.utils.StackTrace; import org.objectledge.web.HttpContext; import org.objectledge.web.mvc.MVCContext; import net.cyklotron.cms.CmsDataFactory; import net.cyklotron.cms.category.CategoryResource; import net.cyklotron.cms.category.CategoryService; import net.cyklotron.cms.integration.IntegrationService; import net.cyklotron.cms.integration.ResourceClassResource; import net.cyklotron.cms.link.BaseLinkResource; import net.cyklotron.cms.link.BaseLinkResourceImpl; import net.cyklotron.cms.site.SiteResource; import net.cyklotron.cms.structure.StructureService; /** * * @author Pawel Potempski * @author Damian Gajda * @version $Id: AddCategory.java,v 1.4 2005-05-19 04:42:29 zwierzem Exp $ */ public class AddCategory extends BaseCategoryAction { public AddCategory(Logger logger, StructureService structureService, CmsDataFactory cmsDataFactory, CategoryService categoryService, IntegrationService integrationService) { super(logger, structureService, cmsDataFactory, categoryService, integrationService); } /** * Performs the action. */ public void execute(Context context, Parameters parameters, MVCContext mvcContext, TemplatingContext templatingContext, HttpContext httpContext, CoralSession coralSession) throws ProcessingException { Subject subject = coralSession.getUserSubject(); String name = parameters.get("name",""); String description = parameters.get("description",""); Long linkId = parameters.getLong("link_id",-1L); String uiStyle = parameters.get("uiStyle",""); Pattern illegalNamePattern = Pattern.compile("[()]"); if(name.equals("")) { if(parameters.isDefined("res_class_id")) { templatingContext.put("selected_res_id", Arrays.asList(parameters .getStrings("res_class_id"))); } templatingContext.put("description", description); templatingContext.put("result","category_name_empty"); return; } if(illegalNamePattern.matcher(name).find()) { if(parameters.isDefined("res_class_id")) { templatingContext.put("selected_res_id", Arrays.asList(parameters .getStrings("res_class_id"))); } templatingContext.put("name", name); templatingContext.put("description", description); templatingContext.put("result", "invalid_category_name"); return; } try { // get parent node for category Resource parent; if(parameters.isDefined("cat_id")) { parent = getCategory(coralSession, parameters); } else { SiteResource site = null; if(parameters.isDefined("site_id")) { site = getSite(context); } parent = categoryService.getCategoryRoot(coralSession, site); } ResourceClassResource[] resourceClasses = getResourceClasses(coralSession, parameters); BaseLinkResource link = null; if(linkId!=-1L){ link = BaseLinkResourceImpl.getBaseLinkResource(coralSession, linkId); } CategoryResource newCategory = categoryService.addCategory(coralSession, name, description,link, parent, resourceClasses, uiStyle); parameters.set("cat_id", newCategory.getIdString()); } catch(Exception e) { templatingContext.put("result","exception"); logger.error("add category",e); templatingContext.put("trace",new StackTrace(e)); return; } templatingContext.put("result","added_successfully"); mvcContext.setView("category.CategoryList"); } public boolean checkAccessRights(Context context) throws ProcessingException { CoralSession coralSession = (CoralSession)context.getAttribute(CoralSession.class); return checkPermission(context, coralSession, "cms.category.add"); } }