diff --git a/plugin/pom.xml b/plugin/pom.xml
index a26a7c51..f89c9f23 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -100,18 +100,6 @@
${fecru.version}
provided
-
- com.atlassian.fisheye
- fisheye-jar
- ${fecru.version}
- provided
-
-
- com.atlassian.fisheye
- atlassian-fisheye-dependencies
-
-
-
junit
junit
@@ -179,13 +167,13 @@
com.atlassian.plugins
atlassian-plugins-webresource
- ${plugins.version}
+ ${webresource.plugins.version}
provided
com.atlassian.plugins
atlassian-plugins-webfragment
- ${plugins.version}
+ ${webfragment.plugins.version}
provided
@@ -311,6 +299,7 @@
com.atlassian.plugins.rest.common.security,
com.atlassian.sal.api.*;version="(2.4,3.0]",
org.apache.commons.lang.*;version="2.4",
+ com.atlassian.fisheye.spi.services,
com.atlassian.jira.config;resolution:=optional,
*;resolution:=optional
@@ -531,7 +520,9 @@
3.1-m2
2.6.1
firefox-3.6
- 2.13.4
+ 3.0.8
+ 3.0.2
+ 3.0.0
2.5.0
2.5.0
1.1.1
diff --git a/plugin/src/main/java/com/atlassian/labs/speakeasy/descriptor/external/webfragment/SpeakeasyWebItemModuleDescriptor.java b/plugin/src/main/java/com/atlassian/labs/speakeasy/descriptor/external/webfragment/SpeakeasyWebItemModuleDescriptor.java
index 47465b73..90bcc2b1 100644
--- a/plugin/src/main/java/com/atlassian/labs/speakeasy/descriptor/external/webfragment/SpeakeasyWebItemModuleDescriptor.java
+++ b/plugin/src/main/java/com/atlassian/labs/speakeasy/descriptor/external/webfragment/SpeakeasyWebItemModuleDescriptor.java
@@ -13,6 +13,8 @@
import com.atlassian.plugin.web.descriptors.WebItemModuleDescriptor;
import com.atlassian.plugin.webresource.UrlMode;
import com.atlassian.plugin.webresource.WebResourceManager;
+import com.atlassian.plugin.webresource.WebResourceUrlProvider;
+
import org.dom4j.Element;
import org.osgi.framework.BundleContext;
@@ -31,13 +33,20 @@ public class SpeakeasyWebItemModuleDescriptor extends AbstractModuleDescriptor trackedPlugins = new CopyOnWriteArraySet();
- public ConventionDescriptorGeneratorServiceFactory(final ModuleFactory moduleFactory, final BundleContext bundleContext, final PluginAccessor pluginAccessor, HostContainer hostContainer, DescriptorGeneratorManagerImpl descriptorGeneratorManager, JsonToElementParser jsonToElementParser, WebResourceManager webResourceManager, PluginEventManager pluginEventManager, final PluginController pluginController, JsonManifestHandler jsonManifestHandler)
+ public ConventionDescriptorGeneratorServiceFactory(
+ final ModuleFactory moduleFactory,
+ final BundleContext bundleContext,
+ final PluginAccessor pluginAccessor,
+ HostContainer hostContainer,
+ DescriptorGeneratorManagerImpl descriptorGeneratorManager,
+ JsonToElementParser jsonToElementParser,
+ WebResourceManager webResourceManager,
+ PluginEventManager pluginEventManager,
+ final PluginController pluginController,
+ JsonManifestHandler jsonManifestHandler,
+ WebResourceUrlProvider webResourceUrlProvider)
{
this.moduleFactory = moduleFactory;
this.bundleContext = bundleContext;
@@ -54,6 +68,7 @@ public ConventionDescriptorGeneratorServiceFactory(final ModuleFactory moduleFac
this.webResourceManager = webResourceManager;
this.pluginController = pluginController;
this.jsonManifestHandler = jsonManifestHandler;
+ this.webResourceUrlProvider = webResourceUrlProvider;
}
public Object getService(Bundle bundle, ServiceRegistration registration)
@@ -117,7 +132,7 @@ private void registerSpeakeasyWebItems(Bundle bundle, Plugin plugin)
{
for (Element element : jsonToElementParser.createWebItems(plugin.getResourceAsStream("ui/web-items.json")))
{
- SpeakeasyWebItemModuleDescriptor descriptor = new SpeakeasyWebItemModuleDescriptor(moduleFactory, bundleContext, descriptorGeneratorManager, webResourceManager);
+ SpeakeasyWebItemModuleDescriptor descriptor = new SpeakeasyWebItemModuleDescriptor(moduleFactory, bundleContext, descriptorGeneratorManager, webResourceManager, webResourceUrlProvider);
descriptor.init(plugin, element);
bundle.getBundleContext().registerService(ModuleDescriptor.class.getName(), descriptor, null);
}
diff --git a/plugin/src/main/java/com/atlassian/labs/speakeasy/model/Settings.java b/plugin/src/main/java/com/atlassian/labs/speakeasy/model/Settings.java
index 02d7fe34..49234271 100644
--- a/plugin/src/main/java/com/atlassian/labs/speakeasy/model/Settings.java
+++ b/plugin/src/main/java/com/atlassian/labs/speakeasy/model/Settings.java
@@ -1,14 +1,10 @@
package com.atlassian.labs.speakeasy.model;
-import com.cenqua.fisheye.config1.Admins;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
import javax.xml.bind.annotation.*;
-import java.util.Arrays;
import java.util.Set;
-import static com.google.common.collect.Iterables.concat;
import static com.google.common.collect.Sets.newHashSet;
/**
diff --git a/plugin/src/main/java/com/atlassian/labs/speakeasy/product/FecruProductAccessor.java b/plugin/src/main/java/com/atlassian/labs/speakeasy/product/FecruProductAccessor.java
index 1d97e9f9..932fbab3 100644
--- a/plugin/src/main/java/com/atlassian/labs/speakeasy/product/FecruProductAccessor.java
+++ b/plugin/src/main/java/com/atlassian/labs/speakeasy/product/FecruProductAccessor.java
@@ -1,11 +1,12 @@
package com.atlassian.labs.speakeasy.product;
-import com.atlassian.fecru.user.User;
import com.atlassian.fisheye.spi.data.MailMessageData;
import com.atlassian.labs.speakeasy.util.PomProperties;
+import com.atlassian.sal.api.user.UserProfile;
import com.atlassian.templaterenderer.TemplateRenderer;
-import com.cenqua.fisheye.mail.Mailer;
-import com.cenqua.fisheye.user.UserManager;
+import com.atlassian.fisheye.spi.services.MailService;
+import com.atlassian.sal.api.user.UserManager;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,10 +21,10 @@ public class FecruProductAccessor implements ProductAccessor {
private final PomProperties pomProperties;
private final UserManager userManager;
private final TemplateRenderer templateRenderer;
- private final Mailer mailer;
+ private final MailService mailer;
public FecruProductAccessor(PomProperties pomProperties, TemplateRenderer templateRenderer, UserManager userManager,
- Mailer mailer) {
+ MailService mailer) {
this.pomProperties = pomProperties;
this.templateRenderer = templateRenderer;
@@ -36,13 +37,11 @@ public String getSdkName() {
return "fecru";
}
- public String getProfilePath()
- {
+ public String getProfilePath() {
return "/plugins/servlet/speakeasy/user";
}
- public String getTargetUsernameFromCondition(Map context)
- {
+ public String getTargetUsernameFromCondition(Map context) {
return null;
}
@@ -57,9 +56,8 @@ public String getDataVersion() {
public void sendEmail(EmailOptions options) {
String toName = options.getToName();
String toEmail = options.getToEmail();
- if (options.getToUsername() != null)
- {
- final User user = getUser(options.getToUsername());
+ if (options.getToUsername() != null) {
+ final UserProfile user = getUser(options.getToUsername());
if (user == null) {
return;
}
@@ -67,7 +65,7 @@ public void sendEmail(EmailOptions options) {
log.warn("No email found for username: " + options.getToUsername());
return;
}
- toName = user.getDisplayName();
+ toName = user.getFullName();
toEmail = user.getEmail();
}
@@ -79,8 +77,7 @@ public void sendEmail(EmailOptions options) {
message.setFromDisplayName(options.getFromName());
message.addRecipient(toEmail);
- if (options.getReplyToEmail() != null)
- {
+ if (options.getReplyToEmail() != null) {
// todo: api doesn't seem to support this?
}
@@ -93,19 +90,18 @@ public void sendEmail(EmailOptions options) {
}
}
- private String render(String templateName, Map context) throws IOException {
+ private String render(String templateName, Map context) throws IOException {
StringWriter writer = new StringWriter();
templateRenderer.render(templateName, context, writer);
return writer.toString();
}
- private User getUser(String username) {
- try {
- return userManager.getUser(username);
- } catch (Exception e) {
- log.warn("Could not find user by username: " + username, e);
- return null;
+ private UserProfile getUser(String username) {
+ UserProfile profile = userManager.getUserProfile(username);
+ if (profile == null) {
+ log.warn("Could not find user by username: " + username);
}
+ return profile;
}
}
diff --git a/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/AdminServlet.java b/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/AdminServlet.java
index 9e3b8718..0330d119 100644
--- a/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/AdminServlet.java
+++ b/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/AdminServlet.java
@@ -6,6 +6,7 @@
import com.atlassian.labs.speakeasy.model.Settings;
import com.atlassian.plugin.webresource.UrlMode;
import com.atlassian.plugin.webresource.WebResourceManager;
+import com.atlassian.plugin.webresource.WebResourceUrlProvider;
import com.atlassian.plugins.rest.common.json.JaxbJsonMarshaller;
import com.atlassian.sal.api.user.UserManager;
import com.atlassian.templaterenderer.TemplateRenderer;
@@ -32,14 +33,22 @@ public class AdminServlet extends HttpServlet
private final UserManager userManager;
private final WebResourceManager webResourceManager;
private final JaxbJsonMarshaller jsonMarshaller;
+ private final WebResourceUrlProvider webResourceUrlProvider;
- public AdminServlet(SpeakeasyService speakeasyService, UserManager userManager, TemplateRenderer templateRenderer, WebResourceManager webResourceManager, JaxbJsonMarshaller jsonMarshaller)
+ public AdminServlet(
+ SpeakeasyService speakeasyService,
+ UserManager userManager,
+ TemplateRenderer templateRenderer,
+ WebResourceManager webResourceManager,
+ JaxbJsonMarshaller jsonMarshaller,
+ WebResourceUrlProvider webResourceUrlProvider)
{
this.speakeasyService = speakeasyService;
this.userManager = userManager;
this.templateRenderer = templateRenderer;
this.webResourceManager = webResourceManager;
this.jsonMarshaller = jsonMarshaller;
+ this.webResourceUrlProvider = webResourceUrlProvider;
}
@Override
@@ -62,7 +71,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se
render("templates/admin.vm", ImmutableMap.builder().
put("user", user).
put("contextPath", req.getContextPath()).
- put("staticResourcesPrefix", webResourceManager.getStaticResourcePrefix(UrlMode.RELATIVE)).
+ put("staticResourcesPrefix", webResourceUrlProvider.getStaticResourcePrefix(UrlMode.RELATIVE)).
put("settings", new JsRenderer(jsonMarshaller.marshal(settings))).
put("permissionsJson", new JsRenderer(jsonMarshaller.marshal(Permission.ALL))).
put("permissions", Permission.ALL).
diff --git a/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/CssVariableTransformer.java b/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/CssVariableTransformer.java
index 8b2e5187..7415f512 100644
--- a/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/CssVariableTransformer.java
+++ b/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/CssVariableTransformer.java
@@ -4,8 +4,8 @@
import com.atlassian.plugin.elements.ResourceLocation;
import com.atlassian.plugin.servlet.DownloadableResource;
import com.atlassian.plugin.webresource.UrlMode;
-import com.atlassian.plugin.webresource.WebResourceManager;
-import com.atlassian.plugin.webresource.transformer.AbstractStringTransformedDownloadableResource;
+import com.atlassian.plugin.webresource.WebResourceUrlProvider;
+import com.atlassian.plugin.webresource.transformer.CharSequenceDownloadableResource;
import com.atlassian.plugin.webresource.transformer.WebResourceTransformer;
import com.atlassian.sal.api.xsrf.XsrfTokenAccessor;
import com.atlassian.sal.api.xsrf.XsrfTokenValidator;
@@ -16,15 +16,18 @@
*/
public class CssVariableTransformer implements WebResourceTransformer
{
- private final WebResourceManager webResourceManager;
private final XsrfTokenAccessor xsrfTokenAccessor;
private final XsrfTokenValidator xsrfTokenValidator;
+ private final WebResourceUrlProvider webResourceUrlProvider;
- public CssVariableTransformer(WebResourceManager webResourceManager, XsrfTokenAccessor xsrfTokenAccessor, XsrfTokenValidator xsrfTokenValidator)
+ public CssVariableTransformer(
+ XsrfTokenAccessor xsrfTokenAccessor,
+ XsrfTokenValidator xsrfTokenValidator,
+ WebResourceUrlProvider webResourceUrlProvider)
{
- this.webResourceManager = webResourceManager;
this.xsrfTokenAccessor = xsrfTokenAccessor;
this.xsrfTokenValidator = xsrfTokenValidator;
+ this.webResourceUrlProvider = webResourceUrlProvider;
}
public DownloadableResource transform(Element configElement, ResourceLocation location, String filePath, DownloadableResource nextResource)
@@ -32,7 +35,7 @@ public DownloadableResource transform(Element configElement, ResourceLocation lo
return new CssVariableDownloadableResource(nextResource, configElement);
}
- private class CssVariableDownloadableResource extends AbstractStringTransformedDownloadableResource
+ private class CssVariableDownloadableResource extends CharSequenceDownloadableResource
{
private final Element configElement;
@@ -43,18 +46,19 @@ public CssVariableDownloadableResource(DownloadableResource originalResource, El
}
@Override
- protected String transform(String originalContent)
+ protected CharSequence transform(CharSequence originalSequence)
{
- String content = originalContent.replace("@staticResourcePrefix", webResourceManager.getStaticResourcePrefix(UrlMode.RELATIVE) + "/download/resources");
+ String originalContent = originalSequence.toString();
+ String content = originalContent.replace("@staticResourcePrefix", webResourceUrlProvider.getStaticResourcePrefix(UrlMode.RELATIVE) + "/download/resources");
String fullModuleKey = configElement.attributeValue("fullModuleKey");
if (fullModuleKey != null)
{
- content = content.replace("@modulePrefix", webResourceManager.getStaticResourcePrefix(UrlMode.RELATIVE) + "/download/resources/" + fullModuleKey);
+ content = content.replace("@modulePrefix", webResourceUrlProvider.getStaticResourcePrefix(UrlMode.RELATIVE) + "/download/resources/" + fullModuleKey);
}
String imagesModuleKey = configElement.attributeValue("imagesModuleKey");
if (imagesModuleKey != null)
{
- content = content.replace("@imagesPrefix", webResourceManager.getStaticResourcePrefix(UrlMode.RELATIVE) + "/download/resources/" + imagesModuleKey);
+ content = content.replace("@imagesPrefix", webResourceUrlProvider.getStaticResourcePrefix(UrlMode.RELATIVE) + "/download/resources/" + imagesModuleKey);
}
return content;
}
diff --git a/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/UserProfileRenderer.java b/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/UserProfileRenderer.java
index 6c64d556..f0942f49 100644
--- a/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/UserProfileRenderer.java
+++ b/plugin/src/main/java/com/atlassian/labs/speakeasy/ui/UserProfileRenderer.java
@@ -13,6 +13,7 @@
import com.atlassian.plugin.web.WebInterfaceManager;
import com.atlassian.plugin.webresource.UrlMode;
import com.atlassian.plugin.webresource.WebResourceManager;
+import com.atlassian.plugin.webresource.WebResourceUrlProvider;
import com.atlassian.sal.api.ApplicationProperties;
import com.atlassian.sal.api.user.UserManager;
import com.atlassian.sal.api.xsrf.XsrfTokenAccessor;
@@ -58,10 +59,25 @@ public class UserProfileRenderer
private final XsrfTokenAccessor xsrfTokenAccessor;
private final XsrfTokenValidator xsrfTokenValidator;
private final ApplinkPanelRenderer applinkPanelRenderer;
+ private final WebResourceUrlProvider webResourceUrlProvider;
private final FirefoxXpi firefoxXpi;
@Autowired
- public UserProfileRenderer(PluginAccessor pluginAccessor, TemplateRenderer templateRenderer, SpeakeasyService speakeasyService, UserManager userManager, WebResourceManager webResourceManager, ProductAccessor productAccessor, CommonJsModulesAccessor commonJsModulesAccessor, WebInterfaceManager webInterfaceManager, XsrfTokenAccessor xsrfTokenAccessor, XsrfTokenValidator xsrfTokenValidator, ApplicationProperties applicationProperties, FirefoxXpi firefoxXpi, ApplinkPanelRenderer applinkPanelRenderer)
+ public UserProfileRenderer(
+ PluginAccessor pluginAccessor,
+ TemplateRenderer templateRenderer,
+ SpeakeasyService speakeasyService,
+ UserManager userManager,
+ WebResourceManager webResourceManager,
+ ProductAccessor productAccessor,
+ CommonJsModulesAccessor commonJsModulesAccessor,
+ WebInterfaceManager webInterfaceManager,
+ XsrfTokenAccessor xsrfTokenAccessor,
+ XsrfTokenValidator xsrfTokenValidator,
+ ApplicationProperties applicationProperties,
+ FirefoxXpi firefoxXpi,
+ ApplinkPanelRenderer applinkPanelRenderer,
+ WebResourceUrlProvider webResourceUrlProvider)
{
this.templateRenderer = templateRenderer;
this.commonJsModulesAccessor = commonJsModulesAccessor;
@@ -71,6 +87,7 @@ public UserProfileRenderer(PluginAccessor pluginAccessor, TemplateRenderer templ
this.applicationProperties = applicationProperties;
this.firefoxXpi = firefoxXpi;
this.applinkPanelRenderer = applinkPanelRenderer;
+ this.webResourceUrlProvider = webResourceUrlProvider;
this.plugin = pluginAccessor.getPlugin("com.atlassian.labs.speakeasy-plugin");
this.speakeasyService = speakeasyService;
this.userManager = userManager;
@@ -106,7 +123,7 @@ public void render(HttpServletRequest req, HttpServletResponse resp, Writer outp
put("availablePlugins", filter(plugins.getPlugins(), new AvailablePluginsFilter())).
put("rowRenderer", new RowRenderer(req.getContextPath(), plugin)).
put("jsdocRenderer", new JsDocRenderer(plugin, commonJsModulesAccessor.getAllPublicCommonJsModules())).
- put("staticResourcesPrefix", webResourceManager.getStaticResourcePrefix(UrlMode.RELATIVE)).
+ put("staticResourcesPrefix", webResourceUrlProvider.getStaticResourcePrefix(UrlMode.RELATIVE)).
put("product", productAccessor.getSdkName()).
put("devmode", devMode).
put("canAuthor", speakeasyService.canAuthorExtensions(user)).
diff --git a/plugin/src/main/resources/atlassian-plugin.xml b/plugin/src/main/resources/atlassian-plugin.xml
index 0895c72f..49f2b04d 100644
--- a/plugin/src/main/resources/atlassian-plugin.xml
+++ b/plugin/src/main/resources/atlassian-plugin.xml
@@ -111,6 +111,7 @@
+
@@ -118,6 +119,7 @@
+
@@ -135,7 +137,6 @@
application="jira"/>
-