/*************************************************************************************************** * Copyright (c) 2006, 2016 IBM Corporation and others. * All rights reserved. This program and the * accompanying materials are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: IBM Corporation - initial API and implementation **************************************************************************************************/ package org.eclipse.ui.intro.config; import java.util.ArrayList; import java.util.Enumeration; import java.util.Hashtable; import java.util.List; /** * Used to provide children of the computed gruops while constructing intro content. Clients provide * instances of this class from <code>IntroConfigurer</code> to dynamically complete the intro * content. Attribute and element names, as well as content model must match the intro * schema. * * @since 3.2 */ public class IntroElement { private String name; private String value; private Hashtable<String, String> atts = new Hashtable<>(); private List<IntroElement> children; /** * Creates a new intro element with the provided name. * * @param name * the name of the new intro element */ public IntroElement(String name) { this.name = name; } /** * Sets the value of the named attribute. * * @param name * attribute name * @param value * attribute value */ public void setAttribute(String name, String value) { atts.put(name, value); } /** * Returns the value of the attribute with a given name. * * @param name * the attribute name * @return value of the attribute with a given name or <code>null</code> if not set. */ public String getAttribute(String name) { return (String) atts.get(name); } /** * Returns the names of all the attributes defined in this element. * * @return an enumeration of all the element names */ public Enumeration<String> getAttributes() { return atts.keys(); } /** * Returns the name of the element. * * @return name of the element */ public String getName() { return name; } /** * Returns the value of the element. * * @return value of the element or <code>null</code> if not set. */ public String getValue() { return value; } /** * Sets the value of the element. * * @param value * the value of this element */ public void setValue(String value) { this.value = value; } /** * Adds a child to this element. * * @param child * the new child of this element */ public void addChild(IntroElement child) { if (children == null) children = new ArrayList<>(); children.add(child); } /** * Returns the children of this element. * * @return an array of child elements or an empty array of there are no children. */ public IntroElement[] getChildren() { if (children == null) return new IntroElement[0]; return (IntroElement[]) children.toArray(new IntroElement[children.size()]); } @Override public boolean equals(Object obj) { if (obj instanceof IntroElement) { if (obj == this) { return true; } String id1 = (String)atts.get("id"); //$NON-NLS-1$ String id2 = (String)((IntroElement)obj).atts.get("id"); //$NON-NLS-1$ if (id1 == null && id2 == null) { return super.equals(obj); } if (id1 != null && id2 != null) { return id1.equals(id2); } } return false; } }