| /******************************************************************************* |
| * Copyright (c) 2004 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.wst.html.core.modelquery; |
| |
| |
| import java.util.Hashtable; |
| import java.util.Iterator; |
| |
| import org.eclipse.wst.common.contentmodel.CMNamedNodeMap; |
| import org.eclipse.wst.common.contentmodel.CMNode; |
| |
| /** |
| */ |
| abstract class CMNamedNodeMapForBuddySystem implements CMNamedNodeMap { |
| |
| |
| private boolean isXHTML = false; |
| private Hashtable map = new Hashtable(); |
| |
| /** |
| * Constructor of CMNamedNodeMapForBuddySystem. |
| * CAUTION: Each derived class must call 'makeBuddySystem' method in its |
| * constructor to build up its contents. |
| */ |
| public CMNamedNodeMapForBuddySystem(boolean isXHTML) { |
| super(); |
| this.isXHTML = isXHTML; |
| } |
| |
| /* |
| * @see CMNamedNodeMap#getLength() |
| */ |
| public int getLength() { |
| return map.size(); |
| } |
| |
| /* |
| * @see CMNamedNodeMap#getNamedItem(String) |
| */ |
| public CMNode getNamedItem(String name) { |
| String key = canonicalName(name); |
| if (!map.containsKey(key)) |
| return null; |
| return (CMNode) map.get(key); |
| } |
| |
| /* |
| * @see CMNamedNodeMap#item(int) |
| */ |
| public CMNode item(int index) { |
| Iterator iter = iterator(); |
| while (iter.hasNext()) { |
| Object node = iter.next(); |
| if (--index < 0) |
| return (CMNode) node; |
| } |
| return null; |
| } |
| |
| /* |
| * @see CMNamedNodeMap#iterator() |
| */ |
| public Iterator iterator() { |
| return map.values().iterator(); |
| } |
| |
| /* package scope. */ |
| void put(String name, CMNode cmnode) { |
| if (name == null || cmnode == null) |
| return; |
| map.put(canonicalName(name), cmnode); |
| } |
| |
| abstract protected String getKeyName(CMNode original); |
| |
| abstract protected CMNode createBuddySystem(CMNode original); |
| |
| protected boolean isXHTML() { |
| return isXHTML; |
| } |
| |
| /** |
| * Each derived class must call this method in its constructor |
| * to build up its contents. |
| */ |
| protected void makeBuddySystem(CMNamedNodeMap original) { |
| Iterator i = original.iterator(); |
| if (i == null) |
| return; |
| while (i.hasNext()) { |
| CMNode org = (CMNode) i.next(); |
| String key = getKeyName(org); |
| CMNode newNode = createBuddySystem(org); |
| put(key, newNode); |
| } |
| } |
| |
| private String canonicalName(String name) { |
| return name.toUpperCase(); |
| } |
| } |