blob: 2413eaf9a429f7ee7e2e1af530b052cd20325314 [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.menus;
/**
* <p>
* A location element that is used to select a specific part within the
* application. In the Eclipse workbench, this correspond with the concept of a
* part. Within JFace, this can refer to any similar ideas or can just be
* ignored.
* </p>
* <p>
* Clients may instantiate this class, but must not extend.
* </p>
* <p>
* <strong>PROVISIONAL</strong>. This class or interface has been added as
* part of a work in progress. There is a guarantee neither that this API will
* work nor that it will remain the same. Please do not use this API without
* consulting with the Platform/UI team.
* </p>
* <p>
* This class will eventually exist in <code>org.eclipse.jface.menus</code>.
* </p>
*
* @since 3.2
*
*/
public final class SPart implements LocationElement {
/**
* The constant used to indicate that the <code>part</code> is a class.
*/
public static final int TYPE_CLASS = 0;
/**
* The constant used to indicate that the <code>part</code> is an
* identifier.
*/
public static final int TYPE_ID = 1;
/**
* The location within the part to place the menu element.
*/
private final LeafLocationElement location;
/**
* The identifier of the part to which this instance refers, or the class
* (i.e., class, super class, interface or super interface) of the part.
* This value must not be <code>null</code>.
*/
private final String part;
/**
* The type of information carried in <code>part</code>.
*/
private final int type;
/**
* Constructs a new instance of <code>SPart</code>.
*
* @param part
* The part to which this refers. Either its identifier or its
* class. Must not be <code>null</code>.
* @param type
* The type of data carried in <code>part</code>.
* @param location
* The location within this part that the menu element should be
* placed. Must not be <code>null</code>.
*/
public SPart(final String part, final int type,
final LeafLocationElement location) {
if (part == null) {
throw new NullPointerException("A part needs a class or id"); //$NON-NLS-1$
}
if ((type < TYPE_CLASS) || (type > TYPE_ID)) {
throw new IllegalArgumentException(
"The part must be either a class or an identifier"); //$NON-NLS-1$
}
if (location == null) {
throw new NullPointerException(
"A part needs a location for the menu element to appear"); //$NON-NLS-1$
}
this.part = part;
this.type = type;
this.location = location;
}
public final LocationElement createChild(final String id) {
final LeafLocationElement childPath = (LeafLocationElement) getLocation()
.createChild(id);
return new SPart(getPart(), getType(), childPath);
}
/**
* Returns the location within this part that the menu element should be
* placed. Must not be <code>null</code>.
*
* @return The location in which the menu element should be placed; never
* <code>null</code>.
*/
public final LeafLocationElement getLocation() {
return location;
}
/**
* Returns either the class name to which this part refers or the identifier
* of the part. The type is indicated by a call to {@link SPart#getType()}
*
* @return The class name or identifier; never <code>null</code>.
*/
public final String getPart() {
return part;
}
/**
* Returns the type of this part. This indicates whether this part refers to
* an identifier or to a class.
*
* @return Either <code>TYPE_CLASS</code> or <code>TYPE_ID</code>.
*/
public final int getType() {
return type;
}
public final String toString() {
final StringBuffer buffer = new StringBuffer();
buffer.append("SPart("); //$NON-NLS-1$
switch (type) {
case TYPE_CLASS:
buffer.append("class"); //$NON-NLS-1$
break;
case TYPE_ID:
buffer.append("id"); //$NON-NLS-1$
break;
default:
buffer.append("unknown"); //$NON-NLS-1$
}
buffer.append(',');
buffer.append(part);
buffer.append(',');
buffer.append(location);
buffer.append(')');
return buffer.toString();
}
}