Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/internal/PositionInfo.java')
-rw-r--r--bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/internal/PositionInfo.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/internal/PositionInfo.java b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/internal/PositionInfo.java
new file mode 100644
index 00000000000..35c76d28b81
--- /dev/null
+++ b/bundles/org.eclipse.e4.ui.model.workbench/src/org/eclipse/e4/ui/model/internal/PositionInfo.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2013 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:
+ * René Brandstetter - Bug 411821 - [QuickAccess] Contribute SearchField
+ * through a fragment or other means
+ ******************************************************************************/
+
+package org.eclipse.e4.ui.model.internal;
+
+/**
+ * A holder class for the full information to position an element in a list.
+ *
+ * @author René Brandstetter
+ */
+public final class PositionInfo {
+ /** The position type to use. */
+ private final Position position;
+
+ /**
+ * The additional positioning information which can be used to position an
+ * element relative to another element.
+ */
+ private final String positionReference;
+
+ /**
+ * The {@link PositionInfo} which represent an insert at the beginning of
+ * the list.
+ */
+ public static final PositionInfo FIRST = new PositionInfo(Position.FIRST, null);
+
+ /**
+ * The {@link PositionInfo} which represent an insert at the end of the
+ * list.
+ */
+ public static final PositionInfo LAST = new PositionInfo(Position.LAST, null);
+
+ /**
+ * Creates an instance of the PositionInfo.
+ *
+ * @param position
+ * the kind of the positioning
+ * @param positionReference
+ * additional information which is need to position an element
+ * (e.g.: index, ID of another element)
+ * @throws NullPointerException
+ * if the <code>position</code> is <code>null</code>
+ */
+ public PositionInfo(Position position, String positionReference) {
+ if (position == null) {
+ throw new NullPointerException("No position given!");
+ }
+
+ this.position = position;
+ this.positionReference = positionReference;
+ }
+
+ /**
+ * Returns the kind/type of positioning which should be used.
+ *
+ * @return the position
+ */
+ public Position getPosition() {
+ return position;
+ }
+
+ /**
+ * Returns additional information which is needed to place an element.
+ *
+ * @return the positionReference, or <code>null</code> if no additional information is given
+ */
+ public String getPositionReference() {
+ return positionReference;
+ }
+
+ /**
+ * Returns the additional information which is needed to place an element as
+ * an int.
+ *
+ * @return the positionReference as an int
+ * @throws NumberFormatException
+ * if the {@link #positionReference} can't be parsed to an int
+ * @throws NullPointerException
+ * if the {@link #positionReference} is <code>null</code>
+ */
+ public int getPositionReferenceAsInteger() {
+ return Integer.parseInt(positionReference);
+ }
+
+ /**
+ * Creates a {@link PositionInfo} object out of the given positioning
+ * string.
+ *
+ * <p>
+ * <b>Examples for a positioning string:</b>
+ * <ul>
+ * <li><code>last</code> - place an element to the end of a list</li>
+ * <li><code>first</code> - place an element to the beginning of a list</li>
+ * <li><code>index:3</code> - place an element at the provided index 3 in a
+ * list</li>
+ * <li><code>before:org.eclipse.test.id</code> - place an element in a list
+ * in front of the element with the ID "org.eclipse.test.id"</li>
+ * <li><code>after:org.eclipse.test.id</code> - place an element in a list
+ * after the element with the ID "org.eclipse.test.id"</li>
+ * </ul>
+ * </p>
+ *
+ * @param positionInfo
+ * the positioning string
+ * @return a {@link PositionInfo} which holds all the data mentioned in the
+ * positioning string, or <code>null</code> if the positioning
+ * string doesn't hold a positioning information
+ */
+ public static PositionInfo parse(String positionInfo) {
+ Position position = Position.find(positionInfo);
+ if (position != null) {
+ switch (position) {
+ case FIRST:
+ return PositionInfo.FIRST;
+
+ case LAST:
+ return PositionInfo.LAST;
+
+ default:
+ return new PositionInfo(position, positionInfo.substring(position.prefix.length()));
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder back = new StringBuilder(position.prefix);
+ if (positionReference != null) {
+ back.append(positionReference);
+ }
+ return back.toString();
+ }
+} \ No newline at end of file

Back to the top