/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.filesystems; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.NoSuchElementException; import java.util.List; import java.util.ArrayList; /** * @author Ales Novak */ final class PathElements { private static final String DELIMITER = "/"; // NOI18N /** Original name */ private String name; /** tokenizer */ private StringTokenizer tokenizer; /** tokens */ private List tokens; /** Creates new PathElements */ public PathElements(String name) { this.name = name; tokenizer = new StringTokenizer(name, DELIMITER); tokens = new ArrayList(10); } /** * @return original name */ public String getOriginalName() { return name; } public Enumeration getEnumeration() { return new EnumerationImpl(this); } boolean contains(int i) { if (tokens.size() <= i) { scanUpTo(i); } return (tokens.size() > i); } String get(int i) throws NoSuchElementException { if (tokens.size() <= i) { scanUpTo(i); } if (tokens.size() <= i) { throw new NoSuchElementException(); } return (String) tokens.get(i); } private synchronized void scanUpTo(int i) { if (tokenizer == null) { return; } if (tokens.size() > i) { return; } for (int k = tokens.size() - 1; (k < i) && tokenizer.hasMoreTokens(); k++) { tokens.add(tokenizer.nextToken()); } if (!tokenizer.hasMoreTokens()) tokenizer = null; } /** Impl of enumeration */ static final class EnumerationImpl implements Enumeration { private PathElements elements; private int pos; EnumerationImpl(PathElements elements) { this.elements = elements; this.pos = 0; } /** From Enumeration */ public boolean hasMoreElements() { return elements.contains(pos); } /** From Enumeration */ public java.lang.Object nextElement() throws NoSuchElementException { return elements.get(pos++); } } }