All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nasdanika.html.jstree.impl.JsTreeContextMenuItemImpl Maven / Gradle / Ivy

package org.nasdanika.html.jstree.impl;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.json.JSONObject;
import org.nasdanika.html.jstree.JsTreeContextMenuItem;

class JsTreeContextMenuItemImpl implements JsTreeContextMenuItem {
	
	private boolean separatorBefore;
	private boolean separatorAfter;
	private boolean disabled;
	private Object label;
	private Object title;
	private Object action;
	private Object icon;
	private Object shortcut;
	private Object shortcutLabel;
	private Map subMenu = new LinkedHashMap<>();
	private Object subMenuObj;

	@Override
	public JsTreeContextMenuItem separatorBefore(boolean separatorBefore) {
		this.separatorBefore = separatorBefore;
		return this;
	}

	@Override
	public JsTreeContextMenuItem separatorAfter(boolean separatorAfter) {
		this.separatorAfter = separatorAfter;
		return this;
	}

	@Override
	public JsTreeContextMenuItem disabled(boolean disabled) {
		this.disabled = disabled;
		return this;
	}

	@Override
	public JsTreeContextMenuItem label(Object label) {
		this.label = label;
		return this;
	}

	@Override
	public JsTreeContextMenuItem title(Object title) {
		this.title = title;
		return this;
	}

	@Override
	public JsTreeContextMenuItem action(Object action) {
		this.action = action;
		return this;
	}

	@Override
	public JsTreeContextMenuItem icon(Object icon) {
		this.icon = icon;
		return this;
	}

	@Override
	public JsTreeContextMenuItem shortcut(Object shortcut) {
		this.shortcut = shortcut;
		return this;
	}

	@Override
	public JsTreeContextMenuItem shortcutLabel(Object shortcutLabel) {
		this.shortcutLabel = shortcutLabel;
		return this;
	}

	@Override
	public JsTreeContextMenuItem createSubMenuItem(String key) {
		JsTreeContextMenuItem child = subMenu.get(key);
		if (child == null) {
			child = new JsTreeContextMenuItemImpl();
			subMenu.put(key, child);
		}
		return child;
	}
	
	@Override
	public JsTreeContextMenuItem addSubMenuItem(String key, JsTreeContextMenuItem item) {
		subMenu.put(key, item);
		return this;
	}
	
	@Override
	public JsTreeContextMenuItem subMenu(Object subMenu) {
		this.subMenuObj = subMenu;
		return this;
	}
	
	@Override
	public String toString() {
		StringBuilder ret = new StringBuilder("{").append(System.lineSeparator());
		int initialLength = ret.length();
		if (action != null) {
			ret.append("action: ").append(action);
		}
		if (disabled) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("_disabled: true");
		}
		if (icon != null) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("icon: '").append(icon).append("'");
		}
		if (label != null) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("label: '").append(label).append("'");
		}
		if (separatorAfter) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("separator_after: true");
		}
		if (separatorBefore) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("separator_before: true");
		}
		if (shortcut != null) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("shortcut: ").append(shortcut);
		}
		if (shortcutLabel != null) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("shortcut_label: '").append(shortcutLabel).append("'");
		}
		if (title != null) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("title: '").append(title).append("'");
		}
		if (subMenuObj != null) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("submenu: ").append(subMenuObj);
		} else if (!subMenu.isEmpty()) {
			if (ret.length() > initialLength) {
				ret.append(",").append(System.lineSeparator());
			}
			ret.append("submenu: {").append(System.lineSeparator());
			boolean first = true;
			for (Entry sme: subMenu.entrySet()) {
				if (!first) {
					ret.append(",").append(System.lineSeparator());
				}
				ret.append(sme.getKey()).append(": ").append(sme.getValue());
				first = false;
			}
			ret.append("}");
		}
		ret.append(System.lineSeparator()).append("}");
		return ret.toString();
	}

	@Override
	public JSONObject toJSON() {
		JSONObject ret = new JSONObject();
		if (action != null) {
			ret.put("action", action);
		}
		if (disabled) {
			ret.put("_disabled",true);
		}
		if (icon != null) {
			ret.put("icon", icon);
		}
		if (label != null) {
			ret.put("label", label);
		}
		if (separatorAfter) {
			ret.put("separator_after", true);
		}
		if (separatorBefore) {
			ret.put("separator_before", true);
		}
		if (shortcut != null) {
			ret.put("shortcut", shortcut);
		}
		if (shortcutLabel != null) {
			ret.put("shortcut_label", shortcutLabel);
		}
		if (title != null) {
			ret.put("title", title);
		}
		if (subMenuObj != null) {
			ret.put("submenu", subMenuObj);
		} else if (!subMenu.isEmpty()) {
			JSONObject jSubmenu = new JSONObject();
			ret.put("submenu", jSubmenu);
			for (Entry sme: subMenu.entrySet()) {
				ret.put(sme.getKey(), sme.getValue().toJSON());
			}
		}
		return ret;
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy