Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/PageData.java')
-rw-r--r--org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/PageData.java180
1 files changed, 180 insertions, 0 deletions
diff --git a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/PageData.java b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/PageData.java
new file mode 100644
index 000000000..1aca1a5bd
--- /dev/null
+++ b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/PageData.java
@@ -0,0 +1,180 @@
+package org.eclipse.ui.internal.intro.universal;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class PageData {
+ public static final String P_TOP_LEFT = "page-content/top-left"; //$NON-NLS-1$
+ public static final String P_TOP_RIGHT = "page-content/top-right"; //$NON-NLS-1$
+ public static final String P_BOTTOM_LEFT = "page-content/bottom-left"; //$NON-NLS-1$
+ public static final String P_BOTTOM_RIGHT = "page-content/bottom-right"; //$NON-NLS-1$
+
+ private String id;
+ private ArrayList groups = new ArrayList();
+ private GroupData hidden=null;
+
+ public PageData(String id) {
+ this.id = id;
+ }
+
+ public PageData(Element page) {
+ this.id = page.getAttribute("id"); //$NON-NLS-1$
+ NodeList children = page.getChildNodes();
+ for (int i=0; i<children.getLength(); i++) {
+ Node child = children.item(i);
+ if (child.getNodeType()==Node.ELEMENT_NODE) {
+ Element element = (Element)child;
+ if (element.getNodeName().equals("group")) { //$NON-NLS-1$
+ addGroup(element, false);
+ }
+ else if (element.getNodeName().equals(IUniversalIntroConstants.HIDDEN)) {
+ addGroup(element, true);
+ }
+ }
+ }
+ }
+
+ public void add(GroupData gd) {
+ if (gd.isHidden())
+ hidden = gd;
+ else
+ groups.add(gd);
+ }
+
+ public void addAnchors(ArrayList result, String groupId) {
+ GroupData group = findGroup(groupId);
+ if (group==null) return;
+ group.addAnchors(result);
+ }
+
+ public String resolvePath(String extensionId) {
+ if (isHidden(extensionId))
+ return null;
+ GroupData ddata = null;
+ for (int i=0; i<groups.size(); i++) {
+ GroupData gdata = (GroupData)groups.get(i);
+ if (gdata.isDefault())
+ ddata=gdata;
+ if (gdata.contains(extensionId)) {
+ IPath resolvedPath = new Path(id);
+ resolvedPath = resolvedPath.append(gdata.getPath());
+ resolvedPath = resolvedPath.append(extensionId);
+ return resolvedPath.toString();
+ }
+ }
+ // resolve as default
+ IPath resolvedPath = new Path(id).append(ddata.getPath());
+ resolvedPath = resolvedPath.append(IUniversalIntroConstants.DEFAULT_ANCHOR);
+ return resolvedPath.toString();
+ }
+
+ public boolean isHidden(String extensionId) {
+ return hidden!=null && hidden.contains(extensionId);
+ }
+
+ public GroupData findGroup(String groupId) {
+ if (groupId.equals(IUniversalIntroConstants.HIDDEN))
+ return hidden;
+ for (int i=0; i<groups.size(); i++) {
+ GroupData gdata = (GroupData)groups.get(i);
+ IPath path = new Path(gdata.getPath());
+ if (path.lastSegment().equals(groupId))
+ return gdata;
+ }
+ return null;
+ }
+
+ private void addGroup(Element element, boolean hide) {
+ GroupData gd = new GroupData(element);
+ if (hide) hidden = gd;
+ else
+ groups.add(gd);
+ }
+
+ public void addImplicitExtension(String extensionId, String name) {
+ ExtensionData ed = findExtension(extensionId, true);
+ if (ed!=null) {
+ // see if name needs to be supplied
+ if (ed.getName()==null || ed.getName().length()==0)
+ ed.setName(name);
+ return;
+ }
+ GroupData gd = findDefaultGroup();
+ if (gd==null && groups.size()==0) {
+ // add bottoms as the default group
+ gd = new GroupData(P_BOTTOM_LEFT, true);
+ groups.add(gd);
+ groups.add(new GroupData(P_BOTTOM_RIGHT, true));
+ }
+ gd.addImplicitExtension(extensionId, name);
+ }
+
+ private GroupData findDefaultGroup() {
+ GroupData defaultGroup = null;
+ for (int i=0; i<groups.size(); i++) {
+ GroupData gd = (GroupData)groups.get(i);
+ if (gd.isDefault()) {
+ if (defaultGroup==null)
+ defaultGroup = gd;
+ else
+ if (defaultGroup.getExtensionCount()>gd.getExtensionCount())
+ defaultGroup = gd;
+ }
+ }
+ return defaultGroup;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public ExtensionData findExtension(String extensionId, boolean checkHidden) {
+ for (int i=0; i<groups.size(); i++) {
+ GroupData gdata = (GroupData)groups.get(i);
+ ExtensionData ed = gdata.find(extensionId);
+ if (ed!=null)
+ return ed;
+ }
+ // check the hidden
+ if (checkHidden && hidden!=null)
+ return hidden.find(extensionId);
+ return null;
+ }
+
+ public String resolveExtension(String extensionId) {
+ // check the explicit groups
+ for (int i=0; i<groups.size(); i++) {
+ GroupData gdata = (GroupData)groups.get(i);
+ if (gdata.contains(extensionId)) {
+ return id+"/"+gdata.getPath()+"/"+extensionId; //$NON-NLS-1$//$NON-NLS-2$
+ }
+ }
+ // check the hidden
+ if (hidden!=null && hidden.contains(extensionId))
+ return null;
+ // create the default: pick the last group
+ if (groups.size()==0) return null;
+ GroupData last = (GroupData)groups.get(groups.size()-1);
+ return id + "/" + last.getPath() + "/" + IUniversalIntroConstants.DEFAULT_ANCHOR; //$NON-NLS-1$//$NON-NLS-2$
+ }
+
+ public void write(PrintWriter writer, String indent) {
+ writer.print(indent);
+ String indent2 = indent+" "; //$NON-NLS-1$
+ writer.println("<page id=\""+id+"\">"); //$NON-NLS-1$//$NON-NLS-2$
+ for (int i=0; i<groups.size(); i++) {
+ GroupData gd = (GroupData)groups.get(i);
+ gd.write(writer, indent2);
+ }
+ if (hidden!=null)
+ hidden.write(writer, indent2);
+ writer.print(indent);
+ writer.println("</page>"); //$NON-NLS-1$
+ }
+} \ No newline at end of file

Back to the top