From: Julien V. <vi...@us...> - 2004-03-14 21:02:01
|
User: vietj Date: 04/03/14 12:53:04 Added: nukes/src/main/org/jboss/nukes/core/modules/html/plugins FilePlugin.java LinkPlugin.java TextPlugin.java Log: o factored file edition out of HtmlModule into plugins o added FilePlugin which manage file upload o added TextPlugin which allows text file editing o added LinkPlugin which allows to edit links o added link concept between pages Revision Changes Path 1.1 nukes/nukes/src/main/org/jboss/nukes/core/modules/html/plugins/FilePlugin.java Index: FilePlugin.java =================================================================== /*************************************** * * * Nukes: The OpenSource CMS * * * * Distributable under GPL license. * * See terms of license at gnu.org. * * * ***************************************/ package org.jboss.nukes.core.modules.html.plugins; import org.jboss.nukes.html.Page; import org.jboss.nukes.core.ejb.UserEJBLocal; import org.jboss.nukes.core.ejb.FileEJBLocal; import org.jboss.nukes.core.ejb.FileEJB; import org.jboss.nukes.core.FileException; import org.jboss.nukes.core.InvalidNameException; import org.jboss.nukes.core.modules.html.Plugin; import org.jboss.nukes.core.modules.html.HtmlModule; import org.jboss.nukes.core.modules.html.PluginException; import org.jboss.nukes.core.modules.html.PluginContext; import org.jboss.nukes.security.Level; import org.jboss.nukes.common.template.DelegateContext; import org.jboss.nukes.common.template.Template; import org.jboss.nukes.common.template.TemplateLoader; import org.jboss.nukes.common.template.BuildException; import org.jboss.nukes.common.util.CLLoader; import org.jboss.nukes.servlet.MultipartRequest; /** * @author <a href="mailto:ju...@jb...">Julien Viet</a> * @version $revision$ */ public class FilePlugin implements Plugin { private PluginContext context; private Template template; public void init(PluginContext context) throws PluginException { try { this.context = context; TemplateLoader repository = new TemplateLoader(new CLLoader("org/jboss/nukes/core/modules/html")); repository.addTemplate("editor", "/editor.tpl"); template = repository.createTemplate("editor"); } catch (BuildException e) { throw new PluginException(e); } } public void blank(Page page) { DelegateContext ctx = new DelegateContext(); ctx.put("ENCTYPE", "multipart/form-data"); ctx.put("TITLE", "Add a file"); ctx.put("SUBMIT", "<input type=\"submit\" value=\"Upload file\"/>"); ctx.put("TEXTAREA", ""); ctx.next("hidden").put("NAME", "module").put("VALUE", "html"); ctx.next("hidden").put("NAME", "op").put("VALUE", "create"); ctx.next("hidden").put("NAME", "plugin").put("VALUE", "file"); ctx.next("hidden").put("NAME", "MAX_FILE_SIZE").put("VALUE", "100000"); ctx.next("row"). put("LABEL", "${html._HTMLPAGESID} :"). put("INPUT", "<input type=\"text\" size=\"32\" name=\"fileid\" value=\"\"/>"). put("TEXT", "${html.FILEID_DESC}"); ctx.next("row"). put("LABEL", "Make prod :"). put("INPUT", "<input type=\"checkbox\" name=\"makeprod\" value=\"true\" checked=\"checked\"/>"). put("TEXT", "${html.MAKEPROD_DESC}"); ctx.next("row"). put("LABEL", "File :"). put("INPUT", "<input type=\"file\" size=\"32\" name=\"content\" value=\"\"/>"). put("TEXT", ""); template.render(ctx, page.getBodyWriter()); } public void store(Page page, Integer id, String fileId, boolean makeProd, UserEJBLocal user) throws PluginException, FileException { // Get parameters MultipartRequest.File webFile = page.getParameterAsFile("content"); // We need a file if (webFile == null) { throw new PluginException("${core._MODARGSERROR}"); } // Create the command FileEJB.StoreCommand cmd = new FileEJB.StoreCommand( id, fileId, webFile.getContentType(), webFile.getContent(), user, makeProd); // Execute the command context.getFileHome().execute(cmd); } public void edit(Page page, Level level, FileEJBLocal fileEJB) { DelegateContext ctx = new DelegateContext(); ctx.put("ENCTYPE", "multipart/form-data"); ctx.put("TITLE", "Edit file"); ctx.put("SUBMIT", "<input type=\"submit\" value=\"Upload file\"/>"); ctx.put("TEXTAREA", ""); ctx.next("hidden").put("NAME", "module").put("VALUE", "html"); ctx.next("hidden").put("NAME", "op").put("VALUE", "update"); ctx.next("hidden").put("NAME", "plugin").put("VALUE", "file"); ctx.next("hidden").put("NAME", "MAX_FILE_SIZE").put("VALUE", "100000"); ctx.next("hidden").put("NAME", "id").put("VALUE", fileEJB.getId().toString()); ctx.next("hidden").put("NAME", "fileid").put("VALUE", fileEJB.getFileId()); ctx.next("row"). put("LABEL", "New version :"). put("INPUT", "<input type=\"checkbox\" name=\"newversion\" value=\"true\" checked=\"checked\"/>"). put("TEXT", "${html.NEWVERSION_DESC}"); ctx.next("row"). put("LABEL", "Make prod :"). put("INPUT", "<input type=\"checkbox\" name=\"makeprod\" value=\"true\" checked=\"checked\"/>"). put("TEXT", "${html.MAKEPROD_DESC}"); ctx.next("row"). put("LABEL", "File :"). put("INPUT", "<input type=\"file\" size=\"32\" name=\"content\" value=\"\"/>"). put("TEXT", ""); template.render(ctx, page.getBodyWriter()); } } 1.1 nukes/nukes/src/main/org/jboss/nukes/core/modules/html/plugins/LinkPlugin.java Index: LinkPlugin.java =================================================================== /*************************************** * * * Nukes: The OpenSource CMS * * * * Distributable under GPL license. * * See terms of license at gnu.org. * * * ***************************************/ package org.jboss.nukes.core.modules.html.plugins; import org.jboss.nukes.html.Page; import org.jboss.nukes.security.Level; import org.jboss.nukes.core.ejb.FileEJBLocal; import org.jboss.nukes.core.ejb.UserEJBLocal; import org.jboss.nukes.core.ejb.FileEJB; import org.jboss.nukes.core.FileException; import org.jboss.nukes.core.modules.html.Plugin; import org.jboss.nukes.core.modules.html.HtmlModule; import org.jboss.nukes.core.modules.html.PluginException; import org.jboss.nukes.core.modules.html.PluginContext; import org.jboss.nukes.common.template.TemplateLoader; import org.jboss.nukes.common.template.BuildException; import org.jboss.nukes.common.template.Template; import org.jboss.nukes.common.template.DelegateContext; import org.jboss.nukes.common.util.CLLoader; /** * @author <a href="mailto:ju...@jb...">Julien Viet</a> * @version $Revision: 1.1 $ */ public class LinkPlugin implements Plugin { private PluginContext context; private Template template; public void init(PluginContext context) throws PluginException { try { this.context = context; TemplateLoader repository = new TemplateLoader(new CLLoader("org/jboss/nukes/core/modules/html")); repository.addTemplate("editor", "/editor.tpl"); template = repository.createTemplate("editor"); } catch (BuildException e) { throw new PluginException(e); } } public void blank(Page page) throws PluginException { DelegateContext ctx = new DelegateContext(); ctx.put("ENCTYPE", "application/x-www-form-urlencoded"); ctx.put("TITLE", "Add a link"); ctx.put("SUBMIT", "<input type=\"submit\" name=\"submit\" value=\"${html._HTMLPAGESADD}\"/>"); ctx.put("TEXTAREA", ""); ctx.next("hidden").put("NAME", "context").put("VALUE", "html"); ctx.next("hidden").put("NAME", "op").put("VALUE", "create"); ctx.next("hidden").put("NAME", "plugin").put("VALUE", "link"); ctx.next("row").put("LABEL", "File id :"). put("INPUT", "<input type=\"text\" size=\"32\" name=\"id\" value=\"\"/>"). put("TEXT", "${html.FILEID_DESC}"); ctx.next("row").put("LABEL", "Link :"). put("INPUT", "<input type=\"text\" size=\"32\" name=\"content\" value=\"\"/>"). put("TEXT", "${html.FILEID_DESC}"); template.render(ctx, page.getBodyWriter()); } public void edit(Page page, Level level, FileEJBLocal fileEJB) throws PluginException { DelegateContext ctx = new DelegateContext(); ctx.put("ENCTYPE", "application/x-www-form-urlencoded"); ctx.put("TITLE", "Edit link"); ctx.put("SUBMIT", "<input type=\"submit\" name=\"submit\" value=\"${html._HTMLPAGESADD}\"/>"); ctx.put("TEXTAREA", ""); ctx.next("hidden").put("NAME", "context").put("VALUE", "html"); ctx.next("hidden").put("NAME", "op").put("VALUE", "update"); ctx.next("hidden").put("NAME", "plugin").put("VALUE", "link"); ctx.next("hidden").put("NAME", "fileid").put("VALUE", fileEJB.getFileId()); ctx.next("hidden").put("NAME", "id").put("VALUE", fileEJB.getId().toString()); ctx.next("row"). put("LABEL", "New version :"). put("INPUT", "<input type=\"checkbox\" name=\"newversion\" value=\"true\" checked=\"checked\"/>"). put("TEXT", "${html.NEWVERSION_DESC}"); ctx.next("row"). put("LABEL", "Make prod :"). put("INPUT", "<input type=\"checkbox\" name=\"makeprod\" value=\"true\" checked=\"checked\"/>"). put("TEXT", "${html.MAKEPROD_DESC}"); ctx.next("row"). put("LABEL", "Link :"). put("INPUT", "<input type=\"text\" size=\"32\" name=\"content\" value=\"" + new String(fileEJB.getContent()) + "\"/>"). put("TEXT", "${html.FILEID_DESC}"); template.render(ctx, page.getBodyWriter()); } public void store(Page page, Integer id, String fileId, boolean makeProd, UserEJBLocal user) throws PluginException, FileException { String content = page.getParameter("content", ""); if (!FileEJB.FILE.matches(content) && FileEJB.DIR.matches(content)) { throw new PluginException("Link is not valid"); } // Create the command FileEJB.StoreCommand cmd = new FileEJB.StoreCommand( id, fileId, "text/link", content.getBytes(), user, makeProd); // Execute it context.getFileHome().execute(cmd); } } 1.1 nukes/nukes/src/main/org/jboss/nukes/core/modules/html/plugins/TextPlugin.java Index: TextPlugin.java =================================================================== /*************************************** * * * Nukes: The OpenSource CMS * * * * Distributable under GPL license. * * See terms of license at gnu.org. * * * ***************************************/ package org.jboss.nukes.core.modules.html.plugins; import org.jboss.nukes.html.Page; import org.jboss.nukes.core.ejb.FileEJBLocal; import org.jboss.nukes.core.ejb.FileEJB; import org.jboss.nukes.core.ejb.UserEJBLocal; import org.jboss.nukes.core.FileException; import org.jboss.nukes.core.modules.html.Plugin; import org.jboss.nukes.core.modules.html.PluginException; import org.jboss.nukes.core.modules.html.PluginContext; import org.jboss.nukes.utils.Tools; import org.jboss.nukes.common.template.DelegateContext; import org.jboss.nukes.common.template.TemplateLoader; import org.jboss.nukes.common.template.Template; import org.jboss.nukes.common.template.BuildException; import org.jboss.nukes.common.util.CLLoader; import org.jboss.nukes.security.Level; /** * @author <a href="mailto:ju...@jb...">Julien Viet</a> * @version $Revision: 1.1 $ */ public class TextPlugin implements Plugin { private PluginContext context; private Template template; public void init(PluginContext context) throws PluginException { try { this.context = context; TemplateLoader repository = new TemplateLoader(new CLLoader("org/jboss/nukes/core/modules/html")); repository.addTemplate("editor", "/editor.tpl"); template = repository.createTemplate("editor"); } catch (BuildException e) { throw new PluginException(e); } } public void blank(Page page) { DelegateContext ctx = new DelegateContext(); ctx.put("ENCTYPE", "application/x-www-form-urlencoded"); ctx.put("TITLE", "Add a page"); ctx.put("SUBMIT", "<input type=\"submit\" name=\"submit\" value=\"${html._HTMLPAGESADD}\"/>"); ctx.put("TEXTAREA", "<textarea name=\"content\" wrap=\"" + context.getWrap() + "\" cols=\"" + context.getCols() + "\" rows=\"" + context.getRows() + "\">${html._HTMLPAGESADDCONTENTHERE}</textarea>"); ctx.next("hidden").put("NAME", "module").put("VALUE", "html"); ctx.next("hidden").put("NAME", "op").put("VALUE", "create"); ctx.next("hidden").put("NAME", "plugin").put("VALUE", "html"); ctx.next("row").put("LABEL", "File id :"). put("INPUT", "<input type=\"text\" size=\"32\" name=\"id\" value=\"\"/>"). put("TEXT", "${html.FILEID_DESC}"); ctx.next("row").put("LABEL", "Content type :"). put("TEXT", "The file content type"). put("INPUT", "<select name=\"content-type\">" + "<option value=\"text/plain\">text/plain</option>" + "<option value=\"text/xml\">text/xml</option>" + "<option value=\"text/html\" selected=\"selected\">text/html</option>" + "</select>"); template.render(ctx, page.getBodyWriter()); } public void edit(Page page, Level level, FileEJBLocal fileEJB) { String text = new String(fileEJB.getContent()); text = Tools.replace(text, "&", "&"); text = Tools.replace(text, "<", "<"); text = Tools.replace(text, ">", ">"); DelegateContext ctx = new DelegateContext(); ctx.put("ENCTYPE", "application/x-www-form-urlencoded"); ctx.put("TITLE", "Edit page"); ctx.put("SUBMIT", "<input type=\"submit\" value=\"${html._HTMLPAGESUPDATE}\"/>"); ctx.put("TEXTAREA", "<textarea name=\"content\" wrap=\"" + context.getWrap() + "\" cols=\"" + context.getCols() + "\" rows=\"" + context.getRows() + "\">" + text + "</textarea>"); ctx.next("hidden").put("NAME", "module").put("VALUE", "html"); ctx.next("hidden").put("NAME", "op").put("VALUE", "update"); ctx.next("hidden").put("NAME", "plugin").put("VALUE", "html"); ctx.next("hidden").put("NAME", "fileid").put("VALUE", fileEJB.getFileId()); ctx.next("hidden").put("NAME", "id").put("VALUE", fileEJB.getId().toString()); ctx.next("hidden").put("NAME", "content-type").put("VALUE", fileEJB.getContentType()); ctx.next("row"). put("LABEL", "New version :"). put("INPUT", "<input type=\"checkbox\" name=\"newversion\" value=\"true\" checked=\"checked\"/>"). put("TEXT", "${html.NEWVERSION_DESC}"); ctx.next("row"). put("LABEL", "Make prod :"). put("INPUT", "<input type=\"checkbox\" name=\"makeprod\" value=\"true\" checked=\"checked\"/>"). put("TEXT", "${html.MAKEPROD_DESC}"); template.render(ctx, page.getBodyWriter()); } public void store(Page page, Integer id, String fileId, boolean makeProd, UserEJBLocal user) throws PluginException, FileException { // Get the file content String content = page.getParameter("content"); String contentType = page.getParameter("content-type"); // Validate if (content == null) { throw new PluginException("${core._MODARGSERROR}"); } // maybe check that the content type is good ? // Create the command FileEJB.StoreCommand cmd = new FileEJB.StoreCommand( id, fileId, contentType, content.getBytes(), user, makeProd); // Execute it context.getFileHome().execute(cmd); } } |