protected void loadNewOptionHandler(LookupField component, Element element) { String newOptionAllowed = element.attributeValue("newOptionAllowed"); if (StringUtils.isNotEmpty(newOptionAllowed)) { component.setNewOptionAllowed(Boolean.parseBoolean(newOptionAllowed)); } String newOptionHandlerMethod = element.attributeValue("newOptionHandler"); if (StringUtils.isNotEmpty(newOptionHandlerMethod)) { FrameOwner controller = context.getFrame().getFrameOwner(); Class<? extends FrameOwner> windowClass = controller.getClass(); Method newOptionHandler; try { newOptionHandler = windowClass.getMethod(newOptionHandlerMethod, LookupField.class, String.class); } catch (NoSuchMethodException e) { Map<String, Object> params = ParamsMap.of( "LookupField Id", component.getId(), "Method name", newOptionHandlerMethod ); throw new GuiDevelopmentException("Unable to find new option handler method for lookup field", context.getFullFrameId(), params); } component.setNewOptionHandler(caption -> { try { newOptionHandler.invoke(controller, component, caption); } catch (IllegalAccessException | InvocationTargetException e) { throw new RuntimeException("Unable to invoke new option handler", e); } }); } }
@Override public Component generateField(Datasource datasource, String propertyId) { formatField = componentsFactory.createComponent(LookupField.class); Map<String, String> options = new HashMap<>(); for (String format : defaultFormats) { options.put(format, format); } formatField.setDatasource(datasource, propertyId); formatField.setOptionsMap(options); formatField.setNewOptionAllowed(true); formatField.setNewOptionHandler(caption -> { addFormatItem(caption); formatField.setValue(caption); }); formatField.setEditable(security.isEntityOpPermitted(ReportValueFormat.class, EntityOp.UPDATE)); return formatField; } });
entityParamLookup.setNewOptionAllowed(true); viewNameLookup.setNewOptionAllowed(true); entitiesParamLookup.setNewOptionHandler(LinkedWithPropertyNewOptionHandler.handler(dataSetsDs, "listEntitiesParamName")); entityParamLookup.setNewOptionHandler(LinkedWithPropertyNewOptionHandler.handler(dataSetsDs, "entityParamName")); viewNameLookup.setNewOptionHandler(LinkedWithPropertyNewOptionHandler.handler(dataSetsDs, "viewName"));
lookupField.setNewOptionAllowed(true); lookupField.setNewOptionHandler((Consumer<String>) caption -> { if (caption != null && !optionsMap.containsKey(caption)) { optionsMap.put(caption, caption);