Team:Freiburg software/Code/MenuItem.java

background-position:0% -42px; } background-position:100% -42px; color:#213340; } display:none; }
 * 1) tabs a.code_active {
 * 1) tabs a.code_active span {
 * 1) toc {

org.synbiowave.menu.MenuItem
/*   Copyright: synbiowave License: GPL Authors: Paul Staab Version: 0.1 DESCRIPTION: This class can be used do generate SynBioWave-Menus, to generate JSON-Strings out of it and menus back of JSON-String. Each item can contain options and recusivly other MenuItems later displayed as subitems.

package org.synbiowave.menu;

import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.json.simple.JSONObject; import org.json.simple.JSONValue;

public class MenuItem {	private LinkedHashMap options = new LinkedHashMap; private List subItemList = new ArrayList;

/**	 * generates a menu from a JSONObject * @param JSON JSONObject * @throws Exception */	public MenuItem(JSONObject JSON) throws Exception { 		readJSON(JSON); }	/**	 * generates a menu form a JSON-String * @param JSONString JSON-conform String * @throws Exception */	public MenuItem(String JSONString) throws Exception { 		readJSON(JSONString); }	/**	 * generates a menu item * @param type Type of the menu item * @param label Label of the menu item */	public MenuItem(String type, String label, String key) {		this.options.put("type", type); this.options.put("label", label); this.options.put("key", key + label); }	/**	 * Returns a saved option of the menu item * @param key option like "type","label" or "key" * @return Value of the option */	public String getOption(String name) {		return this.options.get(name); }	public String setOption(String name, String value) {		return this.options.put(name, value); }	/**	 * Getter for the SubItems included in this menu item * @return */	public List getSubItemList {		return this.subItemList; }	/**	 * Creates a new Sub-MenuItem * @param type Type of the Sub-MenuItem * @param label Label of the Sub-MenuItem * @param key Key of the Sub-MenuItem; use generateKey; * @return Sub-MenuItem */	public MenuItem createSubItem(String type, String label, String key) {		MenuItem subitem = new MenuItem(type, label, key); subItemList.add(subitem); return subItemList.get(subItemList.lastIndexOf(subitem)); }	/**	 * Adds a existing MenuItem as a SubItem to this MenuItem * @param menuItem the MenuItem a append * @return this */	public MenuItem appendSubItem(MenuItem menuItem) {		this.subItemList.add(menuItem); return this; }

/**	 * Removes all Sub-MenuItems */	public void removeAllSubItems {		subItemList.removeAll(subItemList); }	/**	 * Adds all Sub-MenuItem of menu to this Menu Item * @param menu */	public void importMenu(MenuItem menu) {		for (MenuItem importItem : menu.getSubItemList) {			boolean exists = false; for (MenuItem exisitingItem : this.getSubItemList) {				if (importItem.getOption("label").contentEquals(exisitingItem.getOption("label"))) {					exisitingItem.importMenu(importItem); exists = true; continue; }					}			if ( ! exists ) {				this.appendSubItem(importItem); }			}	}	private void readJSON(String jsonText) throws Exception {		jsonText = jsonText.replaceAll("'", "\"");		Object obj = JSONValue.parse(jsonText);		readJSON((JSONObject)obj);	}	private void readJSON(JSONObject JSON) throws Exception	{		Iterator iterator1 = JSON.keySet.iterator;		while (iterator1.hasNext)		{			String key = iterator1.next;			if ( JSON.get(key).getClass == new String.getClass )			{				this.options.put(key, (String)JSON.get(key));			}					else if ( JSON.get(key).getClass == new JSONObject.getClass )			{				JSONObject subitem = (JSONObject)JSON.get(key);				Iterator> iterator2 = subitem.entrySet.iterator;				while( iterator2.hasNext )				{					Map.Entry entry = iterator2.next;					MenuItem submenu = new MenuItem(entry.getValue);					this.subItemList.add(submenu);				}			}		}	}

/**	 * Generates a JSON-String representing the Information of this MenuItem * @return JSON-String */	public String writeJson {		Map obj = new LinkedHashMap; obj.putAll(options); if ( subItemList.size > 0 ) {			Map obj2 = new LinkedHashMap; Iterator iterator = subItemList.iterator; while ( iterator.hasNext ) {				MenuItem next = iterator.next; obj2.put(next.getOption("key"), next.writeJson ); }			obj.put("subitem", JSONValue.toJSONString(obj2)); }		return repairJSON(JSONValue.toJSONString(obj)); }	private String repairJSON(String JSON) {		return JSON.replaceAll("\"", "'")				//JSONStringer produces invalid JSON...			.replaceAll("\\\\+", "")					//with MUCH escaping like \\\\\\\\\\\\\\\\" .replaceAll("\\{\\'\\{", "\\{\\{")			//and to much quotes ... .replaceAll("\\}\\'\\}", "\\}\\}") .replaceAll(":\\'\\{", ":\\{") .replaceAll("\\}\\'\\}", "\\}\\}") .replaceAll("\\}\\',", "\\},") .replaceAll("\\,\\'\\{", ",\\{"); } }