Author: sdumitriu
Date: 2009-10-10 01:04:21 +0200 (Sat, 10 Oct 2009)
New Revision: 24354
Added:
platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/AbstractResourceSkinExtensionPlugin.java
Modified:
platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/CssResourceSkinExtensionPlugin.java
platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/JsResourceSkinExtensionPlugin.java
Log:
XSKINX-29: Refactor duplicate code
Refactor JsResourceSkinExtensionPlugin and
CssResourceSkinExtensionPlugin.
Patch from Caleb James DeLisle, applied with several changes.
Added: platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/
xwiki/plugin/skinx/AbstractResourceSkinExtensionPlugin.java
===================================================================
--- platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/
AbstractResourceSkinExtensionPlugin.java
(rev 0)
+++ platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/AbstractResourceSkinExtensionPlugin.java 2009-10-09
23:04:21 UTC (rev 24354)
@@ -0,0 +1,102 @@
+/*
+ * See the NOTICE file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package com.xpn.xwiki.plugin.skinx;
+
+import java.util.Collections;
+import java.util.Set;
+
+import com.xpn.xwiki.XWikiContext;
+import com.xpn.xwiki.XWikiException;
+
+/**
+ * Skin Extension plugin to use extension files from JAR resources.
+ * @version $Id$
+ */
+public abstract class AbstractResourceSkinExtensionPlugin extends
AbstractSkinExtensionPlugin
+{
+ /**
+ * XWiki plugin constructor.
+ *
+ * @param name The name of the plugin, which can be used for
retrieving the plugin API from velocity. Unused.
+ * @param className The canonical classname of the plugin.
Unused.
+ * @param context The current request context.
+ * @see
com
.xpn
.xwiki
.plugin
.XWikiDefaultPlugin
#XWikiDefaultPlugin(String,String,com.xpn.xwiki.XWikiContext)
+ */
+ public AbstractResourceSkinExtensionPlugin(String name, String
className, XWikiContext context)
+ {
+ super(name, className, context);
+ }
+
+ /**
+ * Get the action which the url should specify for calling
this resource.
+ *
+ * @return String Action name.
+ */
+ protected abstract String getAction();
+
+ /**
+ * Takes a URL string and outputs a link which will cause the
browser to load the url.
+ *
+ * @param url String representation of the url to load (eg: "/
this/url.js")
+ * @return HTML code linking to the pulled resource (eg:
<script type="text/javascript"
src="/this/url.js"></script>)
+ */
+ protected abstract String generateLink(String url);
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see AbstractSkinExtensionPlugin#getLink(String,
XWikiContext)
+ */
+ public String getLink(String resourceName, XWikiContext context)
+ {
+ // If the current user has access to Main.WebHome, we will
use this document in the URL
+ // to serve the resource. This way, the resource can be
efficiently cached, since it has a
+ // common URL for any page.
+ try {
+ String page = context.getWiki().getDefaultWeb(context)
+ "." + context.getWiki().getDefaultPage(context);
+ if (!
context.getWiki().getRightService().hasAccessLevel("view",
context.getUser(), page, context)) {
+ page = context.getDoc().getFullName();
+ }
+ return generateLink(context.getWiki().getURL(page,
getAction(),
+ "resource=" + resourceName +
parametersAsQueryString(resourceName, context), context));
+ } catch (XWikiException e) {
+ // Do nothing here; we can't access the wiki, so don't
link to this resource at all.
+ return "";
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * There is no support for always used resource-based
extensions yet.
+ * </p>
+ *
+ * @see
AbstractSkinExtensionPlugin#getAlwaysUsedExtensions(XWikiContext)
+ */
+ @Override
+ public Set<String> getAlwaysUsedExtensions(XWikiContext context)
+ {
+ // There is no mean to define an always used extension for
something else than a document extension now,
+ // so for resources-based extensions, we return an emtpy
set.
+ // An idea for the future could be to have an API for
plugins and components to register always used resources
+ // extensions.
+ return Collections.emptySet();
+ }
+}
Property changes on: platform/xwiki-plugins/trunk/skinx/src/main/
java/com/xpn/xwiki/plugin/skinx/
AbstractResourceSkinExtensionPlugin.java
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/
xwiki/plugin/skinx/CssResourceSkinExtensionPlugin.java
===================================================================
--- platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/CssResourceSkinExtensionPlugin.java 2009-10-09
18:28:50 UTC (rev 24353)
+++ platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/CssResourceSkinExtensionPlugin.java 2009-10-09
23:04:21 UTC (rev 24354)
@@ -20,11 +20,7 @@
*/
package com.xpn.xwiki.plugin.skinx;
-import java.util.Collections;
-import java.util.Set;
-
import com.xpn.xwiki.XWikiContext;
-import com.xpn.xwiki.XWikiException;
/**
* Skin Extension plugin to use css files from JAR resources.
@@ -32,7 +28,7 @@
* @version $Id$
* @since 1.3
*/
-public class CssResourceSkinExtensionPlugin extends
AbstractSkinExtensionPlugin
+public class CssResourceSkinExtensionPlugin extends
AbstractResourceSkinExtensionPlugin
{
/**
* XWiki plugin constructor.
@@ -45,7 +41,6 @@
public CssResourceSkinExtensionPlugin(String name, String
className, XWikiContext context)
{
super(name, className, context);
- init(context);
}
/**
@@ -61,47 +56,22 @@
/**
* {@inheritDoc}
- *
- * @see AbstractSkinExtensionPlugin#getLink(String,
XWikiContext)
+ *
+ * @see AbstractSkinExtensionPlugin#getAction()
*/
- @Override
- public String getLink(String documentName, XWikiContext context)
+ protected String getAction()
{
- String result = "";
- // If the current user has access to Main.WebHome, we will
use this document in the URL
- // to serve the css resource. This way, the resource can
be efficiently cached, since it has a
- // common URL for any page.
- try {
- String page = context.getWiki().getDefaultWeb(context)
+ "." + context.getWiki().getDefaultPage(context);
- if (!
context.getWiki().getRightService().hasAccessLevel("view",
context.getUser(), page, context)) {
- page = context.getDoc().getFullName();
- }
- String url =
- context.getWiki().getURL(page, "ssx",
- "resource=" + documentName +
parametersAsQueryString(documentName, context), context);
- result = "<link rel='stylesheet' type='text/css'
href='" + url + "'/>";
- } catch (XWikiException e) {
- // Do nothing here; we can't access the wiki, so don't
link to this resource at all.
- }
- return result;
+ return "ssx";
}
/**
* {@inheritDoc}
- * <p>
- * There is no support for always used resource-based
extensions yet.
- * </p>
- *
- * @see
AbstractSkinExtensionPlugin#getAlwaysUsedExtensions(XWikiContext)
+ *
+ * @see AbstractSkinExtensionPlugin#generateLink()
*/
- @Override
- public Set<String> getAlwaysUsedExtensions(XWikiContext context)
+ protected String generateLink(String url)
{
- // There is no mean to define an always used extension for
something else than a document extension now,
- // so for resources-based extensions, we return an emtpy
set.
- // An idea for the future could be to have an API for
plugins and components to register always used resources
- // extensions.
- return Collections.emptySet();
+ return "<link rel='stylesheet' type='text/css'
href='" +
url + "'/>\n";
}
/**
Modified: platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/
xwiki/plugin/skinx/JsResourceSkinExtensionPlugin.java
===================================================================
--- platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/JsResourceSkinExtensionPlugin.java 2009-10-09 18:28:50
UTC (rev 24353)
+++ platform/xwiki-plugins/trunk/skinx/src/main/java/com/xpn/xwiki/
plugin/skinx/JsResourceSkinExtensionPlugin.java 2009-10-09 23:04:21
UTC (rev 24354)
@@ -20,11 +20,7 @@
*/
package com.xpn.xwiki.plugin.skinx;
-import java.util.Collections;
-import java.util.Set;
-
import com.xpn.xwiki.XWikiContext;
-import com.xpn.xwiki.XWikiException;
/**
* Skin Extension plugin that allows pulling javascript files from
JAR resources.
@@ -32,7 +28,7 @@
* @version $Id$
* @since 1.3
*/
-public class JsResourceSkinExtensionPlugin extends
AbstractSkinExtensionPlugin
+public class JsResourceSkinExtensionPlugin extends
AbstractResourceSkinExtensionPlugin
{
/**
* XWiki plugin constructor.
@@ -44,57 +40,42 @@
*/
public JsResourceSkinExtensionPlugin(String name, String
className, XWikiContext context)
{
- super("jsrx", className, context);
- init(context);
+ super(name, className, context);
}
/**
* {@inheritDoc}
*
- * @see AbstractSkinExtensionPlugin#getLink(String,
XWikiContext)
+ * @see com.xpn.xwiki.plugin.XWikiDefaultPlugin#getName()
*/
@Override
- public String getLink(String documentName, XWikiContext context)
+ public String getName()
{
- String result = "";
- // If the current user has access to Main.WebHome, we will
use this document in the URL
- // to serve the js resource. This way, the resource can be
efficiently cached, since it has a
- // common URL for any page.
- try {
- String page = context.getWiki().getDefaultWeb(context)
+ "." + context.getWiki().getDefaultPage(context);
- if (!
context.getWiki().getRightService().hasAccessLevel("view",
context.getUser(), page, context)) {
- page = context.getDoc().getFullName();
- }
- String url =
- context.getWiki().getURL(page, "jsx",
- "resource=" + documentName +
parametersAsQueryString(documentName, context), context);
- result = "<script type=\"text/javascript\"
src=\"" +
url + "\"></script>";
- } catch (XWikiException e) {
- // Do nothing here; we can't access the wiki, so don't
link to this resource at all.
- }
- return result;
+ return "jsrx";
}
/**
* {@inheritDoc}
- * <p>
- * There is no support for always used resource-based
extensions yet.
- * </p>
- *
- * @see
AbstractSkinExtensionPlugin#getAlwaysUsedExtensions(XWikiContext)
+ *
+ * @see AbstractSkinExtensionPlugin#getAction()
*/
- @Override
- public Set<String> getAlwaysUsedExtensions(XWikiContext context)
+ protected String getAction()
{
- // There is no mean to define an always used extension for
something else than a document extension now,
- // so for resources-based extensions, we return an emtpy
set.
- // An idea for the future could be to have an API for
plugins and components to register always used resources
- // extensions.
- return Collections.emptySet();
+ return "jsx";
}
/**
* {@inheritDoc}
+ *
+ * @see AbstractSkinExtensionPlugin#generateLink()
+ */
+ protected String generateLink(String url)
+ {
+ return "<script type=\"text/javascript\" src=\"" +
url +
"\"></script>\n";
+ }
+
+ /**
+ * {@inheritDoc}
* <p>
* We must override this method since the plugin manager only
calls it for classes that provide their own
* implementation, and not an inherited one.
_______________________________________________
notifications mailing list
notifications(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/notifications
_______________________________________________
devs mailing list
devs(a)xwiki.org