| /******************************************************************************* |
| * Copyright (c) 2001, 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.dtd.core.internal.emf.util; |
| |
| import java.util.Collection; |
| import java.util.Hashtable; |
| import java.util.Iterator; |
| import java.util.Vector; |
| |
| import org.eclipse.wst.dtd.core.internal.emf.DTDElement; |
| import org.eclipse.wst.dtd.core.internal.emf.DTDElementReferenceContent; |
| import org.eclipse.wst.dtd.core.internal.emf.DTDFile; |
| |
| |
| public class DTDMetrics { |
| protected DTDFile dtdFile; |
| protected Hashtable elementReferenceMap; |
| |
| public DTDMetrics(DTDFile dtdFile) { |
| this.dtdFile = dtdFile; |
| } |
| |
| public Hashtable getElementReferences() { |
| if (elementReferenceMap == null) { |
| elementReferenceMap = new Hashtable(); |
| new DTDVisitor() { |
| |
| public void visitDTDElementReferenceContent(DTDElementReferenceContent elementReferenceContent) { |
| DTDElement dtdElement = elementReferenceContent.getReferencedElement(); |
| Object visitation = elementReferenceMap.get(dtdElement); |
| if (visitation == null) { |
| elementReferenceMap.put(dtdElement, visitation = new Vector()); |
| } |
| ((Vector) visitation).addElement(elementReferenceContent); |
| } |
| }.visitDTDFile(dtdFile); |
| } |
| |
| return elementReferenceMap; |
| } |
| |
| public int getElementReferenceCount(DTDElement dtdElement) { |
| Object elementReferences = getElementReferences().get(dtdElement); |
| return elementReferences == null ? 0 : ((Vector) elementReferences).size(); |
| } |
| |
| public DTDElement getLeastReferencedElement() { |
| DTDElement result = null; |
| int lowestReferenceCount = Integer.MAX_VALUE; |
| |
| Collection elements = dtdFile.listDTDElement(); |
| for (Iterator i = elements.iterator(); i.hasNext();) { |
| DTDElement element = (DTDElement) i.next(); |
| int count = getElementReferenceCount(element); |
| if (count < lowestReferenceCount) { |
| result = element; |
| lowestReferenceCount = count; |
| } |
| } |
| |
| return result; |
| } |
| |
| /** |
| * @generated |
| */ |
| protected Hashtable getElementReferencesGen() { |
| |
| if (elementReferenceMap == null) { |
| elementReferenceMap = new Hashtable(); |
| new DTDVisitor() { |
| |
| public void visitDTDElementReferenceContent(DTDElementReferenceContent elementReferenceContent) { |
| DTDElement dtdElement = elementReferenceContent.getReferencedElement(); |
| Object visitation = elementReferenceMap.get(dtdElement); |
| if (visitation == null) { |
| elementReferenceMap.put(dtdElement, visitation = new Vector()); |
| } |
| ((Vector) visitation).addElement(elementReferenceContent); |
| } |
| }.visitDTDFile(dtdFile); |
| } |
| |
| return elementReferenceMap; |
| } |
| |
| /** |
| * @generated |
| */ |
| protected int getElementReferenceCountGen(DTDElement dtdElement) { |
| |
| Object elementReferences = getElementReferences().get(dtdElement); |
| return elementReferences == null ? 0 : ((Vector) elementReferences).size(); |
| } |
| |
| /** |
| * @generated |
| */ |
| protected DTDElement getLeastReferencedElementGen() { |
| |
| DTDElement result = null; |
| int lowestReferenceCount = Integer.MAX_VALUE; |
| |
| Collection elements = dtdFile.listDTDElement(); |
| for (Iterator i = elements.iterator(); i.hasNext();) { |
| DTDElement element = (DTDElement) i.next(); |
| int count = getElementReferenceCount(element); |
| if (count < lowestReferenceCount) { |
| result = element; |
| lowestReferenceCount = count; |
| } |
| } |
| |
| return result; |
| } |
| } |