blob: b529c8f6a932dbfe8155a5ecc36827dbe19ac177 [file] [log] [blame]
/***************************************************************************************************
* 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;
}
}