test_class.file: api/src/test/java/edu/wpi/first/shuffleboard/api/tab/model/TabModelImplTest.java
test_class.identifier: TabModelImplTest
test_case.body: @Test
    public void testGetOrCreateExistingLayout() {
      TabModel tab = new TabModelImpl("Tab");
      tab.getLayout("/", "");
      assertThrows(IllegalArgumentException.class, () -> tab.getOrCreate("/", null, null, null));
    }
test_case.class_method_signature: TabModelImplTest.testGetOrCreateExistingLayout()
test_case.full_signature: @Test public void testGetOrCreateExistingLayout()
test_case.identifier: testGetOrCreateExistingLayout
test_case.invocations: getLayout assertThrows getOrCreate
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testGetOrCreateExistingLayout()
focal_class.declarator: title
focal_class.modifier: private final
focal_class.original_string: private final String title;
focal_class.type: String
focal_class.var_name: title
focal_class.declarator: layouts = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<String, LayoutModel> layouts = new HashMap<>();
focal_class.type: Map<String, LayoutModel>
focal_class.var_name: layouts
focal_class.declarator: children = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<String, ComponentModel> children = new HashMap<>();
focal_class.type: Map<String, ComponentModel>
focal_class.var_name: children
focal_class.declarator: properties = new HashMap<>()
focal_class.modifier: private final
focal_class.original_string: private final Map<String, Object> properties = new HashMap<>();
focal_class.type: Map<String, Object>
focal_class.var_name: properties
focal_class.file: api/src/main/java/edu/wpi/first/shuffleboard/api/tab/model/TabModelImpl.java
focal_class.identifier: TabModelImpl
focal_class.interfaces: implements TabModel
focal_class.class_method_signature: TabModelImpl.TabModelImpl(String title)
focal_class.full_signature:   TabModelImpl(String title)
focal_class.identifier: TabModelImpl
focal_class.parameters: (String title)
focal_class.signature:  TabModelImpl(String title)
focal_class.class_method_signature: TabModelImpl.getTitle()
focal_class.full_signature: @Override public String getTitle()
focal_class.identifier: getTitle
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String getTitle()
focal_class.class_method_signature: TabModelImpl.getProperties()
focal_class.full_signature: @Override public Map<String, Object> getProperties()
focal_class.identifier: getProperties
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: Map<String, Object>
focal_class.signature: Map<String, Object> getProperties()
focal_class.class_method_signature: TabModelImpl.setProperties(Map<String, Object> properties)
focal_class.full_signature: @Override public void setProperties(Map<String, Object> properties)
focal_class.identifier: setProperties
focal_class.modifiers: @Override public
focal_class.parameters: (Map<String, Object> properties)
focal_class.return: void
focal_class.signature: void setProperties(Map<String, Object> properties)
focal_class.class_method_signature: TabModelImpl.getLayout(String path, String layoutType)
focal_class.full_signature: @Override public LayoutModel getLayout(String path, String layoutType)
focal_class.identifier: getLayout
focal_class.modifiers: @Override public
focal_class.parameters: (String path, String layoutType)
focal_class.return: LayoutModel
focal_class.signature: LayoutModel getLayout(String path, String layoutType)
focal_class.class_method_signature: TabModelImpl.getChild(String path)
focal_class.full_signature: @Override public ComponentModel getChild(String path)
focal_class.identifier: getChild
focal_class.modifiers: @Override public
focal_class.parameters: (String path)
focal_class.return: ComponentModel
focal_class.signature: ComponentModel getChild(String path)
focal_class.class_method_signature: TabModelImpl.addChild(ComponentModel component)
focal_class.full_signature: @Override public void addChild(ComponentModel component)
focal_class.identifier: addChild
focal_class.modifiers: @Override public
focal_class.parameters: (ComponentModel component)
focal_class.return: void
focal_class.signature: void addChild(ComponentModel component)
focal_class.class_method_signature: TabModelImpl.getChildren()
focal_class.full_signature: @Override public Map<String, ComponentModel> getChildren()
focal_class.identifier: getChildren
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: Map<String, ComponentModel>
focal_class.signature: Map<String, ComponentModel> getChildren()
focal_method.body: @Override
    public LayoutModel getLayout(String path, String layoutType) {
      LayoutModel layout = layouts.computeIfAbsent(path, p -> new LayoutModelImpl(p, this, layoutType));
      children.put(path, layout);
      return layout;
    }
focal_method.class_method_signature: TabModelImpl.getLayout(String path, String layoutType)
focal_method.full_signature: @Override public LayoutModel getLayout(String path, String layoutType)
focal_method.identifier: getLayout
focal_method.invocations: computeIfAbsent put
focal_method.modifiers: @Override public
focal_method.parameters: (String path, String layoutType)
focal_method.return: LayoutModel
focal_method.signature: LayoutModel getLayout(String path, String layoutType)