You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/02/14 13:17:33 UTC
[isis] branch master updated: ISIS-2223: even more mitigations
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 9c58b2c ISIS-2223: even more mitigations
9c58b2c is described below
commit 9c58b2c368f256aada3f4a757fa47ce2349c58af
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Feb 14 14:17:24 2020 +0100
ISIS-2223: even more mitigations
---
.../core/commons/internal/primitives/_Ints.java | 6 ++-
.../components/actions/ActionParametersForm.java | 62 ++++++++++++----------
.../wicket/ui/components/layout/bs3/col/Col.java | 24 ++++-----
.../scalars/ScalarPanelTextFieldAbstract.java | 5 +-
.../datepicker/js/bootstrap-datetimepicker.js | 5 +-
.../ui/components/scalars/datepicker/js/moment.js | 2 +-
.../jdkmath/BigDecimalConverterWithScale.java | 2 +-
.../ui/components/tree/themes/bootstrap/theme.css | 4 +-
.../widgets/breadcrumbs/BreadcrumbPanel.java | 5 +-
9 files changed, 63 insertions(+), 52 deletions(-)
diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/internal/primitives/_Ints.java b/core/commons/src/main/java/org/apache/isis/core/commons/internal/primitives/_Ints.java
index 972667e..82a219f 100644
--- a/core/commons/src/main/java/org/apache/isis/core/commons/internal/primitives/_Ints.java
+++ b/core/commons/src/main/java/org/apache/isis/core/commons/internal/primitives/_Ints.java
@@ -5,6 +5,8 @@ import java.util.function.Consumer;
import javax.annotation.Nullable;
+import static org.apache.isis.core.commons.internal.base._With.requires;
+
import lombok.val;
import lombok.experimental.UtilityClass;
@@ -92,7 +94,9 @@ public class _Ints {
private static long parseIntElseLongMaxValue(
@Nullable final String s,
final int radix,
- @Nullable final Consumer<String> onFailure) {
+ final Consumer<String> onFailure) {
+
+ requires(onFailure, "onFailure");
if (s == null) {
onFailure.accept("null");
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index 3cd4bc7..7d9e683 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -19,7 +19,7 @@
package org.apache.isis.viewer.wicket.ui.components.actions;
import java.util.Collections;
-import java.util.List;
+import java.util.Optional;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
@@ -31,13 +31,11 @@ import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.core.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.viewer.wicket.model.hints.IsisActionCompletedEvent;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
import org.apache.isis.viewer.wicket.model.models.ActionArgumentModel;
import org.apache.isis.viewer.wicket.model.models.ActionModel;
import org.apache.isis.viewer.wicket.ui.ComponentType;
@@ -69,30 +67,35 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
@Override
protected void addParameters() {
- final ActionModel actionModel = getActionModel();
-
- final RepeatingView rv = new RepeatingView(ActionParametersFormPanel.ID_ACTION_PARAMETERS);
- add(rv);
+ val actionModel = getActionModel();
+
+ val repeatingView = new RepeatingView(ActionParametersFormPanel.ID_ACTION_PARAMETERS);
+ add(repeatingView);
paramPanels.clear();
- List<ActionParameterMemento> parameterMementos = actionModel.primeArgumentModels();
- for (final ActionParameterMemento apm : parameterMementos) {
- final WebMarkupContainer container = new WebMarkupContainer(rv.newChildId());
- rv.add(container);
+ val parameterMementos = actionModel.primeArgumentModels();
+ for (val actionParameterMemento : parameterMementos) {
+ val container = new WebMarkupContainer(repeatingView.newChildId());
+ repeatingView.add(container);
- final ActionArgumentModel actionArgumentModel = actionModel.getArgumentModel(apm);
+ val actionArgumentModel = actionModel.getArgumentModel(actionParameterMemento);
actionArgumentModel.setActionArgsHint(actionModel.getArgumentsAsImmutable());
- final ScalarPanelAbstract2 paramPanel = newParamPanel(container, actionArgumentModel);
- paramPanels.add(paramPanel);
-
- // TODO: maybe this logic should move instead to ScalarModel.Kind#whether{Hidden/Disabled}
- val targetAdapter = actionModel.getTargetAdapter();
- val realTargetAdapter = actionModel.getActionMemento().getAction(getSpecificationLoader())
- .realTargetAdapter(targetAdapter);
- final Consent consent = apm.getActionParameter(getSpecificationLoader())
- .isVisible(realTargetAdapter, Collections.emptyList(), InteractionInitiatedBy.USER);
- final boolean allowed = consent.isAllowed();
- paramPanel.setVisible(allowed);
+ newParamPanel(container, actionArgumentModel)
+ .ifPresent(paramPanel->{
+
+ paramPanels.add(paramPanel);
+
+ // TODO: maybe this logic should move instead to ScalarModel.Kind#whether{Hidden/Disabled}
+ val targetAdapter = actionModel.getTargetAdapter();
+ val realTargetAdapter = actionModel.getActionMemento().getAction(getSpecificationLoader())
+ .realTargetAdapter(targetAdapter);
+ val consent = actionParameterMemento.getActionParameter(getSpecificationLoader())
+ .isVisible(realTargetAdapter, Collections.emptyList(), InteractionInitiatedBy.USER);
+ val allowed = consent.isAllowed();
+ paramPanel.setVisible(allowed);
+
+ });
+
}
setOutputMarkupId(true);
@@ -100,7 +103,7 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
}
- private ScalarPanelAbstract2 newParamPanel(final WebMarkupContainer container, final ActionArgumentModel model) {
+ private Optional<ScalarPanelAbstract2> newParamPanel(final WebMarkupContainer container, final ActionArgumentModel model) {
final Component component = getComponentFactoryRegistry()
.addOrReplaceComponent(container, ComponentType.SCALAR_NAME_AND_VALUE, model);
@@ -123,11 +126,12 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
component instanceof ScalarPanelAbstract2
? (ScalarPanelAbstract2) component
: null;
- if (paramPanel != null) {
- paramPanel.setOutputMarkupId(true);
- paramPanel.notifyOnChange(this);
- }
- return paramPanel;
+
+ if (paramPanel != null) {
+ paramPanel.setOutputMarkupId(true);
+ paramPanel.notifyOnChange(this);
+ }
+ return Optional.of(paramPanel);
}
@Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
index 121943f..bc814d2 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/layout/bs3/col/Col.java
@@ -22,8 +22,6 @@ import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import javax.annotation.Nullable;
-
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -170,15 +168,13 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
// tab groups
final List<BS3TabGroup> tabGroupsWithNonEmptyTabs =
_NullSafe.stream(bs3Col.getTabGroups())
- .filter(new Predicate<BS3TabGroup>() {
- @Override public boolean test(@Nullable final BS3TabGroup bs3TabGroup) {
- final List<BS3Tab> bs3TabsWithRows = _NullSafe.stream(bs3TabGroup.getTabs())
- .filter(BS3Tab.Predicates.notEmpty())
- .collect(Collectors.toList());
- return !bs3TabsWithRows.isEmpty();
- }
- })
+ .filter(_NullSafe::isPresent)
+ .filter(bs3TabGroup ->
+ _NullSafe.stream(bs3TabGroup.getTabs())
+ .anyMatch(BS3Tab.Predicates.notEmpty())
+ )
.collect(Collectors.toList());
+
if(!tabGroupsWithNonEmptyTabs.isEmpty()) {
final RepeatingViewWithDynamicallyVisibleContent tabGroupRv =
new RepeatingViewWithDynamicallyVisibleContent(ID_TAB_GROUPS);
@@ -223,12 +219,10 @@ public class Col extends PanelAbstract<EntityModel> implements HasDynamicallyVis
// fieldsets
final List<FieldSet> fieldSetsWithProperties =
_NullSafe.stream(bs3Col.getFieldSets())
- .filter(new Predicate<FieldSet>() {
- @Override public boolean test(@Nullable final FieldSet fieldSet) {
- return !fieldSet.getProperties().isEmpty();
- }
- })
+ .filter(_NullSafe::isPresent)
+ .filter(fieldSet -> ! _NullSafe.isEmpty(fieldSet.getProperties()))
.collect(Collectors.toList());
+
if(!fieldSetsWithProperties.isEmpty()) {
final RepeatingViewWithDynamicallyVisibleContent fieldSetRv =
new RepeatingViewWithDynamicallyVisibleContent(ID_FIELD_SETS);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index eaa2c2f..bd188cc 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -38,6 +38,7 @@ import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;
import org.apache.isis.core.commons.internal.base._Casts;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
@@ -233,7 +234,9 @@ implements TextFieldValueModel.ScalarModelProvider {
}
private ObjectManager objectManager() {
- return IsisSession.current().get().getMetaModelContext()
+ return IsisSession.current()
+ .orElseThrow(()->_Exceptions.unrecoverable("no current IsisSession"))
+ .getMetaModelContext()
.getObjectManager();
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/bootstrap-datetimepicker.js b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/bootstrap-datetimepicker.js
index b912fa8..edd9c53 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/bootstrap-datetimepicker.js
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/bootstrap-datetimepicker.js
@@ -555,7 +555,10 @@
if (currentDate.day() === 0 || currentDate.day() === 6) {
clsName += ' weekend';
}
- row.append('<td data-action="selectDay" class="day' + clsName + '">' + currentDate.date() + '</td>');
+ if (row) {
+ row.append('<td data-action="selectDay" class="day' + clsName + '">' + currentDate.date() + '</td>');
+ }
+
currentDate.add(1, 'd');
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/moment.js b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/moment.js
index c635ec0..7a181c6 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/moment.js
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/datepicker/js/moment.js
@@ -4,7 +4,7 @@
//! license : MIT
//! momentjs.com
-(function (undefined) {
+(function () {
/************************************
Constants
************************************/
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java
index 597da54..6356739 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterWithScale.java
@@ -101,7 +101,7 @@ public class BigDecimalConverterWithScale extends BigDecimalConverter {
throw new ConversionException("No more than " + this.scale + " digits can be entered after the decimal place");
}
try {
- return bd != null ? bd.setScale(this.scale) : null;
+ return bd.setScale(this.scale);
} catch(Exception ex) {
// TODO: this is not actually shown; we see a generic error
// need to configure the ConversionException somehow
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/bootstrap/theme.css b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/bootstrap/theme.css
index bf4bffb..8f1a184 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/bootstrap/theme.css
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/themes/bootstrap/theme.css
@@ -47,7 +47,7 @@
}
.tree-theme-bootstrap .tree-junction-expanded:before {
- font-family: "Glyphicons Halflings";
+ font-family: "Glyphicons Halflings", sans-serif;
content: "\e114";
}
@@ -63,7 +63,7 @@
}
.tree-theme-bootstrap .tree-junction-collapsed:before {
- font-family: "Glyphicons Halflings";
+ font-family: "Glyphicons Halflings", sans-serif;
content: "\e080";
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index f9c0b3c..189090a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -33,6 +33,7 @@ import org.wicketstuff.select2.Select2Choice;
import org.wicketstuff.select2.Settings;
import org.apache.isis.core.commons.internal.collections._Lists;
+import org.apache.isis.core.commons.internal.exceptions._Exceptions;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.runtime.session.IsisSession;
@@ -136,7 +137,9 @@ public class BreadcrumbPanel extends PanelAbstract<IModel<Void>> {
}
private AuthenticationSession getAuthenticationSession() {
- return IsisSession.current().get().getAuthenticationSession();
+ return IsisSession.current()
+ .orElseThrow(()->_Exceptions.unrecoverable("no current IsisSession"))
+ .getAuthenticationSession();
}
});