Skip to content

Commit

Permalink
gs-reactor: Beginning of step by step edition of an instance
Browse files Browse the repository at this point in the history
  • Loading branch information
fducroquet committed Aug 17, 2016
1 parent de8b52c commit 80ada71
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@
import org.genericsystem.reactor.gs.GSEditor;
import org.genericsystem.reactor.gs.GSMonitor;
import org.genericsystem.reactor.gs.GSSelect.ColorsSelect;
import org.genericsystem.reactor.gs.GSStepEditor;
import org.genericsystem.reactor.gs.GSTable;
import org.genericsystem.reactor.gs.SelectionDefaults;
import org.genericsystem.reactor.model.ObservableListExtractor;

@DependsOnModel({ Car.class, Power.class, Diesel.class, Color.class, CarColor.class })
@RunScript(ExampleReactorScript.class)
Expand Down Expand Up @@ -52,8 +54,20 @@ public AppHtml(Root engine, ServerWebSocket webSocket) {
addStyle("justify-content", "center");
}
};

new GSEditor(this, FlexDirection.COLUMN).select_(model -> getSelectionProperty(model));
new GSStepEditor(this, FlexDirection.ROW) {
{
select_(model -> getSelectionProperty(model));
switcher_(ObservableListExtractor.ATTRIBUTES_OF_INSTANCES);
}
};
new GSStepEditor(this, FlexDirection.COLUMN) {
{
select_(model -> getSelectionProperty(model));
switcher_(ObservableListExtractor.ATTRIBUTES_OF_INSTANCES);
}
};

new GSTable(this).select(Color.class);

new GSTable(this).select(Engine.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package org.genericsystem.reactor.gs;

import org.genericsystem.reactor.gs.GSSubcellDisplayer.InstanceLinkTitleDisplayer;
import org.genericsystem.reactor.gstag.GSHyperLink;

public class GSStepEditor extends GSEditor implements SwitchDefaults {

private GSTag switchedTag;

public GSStepEditor(GSTag parent) {
this(parent, FlexDirection.COLUMN);
}

public GSStepEditor(GSTag parent, FlexDirection direction) {
super(parent, direction);
}

@Override
public GSTag getSwitchedTag() {
return switchedTag;
}

@Override
protected void sections() {
switchedTag = new GSSection(this, getDirection()) {
{
addStyle("flex", "1");
new InstanceLinkTitleDisplayer(this).addStyle("flex", "0.3");
new GSAttributeOfInstanceEditor(this);
new GSSection(this, getReverseDirection()) {
{
addStyle("justify-content", "space-between");
new GSHyperLink(this) {
{
setText("<");
bindAction(model -> prev(model));
}
};
new GSHyperLink(this) {
{
setText(">");
bindAction(model -> next(model));
}
};
}
};
}
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.genericsystem.reactor.gs;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.genericsystem.reactor.Model;
import org.genericsystem.reactor.model.GenericModel;
import org.genericsystem.reactor.model.ObservableListExtractor;

import javafx.beans.property.Property;
import javafx.beans.property.ReadOnlyIntegerWrapper;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public interface SwitchDefaults {

public static final String SUBMODELS = "subModels";
public static final String INDEX = "index";
public static final String CURRENT_MODEL = "currentModel";

void addPrefixBinding(Consumer<GenericModel> consumer);

<T> void storePropertyWithoutCheck(String propertyName, GenericModel model, Function<GenericModel, ObservableValue<T>> applyOnModel);

<T> Property<T> getProperty(String property, Model model);

GSTag getSwitchedTag();

default ObservableList<GenericModel> getSwitchModels(GenericModel model) {
Property<ObservableList<GenericModel>> modelsProperty = getProperty(SUBMODELS, model);
return modelsProperty != null ? modelsProperty.getValue() : null;
}

default Property<GenericModel> getCurrentModel(GenericModel model) {
return getProperty(CURRENT_MODEL, model);
}

default Property<Integer> getIteratorIndexProperty(GenericModel model) {
return getProperty(INDEX, model);
}

default void switcher_(ObservableListExtractor observableListExtractor) {
switcher(model -> FXCollections.observableArrayList(observableListExtractor.apply(model.getGenerics()).stream().map(g -> new GenericModel(model, GenericModel.addToGenerics(g, model.getGenerics()))).collect(Collectors.toList())));
}

default void switcher(Function<GenericModel, ObservableList<GenericModel>> applyOnModel) {
addPrefixBinding(model -> {
storePropertyWithoutCheck(SUBMODELS, model, m -> new SimpleObjectProperty<>(applyOnModel.apply(model)));
storePropertyWithoutCheck(CURRENT_MODEL, model, m -> new SimpleObjectProperty<>(getSwitchModels(model).get(0)));
storePropertyWithoutCheck(INDEX, model, m -> new ReadOnlyIntegerWrapper(0));
});
getSwitchedTag().select_(model -> getCurrentModel(model));
}

default void next(GenericModel model) {
Property<Integer> index = getIteratorIndexProperty(model);
ObservableList<GenericModel> models = getSwitchModels(model);
if (index.getValue() + 1 < models.size()) {
index.setValue(index.getValue() + 1);
getCurrentModel(model).setValue(models.get(index.getValue()));
}
}

default void prev(GenericModel model) {
Property<Integer> index = getIteratorIndexProperty(model);
ObservableList<GenericModel> models = getSwitchModels(model);
if (index.getValue() > 0) {
index.setValue(index.getValue() - 1);
getCurrentModel(model).setValue(models.get(index.getValue()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@

import org.genericsystem.reactor.gs.GSTag;
import org.genericsystem.reactor.gs.SelectionDefaults;
import org.genericsystem.reactor.gs.SwitchDefaults;
import org.genericsystem.reactor.model.GenericModel;

/**
* @author Nicolas Feybesse
*
*/
public class GSHyperLink extends GSTag implements SelectionDefaults {
public class GSHyperLink extends GSTag implements SelectionDefaults, SwitchDefaults {

public GSHyperLink(GSTag parent) {
super(parent, "a");
Expand All @@ -35,4 +36,8 @@ protected ActionHtmlNode createNode(String parentId) {
return new ActionHtmlNode(parentId);
}

@Override
public GSTag getSwitchedTag() {
return null;
}
}

0 comments on commit 80ada71

Please sign in to comment.