Commit Diff


commit - fcc72cc40e3d82cc30b6c370d4070f7e98ff6e7e
commit + 61cfea61cad7c7482666cfc450aed53f69a64345
blob - 76570f037afcc664a5b74ceb158d40e96133a605
blob + 516c1e446391a747dac6650e0c92948ad7770e65
--- build.xml
+++ build.xml
@@ -223,7 +223,7 @@
 		  <fileset dir="${target}/util/" includes="snipsnap/api/**"/>
 	  </jar>
   </target>
-  
+ 
   <!-- create server code -->
   <target depends="compile-jsp, compile-server,installer-war,snipsnap-war" description="create server jar" name="jar-server">
     <copy file="conf/copyright.txt" tofile="${target}/server/conf/copyright.txt" filtering="true">
blob - 13350d6f5f7207a0e86f41f022aadd23d733e94a
blob + d69c7e2b05ab9e08fdc7bdc942d55b4aa6ac878b
--- documentation/DeveloperGuide/DeveloperGuide.xml
+++ documentation/DeveloperGuide/DeveloperGuide.xml
@@ -143,7 +143,7 @@ to be accessed through Application though.
 <subsubsection title="SnipViewServlet">
 HTTP requests are handled by \textit{org.snipsnap.net.SnipViewServlet} which is
 mapped to /space in the default application.  The URL is parsed to extract the snip name and
-the SnipSpace is retrieved via \textit{org.snipsnap.container.Components} which stores
+the SnipSpace is retrieved via \textit{snipsnap.api.container.Components} which stores
 all components in a PicoContainer. Then the snip is loaded by name  and 
 placed in request scope.
 
blob - e90bf27d9f70eab2025f9c8d4e32ef7505bff175
blob + 1f300a8155f19e350b222f40aaa422551a1d5928
--- src/apps/default/admin/config/theme.jsp
+++ src/apps/default/admin/config/theme.jsp
@@ -9,7 +9,7 @@
                  org.dom4j.Node,
                  java.io.FilenameFilter,
                  snipsnap.api.snip.Snip,
-                 org.snipsnap.container.Components,
+                 snipsnap.api.container.Components,
                  snipsnap.api.snip.SnipSpace,
                  org.snipsnap.net.admin.ThemeHelper"%>
  <%--
blob - fc64180d096469cb32646f347d5dfa0ba8973c66
blob + 105da76efa50ee8cb6dabe792a2f4fa9e6a7e5a5
--- src/apps/default/admin/config/users.jsp
+++ src/apps/default/admin/config/users.jsp
@@ -1,7 +1,7 @@
 <%@ page import="java.util.*,
                  snipsnap.api.config.Configuration,
                  snipsnap.api.app.Application,
-                 org.snipsnap.container.Components,
+                 snipsnap.api.container.Components,
                  org.snipsnap.user.UserManager"%>
  <%--
   ** User management
blob - 2fddb4458ef99fcc9bc8a77bc5aa84f74f3e03f5
blob + 030e7105c53c30f7d0e39bbb89f0d164a98fa774
--- src/apps/default/admin/config/users.list.jsp
+++ src/apps/default/admin/config/users.list.jsp
@@ -1,5 +1,5 @@
 <%@ page import="org.snipsnap.user.UserManager,
-                 org.snipsnap.container.Components,
+                 snipsnap.api.container.Components,
                  java.util.List"
  %>
 <%--
blob - 0f9bcc801cbb5defbb78597f56bca1974c9a04dc
blob + 4b34d4990327613f78318db9e3634aa7f4d4ed21
--- src/apps/default/main.jsp
+++ src/apps/default/main.jsp
@@ -7,7 +7,7 @@
 <%@ page import="snipsnap.api.snip.SnipSpace,
                  snipsnap.api.app.Application,
                  snipsnap.api.snip.SnipSpaceFactory,
-                 org.snipsnap.container.Components,
+                 snipsnap.api.container.Components,
                  snipsnap.api.snip.Snip"%>
 <%@ page pageEncoding="iso-8859-1" %>
 <% response.setContentType("text/html; charset="+Application.get().getConfiguration().getEncoding()); %>
blob - 6cc22556040f8905f0221dafcd67b302fbd00045
blob + 8cc78a2af4b1f5cf3b7bdc2ccc797384b65999f5
--- src/org/snipsnap/config/ConfigurationManager.java
+++ src/org/snipsnap/config/ConfigurationManager.java
@@ -30,7 +30,7 @@ import org.snipsnap.notification.MessageService;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.config.*;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.radeox.util.logging.Logger;
 
 import java.util.HashMap;
blob - 66c953d4a351d51f8bf34f3fefcd513c4a7e61bc
blob + a98229c2d24ad01a45ecc4c9a868488cfae1d609
--- src/org/snipsnap/config/InitializeDatabase.java
+++ src/org/snipsnap/config/InitializeDatabase.java
@@ -27,7 +27,7 @@ package org.snipsnap.config;
 import snipsnap.api.app.Application;
 import org.snipsnap.app.ApplicationManager;
 import org.snipsnap.app.ApplicationStorage;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.snip.HomePage;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
blob - 448ae5af68d1582ad4caac6b57bbca708f7bb794
blob + 348d1da118b06758b1f1e7b2ad4e4ffdda2712ce
--- src/org/snipsnap/container/PicoContainer.java
+++ src/org/snipsnap/container/PicoContainer.java
@@ -35,6 +35,7 @@ import org.snipsnap.versioning.*;
 import org.snipsnap.versioning.cookbook.CookbookDifferenceService;
 import org.snipsnap.xmlrpc.*;
 import snipsnap.api.snip.SnipSpace;
+import snipsnap.api.container.*;
 
 import javax.sql.DataSource;
 import java.util.ArrayList;
@@ -83,7 +84,7 @@ public class PicoContainer implements Container {
         addComponent(AuthenticationService.class, DefaultAuthenticationService.class);
         addComponent(PasswordService.class);
         addComponent(SessionService.class, DefaultSessionService.class);
-        addComponent(Components.DEFAULT_ENGINE, SnipRenderEngine.class);
+        addComponent(snipsnap.api.container.Components.DEFAULT_ENGINE, SnipRenderEngine.class);
         addComponent(PlainTextRenderEngine.class);
         addComponent(SnipSpace.class, SnipSpaceImpl.class);
 
blob - dc0e630fb69afd6d00f22a732ea3d38c652e1c99
blob + d5c8e3325c11c981897c70cef591888b52acabdd
--- src/org/snipsnap/graph/NameSpaceTreeBuilder.java
+++ src/org/snipsnap/graph/NameSpaceTreeBuilder.java
@@ -24,7 +24,7 @@
  */
 package org.snipsnap.graph;
 
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.graph.builder.TreeBuilder;
 import org.snipsnap.graph.graph.Tree;
 import org.snipsnap.graph.graph.TreeNode;
@@ -39,7 +39,7 @@ public class NameSpaceTreeBuilder implements TreeBuild
   }
 
   public Tree build() {
-    SnipSpace space = (snipsnap.api.snip.SnipSpace) Components.getComponent(SnipSpace.class);
+    SnipSpace space = (snipsnap.api.snip.SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class);
 
     snipsnap.api.snip.Snip[] snips = space.match(root);
 
blob - 66f3e4495117aa187a92f33c9e5e22a7d0c815cc
blob + 69182e9d42f4b54527d1eaa87fdbe8867d3f9dc8
--- src/org/snipsnap/interceptor/custom/ACLInterceptor.java
+++ src/org/snipsnap/interceptor/custom/ACLInterceptor.java
@@ -31,7 +31,7 @@ import snipsnap.api.snip.Snip;
 import org.snipsnap.user.Roles;
 import snipsnap.api.user.User;
 import org.snipsnap.security.AccessController;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import java.security.GeneralSecurityException;
 
blob - 041723a52145a33e1f278cb9c224beac3d0baf71
blob + e4c4bbe1f6b00e55dc0a0536e4ad022d97551771
--- src/org/snipsnap/interceptor/custom/BlogACLInterceptor.java
+++ src/org/snipsnap/interceptor/custom/BlogACLInterceptor.java
@@ -28,7 +28,7 @@ package org.snipsnap.interceptor.custom;
 import snipsnap.api.app.Application;
 
 import snipsnap.api.user.User;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.security.AccessController;
 
 import java.security.GeneralSecurityException;
blob - 358bb90188a52c935929a493965a7c132becf945
blob + 25b7661490524b4c9c58079fd7ed8974a6e95346
--- src/org/snipsnap/jsp/NewCheckPermission.java
+++ src/org/snipsnap/jsp/NewCheckPermission.java
@@ -28,7 +28,7 @@ import gabriel.Permission;
 import gabriel.components.context.OwnerAccessContext;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.security.AccessController;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpaceFactory;
@@ -81,7 +81,7 @@ public class NewCheckPermission extends ConditionalTag
   }
 
   protected boolean condition() throws JspTagException {
-    AccessController controller = (AccessController) Components.getComponent(AccessController.class);
+    AccessController controller = (AccessController) snipsnap.api.container.Components.getComponent(AccessController.class);
 
     Application app = snipsnap.api.app.Application.get();
     User user = app.getUser();
blob - febe6f6ecb720cc2e7d15770c34ed75e53a252b4
blob + f79fe0159a950f41aeae9d094b995bffb6028ce2
--- src/org/snipsnap/net/AddLabelServlet.java
+++ src/org/snipsnap/net/AddLabelServlet.java
@@ -32,7 +32,7 @@ import snipsnap.api.snip.SnipLink;
 import snipsnap.api.snip.SnipSpaceFactory;
 import snipsnap.api.label.Label;
 import org.snipsnap.snip.label.LabelManager;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.filter.MultipartWrapper;
 import org.radeox.util.logging.Logger;
 
@@ -83,7 +83,7 @@ public class AddLabelServlet extends HttpServlet {
     request.setAttribute("snip", snip);
 
     String labelType = request.getParameter("labeltype");
-    LabelManager manager = (LabelManager)Components.getComponent(LabelManager.class);
+    LabelManager manager = (LabelManager)snipsnap.api.container.Components.getComponent(LabelManager.class);
     snipsnap.api.label.Label label = manager.getLabel(labelType);
     request.setAttribute("label", label);
 
blob - ed80c31d1a0bd35e4999e2746075e415a79dc704
blob + f56e7ca6d00fd22aec6c724300b63ddf182de36e
--- src/org/snipsnap/net/ChangePasswordServlet.java
+++ src/org/snipsnap/net/ChangePasswordServlet.java
@@ -30,7 +30,7 @@ import snipsnap.api.user.User;
 import org.snipsnap.user.UserManager;
 import org.snipsnap.user.PasswordService;
 import org.snipsnap.user.UserManagerFactory;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.container.SessionService;
 import snipsnap.api.config.Configuration;
 
@@ -63,7 +63,7 @@ public class ChangePasswordServlet extends HttpServlet
     if (request.getParameter("cancel") == null) {
       snipsnap.api.user.User user;
       if (null != password1 && password1.equals(password2)) {
-        PasswordService passwordService = (PasswordService) Components.getComponent(PasswordService.class);
+        PasswordService passwordService = (PasswordService) snipsnap.api.container.Components.getComponent(PasswordService.class);
         user = passwordService.changePassWord(key, password1);
       } else {
         request.setAttribute("error", "user.password.error.nomatch");
blob - 01d0bd2c90182de05dc82ec20c0dcc83bccf9dc2
blob + dd2bef600f4c05da08c6afa9fff7c21240ed815e
--- src/org/snipsnap/net/CommentStoreServlet.java
+++ src/org/snipsnap/net/CommentStoreServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.filter.MultipartWrapper;
 import snipsnap.api.snip.Snip;
 import org.snipsnap.snip.SnipFormatter;
@@ -81,7 +81,7 @@ public class CommentStoreServlet extends HttpServlet {
       HttpSession session = request.getSession();
       if (session != null) {
         snipsnap.api.user.User user = snipsnap.api.app.Application.get().getUser();
-        AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
+        AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
 
         if (snip != null && service.isAuthenticated(user)) {
           snip.getComments().postComment(content);
blob - 4776a8b73deed4109b65783614b3c1845611b713
blob + 57bbc6741bca43ee13e46fec63b8ceee499a130a
--- src/org/snipsnap/net/CssHandlerServlet.java
+++ src/org/snipsnap/net/CssHandlerServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 import org.snipsnap.util.ApplicationAwareMap;
blob - f0a984aea930c0b01a14790f21a5c757b5229224
blob + 2d336a4760d666729bfedc2e559fc228dfaa4325
--- src/org/snipsnap/net/DiffServlet.java
+++ src/org/snipsnap/net/DiffServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 import org.snipsnap.versioning.VersionManager;
@@ -61,7 +61,7 @@ public class DiffServlet extends HttpServlet {
     int oldVersion = Integer.parseInt(oldString);
     int newVersion = Integer.parseInt(newString);
 
-    snipsnap.api.snip.SnipSpace space = (snipsnap.api.snip.SnipSpace)Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+    snipsnap.api.snip.SnipSpace space = (snipsnap.api.snip.SnipSpace)snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
     snipsnap.api.snip.Snip snip = space.load(name);
 
     VersionManager versionManager = (VersionManager) Components.getComponent(VersionManager.class);
blob - dbab213c6eb4d0f911e95c1c03c1e60085a2e332
blob + a54eba48cf53c3f1c1d46db5b0adfd30859c0cf6
--- src/org/snipsnap/net/FileDownloadServlet.java
+++ src/org/snipsnap/net/FileDownloadServlet.java
@@ -30,7 +30,7 @@ import snipsnap.api.config.Configuration;
 import snipsnap.api.snip.Snip;
 import org.snipsnap.snip.attachment.Attachment;
 import org.snipsnap.snip.attachment.storage.AttachmentStorage;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -75,7 +75,7 @@ public class FileDownloadServlet extends HttpServlet {
   public void doPost(HttpServletRequest request, HttpServletResponse response)
       throws ServletException, IOException {
 
-    AttachmentStorage attachmentStorage = (AttachmentStorage) Components.getComponent(AttachmentStorage.class);
+    AttachmentStorage attachmentStorage = (AttachmentStorage) snipsnap.api.container.Components.getComponent(AttachmentStorage.class);
 
     Snip snip = (Snip) request.getAttribute(SNIP);
     String fileName = (String) request.getAttribute(FILENAME);
blob - d79acd87d1e1593fe70a959e67455b582466cef2
blob + daa5cdb4e78490c422022b8c9319c7d858555ff2
--- src/org/snipsnap/net/FileUploadServlet.java
+++ src/org/snipsnap/net/FileUploadServlet.java
@@ -39,7 +39,7 @@ import org.snipsnap.user.Permissions;
 import org.snipsnap.user.Roles;
 import org.snipsnap.user.Security;
 import snipsnap.api.user.User;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.security.AccessController;
 
 import javax.servlet.RequestDispatcher;
blob - 2143f813ff9c539f7a3d42b84d49ef1068497b34
blob + 9318c2ae3f669b8c0792d129ab5baa8f0919efa2
--- src/org/snipsnap/net/GroovyTemplateServlet.java
+++ src/org/snipsnap/net/GroovyTemplateServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import groovy.text.SimpleTemplateEngine;
 import groovy.text.Template;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.SnipSpace;
 
 import javax.servlet.ServletException;
blob - d03c4da39bba126e34c17b97a6c17ccd73370ea3
blob + 1c6669e724f0c30499854eee08209b725a580a0a
--- src/org/snipsnap/net/HistoryServlet.java
+++ src/org/snipsnap/net/HistoryServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 import org.snipsnap.versioning.VersionManager;
blob - fdffa4912cb2dd49ec071f27725fedf3abad2b75
blob + 48cbdf7b08f994fb4c735d2bda28530e69f9ca36
--- src/org/snipsnap/net/LabelsServlet.java
+++ src/org/snipsnap/net/LabelsServlet.java
@@ -33,7 +33,7 @@ import org.snipsnap.snip.label.LabelManager;
 import snipsnap.api.label.Labels;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.filter.MultipartWrapper;
 import org.radeox.util.logging.Logger;
 
blob - ff0c5d3e3bc9cb938c03d7e5406eb58941be6711
blob + 252e4c2e2683dc139feb79112e0636ed1302ed48
--- src/org/snipsnap/net/LoginServlet.java
+++ src/org/snipsnap/net/LoginServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.container.SessionService;
 import org.snipsnap.net.filter.MultipartWrapper;
 import org.snipsnap.user.AuthenticationService;
blob - 676cd0a02bf07030f9cada2e4ca337ab20e84c5d
blob + 618cc38f4fe78dd0d7f645a1cafe4e6cc50864fa
--- src/org/snipsnap/net/MailPasswordKeyServlet.java
+++ src/org/snipsnap/net/MailPasswordKeyServlet.java
@@ -32,7 +32,7 @@ import org.snipsnap.user.UserManager;
 import org.snipsnap.user.PasswordService;
 import org.snipsnap.user.UserManagerFactory;
 import org.snipsnap.util.mail.Mail;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
blob - a494d34246730a6ffa2168ae81a29780a7a8ca82
blob + cfddca598f3dbee5d31ec023db4c6a485c66a2fd
--- src/org/snipsnap/net/NewUserServlet.java
+++ src/org/snipsnap/net/NewUserServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.container.SessionService;
 import org.snipsnap.net.filter.MultipartWrapper;
 import org.snipsnap.snip.HomePage;
blob - 2cc07efd6a4cc2563bc6512aa60f5caf9248bc6f
blob + a8ddba7bb0e4c90b24d862b513f97381bfddbbe0
--- src/org/snipsnap/net/PluginServlet.java
+++ src/org/snipsnap/net/PluginServlet.java
@@ -28,9 +28,10 @@ import groovy.text.SimpleTemplateEngine;
 import groovy.text.Template;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
+import snipsnap.api.plugin.ServletPlugin;
 import org.snipsnap.snip.label.TypeLabel;
 import org.snipsnap.user.Permissions;
 import org.snipsnap.user.Roles;
blob - dcd42b57375b5599e40232d11141e6f21397c123
blob + 53c5ce09526ed0529dbcd26b1380de136c16f70d
--- src/org/snipsnap/net/RobotServlet.java
+++ src/org/snipsnap/net/RobotServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.snip.SnipSpace;
 import snipsnap.api.snip.Snip;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.config.Configuration;
 
 import javax.servlet.ServletException;
@@ -49,7 +49,7 @@ public class RobotServlet extends HttpServlet {
     String name = request.getHeader("User-Agent");
     String host = request.getRemoteHost();
 
-    SnipSpace space = (SnipSpace) Components.getComponent(SnipSpace.class);
+    SnipSpace space = (SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class);
     if(space.exists(Configuration.SNIPSNAP_CONFIG_ROBOTS_TXT)) {
       snipsnap.api.snip.Snip robotstxt = space.load(Configuration.SNIPSNAP_CONFIG_ROBOTS_TXT);
       PrintWriter writer = new PrintWriter(response.getOutputStream());
blob - ea2218861b301f471972574477589c02ec45fe90 (mode 644)
blob + /dev/null
--- src/org/snipsnap/net/ServletPlugin.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * This file is part of "SnipSnap Wiki/Weblog".
- *
- * Copyright (c) 2002 Stephan J. Schmidt, Matthias L. Jugel
- * All Rights Reserved.
- *
- * Please visit http://snipsnap.org/ for updates and contact.
- *
- * --LICENSE NOTICE--
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * --LICENSE NOTICE--
- */
-
-package org.snipsnap.net;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.ServletException;
-import java.io.IOException;
-
-/**
- * Interface for servlet plugins
- */
-
-public interface ServletPlugin {
-  public void service(HttpServletRequest request, HttpServletResponse response)
-    throws IOException, ServletException;
-  public String getPath();
-}
blob - bbe0eb89c664ef73a34f2f72b9646dc04cc6e71d
blob + a60e2fd0800e2c890afb925823392b31b33ffe14
--- src/org/snipsnap/net/ServletPluginLoader.java
+++ src/org/snipsnap/net/ServletPluginLoader.java
@@ -27,11 +27,12 @@ package org.snipsnap.net;
 
 import org.radeox.util.Service;
 import org.radeox.util.logging.Logger;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 import snipsnap.api.label.Label;
 import snipsnap.api.label.Labels;
+import snipsnap.api.plugin.ServletPlugin;
 import org.snipsnap.snip.label.TypeLabel;
 import org.snipsnap.xmlrpc.XmlRpcHandler;
 import org.picocontainer.PicoContainer;
@@ -94,7 +95,7 @@ public class ServletPluginLoader {
     if (null == pluginServlets) {
       pluginServlets = new HashMap();
 
-        Collection components = Components.findComponents(ServletPlugin.class);
+        Collection components = snipsnap.api.container.Components.findComponents(ServletPlugin.class);
 
          Iterator iterator = components.iterator();
          while (iterator.hasNext()) {
blob - 7cdc94bf8bbe5a4959c417594480d245da94868c
blob + eeb220632d9c030f83c1805a077298e0d37b4db1
--- src/org/snipsnap/net/SnipCopyServlet.java
+++ src/org/snipsnap/net/SnipCopyServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.filter.MultipartWrapper;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
@@ -74,7 +74,7 @@ public class SnipCopyServlet extends HttpServlet {
       return;
     }
 
-    snipsnap.api.snip.SnipSpace space = (SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+    snipsnap.api.snip.SnipSpace space = (SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
 
     if (null != name && space.exists(name)) {
       snipsnap.api.snip.Snip snip = space.load(name);
blob - 2f89ee5d01f21e89e473fc1ca1a04d93b1be2bb0
blob + ccda977a3cdadfd903feedc6a7a00fc43b69d367
--- src/org/snipsnap/net/SnipEditServlet.java
+++ src/org/snipsnap/net/SnipEditServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.Encoder;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.security.AccessController;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
@@ -74,7 +74,7 @@ public class SnipEditServlet extends HttpServlet {
     String editHandler = request.getParameter("handler");
 
     snipsnap.api.snip.SnipSpace space = (snipsnap.api.snip.SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
-    AccessController controller = (AccessController) Components.getComponent(AccessController.class);
+    AccessController controller = (AccessController) snipsnap.api.container.Components.getComponent(AccessController.class);
 
     snipsnap.api.snip.Snip snip = null;
     if (name != null && space.exists(name)) {
@@ -156,7 +156,7 @@ public class SnipEditServlet extends HttpServlet {
   private List getTemplates() {
     List templates = new ArrayList();
 
-    snipsnap.api.snip.SnipSpace snipspace = (snipsnap.api.snip.SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+    snipsnap.api.snip.SnipSpace snipspace = (snipsnap.api.snip.SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
     List snipList = snipspace.getAll();
 
     Iterator iterator = snipList.iterator();
blob - 2801b94c39ff08b694691282713fb5101df425a5
blob + e1c1dac70725c4f1e0084bfd43a8fe14aaf6a56f
--- src/org/snipsnap/net/SnipRawServlet.java
+++ src/org/snipsnap/net/SnipRawServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpaceFactory;
 import org.snipsnap.user.AuthenticationService;
@@ -50,7 +50,7 @@ public class SnipRawServlet extends HttpServlet {
       throws IOException, ServletException {
 
     User user = snipsnap.api.app.Application.get().getUser();
-    AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
+    AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
 
     if (service.isAuthenticated(user)) {
       user.lastAccess();
blob - 5d905f1c81a2184e001201211e89b4a94933ea72
blob + ff62ce11cd60afad36469ccb959c53ea5bae5cac
--- src/org/snipsnap/net/SnipRemoveServlet.java
+++ src/org/snipsnap/net/SnipRemoveServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 import snipsnap.api.user.User;
blob - 05a43a039b0539916b8922535dc27573e74360ff
blob + a36f6332fc4ea10e93ef5ed268772e9483882983
--- src/org/snipsnap/net/SnipSearchServlet.java
+++ src/org/snipsnap/net/SnipSearchServlet.java
@@ -31,7 +31,7 @@ import snipsnap.api.snip.SnipSpaceFactory;
 import snipsnap.api.config.Configuration;
 import snipsnap.api.app.Application;
 import org.snipsnap.components.SearchService;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -54,7 +54,7 @@ public class SnipSearchServlet extends HttpServlet {
     String query = request.getParameter("query");
     if (query != null && query.length() > 0) {
       HttpSession session = request.getSession();
-      SearchService searchService = (SearchService) Components.getComponent(SearchService.class);
+      SearchService searchService = (SearchService) snipsnap.api.container.Components.getComponent(SearchService.class);
       Hits hits = searchService.search(query);
       session.setAttribute("query", query);
       session.setAttribute("hits", hits);
blob - bd7ff02ef957b86d5fd59697b7ce5771340ce73c
blob + f2f7b94c1adb26059ae36ae8f78dbf6ea5b823c2
--- src/org/snipsnap/net/SnipStoreServlet.java
+++ src/org/snipsnap/net/SnipStoreServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.filter.MultipartWrapper;
 import org.snipsnap.security.AccessController;
 import snipsnap.api.snip.Snip;
@@ -122,8 +122,8 @@ public class SnipStoreServlet extends HttpServlet {
     HttpSession session = request.getSession();
     if (session != null) {
       User user = snipsnap.api.app.Application.get().getUser();
-      AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
-      AccessController accessController = (AccessController) Components.getComponent(AccessController.class);
+      AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
+      AccessController accessController = (AccessController) snipsnap.api.container.Components.getComponent(AccessController.class);
       String storeHandler = request.getParameter("store_handler");
       if (service.isAuthenticated(user) && (null == snip
                                             || accessController.checkPermission(snipsnap.api.app.Application.get().getUser(), AccessController.EDIT_SNIP, snip))) {
blob - 6c08f5040cb0e65bb98cac05c2fd11751da43920
blob + aee0d9582c0e324e7e46e31fa93de115b3f284ed
--- src/org/snipsnap/net/SnipVersionServlet.java
+++ src/org/snipsnap/net/SnipVersionServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 import org.snipsnap.versioning.VersionManager;
blob - 97294c05813c28d8434f99d6794b1670f0118ae9
blob + 937ec2a9e01c23a251f4818439aeb1bd907234fa
--- src/org/snipsnap/net/SnipViewServlet.java
+++ src/org/snipsnap/net/SnipViewServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 import org.snipsnap.snip.label.TypeLabel;
@@ -65,7 +65,7 @@ public class SnipViewServlet extends HttpServlet {
 
     Configuration config = Application.get().getConfiguration();
     snipsnap.api.user.User user = snipsnap.api.app.Application.get().getUser();
-    AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
+    AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
 
     if (service.isAuthenticated(user)) {
       user.lastAccess();
blob - 134bc47ba42d82c5c608e2f4ae5b88ed5a27909a
blob + 440e7702d53bcea8a0299b5e1f1d60cd06d5e800
--- src/org/snipsnap/net/StoreLabelServlet.java
+++ src/org/snipsnap/net/StoreLabelServlet.java
@@ -27,7 +27,7 @@ package org.snipsnap.net;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.filter.MultipartWrapper;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
blob - bcfe45b3cad91e8dc87b72552d9836ee017ee03d
blob + 63070efc069440c8186207f7418ae508d1025c4a
--- src/org/snipsnap/net/ThemeImageServlet.java
+++ src/org/snipsnap/net/ThemeImageServlet.java
@@ -26,7 +26,7 @@ package org.snipsnap.net;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 
@@ -51,7 +51,7 @@ public class ThemeImageServlet extends HttpServlet {
 
     if (fileName != null && fileName.length() > 1) {
       snipsnap.api.config.Configuration config = snipsnap.api.app.Application.get().getConfiguration();
-      snipsnap.api.snip.SnipSpace space = (SnipSpace)Components.getComponent(SnipSpace.class);
+      snipsnap.api.snip.SnipSpace space = (SnipSpace)snipsnap.api.container.Components.getComponent(SnipSpace.class);
       snipsnap.api.snip.Snip themeSnip = space.load("SnipSnap/themes/"+config.getTheme());
 
       if(themeSnip != null) {
blob - 3086d481717c761e5837559940864c990b0d03e9
blob + 52950176c602e379324f6fc0013d4fa1f9203572
--- src/org/snipsnap/net/XmlRpcServlet.java
+++ src/org/snipsnap/net/XmlRpcServlet.java
@@ -29,7 +29,7 @@ import org.apache.xmlrpc.XmlRpc;
 import org.picocontainer.PicoContainer;
 import org.snipsnap.config.ConfigurationProxy;
 import org.snipsnap.config.Globals;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.util.Base64;
 import org.snipsnap.xmlrpc.XmlRpcHandler;
 import org.xml.sax.SAXException;
@@ -71,7 +71,7 @@ public class XmlRpcServlet extends HttpServlet {
   }
 
   private void initialize() {
-    Collection components = Components.findComponents(XmlRpcHandler.class);
+    Collection components = snipsnap.api.container.Components.findComponents(XmlRpcHandler.class);
 
     Iterator iterator = components.iterator();
     while (iterator.hasNext()) {
blob - bc30b54a48d3b06792d216b197d84349d70f067f
blob + 14b765099a2f2c73ea3279be148b4dc9ae48bf55
--- src/org/snipsnap/net/admin/ConfigureServlet.java
+++ src/org/snipsnap/net/admin/ConfigureServlet.java
@@ -31,7 +31,7 @@ import snipsnap.api.config.Configuration;
 import org.snipsnap.config.ConfigurationManager;
 import org.snipsnap.config.ConfigurationProxy;
 import org.snipsnap.config.InitializeDatabase;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.filter.MultipartWrapper;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
@@ -370,7 +370,7 @@ public class ConfigureServlet extends HttpServlet {
               int idx = steps.indexOf(step);
               step = (String) steps.get(idx - 1);
             } else if (request.getParameter("save") != null) {
-              SnipSpace space = (SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+              SnipSpace space = (SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
               ByteArrayOutputStream configStream = new ByteArrayOutputStream();
               config.store(configStream);
               snipsnap.api.snip.Snip configSnip = space.load(Configuration.SNIPSNAP_CONFIG);
blob - 75fa57bdd4d9f17338f25a38a84946b34df38871
blob + c7f9b6f70f1e93160583a86c37ec847160f998cd
--- src/org/snipsnap/net/admin/DatabaseExport.java
+++ src/org/snipsnap/net/admin/DatabaseExport.java
@@ -26,7 +26,7 @@
 package org.snipsnap.net.admin;
 
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.SnipSpace;
 import org.snipsnap.snip.XMLSnipExport;
 import org.snipsnap.user.UserManager;
@@ -74,7 +74,7 @@ public class DatabaseExport implements SetupHandler {
     String exportTypes[] = request.getParameterValues("export.types");
     request.setAttribute("exportTypes", exportTypes);
 
-    UserManager um = (UserManager) Components.getComponent(UserManager.class);
+    UserManager um = (UserManager) snipsnap.api.container.Components.getComponent(UserManager.class);
     snipsnap.api.snip.SnipSpace space = (SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
 
     List users = null;
blob - 387be77a97a2a13ff3077413bf1c9aeea0d5b908
blob + 616f82db82c29ff897be1d5081f25902975a0f1e
--- src/org/snipsnap/net/admin/Maintenance.java
+++ src/org/snipsnap/net/admin/Maintenance.java
@@ -28,7 +28,7 @@ package org.snipsnap.net.admin;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.snip.Access;
 import org.snipsnap.snip.Links;
 import snipsnap.api.snip.Snip;
@@ -135,7 +135,7 @@ public class Maintenance implements SetupHandler {
 
     public void run() {
       snipsnap.api.app.Application.get().storeObject(snipsnap.api.app.Application.OID, appOid);
-      SnipSpace space = (snipsnap.api.snip.SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+      SnipSpace space = (snipsnap.api.snip.SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
 
       if (!repair) {
         List allSnips = Collections.unmodifiableList(space.getAll());
blob - 3a4b74b2fcd56761832b1d7df0c0035955a3fc30
blob + acaeaa567563566d2e1cf7037c9ad4106e9f81ef
--- src/org/snipsnap/net/admin/ManageSearchEngine.java
+++ src/org/snipsnap/net/admin/ManageSearchEngine.java
@@ -27,7 +27,7 @@ package org.snipsnap.net.admin;
 
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.SnipSpace;
 
 import javax.servlet.http.HttpServletRequest;
blob - e789407acd4a414ddff4ed0d20deb0fea55f634a
blob + 948da5b3240fd9708477c0e04ef4fd0e83efea7b
--- src/org/snipsnap/net/admin/ManageUsers.java
+++ src/org/snipsnap/net/admin/ManageUsers.java
@@ -29,7 +29,7 @@ import snipsnap.api.config.Configuration;
 import org.snipsnap.user.UserManager;
 import snipsnap.api.user.User;
 import org.snipsnap.user.Roles;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.snip.HomePage;
 import snipsnap.api.app.Application;
 
@@ -45,7 +45,7 @@ public class ManageUsers implements SetupHandler {
   }
 
   public Map setup(HttpServletRequest request, HttpServletResponse response, Configuration config, Map errors) {
-    UserManager um = (UserManager) Components.getComponent(UserManager.class);
+    UserManager um = (UserManager) snipsnap.api.container.Components.getComponent(UserManager.class);
     if (request.getParameter("remove") != null) {
       User user = um.load(request.getParameter("remove"));
       if(user != null) {
blob - 2b76e050ffef980f09feae9d43aa14977f14719a
blob + 5864d412ac826e03d352b62d89c1d1971bcaa53e
--- src/org/snipsnap/net/admin/SetupTheme.java
+++ src/org/snipsnap/net/admin/SetupTheme.java
@@ -26,7 +26,7 @@
 package org.snipsnap.net.admin;
 
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.SnipSpace;
 import org.snipsnap.snip.XMLSnipExport;
 import org.snipsnap.snip.XMLSnipImport;
blob - bbf1260901623dfc9934c54de8101e8d79ef8435
blob + 4e010c2a31bceebfc036dfc741e91a2ee93525c4
--- src/org/snipsnap/net/admin/ThemeHelper.java
+++ src/org/snipsnap/net/admin/ThemeHelper.java
@@ -29,7 +29,7 @@ import org.dom4j.Element;
 import org.dom4j.io.SAXReader;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
 
@@ -47,7 +47,7 @@ public class ThemeHelper {
   public final static int CONTENT = 2;
 
   public static Map getInstalledThemes() {
-    SnipSpace space = (snipsnap.api.snip.SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+    SnipSpace space = (snipsnap.api.snip.SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
     snipsnap.api.snip.Snip[] themeSnips = space.match(THEME_PREFIX);
     Map themes = new HashMap();
     for (int t = 0; t < themeSnips.length; t++) {
blob - 7456e3abd80ce326f755bcc8757491eb6388835a
blob + 3d22fdd36e320cc2f51023250b7fd2e66411c546
--- src/org/snipsnap/net/admin/ThemeImageServlet.java
+++ src/org/snipsnap/net/admin/ThemeImageServlet.java
@@ -34,7 +34,7 @@ import snipsnap.api.config.Configuration;
 import snipsnap.api.snip.Snip;
 import org.snipsnap.snip.attachment.Attachment;
 import org.snipsnap.snip.attachment.storage.AttachmentStorage;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -55,7 +55,7 @@ public class ThemeImageServlet extends HttpServlet {
 
     Configuration config = Application.get().getConfiguration();
     Map installedThemes = ThemeHelper.getInstalledThemes();
-    AttachmentStorage storage = (AttachmentStorage) Components.getComponent(AttachmentStorage.class);
+    AttachmentStorage storage = (AttachmentStorage) snipsnap.api.container.Components.getComponent(AttachmentStorage.class);
     if(installedThemes.containsKey(name)) {
       Snip themeSnip = (snipsnap.api.snip.Snip)installedThemes.get(name);
       Attachment att = themeSnip.getAttachments().getAttachment("screenshot.png");
blob - e3d321ed7f124c7522d92839d037e57c98468420
blob + 2838f6ea465c03c04b602fad9ed27223239d5df3
--- src/org/snipsnap/net/filter/InitFilter.java
+++ src/org/snipsnap/net/filter/InitFilter.java
@@ -34,7 +34,7 @@ import org.snipsnap.config.ConfigurationManager;
 import org.snipsnap.config.ConfigurationProxy;
 import org.snipsnap.config.Globals;
 import org.snipsnap.config.ServerConfiguration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.container.SessionService;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
@@ -153,7 +153,7 @@ public class InitFilter implements Filter {
   }
 
   private void loadApplicationContexts() {
-    ApplicationManager appManager = (ApplicationManager) Components.getComponent(ApplicationManager.class);
+    ApplicationManager appManager = (ApplicationManager) snipsnap.api.container.Components.getComponent(ApplicationManager.class);
     Collection prefixes = appManager.getPrefixes();
     Iterator prefixIt = prefixes.iterator();
     snipsnap.api.app.Application app = snipsnap.api.app.Application.get();
@@ -166,7 +166,7 @@ public class InitFilter implements Filter {
 
       System.out.print(">> Loading: " + prefix + " ");
       Configuration appConfig = ConfigurationProxy.newInstance();
-      snipsnap.api.snip.SnipSpace space = (SnipSpace) Components.getComponent(SnipSpace.class);
+      snipsnap.api.snip.SnipSpace space = (SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class);
       if (space.exists(Configuration.SNIPSNAP_CONFIG)) {
         Snip configSnip = space.load(Configuration.SNIPSNAP_CONFIG);
         String configContent = configSnip.getContent();
@@ -221,7 +221,7 @@ public class InitFilter implements Filter {
     resourceManager.setLocale(request.getLocale(), request.getLocales());
 
     if (globals.isInstalled()) {
-      appManager = (ApplicationManager) Components.getComponent(ApplicationManager.class);
+      appManager = (ApplicationManager) snipsnap.api.container.Components.getComponent(ApplicationManager.class);
     }
 
     String prefix = "/";
@@ -315,7 +315,7 @@ public class InitFilter implements Filter {
       session.setAttribute("space", snipsnap.api.snip.SnipSpaceFactory.getInstance());
 
       // check for a logged in user
-      SessionService service = (SessionService) Components.getComponent(SessionService.class);
+      SessionService service = (SessionService) snipsnap.api.container.Components.getComponent(SessionService.class);
       User user = service.getUser(request, (HttpServletResponse) response);
       app.setUser(user, session);
 
blob - ce605e36b171b6e317279bd4e1dbc396eb5646ad
blob + b463570e9512d3464880d56119292b7bdf307c8f
--- src/org/snipsnap/net/handler/TestStoreHandler.java
+++ src/org/snipsnap/net/handler/TestStoreHandler.java
@@ -25,13 +25,15 @@
 package org.snipsnap.net.handler;
 
 import org.radeox.util.logging.Logger;
-import org.snipsnap.net.ServletPlugin;
+import snipsnap.api.plugin.ServletPlugin;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 
+import snipsnap.api.plugin.ServletPlugin;
+
 public class TestStoreHandler implements ServletPlugin {
 
   public void service(HttpServletRequest request, HttpServletResponse response)
blob - 1f1b73b87919649e278807c54e40ac16a21ef655
blob + 47a05aa1aeb12a9b7e7881880855b33ba95f339c
--- src/org/snipsnap/net/iCalServlet.java
+++ src/org/snipsnap/net/iCalServlet.java
@@ -33,7 +33,7 @@ import org.snipsnap.user.UserManager;
 import org.snipsnap.user.AuthenticationService;
 import org.snipsnap.user.UserManagerFactory;
 import org.snipsnap.util.Base64;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -72,7 +72,7 @@ public class iCalServlet extends HttpServlet {
       password = auth.substring(auth.indexOf(':') + 1);
     }
 
-    User user = ((AuthenticationService) Components.getComponent(AuthenticationService.class)).authenticate(login, password);
+    User user = ((AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class)).authenticate(login, password);
     if (user == null) {
       response.setHeader("WWW-Authenticate", "Basic realm=\"SnipSnap\"");
       response.setStatus(WD_UNAUTHORIZED);
blob - 9097b4e9e97b881e159f290bd72e0ebe3545c866
blob + d33b137f68394890a40114dd88517efd27c5c694
--- src/org/snipsnap/notification/NotificationService.java
+++ src/org/snipsnap/notification/NotificationService.java
@@ -30,7 +30,7 @@ import snipsnap.api.config.Configuration;
 import org.snipsnap.notification.jabber.JabberNotifier;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.user.User;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import java.util.ArrayList;
 import java.util.Iterator;
blob - c4356d82f6130bf8f9f3d4a2fbbaa95e7d0d8087
blob + d7b44446d8a152946bc570f2ba83bb3823b9995e
--- src/org/snipsnap/render/SnipRenderEngine.java
+++ src/org/snipsnap/render/SnipRenderEngine.java
@@ -34,7 +34,7 @@ import org.radeox.filter.context.FilterContext;
 import org.radeox.util.Encoder;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.render.context.SnipRenderContext;
 import org.snipsnap.render.filter.context.SnipFilterContext;
 import org.snipsnap.serialization.StringBufferWriter;
 import snipsnap.api.snip.Snip;
blob - d2dbd5fdbb2567240148937ea7a37f6d884d0ab6 (mode 644)
blob + /dev/null
--- src/org/snipsnap/render/context/SnipRenderContext.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * This file is part of "SnipSnap Wiki/Weblog".
- *
- * Copyright (c) 2002 Stephan J. Schmidt, Matthias L. Jugel
- * All Rights Reserved.
- *
- * Please visit http://snipsnap.org/ for updates and contact.
- *
- * --LICENSE NOTICE--
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * --LICENSE NOTICE--
- */
-
-package org.snipsnap.render.context;
-
-import org.radeox.api.engine.context.RenderContext;
-import org.radeox.engine.context.BaseRenderContext;
-import org.radeox.util.i18n.ResourceManager;
-import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
-import snipsnap.api.snip.Snip;
-import snipsnap.api.snip.SnipSpace;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.Enumeration;
-
-/**
- * SnipRenderContext implements RenderContext and is used to
- * give special SnipSnap parameters to a SnipSnap aware
- * Rendering Engine
- *
- * @author Stephan J. Schmidt
- * @version $Id$
- */
-
-public class SnipRenderContext extends BaseRenderContext {
-  public static final String LANGUAGE_BUNDLE = "SnipRenderContext.language_bundle";
-  public static final String HTTP_REQUEST = "SnipRenderContext.request";
-  public static final String HTTP_PARAMS = "SnipRenderContext.params";
-  public static final String USER = "SnipRenderContext.user";
-  public static final String SNIP = "SnipRenderContext.snip";
-  public static final String VIEWED = "SnipRenderContext.viewed_snip";
-  public static final String CONTAINER = "SnipRenderContext.container";
-
-  private Snip snip;
-  private SnipSpace space;
-  private Map attributes;
-
-  public SnipRenderContext(Snip snip, SnipSpace space) {
-    super();
-    this.space = space;
-    this.snip = snip;
-
-    HttpServletRequest request =
-      (HttpServletRequest) Application.get().getParameters().get("request");
-    Locale locale = snipsnap.api.app.Application.get().getConfiguration().getLocale();
-    if(null != request && null != request.getLocale()) {
-      ResourceManager.get().setLocale(request.getLocale(), request.getLocales());
-    } else {
-      ResourceManager.get().setLocale(locale, null);
-    }
-    set(SnipRenderContext.LANGUAGE_BUNDLE, ResourceManager.getBundle("i18n.messages"));
-    set(SnipRenderContext.LANGUAGE_LOCALE, ResourceManager.getLocale("i18n.messages"));
-  }
-
-  /**
-   * Gets the current snip for which the RenderEngine is called
-   *
-   * @return snip Snip for which the RenderEngine is called
-   */
-  public Snip getSnip() {
-    return this.snip;
-  }
-
-  public SnipSpace getSpace() {
-    return space;
-  }
-
-  public void setSpace(SnipSpace space) {
-    this.space = space;
-  }
-
-  private void initAttributes() {
-    attributes = new HashMap();
-    attributes.put(SNIP, snip);
-    attributes.put(USER, Application.get().getUser());
-    attributes.put(VIEWED, snipsnap.api.app.Application.get().getParameters().get("viewed"));
-    attributes.put(CONTAINER, Components.getContainer());
-    HttpServletRequest request = (HttpServletRequest)Application.get().getParameters().get("request");
-    attributes.put(HTTP_REQUEST, request);
-    attributes.put(HTTP_PARAMS, snipsnap.api.app.Application.get().getParameters());
-  }
-
-  public void setAttribute(Object key, Object value) {
-    if (null == attributes) {
-      initAttributes();
-    }
-    attributes.put(key, value);
-  }
-
-  public Object getAttribute(Object key) {
-    if (null == attributes) {
-      initAttributes();
-    }
-    return attributes.get(key);
-  }
-
-  public Map getAttributes() {
-    if (null == attributes) {
-      initAttributes();
-    }
-    return attributes;
-  }
-
-}
blob - d2efd58f1c00d872005d2f83c3ddd367932fb481
blob + 04acca993f3070e24faca577af3c501ac8ace688
--- src/org/snipsnap/render/filter/context/SnipFilterContext.java
+++ src/org/snipsnap/render/filter/context/SnipFilterContext.java
@@ -28,7 +28,7 @@ package org.snipsnap.render.filter.context;
 import org.radeox.macro.parameter.MacroParameter;
 import org.radeox.filter.context.BaseFilterContext;
 import org.snipsnap.render.macro.parameter.SnipMacroParameter;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.render.context.SnipRenderContext;
 import snipsnap.api.snip.Snip;
 
 /**
blob - 08cbf9fb54190fd53b59351bad0c1f95e27c54a7
blob + 006aa9d0f4fbbe02a11a5ca3b1f146fcc9bd9b9e
--- src/org/snipsnap/render/macro/AnchorMacro.java
+++ src/org/snipsnap/render/macro/AnchorMacro.java
@@ -26,7 +26,7 @@
 package org.snipsnap.render.macro;
 
 import org.snipsnap.render.macro.parameter.SnipMacroParameter;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.render.context.SnipRenderContext;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
 import org.radeox.util.i18n.ResourceManager;
blob - 9a6d4ebfd767f160294f3c76d124060b8840138c
blob + 326e77175404da19e7fb7b47a27bd6e36ce0ea1c
--- src/org/snipsnap/render/macro/HotSnipMacro.java
+++ src/org/snipsnap/render/macro/HotSnipMacro.java
@@ -31,7 +31,7 @@ import org.radeox.macro.BaseMacro;
 import org.radeox.macro.parameter.MacroParameter;
 import org.radeox.util.logging.Logger;
 import org.radeox.util.i18n.ResourceManager;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.render.context.SnipRenderContext;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
 import snipsnap.api.snip.SnipSpace;
blob - 0d308c98e9321d4b2c430fd768b5055fa7ec9871
blob + 354bd97c1cfcc58971ddc37a7cf563a78e3461ca
--- src/org/snipsnap/render/macro/LabelSearchMacro.java
+++ src/org/snipsnap/render/macro/LabelSearchMacro.java
@@ -26,7 +26,7 @@
 package org.snipsnap.render.macro;
 
 import org.radeox.util.i18n.ResourceManager;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.render.macro.parameter.SnipMacroParameter;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipSpace;
@@ -70,7 +70,7 @@ public class LabelSearchMacro extends ListOutputMacro 
     String name = params.get("name");
     String value = params.get("value");
 
-    SnipSpace snipspace = (snipsnap.api.snip.SnipSpace) Components.getComponent(SnipSpace.class);
+    SnipSpace snipspace = (snipsnap.api.snip.SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class);
     List snipList = snipspace.getAll();
 
     List result = new ArrayList();
blob - 2f39058c5170f95cf9e6496d46be8527454cd142
blob + a591f2d68867ad5d520fea2e9be0f8b2a09af3bb
--- src/org/snipsnap/render/macro/RecentWeblogMacro.java
+++ src/org/snipsnap/render/macro/RecentWeblogMacro.java
@@ -28,7 +28,7 @@ package org.snipsnap.render.macro;
 import org.radeox.util.logging.Logger;
 import org.radeox.util.i18n.ResourceManager;
 import org.snipsnap.render.macro.parameter.SnipMacroParameter;
-import org.snipsnap.xmlrpc.SnipSnapPing;
+import snipsnap.api.xmlrpc.SnipSnapPing;
 
 import java.io.IOException;
 import java.io.Writer;
blob - 9b5e6a3de8c0d709ba96995b91470c3233990a03
blob + 70a91d0f76550e377f7eeaab5a6e9a374d565146
--- src/org/snipsnap/render/macro/SnipXrefMacro.java
+++ src/org/snipsnap/render/macro/SnipXrefMacro.java
@@ -32,7 +32,7 @@ import org.radeox.macro.parameter.MacroParameter;
 import org.radeox.util.logging.Logger;
 import org.radeox.util.i18n.ResourceManager;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.SnipLink;
 import snipsnap.api.snip.SnipSpace;
 import snipsnap.api.snip.SnipSpaceFactory;
blob - a1bd85bfe71c0950e951eb30d1879a4f894ecc39
blob + 597756bfecd0c72ed55edccf8ae37c1c2bec122e
--- src/org/snipsnap/render/macro/UserCountMacro.java
+++ src/org/snipsnap/render/macro/UserCountMacro.java
@@ -31,7 +31,7 @@ import org.radeox.macro.parameter.MacroParameter;
 import org.radeox.util.i18n.ResourceManager;
 import org.snipsnap.user.UserManager;
 import org.snipsnap.user.UserManagerFactory;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import java.io.IOException;
 import java.io.Writer;
blob - 84dcdc4c7ef21f344b822a8b37aa30b1069a8a06
blob + 6d3f0aa8ad167196970ece158d73f1cd805e6f59
--- src/org/snipsnap/render/macro/list/VerticalListFormatter.java
+++ src/org/snipsnap/render/macro/list/VerticalListFormatter.java
@@ -24,7 +24,7 @@
  */
 package org.snipsnap.render.macro.list;
 
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
 import snipsnap.api.snip.SnipSpace;
@@ -97,7 +97,7 @@ public class VerticalListFormatter implements ListForm
     String realName = snip.getTitle();
     if (name.startsWith("comment-")) {
       int lastIndex = name.lastIndexOf("-");
-      SnipSpace space = (SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+      SnipSpace space = (SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
       snipsnap.api.snip.Snip commentedSnip = space.load(name.substring(name.indexOf("-") + 1, lastIndex));
       realName = commentedSnip.getTitle();
       snipsnap.api.snip.SnipLink.appendImage(writer, "Icon-Comment", "");
blob - 469ff5ab41b50b46b30a9185956babfa8bcfb8bd
blob + 453ba0500999ce96e120c876f35224796a18a258
--- src/org/snipsnap/render/macro/loader/GroovyMacroLoader.java
+++ src/org/snipsnap/render/macro/loader/GroovyMacroLoader.java
@@ -29,7 +29,7 @@ import groovy.lang.GroovyClassLoader;
 import org.radeox.macro.Macro;
 import org.radeox.macro.MacroLoader;
 import org.radeox.macro.Repository;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.notification.Consumer;
 import org.snipsnap.notification.Message;
 import org.snipsnap.notification.MessageService;
@@ -50,7 +50,7 @@ import java.io.InputStream;
 public class GroovyMacroLoader extends MacroLoader implements Consumer {
   public GroovyMacroLoader() {
     // We're interested in changed snips
-    MessageService service = (MessageService) Components.getComponent(MessageService.class);
+    MessageService service = (MessageService) snipsnap.api.container.Components.getComponent(MessageService.class);
     service.register(this);
   }
 
@@ -96,7 +96,7 @@ public class GroovyMacroLoader extends MacroLoader imp
    */
   public Repository loadPlugins(Repository repository, Class klass) {
     if (null != repository) {
-      snipsnap.api.snip.SnipSpace space = (snipsnap.api.snip.SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+      snipsnap.api.snip.SnipSpace space = (snipsnap.api.snip.SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
       snipsnap.api.snip.Snip[] snips = space.match("SnipSnap/config/macros/");
 
       for (int i = 0; i < snips.length; i++) {
blob - 6cb9d91ced2f661fe96fe4d63891d915b236fd68
blob + 98f2d5a3c74b5954aaf46ed5451c8e92711861a0
--- src/org/snipsnap/render/macro/parameter/SnipMacroParameter.java
+++ src/org/snipsnap/render/macro/parameter/SnipMacroParameter.java
@@ -28,7 +28,7 @@ package org.snipsnap.render.macro.parameter;
 import org.radeox.api.engine.context.RenderContext;
 import org.radeox.macro.parameter.BaseMacroParameter;
 import snipsnap.api.snip.Snip;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.render.context.SnipRenderContext;
 
 import java.util.HashMap;
 
@@ -53,7 +53,7 @@ public class SnipMacroParameter extends BaseMacroParam
     setParams(stringParams);
   }
 
-  public SnipRenderContext getSnipRenderContext() {
-    return (SnipRenderContext) context;
+  public snipsnap.api.render.context.SnipRenderContext getSnipRenderContext() {
+    return (snipsnap.api.render.context.SnipRenderContext) context;
   }
 }
blob - d65e64c82a6f77e48571a4f81451044bdd022c86
blob + 2733e9d3c0b731debd4b3faa8ecc29d09a57c30b
--- src/org/snipsnap/semanticweb/rss/RssSnip.java
+++ src/org/snipsnap/semanticweb/rss/RssSnip.java
@@ -28,8 +28,8 @@ package org.snipsnap.semanticweb.rss;
 import org.radeox.api.engine.RenderEngine;
 import org.radeox.api.engine.context.RenderContext;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.container.Components;
+import snipsnap.api.render.context.SnipRenderContext;
 import org.snipsnap.snip.*;
 import snipsnap.api.snip.Snip;
 import org.snipsnap.snip.attachment.Attachments;
@@ -143,7 +143,7 @@ public class RssSnip implements snipsnap.api.snip.Snip
   }
 
   public String getXMLContent() {
-    RenderEngine engine = (RenderEngine) Components.getComponent(Components.DEFAULT_ENGINE);
+    RenderEngine engine = (RenderEngine) Components.getComponent(snipsnap.api.container.Components.DEFAULT_ENGINE);
     RenderContext context = new SnipRenderContext(snip, SnipSpaceFactory.getInstance());
     context.setParameters(snipsnap.api.app.Application.get().getParameters());
     return engine.render(content, context);
blob - c2dd0c082612a17d5344c6c749e17c77588103a9
blob + 6cb556dce90dcd429ae23b886aee933228e800c2
--- src/org/snipsnap/snip/Access.java
+++ src/org/snipsnap/snip/Access.java
@@ -27,7 +27,7 @@ package org.snipsnap.snip;
 
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.user.User;
 import org.snipsnap.util.ApplicationAwareMap;
 
blob - 2410da361ef4f167b66a45e307f250a1640b93df
blob + 04c98f5b7ee5587a852fe5e23476e3d7527e5226
--- src/org/snipsnap/snip/Content.java
+++ src/org/snipsnap/snip/Content.java
@@ -32,8 +32,8 @@ import org.radeox.api.engine.RenderEngine;
 import org.radeox.api.engine.context.RenderContext;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.container.Components;
+import snipsnap.api.render.context.SnipRenderContext;
 import org.snipsnap.snip.attachment.Attachment;
 import org.snipsnap.snip.attachment.Attachments;
 import snipsnap.api.label.Labels;
blob - b711d7c49a614a79f815c6281dc1150a17cc69f3
blob + e863534337e417f500ff24f3aa1e4d420772d847
--- src/org/snipsnap/snip/Modified.java
+++ src/org/snipsnap/snip/Modified.java
@@ -26,7 +26,7 @@
 package org.snipsnap.snip;
 
 import org.radeox.util.i18n.ResourceManager;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.user.UserManager;
 
 import java.sql.Timestamp;
blob - 6550d70aedbd86c56e111bbb5c8355c00b352d37
blob + c6c1904e67d105b42d8fd01cca024e1518fefcf5
--- src/org/snipsnap/snip/SnipFormatter.java
+++ src/org/snipsnap/snip/SnipFormatter.java
@@ -29,8 +29,8 @@ import org.picocontainer.PicoContainer;
 import org.radeox.api.engine.RenderEngine;
 import org.radeox.api.engine.context.RenderContext;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.container.Components;
+import snipsnap.api.render.context.SnipRenderContext;
 
 import java.util.Collection;
 
@@ -49,8 +49,8 @@ public class SnipFormatter
 	public static String toXML(Snip snip, String content)
 	{
     //@FIXME: This duplicates SnipImpl.toXML()
-    RenderEngine engine = (RenderEngine) Components.getComponent(Components.DEFAULT_ENGINE);
-    RenderContext context = new SnipRenderContext(snip, (snipsnap.api.snip.SnipSpace) Components.getComponent(SnipSpace.class));
+    RenderEngine engine = (RenderEngine) snipsnap.api.container.Components.getComponent(snipsnap.api.container.Components.DEFAULT_ENGINE);
+    RenderContext context = new snipsnap.api.render.context.SnipRenderContext(snip, (snipsnap.api.snip.SnipSpace) Components.getComponent(SnipSpace.class));
     context.setParameters(Application.get().getParameters());
     return engine.render(content, context);
   }
blob - fe28eb7feecfbe086455d2452a4f83c1293bb8b3
blob + 3dae5759c4a586224902ed4b53bf9bfe769d406a
--- src/org/snipsnap/snip/SnipImpl.java
+++ src/org/snipsnap/snip/SnipImpl.java
@@ -32,8 +32,8 @@ import org.radeox.api.engine.RenderEngine;
 import org.radeox.api.engine.context.RenderContext;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
-import org.snipsnap.render.context.SnipRenderContext;
+import snipsnap.api.container.Components;
+import snipsnap.api.render.context.SnipRenderContext;
 import org.snipsnap.snip.attachment.Attachments;
 import snipsnap.api.label.Labels;
 import org.snipsnap.snip.label.RenderEngineLabel;
blob - 9bed23e2d8d374c9c90790c04912e7712102d113
blob + 1a227dece8469782cfa23a8dae5cfc1131ece740
--- src/org/snipsnap/snip/SnipSpaceImpl.java
+++ src/org/snipsnap/snip/SnipSpaceImpl.java
@@ -30,7 +30,7 @@ import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import org.snipsnap.app.ApplicationManager;
 import org.snipsnap.app.ApplicationStorage;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.notification.Message;
 import org.snipsnap.notification.MessageService;
 import org.snipsnap.snip.storage.CacheSnipStorage;
blob - 97cac167c869827fc05cc4e50adc5eca89c6dd3f
blob + 49a2c7a1fe0c4099ef37866dea077812f5e0f2c8
--- src/org/snipsnap/snip/XMLSnipExport.java
+++ src/org/snipsnap/snip/XMLSnipExport.java
@@ -30,7 +30,7 @@ import org.dom4j.Element;
 import org.dom4j.io.OutputFormat;
 import org.dom4j.io.XMLWriter;
 import org.radeox.util.logging.Logger;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.jdbc.IntHolder;
 import org.snipsnap.snip.storage.SnipSerializer;
 import org.snipsnap.snip.storage.UserSerializer;
blob - b81f1bffe6cde87f25951a5bf6ebbdae8e294094
blob + 5bceccf2b1b19f46c9e5f8025777ceb2e434a734
--- src/org/snipsnap/snip/XMLSnipImport.java
+++ src/org/snipsnap/snip/XMLSnipImport.java
@@ -34,7 +34,7 @@ import org.dom4j.io.SAXReader;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
 import snipsnap.api.config.Configuration;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.jdbc.IntHolder;
 import org.snipsnap.snip.storage.SnipSerializer;
 import org.snipsnap.snip.storage.UserSerializer;
@@ -208,7 +208,7 @@ public class XMLSnipImport {
     String name = (String) snipMap.get(SnipSerializer.SNIP_NAME);
     String content = (String) snipMap.get(SnipSerializer.SNIP_CONTENT);
 
-    SnipSpace space = (snipsnap.api.snip.SnipSpace) Components.getComponent(SnipSpace.class);
+    SnipSpace space = (snipsnap.api.snip.SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class);
     Snip snip = null;
     if (space.exists(name)) {
       Logger.log("loading existing snip '" + name + "'");
@@ -222,7 +222,7 @@ public class XMLSnipImport {
       snip = space.create(name, content);
     }
 
-    UserManager um = (UserManager) Components.getComponent(UserManager.class);
+    UserManager um = (UserManager) snipsnap.api.container.Components.getComponent(UserManager.class);
     snipsnap.api.user.User importUser = snipsnap.api.app.Application.get().getUser();
 
     // check existing users
blob - ee2704267418981ff47b7c338e772f96f3ac3f20
blob + 552baf08d192a12bb2a696284f92d4884957c0a7
--- src/org/snipsnap/snip/attachment/Attachments.java
+++ src/org/snipsnap/snip/attachment/Attachments.java
@@ -33,7 +33,7 @@ import org.dom4j.io.SAXReader;
 import org.dom4j.io.XMLWriter;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.snip.attachment.storage.AttachmentStorage;
 import snipsnap.api.snip.SnipLink;
 
@@ -215,7 +215,7 @@ public class Attachments {
   }
 
   public String getLinks(String name) {
-    AttachmentStorage storage = (AttachmentStorage) Components.getComponent(AttachmentStorage.class);
+    AttachmentStorage storage = (AttachmentStorage) snipsnap.api.container.Components.getComponent(AttachmentStorage.class);
 
     StringBuffer tmp = new StringBuffer();
     Iterator it = iterator();
@@ -235,7 +235,7 @@ public class Attachments {
   }
 
   public Attachments copy(String name) {
-    AttachmentStorage storage = (AttachmentStorage) Components.getComponent(AttachmentStorage.class);
+    AttachmentStorage storage = (AttachmentStorage) snipsnap.api.container.Components.getComponent(AttachmentStorage.class);
     Attachments copy = new Attachments();
     List atts = getAll();
     Iterator attsIt = atts.iterator();
blob - 1930cb1670264807eacbf8e0cf601055a935a6e3
blob + 1c1a7a613eba76b696d796a7feeba55e0a8e7770
--- src/org/snipsnap/snip/label/CategoryLabel.java
+++ src/org/snipsnap/snip/label/CategoryLabel.java
@@ -30,7 +30,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
 import snipsnap.api.snip.SnipSpace;
@@ -77,7 +77,7 @@ public class CategoryLabel extends BaseLabel {
    */
   public String getInputProxy() {
     StringBuffer buffer = new StringBuffer();
-    snipsnap.api.snip.SnipSpace snipspace = (SnipSpace) Components.getComponent(SnipSpace.class);
+    snipsnap.api.snip.SnipSpace snipspace = (SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class);
     List snipList = snipspace.getAll();
 
     buffer.append("Category: ");
@@ -126,7 +126,7 @@ public class CategoryLabel extends BaseLabel {
    * Create s snipLink, should probably moved around
    */
   private StringBuffer getSnipLink(StringBuffer buffer, String name) {
-    AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
+    AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
 
     if (SnipSpaceFactory.getInstance().exists(name)) {
       String[] strings = name.split("/");
blob - fd8424cc1c644f2f36e99cc304cb524b4bdfd52e
blob + d47415071c4065351d706f9585e9bffe236e4d2a
--- src/org/snipsnap/snip/label/LabelManager.java
+++ src/org/snipsnap/snip/label/LabelManager.java
@@ -27,7 +27,7 @@ package org.snipsnap.snip.label;
 
 import org.radeox.util.logging.Logger;
 import org.radeox.util.Service;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 import java.util.HashMap;
 import java.util.Iterator;
blob - 0e18d9465a936079549b28d61994a8c7e9d20efa
blob + 78047b3a616353a1508660d2d465ad66299e1d95
--- src/org/snipsnap/snip/label/RenderEngineLabel.java
+++ src/org/snipsnap/snip/label/RenderEngineLabel.java
@@ -27,7 +27,7 @@ package org.snipsnap.snip.label;
 
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.label.*;
 import snipsnap.api.label.LabelContext;
blob - 649552ede25a4888389d7058922c05cd409c2766
blob + 5ad607f79ec8db50da270fe8128ca9437d6b5c6e
--- src/org/snipsnap/snip/label/SnipLabel.java
+++ src/org/snipsnap/snip/label/SnipLabel.java
@@ -26,7 +26,7 @@
 package org.snipsnap.snip.label;
 
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.SnipLink;
 import snipsnap.api.snip.SnipSpaceFactory;
 import org.snipsnap.user.AuthenticationService;
@@ -88,7 +88,7 @@ public class SnipLabel extends BaseLabel {
 
   private StringBuffer getSnipLink(StringBuffer buffer, String name) {
     // @TODO: move this to SnipLink or Snip
-    AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
+    AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
 
     if (SnipSpaceFactory.getInstance().exists(name)) {
       snipsnap.api.snip.SnipLink.appendLink(buffer, name, name);
blob - 00c64a122192ecd59299139c712580772e74f296
blob + 5d83def17229cdbc60b4d36389b7f8b8b413e7e5
--- src/org/snipsnap/snip/label/TaxonomyLabel.java
+++ src/org/snipsnap/snip/label/TaxonomyLabel.java
@@ -30,7 +30,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.snip.SnipLink;
 import snipsnap.api.snip.SnipSpace;
@@ -74,7 +74,7 @@ public class TaxonomyLabel extends BaseLabel {
    */
   public String getInputProxy() {
     StringBuffer buffer = new StringBuffer();
-    snipsnap.api.snip.SnipSpace snipspace = (SnipSpace) Components.getComponent(snipsnap.api.snip.SnipSpace.class);
+    snipsnap.api.snip.SnipSpace snipspace = (SnipSpace) snipsnap.api.container.Components.getComponent(snipsnap.api.snip.SnipSpace.class);
     List snipList = snipspace.getAll();
 
     buffer.append("Taxonomy: ");
@@ -119,7 +119,7 @@ public class TaxonomyLabel extends BaseLabel {
   }
 
   private StringBuffer getSnipLink(StringBuffer buffer, String name) {
-    AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
+    AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
 
     if (snipsnap.api.snip.SnipSpaceFactory.getInstance().exists(name)) {
       snipsnap.api.snip.SnipLink.appendLink(buffer, name, name);
blob - 4179b9439fbc5b1571d64738955e42c46a14d9a7
blob + 182da1e952edf19377a01220d1badb335fb92839
--- src/org/snipsnap/user/DefaultUserManager.java
+++ src/org/snipsnap/user/DefaultUserManager.java
@@ -24,7 +24,7 @@
  */
 package org.snipsnap.user;
 
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.snip.storage.UserStorage;
 import org.snipsnap.util.ApplicationAwareMap;
 import org.snipsnap.util.ApplicationAwareIntegerMap;
blob - 48f03318d0b31a6c867f4dd0fc6f902c2da95be7
blob + db3dab3a01a70bf36bd7eb90c438b17b01665754
--- src/org/snipsnap/user/Security.java
+++ src/org/snipsnap/user/Security.java
@@ -29,7 +29,7 @@ import org.snipsnap.snip.Ownable;
 import snipsnap.api.snip.Snip;
 import snipsnap.api.user.*;
 import snipsnap.api.user.User;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 /**
  * Security manager for checking permission, roles etc.
@@ -47,7 +47,7 @@ public class Security {
    */
   private static Roles getRoles(User user) {
     Roles userRoles = new Roles(user.getRoles());
-    AuthenticationService service = (AuthenticationService) Components.getComponent(AuthenticationService.class);
+    AuthenticationService service = (AuthenticationService) snipsnap.api.container.Components.getComponent(AuthenticationService.class);
 
     if (service.isAuthenticated(user)) {
       userRoles.add(Roles.AUTHENTICATED);
blob - 0dcc5c1e5db387a4dc9c1d6359a3c937e3b6c7b6
blob + 97da1ce4f83465b08300ad11bc2445fe61c2ea0c
--- src/org/snipsnap/user/UserManagerFactory.java
+++ src/org/snipsnap/user/UserManagerFactory.java
@@ -24,7 +24,7 @@
  */
 package org.snipsnap.user;
 
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 
 /**
  * User manager factory handles access to UserManager implementations and
blob - 675a7365b627997def938e7f2f522a610c85d04f
blob + b6c2a040f8e37900ac1762d3cac2002b1aca2bf8
--- src/org/snipsnap/util/mail/PostDaemon.java
+++ src/org/snipsnap/util/mail/PostDaemon.java
@@ -30,7 +30,7 @@ import snipsnap.api.app.Application;
 import org.snipsnap.app.ApplicationManager;
 import snipsnap.api.config.Configuration;
 import org.snipsnap.config.ConfigurationManager;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.snip.Blog;
 import org.snipsnap.snip.BlogKit;
 import snipsnap.api.snip.SnipSpaceFactory;
blob - d6cc16908902032b18b57511d8fba24514385abd
blob + 9c52ce00685af99bbaf0ad49c6d5ca939d9b321e
--- src/org/snipsnap/xmlrpc/MetaWeblogHandler.java
+++ src/org/snipsnap/xmlrpc/MetaWeblogHandler.java
@@ -28,7 +28,7 @@ package org.snipsnap.xmlrpc;
 import org.apache.xmlrpc.XmlRpcException;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.app.Application;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.net.FileUploadServlet;
 import org.snipsnap.feeder.custom.BlogFeeder;
 import org.snipsnap.snip.Blog;
blob - 7d99a176678d5cbf973d9e5bee1082fe78f252c6 (mode 644)
blob + /dev/null
--- src/org/snipsnap/xmlrpc/SnipSnapPing.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * This file is part of "SnipSnap Wiki/Weblog".
- *
- * Copyright (c) 2002 Stephan J. Schmidt, Matthias L. Jugel
- * All Rights Reserved.
- *
- * Please visit http://snipsnap.org/ for updates and contact.
- *
- * --LICENSE NOTICE--
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * --LICENSE NOTICE--
- */
-
-package org.snipsnap.xmlrpc;
-
-import org.snipsnap.util.Weblog;
-import org.snipsnap.util.WeblogQueue;
-
-import java.util.List;
-
-/**
- * Stores the last changed SnipSnap weblogs, received
- * bye XML-RPC weblog ping
- *
- * @author Stephan Schmidt
- * @version $Id$
- */
-
-public class SnipSnapPing {
-  private static SnipSnapPing instance;
-  private WeblogQueue changed;
-
-  public static synchronized SnipSnapPing getInstance() {
-    if (null == instance) {
-      instance = new SnipSnapPing();
-    }
-    return instance;
-  }
-
-  public SnipSnapPing() {
-    changed = new WeblogQueue(10);
-  }
-
-  public synchronized void addChangedWeblog(String name, String url) {
-    changed.add(new Weblog(name, url));
-  }
-
-  public List getChanged(int count) {
-    return changed.get(count);
-  }
-}
blob - b014bcf02203037868f83a3e531fa818d4a53d34
blob + 47519555010466ead598f0aab7dbc98ed2218548
--- src/org/snipsnap/xmlrpc/WeblogsPing.java
+++ src/org/snipsnap/xmlrpc/WeblogsPing.java
@@ -34,7 +34,7 @@ import org.snipsnap.xmlrpc.ping.PingHandler;
 import org.snipsnap.notification.Message;
 import org.snipsnap.notification.MessageService;
 import org.snipsnap.notification.Consumer;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.apache.xmlrpc.XmlRpc;
 
 import java.io.BufferedReader;
blob - 308ab0f140c53134f36480ff6bd891bde577485e
blob + 365136193e98b00fd758ba47637ad400c050bd9e
--- src/org/snipsnap/xmlrpc/WeblogsPingHandler.java
+++ src/org/snipsnap/xmlrpc/WeblogsPingHandler.java
@@ -27,6 +27,8 @@
 package org.snipsnap.xmlrpc;
 
 import org.radeox.util.logging.Logger;
+import snipsnap.api.xmlrpc.*;
+import snipsnap.api.xmlrpc.SnipSnapPing;
 
 
 /**
@@ -60,7 +62,7 @@ public class WeblogsPingHandler extends XmlRpcSupport 
    **/
   public String ping(String weblogName, String weblogUrl) {
     Logger.debug("XML-RPC call to ping() from " + weblogName);
-    SnipSnapPing.getInstance().addChangedWeblog(weblogName, weblogUrl);
+    snipsnap.api.xmlrpc.SnipSnapPing.getInstance().addChangedWeblog(weblogName, weblogUrl);
     return "";
   }
 }
blob - 5e1478213b6c470ea01516528577d15615c46058
blob + 81aeb1d2443d323e7ecb8e1313b0266ca620a849
--- src/snipsnap/api/app/Application.java
+++ src/snipsnap/api/app/Application.java
@@ -27,7 +27,7 @@ package snipsnap.api.app;
 import org.radeox.util.logging.Logger;
 import snipsnap.api.config.Configuration;
 import org.snipsnap.config.ConfigurationProxy;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.user.AuthenticationService;
 import snipsnap.api.user.User;
 import org.snipsnap.user.UserManagerFactory;
blob - 4dd31c39620336a11cf45748a9c62d3166ef5773
blob + 0884c39a3a69396fc6052d60c22bba5f1578a04a
--- src/snipsnap/api/label/Labels.java
+++ src/snipsnap/api/label/Labels.java
@@ -27,7 +27,7 @@ package snipsnap.api.label;
 
 import org.snipsnap.util.StringUtil;
 import snipsnap.api.snip.Snip;
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import org.snipsnap.snip.label.LabelManager;
 import snipsnap.api.app.Application;
 
@@ -130,7 +130,7 @@ public class Labels {
   }
 
   private Label createDefaultLabel(String name, String value) {
-    snipsnap.api.label.Label label = ((LabelManager) Components.getComponent(LabelManager.class)).getDefaultLabel();
+    snipsnap.api.label.Label label = ((LabelManager) snipsnap.api.container.Components.getComponent(LabelManager.class)).getDefaultLabel();
     label.setName(name);
     label.setValue(value);
     return label;
blob - cd2e969d7e0f8a569341b90112ce7ed2ae66801e
blob + 0c38e8d60d0cc341b216e4ef68ca47c9a3a64100
--- src/snipsnap/api/snip/SnipSpaceFactory.java
+++ src/snipsnap/api/snip/SnipSpaceFactory.java
@@ -25,7 +25,7 @@
 
 package snipsnap.api.snip;
 
-import org.snipsnap.container.Components;
+import snipsnap.api.container.Components;
 import snipsnap.api.snip.*;
 import snipsnap.api.snip.SnipSpace;
 
@@ -39,7 +39,7 @@ import snipsnap.api.snip.SnipSpace;
 
 public class SnipSpaceFactory {
   public static synchronized snipsnap.api.snip.SnipSpace getInstance() {
-    return (SnipSpace) Components.getComponent(SnipSpace.class);
+    return (SnipSpace) snipsnap.api.container.Components.getComponent(SnipSpace.class);
   }
 
   public static synchronized void removeInstance() {
blob - /dev/null
blob + 0c51b7ecc23c17bba0338424bfc3444e33e1b2f6 (mode 644)
--- /dev/null
+++ src/snipsnap/api/render/context/SnipRenderContext.java
@@ -0,0 +1,131 @@
+/*
+ * This file is part of "SnipSnap Wiki/Weblog".
+ *
+ * Copyright (c) 2002 Stephan J. Schmidt, Matthias L. Jugel
+ * All Rights Reserved.
+ *
+ * Please visit http://snipsnap.org/ for updates and contact.
+ *
+ * --LICENSE NOTICE--
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * --LICENSE NOTICE--
+ */
+
+package snipsnap.api.render.context;
+
+import org.radeox.api.engine.context.RenderContext;
+import org.radeox.engine.context.BaseRenderContext;
+import org.radeox.util.i18n.ResourceManager;
+import snipsnap.api.app.Application;
+import snipsnap.api.container.Components;
+import snipsnap.api.snip.Snip;
+import snipsnap.api.snip.SnipSpace;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.ResourceBundle;
+import java.util.Enumeration;
+
+/**
+ * SnipRenderContext implements RenderContext and is used to
+ * give special SnipSnap parameters to a SnipSnap aware
+ * Rendering Engine
+ *
+ * @author Stephan J. Schmidt
+ * @version $Id: SnipRenderContext.java 1816 2005-04-06 17:56:22Z stephan $
+ */
+
+public class SnipRenderContext extends BaseRenderContext {
+  public static final String LANGUAGE_BUNDLE = "SnipRenderContext.language_bundle";
+  public static final String HTTP_REQUEST = "SnipRenderContext.request";
+  public static final String HTTP_PARAMS = "SnipRenderContext.params";
+  public static final String USER = "SnipRenderContext.user";
+  public static final String SNIP = "SnipRenderContext.snip";
+  public static final String VIEWED = "SnipRenderContext.viewed_snip";
+  public static final String CONTAINER = "SnipRenderContext.container";
+
+  private Snip snip;
+  private SnipSpace space;
+  private Map attributes;
+
+  public SnipRenderContext(Snip snip, SnipSpace space) {
+    super();
+    this.space = space;
+    this.snip = snip;
+
+    HttpServletRequest request =
+      (HttpServletRequest) Application.get().getParameters().get("request");
+    Locale locale = snipsnap.api.app.Application.get().getConfiguration().getLocale();
+    if(null != request && null != request.getLocale()) {
+      ResourceManager.get().setLocale(request.getLocale(), request.getLocales());
+    } else {
+      ResourceManager.get().setLocale(locale, null);
+    }
+    set(SnipRenderContext.LANGUAGE_BUNDLE, ResourceManager.getBundle("i18n.messages"));
+    set(SnipRenderContext.LANGUAGE_LOCALE, ResourceManager.getLocale("i18n.messages"));
+  }
+
+  /**
+   * Gets the current snip for which the RenderEngine is called
+   *
+   * @return snip Snip for which the RenderEngine is called
+   */
+  public Snip getSnip() {
+    return this.snip;
+  }
+
+  public SnipSpace getSpace() {
+    return space;
+  }
+
+  public void setSpace(SnipSpace space) {
+    this.space = space;
+  }
+
+  private void initAttributes() {
+    attributes = new HashMap();
+    attributes.put(SNIP, snip);
+    attributes.put(USER, Application.get().getUser());
+    attributes.put(VIEWED, snipsnap.api.app.Application.get().getParameters().get("viewed"));
+    attributes.put(CONTAINER, Components.getContainer());
+    HttpServletRequest request = (HttpServletRequest)Application.get().getParameters().get("request");
+    attributes.put(HTTP_REQUEST, request);
+    attributes.put(HTTP_PARAMS, snipsnap.api.app.Application.get().getParameters());
+  }
+
+  public void setAttribute(Object key, Object value) {
+    if (null == attributes) {
+      initAttributes();
+    }
+    attributes.put(key, value);
+  }
+
+  public Object getAttribute(Object key) {
+    if (null == attributes) {
+      initAttributes();
+    }
+    return attributes.get(key);
+  }
+
+  public Map getAttributes() {
+    if (null == attributes) {
+      initAttributes();
+    }
+    return attributes;
+  }
+
+}