| /******************************************************************************* |
| * Copyright (c) 2008 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.core.internal; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.ListIterator; |
| import org.eclipse.jpt.core.JpaStructureNode; |
| import org.eclipse.jpt.core.ResourceModel; |
| import org.eclipse.jpt.utility.internal.iterators.CloneListIterator; |
| import org.eclipse.jpt.utility.internal.model.AbstractModel; |
| |
| public abstract class AbstractResourceModel |
| extends AbstractModel |
| implements ResourceModel |
| { |
| private final List<JpaStructureNode> rootStructureNodes; |
| |
| |
| protected AbstractResourceModel() { |
| this.rootStructureNodes = new ArrayList<JpaStructureNode>(); |
| } |
| |
| public abstract Object resource(); |
| |
| public ListIterator<JpaStructureNode> rootStructureNodes() { |
| return new CloneListIterator<JpaStructureNode>(this.rootStructureNodes); |
| } |
| |
| public int rootStructureNodesSize() { |
| return this.rootStructureNodes.size(); |
| } |
| |
| /** |
| * Add the new node to the end of the list. |
| */ |
| public void addRootStructureNode(JpaStructureNode structureNode) { |
| this.addRootStructureNode(this.rootStructureNodes.size(), structureNode); |
| } |
| |
| public void addRootStructureNode(int index, JpaStructureNode structureNode) { |
| if ( ! this.rootStructureNodes.contains(structureNode)) { |
| this.addItemToList(index, structureNode, this.rootStructureNodes, ROOT_STRUCTURE_NODES_LIST); |
| } |
| } |
| |
| public void removeRootStructureNode(JpaStructureNode structureNode) { |
| this.removeItemFromList(structureNode, this.rootStructureNodes, ROOT_STRUCTURE_NODES_LIST); |
| } |
| |
| public void removeRootStructureNode(int index) { |
| this.removeItemFromList(index, this.rootStructureNodes, ROOT_STRUCTURE_NODES_LIST); |
| } |
| |
| public JpaStructureNode structureNode(int textOffset) { |
| synchronized (this.rootStructureNodes) { |
| for (JpaStructureNode rootNode : this.rootStructureNodes) { |
| JpaStructureNode node = rootNode.structureNode(textOffset); |
| if (node != null) { |
| return node; |
| } |
| } |
| } |
| return null; |
| } |
| |
| public void dispose() { |
| this.clearList(this.rootStructureNodes, ROOT_STRUCTURE_NODES_LIST); |
| } |
| |
| } |