/******************************************************************************* * 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$ } }