Menu

#263 Validation for CustomField form

V3.0_rc3
closed
Marco
6
2012-09-18
2008-11-28
No

There's no validation on entering new custom field.

Discussion

  • Cuong Nguyen

    Cuong Nguyen - 2008-11-30

    Should we add a check on translation collection to insure that it has at least the language root text entered?

     
  • Roman Chepelyev

    Roman Chepelyev - 2008-11-30

    yes, probably root translation would be separated, to easy validation rule.

     
  • Marky Goldstein

    Marky Goldstein - 2008-12-02

    Marco, please look into this too.

     
  • Marco

    Marco - 2008-12-02

    Yes, language root should be validated when updating/creating translations, configurations (also statuses, severities, resolutions, field options)

     
  • Roman Chepelyev

    Roman Chepelyev - 2008-12-04

    I think the validation could be added when edit issue is commited.

     
  • Marco

    Marco - 2008-12-04

    Please do not forget create issue as well, I guess you can enter custom fields there as well.

     
  • Marco

    Marco - 2008-12-04

    But here we're not in edit issue usecase at all, it's the edit-configuration instead. Need validations concerning statuses, severities, resolutions, field options when defining custom field configuration, not entering custom field on issue (different task!)

     
  • Roman Chepelyev

    Roman Chepelyev - 2008-12-04

    patches

     
  • Roman Chepelyev

    Roman Chepelyev - 2008-12-04

    This issue is for validation of custom field form and not validations concerning statuses,
    severities, resolutions. Since the edit issue (issue) is not commited yet, I have supplied patch for this problem.

     
  • Marco

    Marco - 2008-12-05

    Thanks, patch will be integrated

     
  • Marco

    Marco - 2008-12-05

    applied and committed changes to SVN trunk. There seems to be some issues now when resetting configuration caches after updating the field. Validation is currently disabled for the edit customfield action.

    please updated from trunk and analyze/fix if possible.

    15:43:33,817 WARN org.itracker.core.resources.ITrackerResources -
    org.itracker.persistence.dao.NoSuchEntityException: No language item for itracker.customfield.3.label en
    at org.itracker.persistence.dao.LanguageDAOImpl.findByKeyAndLocale(LanguageDAOImpl.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
    at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:104)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
    at $Proxy539.findByKeyAndLocale(Unknown Source)
    at org.itracker.services.implementations.ConfigurationServiceImpl.getLanguageItemByKey(ConfigurationServiceImpl.java:851)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
    at $Proxy542.getLanguageItemByKey(Unknown Source)
    at org.itracker.core.resources.ITrackerResources.getString(ITrackerResources.java:298)
    at org.itracker.services.util.CustomFieldUtilities.getCustomFieldName(CustomFieldUtilities.java:120)
    at org.itracker.model.CustomField$NameComparator.compare(CustomField.java:476)
    at org.itracker.model.CustomField$NameComparator.compare(CustomField.java:460)
    at java.util.Arrays.mergeSort(Arrays.java:1284)
    at java.util.Arrays.sort(Arrays.java:1223)
    at java.util.Collections.sort(Collections.java:159)
    at org.itracker.services.implementations.ConfigurationServiceImpl.getCustomFields(ConfigurationServiceImpl.java:592)
    at org.itracker.services.implementations.ConfigurationServiceImpl.resetConfigurationCache(ConfigurationServiceImpl.java:451)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
    at $Proxy542.resetConfigurationCache(Unknown Source)
    at org.itracker.web.actions.admin.configuration.EditCustomFieldAction.execute(EditCustomFieldAction.java:128)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.itracker.web.filters.ExecuteAlwaysFilter.doFilter(ExecuteAlwaysFilter.java:201)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.itracker.web.filters.SetRequestCharacterEncoding.doFilter(SetRequestCharacterEncoding.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:613)

     
  • Roman Chepelyev

    Roman Chepelyev - 2008-12-07

    fixes

     
  • Roman Chepelyev

    Roman Chepelyev - 2008-12-07

    fixes added

     
  • Marco

    Marco - 2008-12-08

    Cannot use this fix patch1.txt.
    There is way too much things undocumented. We currently don't allow
    - additional (unused?) service interface extending
    - validation of required fields in form (defined in xml already)
    - customfields don't take localized values, never
    - code must be readable especially changed stuff must be described documented or no chance to get merged to trunk.

    According to the stacktrace, the problem is isolated in the org.itracker.model.CustomField$NameComparator.compare

     
  • Roman Chepelyev

    Roman Chepelyev - 2008-12-08

    The comparator have to be supplied with the correct locale information. Extending service interface is the way to provide that. Customfields don't take localized values? Describe please, I don't understand that.

     

Log in to post a comment.