| /******************************************************************************* |
| * Copyright (c) 2008, 2012 Oracle. 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: |
| * Oracle - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.jpt.jpa.core; |
| |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.jpt.common.core.JptResourceType; |
| import org.eclipse.jpt.common.core.utility.TextRange; |
| import org.eclipse.jpt.common.utility.internal.StringTools; |
| import org.eclipse.jpt.common.utility.model.Model; |
| |
| |
| /** |
| * Interface implemented by any object to appear in the JPA Structure view |
| * and JPA Details View. This interface is also used by the JPA Selection |
| * Managers. |
| * <p> |
| * Provisional API: This interface is part of an interim API that is still |
| * under development and expected to change significantly before reaching |
| * stability. It is available at this early stage to solicit feedback from |
| * pioneering adopters on the understanding that any code that uses this API |
| * will almost certainly be broken (repeatedly) as the API evolves. |
| * |
| * @version 2.3 |
| * @since 2.0 |
| */ |
| public interface JpaStructureNode |
| extends Model, IAdaptable |
| { |
| /** |
| * Return the structure node at the specified offset in the structure node's |
| * corresponding text file. |
| */ |
| JpaStructureNode getStructureNode(int textOffset); |
| |
| /** |
| * Return the text range to be used to select text in the editor |
| * corresponding to the structure node. |
| */ |
| TextRange getSelectionTextRange(); |
| |
| /** |
| * Return the structure node's context type. |
| * Type used to identify a JPA structure node's type with respect to the |
| * structure node's context |
| * (i.e. its type in the scope of the JPA platform that created the |
| * structure node and the structure node's resource). |
| * |
| * @see #getJpaPlatform() |
| * @see #getResourceType() |
| * @see #getType() |
| */ |
| ContextType getContextType(); |
| |
| /** |
| * Return the structure node's JPA platform. |
| * This is used to find the appropriate UI platform for building the |
| * structure node's JPA Details Page. |
| */ |
| JpaPlatform getJpaPlatform(); |
| |
| /** |
| * Return the structure node's resource type. |
| * This is used to find the appropriate UI provider for building the |
| * structure node's JPA Details Page. |
| */ |
| JptResourceType getResourceType(); |
| |
| /** |
| * Return the structure node's type. |
| * This is used to find the appropriate UI provider for building the |
| * structure node's JPA Details Page. |
| */ |
| Class<? extends JpaStructureNode> getType(); |
| |
| /** |
| * Dispose the structure node and its children. |
| * Typically this would be used to update the structure node's |
| * JPA file's root structure nodes. |
| */ |
| void dispose(); |
| |
| |
| /** |
| * Type used to identify a JPA structure node's type with respect to the |
| * structure node's context |
| * (i.e. its type in the scope of the JPA platform that created the |
| * structure node and the structure node's resource). |
| */ |
| final class ContextType { |
| private final JpaStructureNode node; |
| |
| public ContextType(JpaStructureNode node) { |
| super(); |
| if (node == null) { |
| throw new NullPointerException(); |
| } |
| this.node = node; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (obj == this) { |
| return true; |
| } |
| if ((obj == null) || (obj.getClass() != this.getClass())) { |
| return false; |
| } |
| ContextType other = (ContextType) obj; |
| return this.node.getJpaPlatform().equals(other.node.getJpaPlatform()) && |
| this.node.getResourceType().equals(other.node.getResourceType()) && |
| this.node.getType().equals(other.node.getType()); |
| } |
| |
| @Override |
| public int hashCode() { |
| final int prime = 31; |
| int hash = 17; |
| hash = hash * prime + this.node.getJpaPlatform().hashCode(); |
| hash = hash * prime + this.node.getResourceType().hashCode(); |
| hash = hash * prime + this.node.getType().hashCode(); |
| return hash; |
| } |
| |
| @Override |
| public String toString() { |
| return StringTools.buildToStringFor(this, this.node); |
| } |
| } |
| } |