
org.minimalj.frontend.impl.json.JsonFrontend Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of minimalj Show documentation
Show all versions of minimalj Show documentation
A java framework aiming for a minimal programming style. Includes GUI and persistence layer.
package org.minimalj.frontend.impl.json;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import org.minimalj.frontend.Frontend;
import org.minimalj.frontend.action.Action;
import org.minimalj.frontend.impl.nanoserver.NanoHttpdApplication;
import org.minimalj.frontend.page.PageManager;
import org.minimalj.model.Rendering;
import org.minimalj.security.Authorization;
import org.minimalj.util.LocaleContext;
import org.minimalj.util.resources.Resources;
public class JsonFrontend extends Frontend {
private static ThreadLocal sessionByThread = new ThreadLocal<>();
public static void setSession(JsonClientSession session) {
sessionByThread.set(session);
}
public static JsonClientSession getClientSession() {
return sessionByThread.get();
}
@Override
public PageManager getPageManager() {
return getClientSession();
}
@Override
public IComponent createText(String string) {
return new JsonText(string);
}
@Override
public IComponent createText(Action action) {
return new JsonAction(action);
}
@Override
public IComponent createText(Rendering rendering) {
return new JsonText(rendering);
}
@Override
public IComponent createTitle(String string) {
JsonComponent component = new JsonComponent("Title");
component.put(JsonInputComponent.VALUE, string);
return component;
}
@Override
public Input createReadOnlyTextField() {
return new JsonTextField("ReadOnlyTextField");
}
@Override
public Input createTextField(int maxLength, String allowedCharacters, InputType inputType, Search suggestionSearch,
InputComponentListener changeListener) {
return new JsonTextField("TextField", maxLength, allowedCharacters, inputType, suggestionSearch, changeListener);
}
@Override
public PasswordField createPasswordField(InputComponentListener changeListener, int maxLength) {
return new JsonPasswordField(maxLength, changeListener);
}
@Override
public Input createAreaField(int maxLength, String allowedCharacters, InputComponentListener changeListener) {
return new JsonTextField("AreaField", maxLength, allowedCharacters, null, null, changeListener);
}
@Override
public Input createImage(Size size, InputComponentListener changeListener) {
throw new RuntimeException("Image not yet implemented in JsonFrontend");
};
@Override
public IList createList(Action... actions) {
return new JsonList(actions);
}
@Override
public Input createComboBox(List objects, InputComponentListener changeListener) {
return new JsonCombobox(objects, changeListener);
}
@Override
public Input createCheckBox(InputComponentListener changeListener, String text) {
return new JsonCheckBox(text, changeListener);
}
@Override
public ITable createTable(Object[] keys, TableActionListener listener) {
return new JsonTable(keys, listener);
}
@Override
public Input createLookup(InputComponentListener changeListener, Search index, Object[] keys) {
return new JsonLookup(changeListener, index, keys);
}
@Override
public IComponent createComponentGroup(IComponent... components) {
JsonComponent group = new JsonComponent("Group", true);
group.put("components", Arrays.asList(components));
return group;
}
@Override
public FormContent createFormContent(int columns, int columnWidth) {
return new JsonFormContent(columns, columnWidth);
}
@Override
public SwitchContent createSwitchContent() {
return new JsonSwitchContent();
}
@Override
public IContent createHtmlContent(String htmlOrUrl) {
return new JsonHtmlContent(htmlOrUrl);
}
//
public static String readStream(InputStream inputStream) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
return reader.lines().collect(Collectors.joining(System.getProperty("line.separator")));
} catch (IOException x) {
throw new RuntimeException(x);
}
}
public static String getHtmlTemplate() {
return readStream(Resources.getInputStream("index.html"));
}
public static String fillPlaceHolder(String html, Locale locale) {
LocaleContext.setLocale(locale);
String result = html.replace("$LOCALE", locale.getLanguage());
result = result.replace("$AUTHORIZATION", Boolean.toString(Authorization.isAvailable()));
result = result.replace("$WEB_SOCKET", Boolean.toString(NanoHttpdApplication.useWebSocket()));
result = result.replace("$PORT", "");
result = result.replace("$WS", "ws");
result = result.replace("$SEARCH", Resources.getString("SearchAction"));
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy