use of io.jmix.dashboards.model.parameter.Parameter in project jmix by jmix-framework.
the class DashboardImpl method refresh.
/**
* Refreshes widget with passed parameters.
* Dashboard will be refreshed with merged existed and new parameters.
* If existed parameter has the same name as one of the param from passed map, it will be overwritten by param from map.
*
* @param params map with new dashboard parameters
*/
@Override
public void refresh(Map<String, Object> params) {
DashboardModel dashboardModel = null;
if (isNotBlank(jsonPath)) {
dashboardModel = loadDashboardByJson(jsonPath);
} else if (isNotBlank(code)) {
dashboardModel = loadDashboardByCode(code);
}
if (MapUtils.isNotEmpty(params) && Objects.nonNull(dashboardModel)) {
Map<String, Parameter> newParams = params.keySet().stream().map(key -> {
Parameter parameter = metadata.create(Parameter.class);
parameter.setName(key);
parameter.setAlias(key);
parameter.setValue(parameterTransformer.createParameterValue(params.get(key)));
return parameter;
}).collect(Collectors.toMap(Parameter::getName, Function.identity()));
Map<String, Parameter> paramMap = dashboardModel.getParameters().stream().collect(Collectors.toMap(Parameter::getName, Function.identity()));
paramMap.putAll(newParams);
dashboardModel.setParameters(new ArrayList<>(paramMap.values()));
}
updateDashboard(dashboardModel);
}
use of io.jmix.dashboards.model.parameter.Parameter in project jmix by jmix-framework.
the class WidgetRepositoryImpl method getWidgetParams.
@Override
public Map<String, Object> getWidgetParams(Widget widget) {
Map<String, Object> widgetParams = new HashMap<>();
for (Parameter p : widget.getWidgetFields()) {
Object rawValue = parameterTransformer.transform(p.getValue());
widgetParams.put(getAlias(p), rawValue);
}
if (widget.getDashboard() != null) {
for (Parameter p : widget.getDashboard().getParameters()) {
Object rawValue = parameterTransformer.transform(p.getValue());
widgetParams.put(getAlias(p), rawValue);
}
}
for (Parameter p : widget.getParameters()) {
Object rawValue = parameterTransformer.transform(p.getValue());
widgetParams.put(getAlias(p), rawValue);
}
return widgetParams;
}
use of io.jmix.dashboards.model.parameter.Parameter in project jmix by jmix-framework.
the class WidgetRepositoryImpl method serializeWidgetFields.
@Override
public void serializeWidgetFields(ScreenFragment widgetFragment, Widget widget) {
widget.getWidgetFields().clear();
List<Field> parameterFields = FieldUtils.getFieldsListWithAnnotation(widgetFragment.getClass(), WidgetParam.class);
for (Field parameterField : parameterFields) {
Parameter parameter = metadata.create(Parameter.class);
parameter.setName(parameterField.getName());
parameter.setAlias(parameterField.getName());
ParameterValue parameterValue = parameterTransformer.createParameterValue(parameterField, widgetFragment);
parameter.setValue(parameterValue);
widget.getWidgetFields().add(parameter);
}
}
use of io.jmix.dashboards.model.parameter.Parameter in project jmix by jmix-framework.
the class WidgetRepositoryImpl method initializeWidgetFields.
@Override
public void initializeWidgetFields(ScreenFragment widgetFragment, Widget widget) {
List<Parameter> widgetFieldValues = widget.getWidgetFields();
List<Field> parameterFields = FieldUtils.getFieldsListWithAnnotation(widgetFragment.getClass(), WidgetParam.class);
for (Field parameterField : parameterFields) {
Optional<Parameter> fieldValueOpt = widgetFieldValues.stream().filter(p -> p.getName().equals(parameterField.getName())).findFirst();
if (fieldValueOpt.isPresent()) {
Parameter p = fieldValueOpt.get();
Object rawValue = parameterTransformer.transform(p.getValue());
try {
FieldUtils.writeField(parameterField, widgetFragment, rawValue, true);
} catch (IllegalAccessException e) {
throw new RuntimeException(String.format("Error on widget field %s initialization", p.getAlias()), e);
}
}
}
}
use of io.jmix.dashboards.model.parameter.Parameter in project jmix by jmix-framework.
the class DashboardImpl method dashboardEventListener.
@SuppressWarnings("unchecked")
@EventListener
public void dashboardEventListener(DashboardEvent dashboardEvent) throws InvocationTargetException, IllegalAccessException {
refreshWidgets(dashboardEvent);
if (dashboardViewAssistant == null) {
return;
}
Class eventClass = dashboardEvent.getClass();
Method[] methods = ReflectionUtils.getUniqueDeclaredMethods(dashboardViewAssistant.getClass());
List<Method> eventListenerMethods = Arrays.stream(methods).filter(m -> m.getAnnotation(EventListener.class) != null).filter(m -> m.getParameterCount() == 1).collect(Collectors.toList());
for (Method method : eventListenerMethods) {
java.lang.reflect.Parameter[] parameters = method.getParameters();
java.lang.reflect.Parameter parameter = parameters[0];
Class methodEventTypeArg = parameter.getType();
if (methodEventTypeArg.isAssignableFrom(eventClass)) {
method.invoke(dashboardViewAssistant, dashboardEvent);
}
}
}
Aggregations