Skip to content

Commit

Permalink
Using request data in Var components, introducing a list-var.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Dec 11, 2016
1 parent 00861bb commit d6adb3f
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 14 deletions.
22 changes: 18 additions & 4 deletions rapidoid-gui/src/main/java/org/rapidoid/gui/GUI.java
Expand Up @@ -30,7 +30,7 @@
import org.rapidoid.gui.input.*;
import org.rapidoid.gui.reqinfo.IReqInfo;
import org.rapidoid.gui.reqinfo.ReqInfo;
import org.rapidoid.gui.var.LocalVar;
import org.rapidoid.gui.var.ReqDataVar;
import org.rapidoid.html.HTML;
import org.rapidoid.html.Tag;
import org.rapidoid.html.TagWidget;
Expand Down Expand Up @@ -499,12 +499,26 @@ public static Tag[] mediaList(List<Object> found) {
return items;
}

public static <T extends Serializable> Var<T> var(String name, Class<T> type, T defaultValue) {
return new ReqDataVar<>(name, type, defaultValue);
}

public static <T extends Serializable> Var<T> var(String name, T defaultValue) {
return new LocalVar<T>(name, defaultValue);
return var(name, Cls.of(defaultValue), defaultValue);
}

public static Var<String> var(String name) {
return var(name, String.class, null);
}

public static Var<List<String>> listVar(String name) {
Class<List<String>> type = U.cast(List.class);
return new ReqDataVar<>(name, type, U.<String>list());
}

public static <T extends Serializable> Var<T> var(String name) {
return var(name, null);
public static Var<List<String>> listVar(String name, List<String> defaultValue) {
Class<List<String>> type = U.cast(List.class);
return new ReqDataVar<>(name, type, defaultValue);
}

public static Object highlight(String text) {
Expand Down
Expand Up @@ -36,7 +36,7 @@ public PostedDataVar(Var<T> var) {

@Override
public T get() {
return (T) ReqInfo.get().posted().get(name());
return (T) ReqInfo.get().data().get(name());
}

}
Expand Up @@ -3,10 +3,12 @@
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.cls.Cls;
import org.rapidoid.commons.Err;
import org.rapidoid.gui.reqinfo.ReqInfo;
import org.rapidoid.u.U;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/*
* #%L
Expand All @@ -29,25 +31,55 @@
*/

@Authors("Nikolche Mihajlovski")
@Since("4.0.0")
public class LocalVar<T extends Serializable> extends WidgetVar<T> {
@Since("5.3.0")
public class ReqDataVar<T> extends WidgetVar<T> {

private static final long serialVersionUID = 2761159925375675659L;

private final String localKey;

private final Class<T> type;

private final T defaultValue;

public LocalVar(String localKey, T defaultValue) {
public ReqDataVar(String localKey, Class<T> type, T defaultValue) {
super(localKey);
this.localKey = localKey;
this.type = type;
this.defaultValue = defaultValue;
}

@SuppressWarnings("unchecked")
@Override
public T get() {
return (T) Cls.convert(U.or(ReqInfo.get().posted().get(localKey), defaultValue), Cls.of(defaultValue));
Object value = U.or(ReqInfo.get().data().get(localKey), null);

if (type.equals(List.class)) {

if (value == null) {
return defaultValue;

} else if (value instanceof String) {
String s = (String) value;

if (U.notEmpty(s)) {
return (T) U.list(s);
} else {
return defaultValue;
}

} else if (value instanceof Collection) {
Collection coll = (Collection) value;
return (T) U.list(coll);

} else {
throw Err.notExpected();
}

} else {
value = U.or(value, defaultValue);
return Cls.convert(value, type);
}
}

@Override
Expand Down
Expand Up @@ -5,8 +5,6 @@
import org.rapidoid.gui.reqinfo.ReqInfo;
import org.rapidoid.var.impl.AbstractVar;

import java.io.Serializable;

/*
* #%L
* rapidoid-gui
Expand All @@ -29,7 +27,7 @@

@Authors("Nikolche Mihajlovski")
@Since("4.0.2")
public abstract class WidgetVar<T extends Serializable> extends AbstractVar<T> {
public abstract class WidgetVar<T> extends AbstractVar<T> {

private static final long serialVersionUID = 2761159925375675659L;

Expand All @@ -38,7 +36,7 @@ public WidgetVar(String name) {
}

protected boolean getBool() {
Object value = ReqInfo.get().posted().get(name());
Object value = ReqInfo.get().data().get(name());
return Boolean.TRUE.equals(value) || "true".equals(value);
}

Expand Down

0 comments on commit d6adb3f

Please sign in to comment.