From 57660fd1d18d897f7748e23971d0a0f3d3a2f070 Mon Sep 17 00:00:00 2001 From: Fabienne Ducroquet Date: Wed, 8 Feb 2017 14:52:17 +0100 Subject: [PATCH] =?UTF-8?q?Add=20@HideValue=20to=20hide=20a=20type?= =?UTF-8?q?=E2=80=99s=20and=20its=20instances=E2=80=99=20values=20in=20the?= =?UTF-8?q?=20reactor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/genericsystem/api/core/IGeneric.java | 21 +++++++ .../api/core/annotations/HideValue.java | 18 ++++++ .../carcolor/model/CarColor.java | 2 + .../carcolor/model/CarColor2.java | 2 + .../org/genericsystem/common/SystemCache.java | 4 ++ .../genericsystem/defaults/DefaultConfig.java | 9 +++ .../defaults/DefaultSystemProperties.java | 18 ++++++ .../genericsystem/reactor/example/App.java | 4 +- .../extendedcarcolor/model/CarColor.java | 2 + .../extendedcarcolor/model/CarColor2.java | 2 + .../extendedcarcolor/model/VehicleColor.java | 2 + .../extendedcarcolor/model/VehicleEnergy.java | 2 + .../model/VehicleVehicleEngine.java | 2 + .../context/ObservableValueSelector.java | 61 +++++++------------ .../reactor/gscomponents/InstanceEditor.java | 30 ++++----- .../reactor/gscomponents/InstancesTable.java | 18 +++--- .../instancebuilder/InstanceBuilder.java | 16 +++-- .../security/model/UserRole.java | 2 + 18 files changed, 138 insertions(+), 77 deletions(-) create mode 100644 gs-api/src/main/java/org/genericsystem/api/core/annotations/HideValue.java diff --git a/gs-api/src/main/java/org/genericsystem/api/core/IGeneric.java b/gs-api/src/main/java/org/genericsystem/api/core/IGeneric.java index 75e50e8c3..451261641 100644 --- a/gs-api/src/main/java/org/genericsystem/api/core/IGeneric.java +++ b/gs-api/src/main/java/org/genericsystem/api/core/IGeneric.java @@ -1287,6 +1287,27 @@ public static interface SystemProperty { boolean isHidden(); + /** + * Hide this vertex’s and its instances’ values in the reactor. + * + * @return this. + */ + T hideValue(); + + /** + * Show this vertex’s and its instances’ values in the reactor. + * + * @return this. + */ + T unhideValue(); + + /** + * Indicates whether this vertex’s and its instances’ values should be shown by the reactor. + * + * @return true if this vertex’s and its instances’ values should be shown, false otherwise. + */ + boolean isValueHidden(); + /** * Removes this vertex. * diff --git a/gs-api/src/main/java/org/genericsystem/api/core/annotations/HideValue.java b/gs-api/src/main/java/org/genericsystem/api/core/annotations/HideValue.java new file mode 100644 index 000000000..8b1bccbab --- /dev/null +++ b/gs-api/src/main/java/org/genericsystem/api/core/annotations/HideValue.java @@ -0,0 +1,18 @@ +package org.genericsystem.api.core.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Indicates that the value of this generic should not be displayed by the reactor. + * + * @author Fabienne Ducroquet + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE }) +public @interface HideValue { + +} diff --git a/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor.java b/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor.java index 6fee7466c..a7e182379 100644 --- a/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor.java +++ b/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor.java @@ -1,12 +1,14 @@ package org.genericsystem.carcolor.model; import org.genericsystem.api.core.annotations.Components; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; import org.genericsystem.api.core.annotations.constraints.SingularConstraint; @SystemGeneric @Components({ Car.class, Color.class }) @SingularConstraint +@HideValue public class CarColor { } diff --git a/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor2.java b/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor2.java index e588cf9ee..f4f34a279 100644 --- a/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor2.java +++ b/gs-carcolor/src/main/java/org/genericsystem/carcolor/model/CarColor2.java @@ -1,10 +1,12 @@ package org.genericsystem.carcolor.model; import org.genericsystem.api.core.annotations.Components; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; @SystemGeneric @Components({ Car.class, Color.class }) +@HideValue public class CarColor2 { } diff --git a/gs-common/src/main/java/org/genericsystem/common/SystemCache.java b/gs-common/src/main/java/org/genericsystem/common/SystemCache.java index 563baac17..613aab53a 100644 --- a/gs-common/src/main/java/org/genericsystem/common/SystemCache.java +++ b/gs-common/src/main/java/org/genericsystem/common/SystemCache.java @@ -11,6 +11,7 @@ import org.genericsystem.api.core.annotations.Components; import org.genericsystem.api.core.annotations.Dependencies; import org.genericsystem.api.core.annotations.Hidden; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.Meta; import org.genericsystem.api.core.annotations.constraints.InstanceValueClassConstraint; import org.genericsystem.api.core.annotations.constraints.InstanceValueGenerator; @@ -147,6 +148,9 @@ void mountConstraints(Class clazz, Generic result) { if (clazz.getAnnotation(Hidden.class) != null) result.hide(); + + if (clazz.getAnnotation(HideValue.class) != null) + result.hideValue(); } private void triggersDependencies(Class clazz) { diff --git a/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultConfig.java b/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultConfig.java index 9219bebc4..3dea11f94 100644 --- a/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultConfig.java +++ b/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultConfig.java @@ -81,6 +81,15 @@ public static class HiddenProperty implements SystemProperty { } + @SystemGeneric + @Meta(MetaAttribute.class) + @Supers(SystemMap.class) + @Components(MetaAttribute.class) + @PropertyConstraint + public static class HiddenValueProperty implements SystemProperty { + + } + @SystemGeneric @Meta(MetaAttribute.class) @Supers(SystemMap.class) diff --git a/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultSystemProperties.java b/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultSystemProperties.java index e1633da10..1dd512b68 100644 --- a/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultSystemProperties.java +++ b/gs-defaults/src/main/java/org/genericsystem/defaults/DefaultSystemProperties.java @@ -11,6 +11,7 @@ import org.genericsystem.api.core.exceptions.NotFoundException; import org.genericsystem.defaults.DefaultConfig.CascadeRemoveProperty; import org.genericsystem.defaults.DefaultConfig.HiddenProperty; +import org.genericsystem.defaults.DefaultConfig.HiddenValueProperty; import org.genericsystem.defaults.DefaultConfig.InstanceValueGeneratorProperty; import org.genericsystem.defaults.DefaultConfig.NoReferentialIntegrityProperty; import org.genericsystem.defaults.DefaultConfig.NonHeritableProperty; @@ -217,6 +218,23 @@ default boolean isHidden() { return isSystemPropertyEnabled(HiddenProperty.class, ApiStatics.NO_POSITION); } + @SuppressWarnings("unchecked") + @Override + default T hideValue() { + return enableSystemProperty(HiddenValueProperty.class, ApiStatics.NO_POSITION); + } + + @SuppressWarnings("unchecked") + @Override + default T unhideValue() { + return disableSystemProperty(HiddenValueProperty.class, ApiStatics.NO_POSITION); + } + + @Override + default boolean isValueHidden() { + return isSystemPropertyEnabled(HiddenValueProperty.class, ApiStatics.NO_POSITION); + } + @SuppressWarnings("unchecked") @Override default Class getInstanceValueClassConstraint() { diff --git a/gs-example-reactor/src/main/java/org/genericsystem/reactor/example/App.java b/gs-example-reactor/src/main/java/org/genericsystem/reactor/example/App.java index c82f116cd..051f8a495 100644 --- a/gs-example-reactor/src/main/java/org/genericsystem/reactor/example/App.java +++ b/gs-example-reactor/src/main/java/org/genericsystem/reactor/example/App.java @@ -1,7 +1,5 @@ package org.genericsystem.reactor.example; -import org.genericsystem.reactor.example.App.ExampleReactorScript; - import org.genericsystem.api.core.ApiStatics; import org.genericsystem.carcolor.model.Car; import org.genericsystem.carcolor.model.CarColor; @@ -20,6 +18,7 @@ import org.genericsystem.reactor.appserver.ApplicationServer; import org.genericsystem.reactor.appserver.Script; import org.genericsystem.reactor.context.ObservableContextSelector; +import org.genericsystem.reactor.example.App.ExampleReactorScript; import org.genericsystem.reactor.gscomponents.DivWithTitle.TitledHorizontalInstanceEditor; import org.genericsystem.reactor.gscomponents.DivWithTitle.TitledHorizontalInstanceStepEditor; import org.genericsystem.reactor.gscomponents.DivWithTitle.TitledHorizontalInstancesTable; @@ -62,6 +61,7 @@ public void run(Root engine) { Generic carColor = engine.find(CarColor.class); Generic color = engine.find(Color.class); Generic carPerson = car.setRelation("CarDriverOwner", category, person); + carPerson.hideValue(); carPerson.enablePropertyConstraint(); Generic red = color.setInstance("Red"); Generic black = color.setInstance("Black"); diff --git a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor.java b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor.java index 4a588592b..532bde267 100644 --- a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor.java +++ b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor.java @@ -1,12 +1,14 @@ package org.genericsystem.extendedcarcolor.model; import org.genericsystem.api.core.annotations.Components; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; import org.genericsystem.api.core.annotations.constraints.SingularConstraint; @SystemGeneric @Components({ Car.class, Color.class }) @SingularConstraint +@HideValue public class CarColor { } diff --git a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor2.java b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor2.java index 91e3cc131..85a07a7c4 100644 --- a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor2.java +++ b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/CarColor2.java @@ -1,10 +1,12 @@ package org.genericsystem.extendedcarcolor.model; import org.genericsystem.api.core.annotations.Components; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; @SystemGeneric @Components({ Car.class, Color.class }) +@HideValue public class CarColor2 { } diff --git a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleColor.java b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleColor.java index 5dcecef42..132a2f274 100644 --- a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleColor.java +++ b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleColor.java @@ -2,6 +2,7 @@ import org.genericsystem.api.core.annotations.Components; import org.genericsystem.api.core.annotations.Dependencies; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; import org.genericsystem.api.core.annotations.constraints.SingularConstraint; @@ -9,6 +10,7 @@ @Components({ Vehicle.class, Color.class }) @SingularConstraint @Dependencies({ Vehicle.class, Color.class }) +@HideValue public class VehicleColor { } \ No newline at end of file diff --git a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleEnergy.java b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleEnergy.java index 11f8fb8dd..58b7eae02 100644 --- a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleEnergy.java +++ b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleEnergy.java @@ -2,6 +2,7 @@ import org.genericsystem.api.core.annotations.Components; import org.genericsystem.api.core.annotations.Dependencies; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; import org.genericsystem.api.core.annotations.constraints.SingularConstraint; @@ -9,6 +10,7 @@ @Components({ Vehicle.class, Energy.class }) @SingularConstraint @Dependencies({ Vehicle.class, Energy.class }) +@HideValue public class VehicleEnergy { } \ No newline at end of file diff --git a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleVehicleEngine.java b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleVehicleEngine.java index 9051d50a1..42c298137 100644 --- a/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleVehicleEngine.java +++ b/gs-extendedcarcolor/src/main/java/org/genericsystem/extendedcarcolor/model/VehicleVehicleEngine.java @@ -2,6 +2,7 @@ import org.genericsystem.api.core.annotations.Components; import org.genericsystem.api.core.annotations.Dependencies; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; import org.genericsystem.api.core.annotations.constraints.SingularConstraint; @@ -9,6 +10,7 @@ @Components({ Vehicle.class, VehicleEngine.class }) @SingularConstraint @Dependencies({ Vehicle.class, VehicleEngine.class }) +@HideValue public class VehicleVehicleEngine { } \ No newline at end of file diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/context/ObservableValueSelector.java b/gs-reactor/src/main/java/org/genericsystem/reactor/context/ObservableValueSelector.java index c8ddadf37..7d520b60f 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/context/ObservableValueSelector.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/context/ObservableValueSelector.java @@ -13,66 +13,52 @@ public Generic apply(Generic[] gs) { } } - public static class RELATION_SELECTOR implements ObservableValueSelector { + public static class GENERIC_INSTANCE_VALUE_DISPLAYER implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return gs[0].getComponents().size() >= 2 ? gs[0] : null; + return !gs[1].isValueHidden() ? gs[0] : null; } } - public static class STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER implements ObservableValueSelector { + public static class GENERIC_VALUE_DISPLAYER implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return gs[0]; - // return gs[1].getComponents().size() < 2 || Boolean.class.equals(gs[1].getInstanceValueClassConstraint()) - // ? gs[0] : null; + return !gs[0].isValueHidden() ? gs[0] : null; } } - public static class STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER_ATTRIBUTE implements ObservableValueSelector { + public static class INSTANCE_CHECK_BOX_DISPLAYER implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return gs[0]; - // return gs[0].getComponents().size() < 2 || Boolean.class.equals(gs[0].getInstanceValueClassConstraint()) - // ? gs[0] : null; + return !gs[1].isValueHidden() && Boolean.class.equals(gs[1].getInstanceValueClassConstraint()) ? gs[0] : null; } } public static class CHECK_BOX_DISPLAYER implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return Boolean.class.equals(gs[1].getInstanceValueClassConstraint()) ? gs[0] : null; + return !gs[0].isValueHidden() && Boolean.class.equals(gs[0].getInstanceValueClassConstraint()) ? gs[0] : null; } } - public static class CHECK_BOX_DISPLAYER_ATTRIBUTE implements ObservableValueSelector { + public static class INSTANCE_LABEL_DISPLAYER implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return Boolean.class.equals(gs[0].getInstanceValueClassConstraint()) ? gs[0] : null; + return !gs[1].isValueHidden() && !Boolean.class.equals(gs[1].getInstanceValueClassConstraint()) ? gs[0] : null; } } public static class LABEL_DISPLAYER implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return /* gs[1].getComponents().size() < 2 && */!Boolean.class - .equals(gs[1].getInstanceValueClassConstraint()) ? gs[0] : null; + return !gs[0].isValueHidden() && !Boolean.class.equals(gs[0].getInstanceValueClassConstraint()) ? gs[0] : null; } } - public static class LABEL_DISPLAYER_ATTRIBUTE implements ObservableValueSelector { + public static class VALUE_BUILDER_DISPLAYER_SELECTOR implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return /* gs[0].getComponents().size() < 2 && */!Boolean.class - .equals(gs[0].getInstanceValueClassConstraint()) ? gs[0] : null; - } - } - - public static class LABEL_DISPLAYER_SELECTOR implements ObservableValueSelector { - @Override - public Generic apply(Generic[] gs) { - return (!Boolean.class.equals(gs[0].getInstanceValueClassConstraint()) - && gs[0].getInstanceValueGenerator() == null) ? gs[0] : null; + return !gs[0].isValueHidden() && !Boolean.class.equals(gs[0].getInstanceValueClassConstraint()) && gs[0].getInstanceValueGenerator() == null ? gs[0] : null; } } @@ -114,44 +100,39 @@ public Generic apply(Generic[] gs) { public static class REVERSED_RELATION_SELECTOR implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { - return !gs[1].isReferentialIntegrityEnabled(gs[1].getComponents().indexOf(gs[0])) - && !gs[0].getLinks(gs[2]).isEmpty() ? gs[0] : null; + return !gs[1].isReferentialIntegrityEnabled(gs[1].getComponents().indexOf(gs[0])) && !gs[0].getLinks(gs[2]).isEmpty() ? gs[0] : null; } } - public static class MULTICHECKBOX_SELECTOR implements ObservableValueSelector { + public static class MULTICHECKBOX_INSTANCE_SELECTOR implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { Generic component = gs[0].getComponents().stream().filter(c -> gs[2].inheritsFrom(c)).findFirst().get(); - return !gs[0].isHidden() && gs[0].getComponents().size() == 2 - && !gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component)) ? gs[0] : null; + return !gs[0].isHidden() && gs[0].isValueHidden() && gs[0].getComponents().size() == 2 && !gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component)) ? gs[0] : null; } } - public static class NON_MULTICHECKBOX_SELECTOR implements ObservableValueSelector { + public static class NON_MULTICHECKBOX_INSTANCE_SELECTOR implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { Generic component = gs[0].getComponents().stream().filter(c -> gs[2].inheritsFrom(c)).findFirst().get(); - return !gs[0].isHidden() && (gs[0].getComponents().size() != 2 - || gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component))) ? gs[0] : null; + return !gs[0].isHidden() && (!gs[0].isValueHidden() || (gs[0].getComponents().size() != 2 || gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component)))) ? gs[0] : null; } } - public static class MULTICHECKBOX_SELECTOR_RELATION implements ObservableValueSelector { + public static class MULTICHECKBOX_SELECTOR implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { Generic component = gs[0].getComponents().stream().filter(c -> gs[1].inheritsFrom(c)).findFirst().get(); - return !gs[0].isHidden() && gs[0].getComponents().size() == 2 - && !gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component)) ? gs[0] : null; + return !gs[0].isHidden() && gs[0].isValueHidden() && gs[0].getComponents().size() == 2 && !gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component)) ? gs[0] : null; } } - public static class NON_MULTICHECKBOX_SELECTOR_RELATION implements ObservableValueSelector { + public static class NON_MULTICHECKBOX_SELECTOR implements ObservableValueSelector { @Override public Generic apply(Generic[] gs) { Generic component = gs[0].getComponents().stream().filter(c -> gs[1].inheritsFrom(c)).findFirst().get(); - return !gs[0].isHidden() && (gs[0].getComponents().size() != 2 - || gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component))) ? gs[0] : null; + return !gs[0].isHidden() && (!gs[0].isValueHidden() || (gs[0].getComponents().size() != 2 || gs[0].isSingularConstraintEnabled(gs[0].getComponents().indexOf(component)))) ? gs[0] : null; } } diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstanceEditor.java b/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstanceEditor.java index 61a886787..9dbecef67 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstanceEditor.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstanceEditor.java @@ -28,8 +28,8 @@ import org.genericsystem.reactor.context.ObservableListExtractor.NO_FOR_EACH; import org.genericsystem.reactor.context.ObservableListExtractor.SUBINSTANCES_OF_LINK_COMPONENT; import org.genericsystem.reactor.context.ObservableValueSelector; -import org.genericsystem.reactor.context.ObservableValueSelector.MULTICHECKBOX_SELECTOR; -import org.genericsystem.reactor.context.ObservableValueSelector.NON_MULTICHECKBOX_SELECTOR; +import org.genericsystem.reactor.context.ObservableValueSelector.MULTICHECKBOX_INSTANCE_SELECTOR; +import org.genericsystem.reactor.context.ObservableValueSelector.NON_MULTICHECKBOX_INSTANCE_SELECTOR; import org.genericsystem.reactor.context.ObservableValueSelector.PASSWORD_ATTRIBUTE_SELECTOR; import org.genericsystem.reactor.context.ObservableValueSelector.STRICT_ATTRIBUTE_SELECTOR; import org.genericsystem.reactor.context.ObservableValueSelector.TYPE_SELECTOR; @@ -87,7 +87,7 @@ @ForEach(path = { AttributeEdition.class, AttributeContent.class }, value = ObservableListExtractor.NO_FOR_EACH.class) @ForEach(path = { AttributeEdition.class, ValueComponents.class, Content.class }, value = ObservableListExtractor.OTHER_COMPONENTS_2.class) @Select(path = { InstanceName.class, ValueComponents.class }, pos = { 0, 0 }, value = TYPE_SELECTOR.class) -@Select(path = { Composite.class, ValueComponents.class, Header.class }, pos = { -1, 0, -1 }, value = ObservableValueSelector.STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER_ATTRIBUTE.class) +@Select(path = { Composite.class, ValueComponents.class, Header.class }, pos = { -1, 0, -1 }, value = ObservableValueSelector.GENERIC_VALUE_DISPLAYER.class) public class InstanceEditor extends FlexDiv implements SelectionDefaults, StepperDefaults { public static class InstanceName extends Composite { @@ -99,8 +99,8 @@ public static class AttributeEdition extends Composite { @Children({ PasswordHoldersEditor.class, HoldersEditor.class, MultiCheckbox.class }) @ForEach(ObservableListExtractor.ATTRIBUTES_OF_INSTANCES.class) @Select(path = PasswordHoldersEditor.class, value = PASSWORD_ATTRIBUTE_SELECTOR.class) - @Select(path = HoldersEditor.class, value = NON_MULTICHECKBOX_SELECTOR.class) - @Select(path = MultiCheckbox.class, value = MULTICHECKBOX_SELECTOR.class) + @Select(path = HoldersEditor.class, value = NON_MULTICHECKBOX_INSTANCE_SELECTOR.class) + @Select(path = MultiCheckbox.class, value = MULTICHECKBOX_INSTANCE_SELECTOR.class) public static class AttributeContent extends Content { } @@ -227,15 +227,15 @@ public void init() { }); find(PasswordInput.class).addConvertedValueChangeListener((context, nva) -> { if (nva != null && Arrays.equals((byte[]) nva, (byte[]) find(PasswordInput.class, 1).getConvertedValueProperty(context).getValue())) { - getConvertedValueProperty(context).setValue(nva); find(HtmlSpan.class).addStyle(context, "display", "none"); + getConvertedValueProperty(context).setValue(nva); } else find(HtmlSpan.class).addStyle(context, "display", "inline"); }); find(PasswordInput.class, 1).addConvertedValueChangeListener((context, nva) -> { if (nva != null && Arrays.equals((byte[]) nva, (byte[]) find(PasswordInput.class, 0).getConvertedValueProperty(context).getValue())) { - getConvertedValueProperty(context).setValue(nva); find(HtmlSpan.class).addStyle(context, "display", "none"); + getConvertedValueProperty(context).setValue(nva); } else find(HtmlSpan.class).addStyle(context, "display", "inline"); }); @@ -258,12 +258,12 @@ public void init() { @Style(path = { Header.class, InputTextEditorWithConversion.class }, name = "flex", value = "1") @Style(path = { Header.class, InputTextEditorWithConversion.class }, name = "width", value = "100%") - @Children({ Header.class, Content.class, ActionLink.class }) + @Children({ Content.class, Header.class, ActionLink.class }) @Children(path = Header.class, value = { InputTextEditorWithConversion.class, CheckBoxEditor.class }) @Children(path = Content.class, value = DirectRelationComponentEditor.class) @SelectContext(path = ActionLink.class, value = REMOVABLE_HOLDER_SELECTOR.class) - @Select(path = { Header.class, InputTextEditorWithConversion.class }, value = ObservableValueSelector.LABEL_DISPLAYER.class) - @Select(path = { Header.class, CheckBoxEditor.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER.class) + @Select(path = { Header.class, InputTextEditorWithConversion.class }, value = ObservableValueSelector.INSTANCE_LABEL_DISPLAYER.class) + @Select(path = { Header.class, CheckBoxEditor.class }, value = ObservableValueSelector.INSTANCE_CHECK_BOX_DISPLAYER.class) @SetText(path = ActionLink.class, value = "×") @BindAction(path = ActionLink.class, value = REMOVE.class) public static class ValueComponentsEditor extends ValueComponents implements ComponentsDefaults { @@ -297,13 +297,13 @@ public void init() { @Style(name = "flex", value = "1 0 auto") @Style(path = { Header.class, InputTextWithConversion.class }, name = "flex", value = "1") @Style(path = { Header.class, InputTextWithConversion.class }, name = "width", value = "100%") - @Children({ Header.class, Content.class, ActionLink.class }) + @Children({ Content.class, Header.class, ActionLink.class }) @Children(path = Header.class, value = { HolderAdderInput.class, BooleanHolderAdderInput.class }) @Children(path = Content.class, value = DatalistEditor.class) - @Select(path = ActionLink.class, value = STRICT_ATTRIBUTE_SELECTOR.class) - @Select(path = Header.class, value = ObservableValueSelector.STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER_ATTRIBUTE.class) - @Select(path = { Header.class, HolderAdderInput.class }, value = ObservableValueSelector.LABEL_DISPLAYER_ATTRIBUTE.class) - @Select(path = { Header.class, BooleanHolderAdderInput.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER_ATTRIBUTE.class) + @Select(path = ActionLink.class, value = STRICT_ATTRIBUTE_SELECTOR.class) // TODO: Remove + @Select(path = Header.class, value = ObservableValueSelector.GENERIC_VALUE_DISPLAYER.class) + @Select(path = { Header.class, HolderAdderInput.class }, value = ObservableValueSelector.LABEL_DISPLAYER.class) + @Select(path = { Header.class, BooleanHolderAdderInput.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER.class) @SetText(path = ActionLink.class, value = "+") @BindAction(path = ActionLink.class, value = ADD_HOLDER.class) public static class HolderAdder extends ValueComponents implements ComponentsDefaults, ConvertedValueDefaults { diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstancesTable.java b/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstancesTable.java index ec96d311f..89ba4696b 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstancesTable.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/InstancesTable.java @@ -18,11 +18,10 @@ import org.genericsystem.reactor.context.ContextAction.SET_SELECTION; import org.genericsystem.reactor.context.ObservableListExtractor; import org.genericsystem.reactor.context.ObservableValueSelector; -import org.genericsystem.reactor.context.ObservableValueSelector.STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER_ATTRIBUTE; +import org.genericsystem.reactor.context.ObservableValueSelector.GENERIC_VALUE_DISPLAYER; import org.genericsystem.reactor.context.TagSwitcher; import org.genericsystem.reactor.contextproperties.SelectionDefaults; import org.genericsystem.reactor.gscomponents.CheckBoxWithValue.CheckBoxDisplayer; -import org.genericsystem.reactor.gscomponents.CheckBoxWithValue.CheckBoxEditor; import org.genericsystem.reactor.gscomponents.Composite.Content; import org.genericsystem.reactor.gscomponents.Composite.Header; import org.genericsystem.reactor.gscomponents.HtmlTag.HtmlHyperLink; @@ -44,8 +43,8 @@ @GenericValueBackgroundColor(path = { ContentRow.class, ValueComponents.class, Header.class }, value = "#3393ff") @Style(path = Composite.class, name = "flex", value = "0 1 auto") @Style(path = { ContentRow.class, ValueComponents.class, Header.class, GSLabelDisplayer.class }, name = "color", value = "white") -@Style(path = { ContentRow.class, ValueComponents.class, Header.class }, name = "padding-left", value = "2px") -@Style(path = { ContentRow.class, ValueComponents.class, Header.class }, name = "align-items", value = "flex-start") +@Style(path = { ContentRow.class, ValueComponents.class, Header.class, GSLabelDisplayer.class }, name = "padding-left", value = "2px") +@Style(path = { ContentRow.class, ValueComponents.class, Header.class, GSLabelDisplayer.class }, name = "align-items", value = "flex-start") @Style(path = { HeaderRow.class, ButtonDiv.class }, name = "background-color", value = "#ea0084") @Style(name = "background-color", value = "lightgrey") @Style(name = "padding-left", value = "1px") @@ -53,18 +52,16 @@ @Children({ HeaderRow.class, InstanceBuilder.class, ContentRow.class }) @Children(path = HeaderRow.class, value = { ValueComponents.class, ValueComponents.class, ButtonDiv.class }) @Children(path = ContentRow.class, value = { ValueComponents.class, Holders.class, LinksDiv.class }) -@Children(path = { ContentRow.class, ValueComponents.class, Header.class }, value = GSLabelDisplayer.class) @ForEach(path = { HeaderRow.class, ValueComponents.class }, pos = { 0, 1 }, value = ObservableListExtractor.ATTRIBUTES_OF_TYPE.class) @ForEach(path = ContentRow.class, value = ObservableListExtractor.SUBINSTANCES.class) @ForEach(path = { ContentRow.class, Holders.class }, value = ObservableListExtractor.ATTRIBUTES_OF_INSTANCES.class) @ForEach(path = { ContentRow.class, ValueComponents.class, Content.class }, value = ObservableListExtractor.OTHER_COMPONENTS_2.class) -@Select(path = { ContentRow.class, ValueComponents.class, Header.class, CheckBoxDisplayer.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER.class) public class InstancesTable extends FlexDiv implements SelectionDefaults { @GenericValueBackgroundColor(path = { ValueComponents.class, FlexDiv.class }, value = "#ea0084") @Style(name = "color", value = "white") @Children(path = { ValueComponents.class, Header.class }, value = GSLabelDisplayer.class) - @Select(path = { ValueComponents.class, Header.class }, value = STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER_ATTRIBUTE.class) + @Select(path = { ValueComponents.class, Header.class }, value = GENERIC_VALUE_DISPLAYER.class) public static class HeaderRow extends Composite { } @@ -79,7 +76,6 @@ public static class HorizontalInstancesTable extends InstancesTable { @Children(value = ValueComponents.class) @ForEach(path = ValueComponents.class, value = ObservableListExtractor.HOLDERS.class) @ForEach(path = { ValueComponents.class, Content.class }, value = ObservableListExtractor.OTHER_COMPONENTS_2.class) - @Select(path = { ValueComponents.class, Header.class, CheckBoxEditor.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER.class) public static class Holders extends Composite { } @@ -90,11 +86,11 @@ public static class Holders extends Composite { @Style(path = FlexDiv.class, name = "margin-right", value = "1px") @Style(path = FlexDiv.class, name = "margin-bottom", value = "1px") @ForEach(path = Content.class, value = ObservableListExtractor.OTHER_COMPONENTS_1.class) - @Select(path = Header.class, value = ObservableValueSelector.STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER.class) + @Select(path = Header.class, value = ObservableValueSelector.GENERIC_INSTANCE_VALUE_DISPLAYER.class) @Select(path = { Header.class, FlexDiv.class, HtmlLabel.class }, pos = { -1, 0, 0 }, value = ObservableValueSelector.NON_PASSWORD_INSTANCE_SELECTOR.class) @Select(path = { Header.class, FlexDiv.class, HtmlLabel.class }, pos = { -1, 0, 1 }, value = ObservableValueSelector.PASSWORD_INSTANCE_SELECTOR.class) - @Select(path = { Header.class, CheckBoxDisplayer.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER.class) - @Select(path = { Header.class, FlexDiv.class }, value = ObservableValueSelector.LABEL_DISPLAYER.class) + @Select(path = { Header.class, CheckBoxDisplayer.class }, value = ObservableValueSelector.INSTANCE_CHECK_BOX_DISPLAYER.class) + @Select(path = { Header.class, FlexDiv.class }, value = ObservableValueSelector.INSTANCE_LABEL_DISPLAYER.class) @Children({ Content.class, Header.class }) @Children(path = Header.class, value = { CheckBoxDisplayer.class, FlexDiv.class }) @Children(path = { Header.class, FlexDiv.class }, value = { GSLabelDisplayer.class, HtmlLabel.class }) diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/instancebuilder/InstanceBuilder.java b/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/instancebuilder/InstanceBuilder.java index 948ab2c45..12a560327 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/instancebuilder/InstanceBuilder.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/gscomponents/instancebuilder/InstanceBuilder.java @@ -16,8 +16,8 @@ import org.genericsystem.reactor.context.ObservableListExtractor; import org.genericsystem.reactor.context.ObservableListExtractor.SUBINSTANCES_OF_RELATION_COMPONENT; import org.genericsystem.reactor.context.ObservableValueSelector; -import org.genericsystem.reactor.context.ObservableValueSelector.MULTICHECKBOX_SELECTOR_RELATION; -import org.genericsystem.reactor.context.ObservableValueSelector.NON_MULTICHECKBOX_SELECTOR_RELATION; +import org.genericsystem.reactor.context.ObservableValueSelector.MULTICHECKBOX_SELECTOR; +import org.genericsystem.reactor.context.ObservableValueSelector.NON_MULTICHECKBOX_SELECTOR; import org.genericsystem.reactor.context.ObservableValueSelector.PASSWORD_ATTRIBUTE_SELECTOR; import org.genericsystem.reactor.context.TagSwitcher; import org.genericsystem.reactor.context.TextBinding.ERROR_COMPONENTS; @@ -59,8 +59,8 @@ @Children(path = ButtonDiv.class, value = AddLink.class) @ForEach(path = Content.class, value = ObservableListExtractor.ATTRIBUTES_OF_TYPE.class) @Select(path = { Content.class, PasswordBuilder.class }, value = PASSWORD_ATTRIBUTE_SELECTOR.class) -@Select(path = { Content.class, GSHolderBuilderDiv.class }, value = NON_MULTICHECKBOX_SELECTOR_RELATION.class) -@Select(path = { Content.class, MultiCheckbox.class }, value = MULTICHECKBOX_SELECTOR_RELATION.class) +@Select(path = { Content.class, GSHolderBuilderDiv.class }, value = NON_MULTICHECKBOX_SELECTOR.class) +@Select(path = { Content.class, MultiCheckbox.class }, value = MULTICHECKBOX_SELECTOR.class) public class InstanceBuilder extends Composite implements GSBuilderDefaults, PasswordDefaults { @Override @@ -134,11 +134,9 @@ public void init() { @Children({ Content.class, Header.class, }) @Children(path = Header.class, value = { HolderBuilderInput.class, BooleanHolderBuilderInput.class }) @Children(path = Content.class, value = DatalistEditor.class) - @Select(path = Header.class, value = ObservableValueSelector.STRICT_ATTRIBUTE_SELECTOR_OR_CHECK_BOX_DISPLAYER_ATTRIBUTE.class) - @Select(path = { Header.class, - HolderBuilderInput.class }, value = ObservableValueSelector.LABEL_DISPLAYER_SELECTOR.class) - @Select(path = { Header.class, - BooleanHolderBuilderInput.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER_ATTRIBUTE.class) + @Select(path = Header.class, value = ObservableValueSelector.GENERIC_VALUE_DISPLAYER.class) + @Select(path = { Header.class, HolderBuilderInput.class }, value = ObservableValueSelector.VALUE_BUILDER_DISPLAYER_SELECTOR.class) + @Select(path = { Header.class, BooleanHolderBuilderInput.class }, value = ObservableValueSelector.CHECK_BOX_DISPLAYER.class) public static class HolderBuilder extends HolderAdder implements GSBuilderDefaults, ComponentsDefaults { @Override diff --git a/gs-security-model/src/main/java/org/genericsystem/security/model/UserRole.java b/gs-security-model/src/main/java/org/genericsystem/security/model/UserRole.java index 823be9dde..bb27a7353 100644 --- a/gs-security-model/src/main/java/org/genericsystem/security/model/UserRole.java +++ b/gs-security-model/src/main/java/org/genericsystem/security/model/UserRole.java @@ -1,10 +1,12 @@ package org.genericsystem.security.model; import org.genericsystem.api.core.annotations.Components; +import org.genericsystem.api.core.annotations.HideValue; import org.genericsystem.api.core.annotations.SystemGeneric; @SystemGeneric @Components({ User.class, Role.class }) +@HideValue public class UserRole { }