[jira] [Updated] (ISIS-1081) Make it possible to lookup Guice beans in Isis domain services
[ https://issues.apache.org/jira/browse/ISIS-1081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1081: -- Fix Version/s: core-1.9.0 Make it possible to lookup Guice beans in Isis domain services -- Key: ISIS-1081 URL: https://issues.apache.org/jira/browse/ISIS-1081 Project: Isis Issue Type: Improvement Components: Core Affects Versions: core-1.8.0 Reporter: Martin Grigorov Assignee: Martin Grigorov Fix For: core-1.9.0 I have a use case where I need to send an email notification after creating a domain entity. I was confused that EmailService is a Guice bean only so I've created a bridge domain service that looks up beans from Guice injector. Now I see that I don't really need the bridge. I'll push it in a branch. If we find it useful then we could merge it later. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Resolved] (ISIS-1081) Make it possible to lookup Guice beans in Isis domain services
[ https://issues.apache.org/jira/browse/ISIS-1081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood resolved ISIS-1081. --- Resolution: Fixed Make it possible to lookup Guice beans in Isis domain services -- Key: ISIS-1081 URL: https://issues.apache.org/jira/browse/ISIS-1081 Project: Isis Issue Type: Improvement Components: Core Affects Versions: core-1.8.0 Reporter: Martin Grigorov Assignee: Martin Grigorov I have a use case where I need to send an email notification after creating a domain entity. I was confused that EmailService is a Guice bean only so I've created a bridge domain service that looks up beans from Guice injector. Now I see that I don't really need the bridge. I'll push it in a branch. If we find it useful then we could merge it later. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-181) A (low-level, technical) domain Service (in domain-libs) to allow domain object entities to perform XSLT transformations.
[ https://issues.apache.org/jira/browse/ISIS-181?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-181. Resolution: Not a Problem Fix Version/s: (was: GIT REPO only) Out of scope; can implement in isisaddons as and when there is a requirement. A (low-level, technical) domain Service (in domain-libs) to allow domain object entities to perform XSLT transformations. - Key: ISIS-181 URL: https://issues.apache.org/jira/browse/ISIS-181 Project: Isis Issue Type: New Feature Reporter: Dan Haywood Priority: Minor Labels: newbie Isis provides the ability to create XML snapshots of domain object graphs, eg: XmlSnapshot snapshot = new XmlSnapshot(customer); // where customer is a reference to an ObjectAdapter Element customerAsXml = snapshot.toXml(); // returns customer's fields, titles of simple references, number of items in collections snapshot.include(placeOfBirth); // navigates to another object represented by simple reference placeOfBirth snapshot.include(orders/product); // navigates to all Orders of Customer, and from them for their Products This service is to allow that XML snapshot to be converted into other formats (eg as might be used as an input to services that generate documents, eg ISIS-173, ISIS-177, ISIS-178) -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1046) Get rid of chatty Shiro messages about no CacheManager being set.
[ https://issues.apache.org/jira/browse/ISIS-1046?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1046: -- Component/s: (was: Core: Viewer: Wicket) Core Get rid of chatty Shiro messages about no CacheManager being set. - Key: ISIS-1046 URL: https://issues.apache.org/jira/browse/ISIS-1046 Project: Isis Issue Type: New Feature Components: Core Affects Versions: viewer-wicket-1.7.0 Reporter: Dan Haywood Assignee: Martin Grigorov Priority: Minor Fix For: core-1.9.0 For example, configure the MemoryConstrainedCacheManager. In Wicket viewer, set up a way to invalidate the session (this is easy enough to do, see eg the code that calls the SessionLogger), so that the cache can also be clear. We also need some way to log out for RO viewer. However, perhaps that can be left to another day. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-491) Integrate JSR-349 validation.
[ https://issues.apache.org/jira/browse/ISIS-491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-491: - Assignee: (was: Oscar Bou) Integrate JSR-349 validation. - Key: ISIS-491 URL: https://issues.apache.org/jira/browse/ISIS-491 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.2.0 Reporter: Dan Haywood Fix For: core-1.9.0 Original Estimate: 72h Remaining Estimate: 72h as per http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/ The reference implementation (Hibernate Validator) is Apache licensed [1]. ~~~ Implementation: should not be too difficult; mostly a matter of writing some FacetFactories. It may not make sense to use every feature of JSR-349... * constructor parameters * constraint groups 1. In Isis bootstrapping, get hold and cache the Validator. (This is thread-safe, so could perhaps be global; maybe as a new top-level component cf AuthorizationManager etc). {code} ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); validator = factory.getValidator(); {code} and also {code} executableValidator = validator.forExecutables(); {code} Validating a property change can be done using: {code} SetConstraintViolationCar constraintViolations = validator.validateValue( Car.class, manufacturer, null ); assertEquals( 1, constraintViolations.size() ); assertEquals( may not be null, constraintViolations.iterator().next().getMessage() ); {code} (nb: using validator.validateProperty(...) would mean that the value has been applied already). eg this would be a facet that implements ValidatingInteractionAdvisor and acts on a ValidityContext of type PropertyModifyContext. (eg subclass PropertyValidateFacetAbstract) 2. Validating a parameter of an action can be done using: {code} Car object = new Car( Morris ); Method method = Car.class.getMethod( drive, int.class ); Object[] parameterValues = { 80 }; SetConstraintViolationCar violations = executableValidator.validateParameters( object, method, parameterValues ); assertEquals( 1, violations.size() ); Class? extends Annotation constraintType = violations.iterator() .next() .getConstraintDescriptor() .getAnnotation() .annotationType(); assertEquals( Max.class, constraintType ); {code} This would be in a Facet that implements ValidatingInteractionAdvisor and acts on a ValidityContext of type ActionInvocationContext (eg subclass ActionValidationFacetAbstract) ~~~ There are also some new features that could be implemented: 3. validating the return value of an action: {code} Car object = new Car( Morris ); Method method = Car.class.getMethod( getPassengers ); Object returnValue = Collections.PassengeremptyList(); SetConstraintViolationCar violations = executableValidator.validateReturnValue( object, method, returnValue ); assertEquals( 1, violations.size() ); Class? extends Annotation constraintType = violations.iterator() .next() .getConstraintDescriptor() .getAnnotation() .annotationType(); assertEquals( Size.class, constraintType ); {code} This would need to be done after the action has been invoked; if the constraint failed, then an exception would be thrown causing the transaction to be aborted. This might require a new subclass of ValidityContext, eg ActionReturnValueContext. 4. cf ISIS-479, all dirtied objects should be validated prior to commit. a) we re-validate all properties (using the value of the property as the proposed value). This would be done using InteractionUtils, called from isAssociationValid with a ValidityContext of PropertyModifyContext. b) we validate the object, ie InteractionUtils, with all with a ValidityContext of ObjectValidityContext. We would then have a new facet, implementing ValidatingInteractionAdvisor and acting on an ObjectValidityContext (eg subclass ValidateObjectFacetAbstract); which should perform: {code} SetConstraintViolationCar constraintViolations = validator.validate( car ); {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-297) Support JSR-303 bean validation API
[ https://issues.apache.org/jira/browse/ISIS-297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-297: - Affects Version/s: (was: GIT REPO only) Support JSR-303 bean validation API --- Key: ISIS-297 URL: https://issues.apache.org/jira/browse/ISIS-297 Project: Isis Issue Type: Task Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-297) Support JSR-303 bean validation API
[ https://issues.apache.org/jira/browse/ISIS-297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-297: - Summary: Support JSR-303 bean validation API (was: Fix up the JSR-303 example metamodel facet.) Support JSR-303 bean validation API --- Key: ISIS-297 URL: https://issues.apache.org/jira/browse/ISIS-297 Project: Isis Issue Type: Task Affects Versions: GIT REPO only Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: GIT REPO only -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-297) Support JSR-303 bean validation API
[ https://issues.apache.org/jira/browse/ISIS-297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-297. Resolution: Won't Fix Instead see ISIS-491 Support JSR-303 bean validation API --- Key: ISIS-297 URL: https://issues.apache.org/jira/browse/ISIS-297 Project: Isis Issue Type: Task Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1046) Get rid of chatty Shiro messages about no CacheManager being set.
[ https://issues.apache.org/jira/browse/ISIS-1046?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1046: -- Assignee: (was: Martin Grigorov) Get rid of chatty Shiro messages about no CacheManager being set. - Key: ISIS-1046 URL: https://issues.apache.org/jira/browse/ISIS-1046 Project: Isis Issue Type: New Feature Components: Core Affects Versions: viewer-wicket-1.7.0 Reporter: Dan Haywood Priority: Minor Fix For: core-1.9.0 For example, configure the MemoryConstrainedCacheManager. In Wicket viewer, set up a way to invalidate the session (this is easy enough to do, see eg the code that calls the SessionLogger), so that the cache can also be clear. We also need some way to log out for RO viewer. However, perhaps that can be left to another day. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-177) Domain Service (in domain-libs) to allow domain object entities to allow communications to be created as RTFs, using a mail merge. Input data could be XML (or perhaps JSON)
[ https://issues.apache.org/jira/browse/ISIS-177?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-177. Resolution: Won't Fix Fix Version/s: (was: GIT REPO only) Should be a ticket against the isisaddons' isis-module-docx (if at all). Out of scope for Isis itself, at any rate. Domain Service (in domain-libs) to allow domain object entities to allow communications to be created as RTFs, using a mail merge. Input data could be XML (or perhaps JSON). -- Key: ISIS-177 URL: https://issues.apache.org/jira/browse/ISIS-177 Project: Isis Issue Type: New Feature Reporter: Dan Haywood Priority: Minor Labels: newbie Similar to ISIS-172, but merging using an RTF template and search-and-replace on the fields. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-297) Support JSR-303 bean validation API
[ https://issues.apache.org/jira/browse/ISIS-297?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-297: - Fix Version/s: (was: GIT REPO only) Support JSR-303 bean validation API --- Key: ISIS-297 URL: https://issues.apache.org/jira/browse/ISIS-297 Project: Isis Issue Type: Task Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-178) Domain Service (in domain-libs) to allow domain object entities to build ODF documents from a template doc, merging in against an XML (or perhaps JSON) input format.
[ https://issues.apache.org/jira/browse/ISIS-178?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-178. Resolution: Won't Fix If implemented, this would be in isisaddons. There is already isis-module-docx. Another option is to leverage http://github.com/opensagres/xdocreport Domain Service (in domain-libs) to allow domain object entities to build ODF documents from a template doc, merging in against an XML (or perhaps JSON) input format. - Key: ISIS-178 URL: https://issues.apache.org/jira/browse/ISIS-178 Project: Isis Issue Type: New Feature Reporter: Dan Haywood Priority: Minor Labels: newbie Fix For: GIT REPO only Similar to ISIS-177 or ISIS-172, but generating ODF (as supported by OpenOffice/LibreOffice, for example). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Resolved] (ISIS-1064) Allow DB schemas (or any other setup) to be performed as DN metamodel is built up for each class.
[ https://issues.apache.org/jira/browse/ISIS-1064?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood resolved ISIS-1064. --- Resolution: Fixed Allow DB schemas (or any other setup) to be performed as DN metamodel is built up for each class. - Key: ISIS-1064 URL: https://issues.apache.org/jira/browse/ISIS-1064 Project: Isis Issue Type: New Feature Components: Core: Objectstore: JDO Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Dan Haywood Fix For: core-1.9.0 To support modularization (eg of isisaddons), it'd be good practice to allow classes to be mapped to specific (DB) schemas, rather than the default public (HSQLDB/Postgres) or dbo (MSSQL) schema. This requires some mechanism to intercept the creation process and create the schema before hand. This enhancement is: - provide the ability to register a listener class (implementing org.datanucleus.metadata.MetaDataListener), so that this can be done on start-up - provide a default implementation that works out-of-the-box for (at least) HSQLDB, PostgreSQL and MS SQL Server. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Resolved] (ISIS-1068) Rationalize menuOrder for domain services that appear in UI
[ https://issues.apache.org/jira/browse/ISIS-1068?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood resolved ISIS-1068. --- Resolution: Fixed Rationalize menuOrder for domain services that appear in UI --- Key: ISIS-1068 URL: https://issues.apache.org/jira/browse/ISIS-1068 Project: Isis Issue Type: Improvement Components: Core Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Trivial Fix For: core-1.9.0 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-491) Integrate JSR-349 validation.
[ https://issues.apache.org/jira/browse/ISIS-491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-491: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Integrate JSR-349 validation. - Key: ISIS-491 URL: https://issues.apache.org/jira/browse/ISIS-491 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.2.0 Reporter: Dan Haywood Fix For: core-1.10.0 Original Estimate: 72h Remaining Estimate: 72h as per http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/ The reference implementation (Hibernate Validator) is Apache licensed [1]. ~~~ Implementation: should not be too difficult; mostly a matter of writing some FacetFactories. It may not make sense to use every feature of JSR-349... * constructor parameters * constraint groups 1. In Isis bootstrapping, get hold and cache the Validator. (This is thread-safe, so could perhaps be global; maybe as a new top-level component cf AuthorizationManager etc). {code} ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); validator = factory.getValidator(); {code} and also {code} executableValidator = validator.forExecutables(); {code} Validating a property change can be done using: {code} SetConstraintViolationCar constraintViolations = validator.validateValue( Car.class, manufacturer, null ); assertEquals( 1, constraintViolations.size() ); assertEquals( may not be null, constraintViolations.iterator().next().getMessage() ); {code} (nb: using validator.validateProperty(...) would mean that the value has been applied already). eg this would be a facet that implements ValidatingInteractionAdvisor and acts on a ValidityContext of type PropertyModifyContext. (eg subclass PropertyValidateFacetAbstract) 2. Validating a parameter of an action can be done using: {code} Car object = new Car( Morris ); Method method = Car.class.getMethod( drive, int.class ); Object[] parameterValues = { 80 }; SetConstraintViolationCar violations = executableValidator.validateParameters( object, method, parameterValues ); assertEquals( 1, violations.size() ); Class? extends Annotation constraintType = violations.iterator() .next() .getConstraintDescriptor() .getAnnotation() .annotationType(); assertEquals( Max.class, constraintType ); {code} This would be in a Facet that implements ValidatingInteractionAdvisor and acts on a ValidityContext of type ActionInvocationContext (eg subclass ActionValidationFacetAbstract) ~~~ There are also some new features that could be implemented: 3. validating the return value of an action: {code} Car object = new Car( Morris ); Method method = Car.class.getMethod( getPassengers ); Object returnValue = Collections.PassengeremptyList(); SetConstraintViolationCar violations = executableValidator.validateReturnValue( object, method, returnValue ); assertEquals( 1, violations.size() ); Class? extends Annotation constraintType = violations.iterator() .next() .getConstraintDescriptor() .getAnnotation() .annotationType(); assertEquals( Size.class, constraintType ); {code} This would need to be done after the action has been invoked; if the constraint failed, then an exception would be thrown causing the transaction to be aborted. This might require a new subclass of ValidityContext, eg ActionReturnValueContext. 4. cf ISIS-479, all dirtied objects should be validated prior to commit. a) we re-validate all properties (using the value of the property as the proposed value). This would be done using InteractionUtils, called from isAssociationValid with a ValidityContext of PropertyModifyContext. b) we validate the object, ie InteractionUtils, with all with a ValidityContext of ObjectValidityContext. We would then have a new facet, implementing ValidatingInteractionAdvisor and acting on an ObjectValidityContext (eg subclass ValidateObjectFacetAbstract); which should perform: {code} SetConstraintViolationCar constraintViolations = validator.validate( car ); {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-174) Domain Service (in domain-libs) to allow domain object entities to add barcodes to PDF representations.
[ https://issues.apache.org/jira/browse/ISIS-174?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-174. Resolution: Later Fix Version/s: (was: GIT REPO only) Out of scope; can implement in isisaddons as and when there is a requirement. Domain Service (in domain-libs) to allow domain object entities to add barcodes to PDF representations. --- Key: ISIS-174 URL: https://issues.apache.org/jira/browse/ISIS-174 Project: Isis Issue Type: New Feature Reporter: Dan Haywood Priority: Minor Labels: newbie Provide a standalone implementation of a service that allows barcodes to be added to PDFs. Background: Some organizations use barcodes (or qcodes) to automate the processing of forms that have been sent out to a customer to be completed. The domain object could previously have obtained a PDF representation of itself using, eg the service described in ISIS-173. The interface for such a service could be something like: [Hidden] public interface BarcodeService { byte[] addBarcode(byte[] pdf, String data, BarcodeFormat format); } where BarcodeType might be an enum to indicate which barcode encoding type to use (there are various that could be supported). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-974) Provide the ability to associate font-awesome icons with properties
[ https://issues.apache.org/jira/browse/ISIS-974?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-974: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Provide the ability to associate font-awesome icons with properties --- Key: ISIS-974 URL: https://issues.apache.org/jira/browse/ISIS-974 Project: Isis Issue Type: Improvement Components: Core, Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0, core-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 ie as per http://fortawesome.github.io/Font-Awesome/examples/#bootstrap using: @PropertyLayout( cssClassFa=fa fa-fw fa-envelope-o ) public String getEmailAddress() { ... } etc. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-674) Allow action parameters to be defaulted based on the (change of) value of other parameters.
[ https://issues.apache.org/jira/browse/ISIS-674?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-674: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Allow action parameters to be defaulted based on the (change of) value of other parameters. --- Key: ISIS-674 URL: https://issues.apache.org/jira/browse/ISIS-674 Project: Isis Issue Type: New Feature Components: Core, Core: Viewer: Wicket Affects Versions: viewer-wicket-1.3.1, core-1.3.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 For example: public void foo( Charge charge, BigDecimal amount, String description) { } public String default2Foo(Charge charge, BigDecimal amount) { return charge != null amount != null? amount + charge.getDescription() : null; } Here, the value of the 'description' parameter is defaulted from that of both the preceding 'charge' and 'amount' parameters. Changing either should cause the default value for the 'description' to be recomputed. This is analogous to the way that choices are recomputed for category/subcategory, see ActionParametersFormPanel: @Override public void onUpdate(AjaxRequestTarget target, ScalarModelProvider provider) { final ActionModel actionModel = getActionModel(); final ObjectAdapter[] pendingArguments = actionModel.getArgumentsAsArray(); try { final ObjectAction action = actionModel.getActionMemento().getAction(); final int numParams = action.getParameterCount(); for (int i = 0; i numParams; i++) { final ScalarPanelAbstract paramPanel = paramPanels.get(i); if(paramPanel != null) { // this could throw a ConcurrencyException as we may have to reload the // object adapter of the action in order to compute the choices // (and that object adapter might have changed) if(paramPanel.updateChoices(pendingArguments)) { THIS LOOKS SIMILAR TO WHAT NEEDS TO BE DONE... target.add(paramPanel); } } } } catch(ConcurrencyException ex) { -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-471) Pinnable (for session) bookmarks
[ https://issues.apache.org/jira/browse/ISIS-471?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-471: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Pinnable (for session) bookmarks Key: ISIS-471 URL: https://issues.apache.org/jira/browse/ISIS-471 Project: Isis Issue Type: New Feature Components: Core, Core: Viewer: Wicket Affects Versions: viewer-wicket-1.2.0 Reporter: David Tildesley Assignee: Martin Grigorov Priority: Minor Fix For: core-1.10.0 Ability to pin a bookmark for the duration of the user session or until the user clears the bookmark. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-993) Show different object members on multiple tabs
[ https://issues.apache.org/jira/browse/ISIS-993?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-993: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Show different object members on multiple tabs -- Key: ISIS-993 URL: https://issues.apache.org/jira/browse/ISIS-993 Project: Isis Issue Type: New Feature Components: Core, Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Fix For: core-1.10.0 as per [1] mailing list thread. The example in the mailng list splits up the object's properties/collections (contributed or otherwise) into two different sets of tabs... but as a first pass I think a single row of tabs ought to suffice. We also need to be mindful that we may want to use tabs as a metaphor for multiple opened objects (as a replacement for bookmarks), so this is another reason for a single row of tabs. To support this would require extensions to @DomainObjectLayout or equivalent xxx.layout.json file. [1] http://markmail.org/message/merftvqoiy6ht3kq -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-844) Support custom annotations as higher-level semantics (a la BeanVal)
[ https://issues.apache.org/jira/browse/ISIS-844?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-844: - Fix Version/s: (was: core-1.10.0) core-1.9.0 Support custom annotations as higher-level semantics (a la BeanVal) --- Key: ISIS-844 URL: https://issues.apache.org/jira/browse/ISIS-844 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.6.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.9.0 For example, a contributed collection requires: import org.apache.isis.applib.annotations.*; @ActionSemantics(Of.SAFE) @NotContributed(As.ASSOCIATION) @NotInServiceMenu @Render(Type.EAGERLY) public ListFoo getFoos() { ... } it would be nice to allow the user to simplify the programming model. For example: package com.mycompany.isis; import org.apache.isis.applib.annotations.*; @ActionSemantics(Of.SAFE) @NotContributed(As.ASSOCIATION) @NotInServiceMenu @Render(Type.EAGERLY) public @interface ContributedCollection {} and then: import com.mycompany.isis.*; @ContributedCollection public ListFoo getFoos() { ... } ~~~ Thus, Isis continues to define the base primitive semantics, but the end-programmer is free to introduce higher-level semantics/abstractions if they so wish. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1007) Provide support for are you sure idiom, eg using a @AreYouSure annotation on the action
[ https://issues.apache.org/jira/browse/ISIS-1007?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1007: -- Fix Version/s: (was: core-1.9.0) core-1.10.0 Provide support for are you sure idiom, eg using a @AreYouSure annotation on the action - Key: ISIS-1007 URL: https://issues.apache.org/jira/browse/ISIS-1007 Project: Isis Issue Type: New Feature Components: Core, Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0, core-1.7.0 Reporter: Dan Haywood Assignee: Martin Grigorov Priority: Minor Fix For: core-1.10.0 ... or (post ISIS-970 using @Action(areYouSure=true) (Instead of @AreYouSure, another name might be @Dangerous or @Action(dangerous=true)). To include the are you sure checkbox (or other equivalent UI mechanism), plus also the styling of the action's button, eg make it red and with a suitable icon. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1004) Infitinite recursion in updating() callback when call setter
[ https://issues.apache.org/jira/browse/ISIS-1004?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1004: -- Component/s: Core: Objectstore: JDO Infitinite recursion in updating() callback when call setter Key: ISIS-1004 URL: https://issues.apache.org/jira/browse/ISIS-1004 Project: Isis Issue Type: Bug Components: Core: Objectstore: JDO Affects Versions: core-1.7.0 Reporter: Dan Haywood Assignee: Oscar Bou Fix For: core-1.9.0 as per: http://isis.markmail.org/thread/6k7jh43xpzohb46k ~~~ could probably solve this by setting a thread-local in the updating callback facet (a wormhole). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1034) Support bulk actions that return Blobs and Clobs
[ https://issues.apache.org/jira/browse/ISIS-1034?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1034: -- Fix Version/s: (was: core-1.9.0) core-1.10.0 Support bulk actions that return Blobs and Clobs Key: ISIS-1034 URL: https://issues.apache.org/jira/browse/ISIS-1034 Project: Isis Issue Type: Improvement Components: Core, Core: Viewer: Wicket Affects Versions: core-1.7.0 Reporter: Dan Haywood Assignee: Martin Grigorov Priority: Minor Fix For: core-1.10.0 https://github.com/apache/isis/blob/432ec3f1ec1b71b11fd24e24e26fb6a8fd324648/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java#L392 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-842) Each opened object should show in a new tab.
[ https://issues.apache.org/jira/browse/ISIS-842?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-842: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Each opened object should show in a new tab. Key: ISIS-842 URL: https://issues.apache.org/jira/browse/ISIS-842 Project: Isis Issue Type: New Feature Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.5.0 Reporter: Dan Haywood Assignee: Martin Grigorov Priority: Minor Fix For: core-1.10.0 This may or may not be done as part of ISIS-537. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-909) BookmarksPagesPanel often cannot detect the current/active model
[ https://issues.apache.org/jira/browse/ISIS-909?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-909: - Fix Version/s: (was: core-1.9.0) core-1.10.0 BookmarksPagesPanel often cannot detect the current/active model Key: ISIS-909 URL: https://issues.apache.org/jira/browse/ISIS-909 Project: Isis Issue Type: Bug Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.6.0 Reporter: Martin Grigorov Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 There is a logic [1] at BookmarkedPagesPanel.java that tries to detect whether an item in the bookmarks sliding menu is the currently viewed/edited item and sets CSS class currentBookmark. Most of the time bookmarkedPagesModel.isCurrent(pageParameters) doesn't work. It uses Objects.equal(current, pageParameters) and often those have similar oid but additional parameters make the check failing. 1. https://github.com/apache/isis/blob/master/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/bookmarkedpages/BookmarkedPagesPanel.java#L167 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-538) Improve performance of rendering lists (in Wicket viewer)
[ https://issues.apache.org/jira/browse/ISIS-538?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-538: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Improve performance of rendering lists (in Wicket viewer) - Key: ISIS-538 URL: https://issues.apache.org/jira/browse/ISIS-538 Project: Isis Issue Type: Improvement Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.2.0 Reporter: Dan Haywood Assignee: Martin Grigorov Priority: Minor Fix For: core-1.10.0 rendering a Lease, showing LeaseUnit in table (they would be in view mode). Even so, we compute the choices etc, even though never used (see stack trace). In ScalarPanelAbstract#buildGui(), we have: private void buildGui() { // REVIEW: this is nasty, both write to the same entityLink field // even though only one is used componentIfCompact = addComponentForCompact(); componentIfRegular = addComponentForRegular(); Brands.findUniqueNames() line: 46 LeaseUnit.choicesBrandName() line: 278 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available Method.invoke(Object, Object...) line: not available MethodExtensions.invoke(Method, Object, Object[]) line: 50 MethodExtensions.invoke(Method, Object) line: 45 AdapterInvokeUtils.invoke(Method, ObjectAdapter) line: 44 PropertyChoicesFacetViaMethod.getChoices(ObjectAdapter, SpecificationLoader) line: 72 OneToOneAssociationImpl.getChoices(ObjectAdapter) line: 248 ScalarModel$Kind$1.getChoices(ScalarModel, ObjectAdapter[]) line: 163 ScalarModel.getChoices(ObjectAdapter[]) line: 584 ValueChoicesSelect2Panel.getChoiceMementos(ObjectAdapter[]) line: 93 ValueChoicesSelect2Panel.setChoices(ObjectAdapter[]) line: 194 ValueChoicesSelect2Panel.addComponentForRegular() line: 76 ValueChoicesSelect2Panel(ScalarPanelAbstract).buildGui() line: 178 ValueChoicesSelect2Panel(ScalarPanelAbstract).onBeforeRender() line: 147 ValueChoicesSelect2Panel(Component).internalBeforeRender() line: 923 ValueChoicesSelect2Panel(Component).beforeRender() line: 991 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-975) Allow the prototype facet to be associated with properties and collections, not just actions.
[ https://issues.apache.org/jira/browse/ISIS-975?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-975: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Allow the prototype facet to be associated with properties and collections, not just actions. - Key: ISIS-975 URL: https://issues.apache.org/jira/browse/ISIS-975 Project: Isis Issue Type: Improvement Components: Core, Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0, core-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 Currently we have the ability to make actions into a prototype, meaning that they are only shown in prototype mode (--type SERVER_PROTOTYPE or Wicket development mode) and hidden during production mode (--type SERVER, or Wicket deployment mode). Because of they way that they are implemented, contributed properties and contributed collections also inherit this prototyped-ness; they will also be hidden in prototype mode. However, there is no way to hide regular (non-contributed) properties or collections when not running in prototype mode. ~~~ Don't think that this is a particularly significant issue, but it is an area of asymmetry in our metamodel so should probably be cleaned up, ie by introducing the notion of prototype for properties or collections. This should be implemented as a new prototype attribute in @PropertyLayout and @CollectionLayout. The Wicket viewer will need to honour this when rendering the entity forms (EntityPropertiesForm component etc). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1005) Allow users to implement an optional service to perform pre-commit processing (ChangedObjectService)
[ https://issues.apache.org/jira/browse/ISIS-1005?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1005: -- Fix Version/s: (was: core-1.9.0) core-1.10.0 Allow users to implement an optional service to perform pre-commit processing (ChangedObjectService) -- Key: ISIS-1005 URL: https://issues.apache.org/jira/browse/ISIS-1005 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 For example, Oscar's app has this code everywhere: public void updating() { this.setDateUpdated(Clock.getTimeAsDateTime().toDate()); this.setUpdatedByUser(this.domainFactoryService.currentUserName()); } Instead, this could be done by passing all objects enlisted in the xactn (same stuff as used by audit service) to a new service. This should be done immediately prior to calling auditing (so that if additional objects get dirtied by the service, then they are audited also). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1053) Unable to render java.lang.Number in UI
[ https://issues.apache.org/jira/browse/ISIS-1053?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1053: -- Assignee: Martin Grigorov (was: Dan Haywood) Unable to render java.lang.Number in UI --- Key: ISIS-1053 URL: https://issues.apache.org/jira/browse/ISIS-1053 Project: Isis Issue Type: Bug Components: Core: Viewer: Wicket Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Martin Grigorov Priority: Minor Fix For: core-1.9.0 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-789) Upgrade to DN 4.0
[ https://issues.apache.org/jira/browse/ISIS-789?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-789: - Fix Version/s: (was: core-2.0.0) core-1.9.0 Upgrade to DN 4.0 - Key: ISIS-789 URL: https://issues.apache.org/jira/browse/ISIS-789 Project: Isis Issue Type: Improvement Components: Core: Objectstore: JDO Affects Versions: objectstore-jdo-1.4.1 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.9.0 NB: DN 4.0 only supports Java 7, so this is also dependent on our moving to Java 7 across board (see ISIS-568). NB: should also check ISIS-647 (fix for http://www.datanucleus.org/servlet/jira/browse/NUCCORE-1103). - will possibly want to enable to get better perf? NB: also know that there's a change to the way that polymorphism works, is mapped differently (in Estatio). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1058) Upgrade embedded Jetty to latest 8.x
[ https://issues.apache.org/jira/browse/ISIS-1058?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1058: -- Component/s: (was: Core: Viewer: Wicket) Core Upgrade embedded Jetty to latest 8.x Key: ISIS-1058 URL: https://issues.apache.org/jira/browse/ISIS-1058 Project: Isis Issue Type: Task Components: Core Affects Versions: core-1.8.0 Reporter: Martin Grigorov Assignee: Martin Grigorov Priority: Minor Fix For: core-1.9.0 Any objections to upgrade embedded Jetty from 6.x to 8.x ? -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-893) (Cosmetics): If attempt to invoke non-existent action, get nasty error message
[ https://issues.apache.org/jira/browse/ISIS-893?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-893: - Fix Version/s: (was: core-1.9.0) core-1.10.0 (Cosmetics): If attempt to invoke non-existent action, get nasty error message -- Key: ISIS-893 URL: https://issues.apache.org/jira/browse/ISIS-893 Project: Isis Issue Type: Improvement Components: Core, Core: Viewer: Wicket Affects Versions: viewer-wicket-1.6.0, core-1.6.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 see the actionId=fooBar diverted to error page with following stack trace: 15:59:41,112 [RequestCycleExtra577739874@qtp-1148559558-0 WARN ] Handling the following exception org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor 'public org.apache.isis.viewer.wicket.ui.pages.actionprompt.ActionPromptPage(org.apache.wicket.request.mapper.parameter.PageParameters)' and argument 'actionArgs=[abc], actionArgs=[Professional], actionArgs=[$nullArg$], actionArgs=[20140925], actionArgs=[$nullArg$], objectOid=[dom.todo.ToDoItems:1], actionOwningSpec=[dom.todo.ToDoItems], actionId=[fooBar(java.lang.String,dom.todo.ToDoItem$Category,dom.todo.ToDoItem$Subcategory,org.joda.time.LocalDate,java.math.BigDecimal)], actionType=[USER]'. An exception has been thrown during construction! at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:194) at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:99) at org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:137) at org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:268) at org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) at org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:100) at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:221) at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:175) at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) at org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter.doFilter(IsisLogOnExceptionFilter.java:52) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at
[jira] [Updated] (ISIS-996) Not possible to replace components in Wicket viewer (workaround is to use add)
[ https://issues.apache.org/jira/browse/ISIS-996?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-996: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Not possible to replace components in Wicket viewer (workaround is to use add) -- Key: ISIS-996 URL: https://issues.apache.org/jira/browse/ISIS-996 Project: Isis Issue Type: Bug Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 As per http://isis.markmail.org/thread/x3k2www3m2wfsgtv To recreate: - copy ReferencePanelFactory to ReferencePanelFactory2 in (subclass of) IsisWicketApplication, add: {code} @com.google.inject.Singleton public static class MyComponentFactoryRegistrar extends ComponentFactoryRegistrarDefault { @Override public void addComponentFactories(ComponentFactoryList componentFactories) { super.addComponentFactories(componentFactories); componentFactories.replace(new ReferencePanelFactory2()); } } {code} and {code} final Module overrides = new AbstractModule() { @Override protected void configure() { ... bind(ComponentFactoryRegistrar.class). to(MyComponentFactoryRegistrar.class); } }; {code} the issue is that replace ends up replacing all component factories of type ComponentType.SCALAR_NAME_AND_VALUE, whereas it should instead just replace the one for ReferencePanelFactory. The workaround is easy enough: call add (which puts new factory at beginning of list) rather than replace. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-984) Make it possible to use custom icons, not only FontAwesome ones
[ https://issues.apache.org/jira/browse/ISIS-984?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-984: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Make it possible to use custom icons, not only FontAwesome ones --- Key: ISIS-984 URL: https://issues.apache.org/jira/browse/ISIS-984 Project: Isis Issue Type: Improvement Components: Core: Viewer: Wicket Affects Versions: core-1.8.0 Reporter: Martin Grigorov Assignee: Martin Grigorov Priority: Minor Fix For: core-1.10.0 See discussion at: http://markmail.org/message/nhm7eflnrru2rvcr The idea is to replace ActionLayout#cssClassFa and ActionLayout#cssClassFaPosition with ActionLayout#icon. Icon will be an interface/abstract class. Isis will provide impl for FontAwesome. Each application will be able to provide its own impl for any icon type it needs/wants to use (e.g. http://icons8.com/, http://glyphsearch.com/, http://glyphsearch.com/, etc.). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-904) Support autoComplete with dependent choices.
[ https://issues.apache.org/jira/browse/ISIS-904?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-904: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Support autoComplete with dependent choices. Key: ISIS-904 URL: https://issues.apache.org/jira/browse/ISIS-904 Project: Isis Issue Type: Improvement Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.6.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 as per mailing list: http://markmail.org/message/k4cs6hfzb2jl7gsm -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-932) Use HTML5 history API so that the address URL reflects the object being viewed (including any sorting, view selection etc).
[ https://issues.apache.org/jira/browse/ISIS-932?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-932: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Use HTML5 history API so that the address URL reflects the object being viewed (including any sorting, view selection etc). --- Key: ISIS-932 URL: https://issues.apache.org/jira/browse/ISIS-932 Project: Isis Issue Type: New Feature Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0 Reporter: Dan Haywood Assignee: Martin Grigorov Priority: Minor Fix For: core-1.10.0 -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-1028) Create Event Bus Service based on Axon
[ https://issues.apache.org/jira/browse/ISIS-1028?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-1028. - Resolution: Later Fix Version/s: (was: core-1.9.0) out of scope; this is for isisaddons instead. Create Event Bus Service based on Axon -- Key: ISIS-1028 URL: https://issues.apache.org/jira/browse/ISIS-1028 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.8.0 Reporter: Oscar Bou Assignee: Oscar Bou Current Guava based implementation queues events, and that implies changes to the execution flow. Axon Event Bus implementations simply dispatches events as soon as are posted. That way, logic when dispatching events is always the same (immediate dispatching when posted), without depending on an Event being dispatched when no other Event is dispatching (so its Event Handlers would be invoked immediately) or when other Event is currently being dispatched (in which case Guava would queue it instead of immediately dispatching). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-186) A (low-level, technical) domain Service (in domain-libs) to allow domain object entities to be able to encrypt data
[ https://issues.apache.org/jira/browse/ISIS-186?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-186. Resolution: Not a Problem Fix Version/s: (was: GIT REPO only) Out of scope; can implement in isisaddons as and when there is a requirement. A (low-level, technical) domain Service (in domain-libs) to allow domain object entities to be able to encrypt data --- Key: ISIS-186 URL: https://issues.apache.org/jira/browse/ISIS-186 Project: Isis Issue Type: New Feature Reporter: Dan Haywood Priority: Minor Labels: newbie There could be various times that a domain service needs to hand off information to some other party in a secure fashion, so that it can either not be encrypted or can be known to have been tampered with. One possible approach is using HMAC (eg to make cookies tamper proof.) -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Resolved] (ISIS-1071) Provide new HasUsername interface in applib (analogous to HasTransactionId) so that various addon services can contribute to it.
[ https://issues.apache.org/jira/browse/ISIS-1071?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood resolved ISIS-1071. --- Resolution: Fixed Provide new HasUsername interface in applib (analogous to HasTransactionId) so that various addon services can contribute to it. Key: ISIS-1071 URL: https://issues.apache.org/jira/browse/ISIS-1071 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Trivial Fix For: core-1.9.0 For example, if the isisaddons sessionlogger's SessionLogEntry (trivially) implements the interface, then the isisaddons commands module can contribute by displaying the 10 most recent commands for that user. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-542) Restrict which entities a service action is contributed to (as either a contributed action or contributed assocation).
[ https://issues.apache.org/jira/browse/ISIS-542?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-542: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Restrict which entities a service action is contributed to (as either a contributed action or contributed assocation). -- Key: ISIS-542 URL: https://issues.apache.org/jira/browse/ISIS-542 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.2.0 Reporter: Dan Haywood Assignee: Dan Haywood Fix For: core-1.10.0 For example, an action void foo(A a, B b) { ... } will be contributed to both entities A and B. We might want to allow it to be contributed to one or the other. Suggestion is that @NotContributed annotation applies to action parameters (with current behaviour maintained for compatibility as the default for all parameters of the action): eg void foo( @NotContributed(As.Action) A, @NotContributed(As.Association) B) { ... } -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-179) Domain Service (in domain-libs) to allow domain object entities to transform RTFs to PDF
[ https://issues.apache.org/jira/browse/ISIS-179?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-179. Resolution: Later Fix Version/s: (was: GIT REPO only) Out of scope; can implement in isisaddons as and when there is a requirement. Domain Service (in domain-libs) to allow domain object entities to transform RTFs to PDF Key: ISIS-179 URL: https://issues.apache.org/jira/browse/ISIS-179 Project: Isis Issue Type: New Feature Reporter: Dan Haywood Priority: Minor Labels: newbie similar to the DOCX-PDF service (ISIS-173), but to convert an RTF (eg as generated by a domain service ISIS-177) rather than a DOCX -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-180) Domain Service (in domain-libs) to allow domain object entities to transform ODFs to PDF
[ https://issues.apache.org/jira/browse/ISIS-180?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-180. Resolution: Later Fix Version/s: (was: GIT REPO only) Out of scope; can implement in isisaddons as and when there is a requirement. Domain Service (in domain-libs) to allow domain object entities to transform ODFs to PDF Key: ISIS-180 URL: https://issues.apache.org/jira/browse/ISIS-180 Project: Isis Issue Type: New Feature Reporter: Dan Haywood Priority: Minor Labels: newbie similar to the DOCX-PDF service (ISIS-173), but to convert an ODF (eg as generated by a domain service ISIS-178) rather than a DOCX -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-190) A domain Service (in domain-libs) to allow domain object entities to create calendar events in iCal or google calendar etc.
[ https://issues.apache.org/jira/browse/ISIS-190?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-190. Resolution: Later Fix Version/s: (was: GIT REPO only) Out of scope; can implement in isisaddons as and when there is a requirement. A domain Service (in domain-libs) to allow domain object entities to create calendar events in iCal or google calendar etc. --- Key: ISIS-190 URL: https://issues.apache.org/jira/browse/ISIS-190 Project: Isis Issue Type: New Feature Affects Versions: 0.2.0-incubating Reporter: Dan Haywood Priority: Minor Labels: newbie -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-844) Support custom annotations as higher-level semantics (a la BeanVal)
[ https://issues.apache.org/jira/browse/ISIS-844?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-844: - Fix Version/s: (was: core-2.0.0) core-1.10.0 Support custom annotations as higher-level semantics (a la BeanVal) --- Key: ISIS-844 URL: https://issues.apache.org/jira/browse/ISIS-844 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.6.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.9.0 For example, a contributed collection requires: import org.apache.isis.applib.annotations.*; @ActionSemantics(Of.SAFE) @NotContributed(As.ASSOCIATION) @NotInServiceMenu @Render(Type.EAGERLY) public ListFoo getFoos() { ... } it would be nice to allow the user to simplify the programming model. For example: package com.mycompany.isis; import org.apache.isis.applib.annotations.*; @ActionSemantics(Of.SAFE) @NotContributed(As.ASSOCIATION) @NotInServiceMenu @Render(Type.EAGERLY) public @interface ContributedCollection {} and then: import com.mycompany.isis.*; @ContributedCollection public ListFoo getFoos() { ... } ~~~ Thus, Isis continues to define the base primitive semantics, but the end-programmer is free to introduce higher-level semantics/abstractions if they so wish. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Resolved] (ISIS-1079) FixtureScript#defaultParam should actually default the property on the fixture script...
[ https://issues.apache.org/jira/browse/ISIS-1079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood resolved ISIS-1079. --- Resolution: Fixed FixtureScript#defaultParam should actually default the property on the fixture script... Key: ISIS-1079 URL: https://issues.apache.org/jira/browse/ISIS-1079 Project: Isis Issue Type: Bug Components: Core Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.9.0 ... rather than merely returning the default value. In addition, should support isXxx() for booleans. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1051) Only call LayoutMetadataReaderFromJson on entities
[ https://issues.apache.org/jira/browse/ISIS-1051?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1051: -- Component/s: Core Only call LayoutMetadataReaderFromJson on entities -- Key: ISIS-1051 URL: https://issues.apache.org/jira/browse/ISIS-1051 Project: Isis Issue Type: Improvement Components: Core Affects Versions: core-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Fix For: core-1.9.0 Taken from a comment by Martin on ISIS-931: While debugging ISIS-911 I've noticed that org.apache.isis.core.metamodel.layoutmetadata.json.LayoutMetadataReaderFromJson#asProperties is expensive. It is called at start time and tries to load .layout.json file for every introspected method. This includes JRE classes, JDO classes, and many more. I think it should be called only for objects/entities. The expensiveness is that it tries to find a file in the classpath and if it is not found then it throws org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader.ReaderException. The stacktrace of this exception is ignored at org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder#readMetadataProperties so ReaderException could override java.lang.Throwable#fillInStackTrace() to return null and save some time. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1022) Refactor IsisConverterLocator so that the converters are facets.
[ https://issues.apache.org/jira/browse/ISIS-1022?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1022: -- Fix Version/s: (was: core-1.9.0) core-1.10.0 Refactor IsisConverterLocator so that the converters are facets. Key: ISIS-1022 URL: https://issues.apache.org/jira/browse/ISIS-1022 Project: Isis Issue Type: Improvement Components: Core, Core: Viewer: Wicket Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 In ISIS-1012 we introduced the IsisConverterLocator class that inspects the ObjectSpecification and returns a suitable Wicket IConverter implementation. The implementation of this is a big switch statement. A better design would be for the IConverter to be made available through a suitable facet, probably as an extension of the existing ValueFacet. This would require updating the appropriate facet factories for all appropriate values. Note that we don't want Isis to have a dependency on Wicket, and so Isis would need to define its own parallel (copy of) IConverter, and have the ValueFacet return this. Then, in IsisConverterLocator, it would simply be a matter of adapting the Isis' IConverter into a Wicket IConverter. The final implementation of IsisConverterLocator would be something like: {code} final ObjectSpecification objectSpecification = objectAdapter.getSpecification(); ValueFacet vf = objectSpecification.getFacet(ValueFacet.class) if(vf == null) { return null; } final org.apache.isis.core.metamodel.IConverter ic = vf.getConverter(); if (ic == null) { return null; } return new org.apache.wicket.util.convert.IConverter() { public Object convertToObject(String value, Locale locale) { return ic.convertToObject(value, locale); } public String convertToString(C value, Locale locale) { return ic.convertToString(value, locale); } }; {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-991) Enhance Wicket viewer so that non-disabled collections can be added to / removed from.
[ https://issues.apache.org/jira/browse/ISIS-991?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-991: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Enhance Wicket viewer so that non-disabled collections can be added to / removed from. -- Key: ISIS-991 URL: https://issues.apache.org/jira/browse/ISIS-991 Project: Isis Issue Type: New Feature Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 as per [1] (stuff pertaining to collections) if collection is not @Disabled, then should render buttons to allow add/remove. The remove implementation ought to list all current objects. The add implementation ought to support choicesAddToXxx() and autoCompleteAddToXxx(). [1] http://isis.markmail.org/thread/jdylmfxrzdryhrlq -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1066) Moving CustomRepresentationService to dom - There is no application attached to current thread main
[ https://issues.apache.org/jira/browse/ISIS-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1066: -- Component/s: Core: Viewer: RestfulObjects Moving CustomRepresentationService to dom - There is no application attached to current thread main --- Key: ISIS-1066 URL: https://issues.apache.org/jira/browse/ISIS-1066 Project: Isis Issue Type: Bug Components: Core: Viewer: RestfulObjects Affects Versions: core-1.8.0 Reporter: Timothy Simecsek Assignee: Dan Haywood Fix For: core-1.9.0 Attachments: patch.txt Hi, We are using something similar to CustomRepresentationService of todoapp, we use it to get a simple JSON representation. Our CustomRepresentationService is annotated as DomainService, its package is registered in isis.properties (isis.services.ServicesInstallerFromAnnotation.packagePrefix but not in isis.services!) and it is located in the dom module. With apache isis 1.7 it was working, now we migrated to isis 1.8 and now this causes an error during maven install: WicketRuntimeException: There is no application attached to current thread main {noformat} 16:05:09,146 [IsisTransaction main INFO ] abort transaction IsisTransaction@2a49af03[state=MUST_ABORT,commands=0] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 10.018 sec FAILURE! - in ase.integration.test.ESIntegTest ase.integration.test.ESIntegTest Time elapsed: 10.018 sec ERROR! java.lang.RuntimeException: org.apache.isis.core.runtime.system.transaction.IsisTransactionManagerException: org.apache.wicket.WicketRuntimeException: There is no application attached to current thread main at org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:350) at ase.integration.AddressSearchEngineSystemInitializer.initIsft(AddressSearchEngineSystemInitializer.java:46) at ase.integration.AbstractAseIntegTest.initClass(AbstractAseIntegTest.java:13) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) {noformat} When I run the application on tomcat everything seems to work, the UI is available and I can access the CustomRepresentationService through Rest API. I did the described changes on the todoapp for isis 1.8 and I'm getting same result (I attached my changes with patch.txt). I moved the CustomRepresentationService to dom module because I need an possibility to unit test the generated JSON strings. Please fix that issue or assist me in creating a workaround. Thanks, Timothy -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Resolved] (ISIS-1065) Auditing of editing of properties only audits one of the properties changed (the last one)
[ https://issues.apache.org/jira/browse/ISIS-1065?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood resolved ISIS-1065. --- Resolution: Fixed Auditing of editing of properties only audits one of the properties changed (the last one) -- Key: ISIS-1065 URL: https://issues.apache.org/jira/browse/ISIS-1065 Project: Isis Issue Type: Bug Components: Core Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Critical Fix For: core-1.9.0 The reason being that the JDO preDirty callback (from which IsisTransaction#enlistUpdating is called) is called multiple times for each dirtied property. The fix is to add a guard to only add to the pre values if the pre value has not already been captured. -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Resolved] (ISIS-1069) DomainChangeJdoAbstract's open action incorrectly annotated as being a bulk action.
[ https://issues.apache.org/jira/browse/ISIS-1069?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood resolved ISIS-1069. --- Resolution: Fixed DomainChangeJdoAbstract's open action incorrectly annotated as being a bulk action. --- Key: ISIS-1069 URL: https://issues.apache.org/jira/browse/ISIS-1069 Project: Isis Issue Type: Bug Components: Core Affects Versions: core-1.8.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Trivial Fix For: core-1.9.0 This the base class for AuditEntry, CommandJdo, PublishedEvent (in isisaddons). -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-1066) Moving CustomRepresentationService to dom - There is no application attached to current thread main
[ https://issues.apache.org/jira/browse/ISIS-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-1066: -- Fix Version/s: core-1.9.0 Moving CustomRepresentationService to dom - There is no application attached to current thread main --- Key: ISIS-1066 URL: https://issues.apache.org/jira/browse/ISIS-1066 Project: Isis Issue Type: Bug Affects Versions: core-1.8.0 Reporter: Timothy Simecsek Assignee: Dan Haywood Fix For: core-1.9.0 Attachments: patch.txt Hi, We are using something similar to CustomRepresentationService of todoapp, we use it to get a simple JSON representation. Our CustomRepresentationService is annotated as DomainService, its package is registered in isis.properties (isis.services.ServicesInstallerFromAnnotation.packagePrefix but not in isis.services!) and it is located in the dom module. With apache isis 1.7 it was working, now we migrated to isis 1.8 and now this causes an error during maven install: WicketRuntimeException: There is no application attached to current thread main {noformat} 16:05:09,146 [IsisTransaction main INFO ] abort transaction IsisTransaction@2a49af03[state=MUST_ABORT,commands=0] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 10.018 sec FAILURE! - in ase.integration.test.ESIntegTest ase.integration.test.ESIntegTest Time elapsed: 10.018 sec ERROR! java.lang.RuntimeException: org.apache.isis.core.runtime.system.transaction.IsisTransactionManagerException: org.apache.wicket.WicketRuntimeException: There is no application attached to current thread main at org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:350) at ase.integration.AddressSearchEngineSystemInitializer.initIsft(AddressSearchEngineSystemInitializer.java:46) at ase.integration.AbstractAseIntegTest.initClass(AbstractAseIntegTest.java:13) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) {noformat} When I run the application on tomcat everything seems to work, the UI is available and I can access the CustomRepresentationService through Rest API. I did the described changes on the todoapp for isis 1.8 and I'm getting same result (I attached my changes with patch.txt). I moved the CustomRepresentationService to dom module because I need an possibility to unit test the generated JSON strings. Please fix that issue or assist me in creating a workaround. Thanks, Timothy -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Closed] (ISIS-454) New mechanism to disable members globally. However, any disablement rules applied on the member should overrule the policy defined on the type.
[ https://issues.apache.org/jira/browse/ISIS-454?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood closed ISIS-454. Resolution: Fixed Fix Version/s: (was: core-2.0.0) core-1.8.0 This was actually fixed as part of ISIS-970, released in v1.8.0 New mechanism to disable members globally. However, any disablement rules applied on the member should overrule the policy defined on the type. -- Key: ISIS-454 URL: https://issues.apache.org/jira/browse/ISIS-454 Project: Isis Issue Type: New Feature Components: Core Affects Versions: core-1.2.0 Reporter: Jeroen van der Wal Assignee: Dan Haywood Priority: Minor Fix For: core-1.8.0 If done using a method, this would be something like: public String disable(String memberName, MemberType memberType) { if(memberName.equals(notes)) { return null; } if(memberType == MemberType.PROPERTY) { WithStatus ws = (WithStatus)domainObject; return ws.isLocked()? cannot modify because locked: null; } return null; } If done using an annotation, this would be something like: @Disabled(policy=StateIsLockedPolicy.class) public abstract class MyDomainObjectT extends EstatioDomainObjectT, S extends Lockable extends MyDomainObjectT implements WithStatusT,S { public static StateIsLockedPolicy implements DisabledPolicy { public String disable(Object domainObject, String memberName, MemberType memberType) { if(memberName.equals(notes)) { return null; } if(memberType == MemberType.PROPERTY) { WithStatus ws = (WithStatus)domainObject; return ws.isLocked()? cannot modify because locked: null; } return null; } } ... } -- This message was sent by Atlassian JIRA (v6.3.4#6332)
[jira] [Updated] (ISIS-994) Actions that act as contributed properties and which return a URL should display that URL inline within an iframe.
[ https://issues.apache.org/jira/browse/ISIS-994?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Dan Haywood updated ISIS-994: - Fix Version/s: (was: core-1.9.0) core-1.10.0 Actions that act as contributed properties and which return a URL should display that URL inline within an iframe. -- Key: ISIS-994 URL: https://issues.apache.org/jira/browse/ISIS-994 Project: Isis Issue Type: New Feature Components: Core: Viewer: Wicket Affects Versions: viewer-wicket-1.7.0 Reporter: Dan Haywood Assignee: Dan Haywood Priority: Minor Fix For: core-1.10.0 As per [1] mailing list thread, in particular its screenshot [5], if a contributed property (= action) returns a URL, then it should be rendered within an iframe. It may not actually be necessary to require any other metadata. eg @Action(semantics=SemanticsOf.SAFE) @ActionLayout public URL editor(Asset asset) { ... } [1] http://markmail.org/message/merftvqoiy6ht3kq [5] http://postimg.org/image/k83i6b70x/ -- This message was sent by Atlassian JIRA (v6.3.4#6332)