blob: 5c76409bd01ecf5aca4f4ec57e6b0c2430fc0907 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 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.internal.intro.universal;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.ui.intro.config.IntroElement;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class GroupData {
boolean fDefault=false;
private String path;
private ArrayList<BaseData> children = new ArrayList<>();
public GroupData(String path, boolean defaultGroup) {
fDefault = defaultGroup;
this.path = path;
}
public GroupData(Element element) {
if (element.getNodeName().equals("hidden")) //$NON-NLS-1$
path = IUniversalIntroConstants.HIDDEN;
else
path = element.getAttribute("path"); //$NON-NLS-1$
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
if (child.getNodeName().equals("extension")) { //$NON-NLS-1$
loadExtension((Element) child);
}
else if (child.getNodeName().equals("separator")) {//$NON-NLS-1$"
loadSeparator((Element)child);
}
}
}
String df = element.getAttribute("default"); //$NON-NLS-1$
if (df!=null && df.equalsIgnoreCase("true")) //$NON-NLS-1$
fDefault = true;
}
public boolean isHidden() {
return (path.equals(IUniversalIntroConstants.HIDDEN));
}
public boolean isDefault() {
return fDefault;
}
public void addAnchors(List<IntroElement> result) {
for (int i = 0; i < children.size(); i++) {
BaseData edata = children.get(i);
String id = edata.getId();
IntroElement element = null;
String tagName="anchor"; //$NON-NLS-1$
if (edata instanceof SeparatorData)
tagName = "hr"; //$NON-NLS-1$
element = new IntroElement(tagName);
element.setAttribute("id", id); //$NON-NLS-1$
result.add(element);
}
}
public void add(BaseData ed) {
children.add(ed);
ed.setParent(this);
}
public void add(int index, BaseData ed) {
children.add(index, ed);
ed.setParent(this);
}
public void remove(BaseData ed) {
children.remove(ed);
ed.setParent(null);
}
public void addImplicitExtension(String id, String name) {
ExtensionData ed = new ExtensionData(id, name, IUniversalIntroConstants.LOW, true);
add(ed);
}
private void loadSeparator(Element element) {
String id = element.getAttribute("id"); //$NON-NLS-1$
SeparatorData sd = new SeparatorData(id);
add(sd);
}
private void loadExtension(Element element) {
String id = element.getAttribute("id"); //$NON-NLS-1$
String name = element.getAttribute("name"); //$NON-NLS-1$
String importance = element.getAttribute("importance"); //$NON-NLS-1$
ExtensionData ed = new ExtensionData(id, name, importance, false);
add(ed);
}
public BaseData[] getChildren() {
return children.toArray(new BaseData[children.size()]);
}
public int getExtensionCount() {
int count=0;
for (int i=0; i<children.size(); i++) {
BaseData data = children.get(i);
if (data instanceof ExtensionData)
count++;
}
return count;
}
/*
public ExtensionData[] getExtensions() {
ArrayList result = new ArrayList();
for (int i=0; i<children.size(); i++) {
BaseData data = (BaseData)children.get(i);
if (data instanceof ExtensionData)
result.add(data);
}
return (ExtensionData[]) result.toArray(new ExtensionData[result.size()]);
}
*/
public String getPath() {
return path;
}
public boolean contains(String id) {
return find(id)!=null;
}
BaseData find(String extensionId) {
for (int i = 0; i < children.size(); i++) {
BaseData data = children.get(i);
if (data.getId().equals(extensionId))
return data;
}
return null;
}
public int getIndexOf(BaseData ed) {
return children.indexOf(ed);
}
public int getIndexOf(String baseId) {
for (int i = 0; i < children.size(); i++) {
BaseData bd = children.get(i);
if (bd.getId().equals(baseId))
return i;
}
return -1;
}
public boolean canMoveUp(BaseData ed) {
int index = children.indexOf(ed);
return (index>0);
}
public boolean canMoveDown(BaseData ed) {
int index = children.indexOf(ed);
return (index!= -1 && index < children.size()-1);
}
public void moveUp(BaseData ed) {
int index = children.indexOf(ed);
BaseData swapped = children.get(index-1);
children.set(index, swapped);
children.set(index-1, ed);
}
public void moveDown(BaseData ed) {
int index = children.indexOf(ed);
BaseData swapped = children.get(index+1);
children.set(index, swapped);
children.set(index+1, ed);
}
public void addSeparator(BaseData after) {
SeparatorData sd = new SeparatorData();
sd.id = ""+sd.hashCode(); //$NON-NLS-1$
if (after!=null) {
int index = children.indexOf(after);
if (index!= -1) {
children.add(index+1, sd);
return;
}
}
children.add(sd);
}
public void write(PrintWriter writer, String indent) {
writer.print(indent);
if (isHidden())
writer.print("<hidden>"); //$NON-NLS-1$
else {
writer.print("<group path=\""+path+"\""); //$NON-NLS-1$ //$NON-NLS-2$
if (fDefault)
writer.println(" default=\"true\">"); //$NON-NLS-1$
else
writer.println(">"); //$NON-NLS-1$
}
for (int i=0; i<children.size(); i++) {
BaseData ed = children.get(i);
ed.write(writer, indent+" "); //$NON-NLS-1$
}
writer.print(indent);
if (isHidden())
writer.println("</hidden>"); //$NON-NLS-1$
else
writer.println("</group>"); //$NON-NLS-1$
}
}