[BLOSSOM-55] DAMControl cannot be created using TabBuilder Created: 09/Dec/11  Updated: 07/Nov/14  Resolved: 07/Feb/14

Status: Closed
Project: Blossom
Component/s: None
Affects Version/s: 1.2.3
Fix Version/s: None

Type: Bug Priority: Neutral
Reporter: Tobias Mattsson Assignee: Tobias Mattsson
Resolution: Not an issue Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Template:
Acceptance criteria:
Empty
Task DoD:
[ ]* Doc/release notes changes? Comment present?
[ ]* Downstream builds green?
[ ]* Solution information and context easily available?
[ ]* Tests
[ ]* FixVersion filled and not yet released
[ ]  Architecture Decision Record (ADR)
Bug DoR:
[ ]* Steps to reproduce, expected, and actual results filled
[ ]* Affected version filled
Date of First Response:

 Description   

Reported on the user list. The control fails with a NullPointerException.

http://forum.magnolia-cms.com/forum/thread.html?threadId=58af16e8-6cf3-4a90-b88e-3e76ed1cd7f2



 Comments   
Comment by Tobias Mattsson [ 09/Dec/11 ]

The problem is that the control expects to have a name when its init() method is called which it isnt when created without a config node. The init() method calls loadHandlers() which adds sub controls as control name + sub control name ("imageDmsUUID"), as the name is null the sub control gets the name "DmsUUID". When it later looks for the sub-control it has a name set and tries to find "imageDmsUUID" which fails with an NPE.

There is a workaround where setName() is called before init.

    public static void addDamControl(TabBuilder tab, String name, String label, String description) {
        try {
            DialogDAM control = Classes.getClassFactory().newInstance(DialogDAM.class);
            control.setName(name);
            control.setLabel(label);
            control.setDescription(description);
            DialogCreationContext context = tab.getContext();
            control.init(context.getRequest(), context.getResponse(), context.getWebsiteNode(), null);
            control.setConfig("i18nBasename", "info.magnolia.module.templatingkit.messages");
            tab.getTab().addSub(control);
        } catch (RepositoryException e) {
            throw new RuntimeRepositoryException(e);
        }
    }
Comment by Jean-Charles Robert [ 05/Feb/14 ]

Hello,

I've managed to add the DAM control, but when I tried to save the dialog, I am getting this exception. (See the last post in the forum too http://forum.magnolia-cms.com/forum/thread.html?threadId=58af16e8-6cf3-4a90-b88e-3e76ed1cd7f2)
Is there a way with Blossom 2.0.x to make the DAM control available and use images as assets?

Here is the full stacktrace:

14-02-05 18:01:57 ERROR AUTHOR[btpool0-11]info.magnolia.cms.servlets.MVCServletHandlerImpl: can't call command: save
java.lang.UnsupportedOperationException: This operation is not supported on node datas of type BINARY
        at info.magnolia.cms.core.BinaryNodeData.setValue(BinaryNodeData.java:323)
        at info.magnolia.module.admininterface.SaveHandlerImpl.processWriteCommon(SaveHandlerImpl.java:694)
        at info.magnolia.module.admininterface.SaveHandlerImpl.processString(SaveHandlerImpl.java:666)
        at info.magnolia.module.admininterface.UUIDSaveHandler.processString(UUIDSaveHandler.java:86)
        at info.magnolia.module.admininterface.SaveHandlerImpl.processCommon(SaveHandlerImpl.java:619)
        at info.magnolia.module.admininterface.SaveHandlerImpl.processSaveInfo(SaveHandlerImpl.java:386)
        at info.magnolia.module.admininterface.SaveHandlerImpl.save(SaveHandlerImpl.java:234)
        at info.magnolia.module.admininterface.DialogMVCHandler.onSave(DialogMVCHandler.java:350)
        at info.magnolia.module.admininterface.DialogMVCHandler.save(DialogMVCHandler.java:232)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1254)
        at info.magnolia.cms.servlets.MVCServletHandlerImpl.execute(MVCServletHandlerImpl.java:121)
        at info.magnolia.cms.servlets.MVCServlet.doPost(MVCServlet.java:125)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:123)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:85)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:85)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:85)
        at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:67)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:70)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58)
        at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:66)
        at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:153)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:76)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:84)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:60)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:85)
        at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:86)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:93)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.module.templatingkit.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:106)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.module.extendedtemplatingkit.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:106)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:83)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:73)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:85)
        at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:93)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:52)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.UnicodeNormalizationFilter.doFilter(UnicodeNormalizationFilter.java:90)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:91)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.module.devicedetection.filter.DeviceDetectionFilter.doFilter(DeviceDetectionFilter.java:73)
        at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:61)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:102)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:131)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:83)
        at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:67)
        at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:91)
        at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:108)
        at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67)
        at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:108)
        at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:94)
        at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
        at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
        at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:211)
        at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
        at org.mortbay.jetty.Server.handle(Server.java:313)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
        at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
        at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
        at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

Configuration: Magnolia 4.5.11, Blossom 2.0.3

Comment by Tobias Mattsson [ 05/Feb/14 ]

Hi Jean-Charles.

I can't reproduce this problem. Using the snippet above in the sample with Magnolia 4.5.11 and DMS 1.6.5 it works for me.

Which version of DMS are you using?

I'm assuming you're uploading an image directly to the page, correct?

Does this happen already when adding the image or afterwards when editing?

Have you modified the configuration of the DAM handlers in STK? In config at /modules/standard-templating-kit/config/damSupport/handlers

Comment by Jean-Charles Robert [ 06/Feb/14 ]

Ok I could understand the problem.
It happened because I previously saved in the same node a file as Binary, and then when I changed the control as DAM, the Binary node was still there and it resulted this conflict and exception.
I have deleted the content in JCR-Browser and the DAM-Control works now like a charm.

So now I can only approve your workaround.
Thank you for your answer

Comment by Tobias Mattsson [ 07/Feb/14 ]

Nice to hear that!

Generated at Sun Feb 11 23:29:41 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.