001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: * The Original Software is NetBeans. The Initial Developer of the Original
026: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
027: * Microsystems, Inc. All Rights Reserved.
028: *
029: * If you wish your version of this file to be governed by only the CDDL
030: * or only the GPL Version 2, indicate your decision by adding
031: * "[Contributor] elects to include this software in this distribution
032: * under the [CDDL or GPL Version 2] license." If you do not indicate a
033: * single choice of license, a recipient has the option to distribute
034: * your version of this file under either the CDDL, the GPL Version 2 or
035: * to extend the choice of license to its licensees as provided above.
036: * However, if you add GPL Version 2 code and therefore, elected the GPL
037: * Version 2 license, then the option applies only if the new code is
038: * made subject to such option by the copyright holder.
039: */
040:
041: package org.netbeans.lib.profiler.results.cpu.marking;
042:
043: import java.util.ArrayList;
044: import java.util.Collection;
045: import java.util.Collections;
046: import java.util.HashSet;
047: import java.util.LinkedHashSet;
048: import java.util.Set;
049:
050: /**
051: *
052: * @author Jaroslav Bachorik
053: */
054: public class HierarchicalMark extends Mark {
055: //~ Static fields/initializers -----------------------------------------------------------------------------------------------
056:
057: public static final HierarchicalMark DEFAULT = new HierarchicalMark(
058: "DEFAULT", "Overall", null); // NOI18N
059:
060: //~ Instance fields ----------------------------------------------------------------------------------------------------------
061:
062: private HierarchicalMark parent;
063: private final Set children;
064: private final Set rootPath;
065:
066: //~ Constructors -------------------------------------------------------------------------------------------------------------
067:
068: /** Creates a new instance of HierarchicalMark */
069: public HierarchicalMark(final String label,
070: final String description, final HierarchicalMark parent) {
071: super (label, description,
072: ((parent == null) || (parent == DEFAULT)));
073: this .parent = ((parent == null) ? HierarchicalMark.DEFAULT
074: : parent);
075:
076: if (!isDefault) {
077: this .rootPath = new LinkedHashSet(this .parent.getRootPath());
078: } else {
079: this .rootPath = new HashSet();
080: }
081:
082: this .rootPath.add(label);
083:
084: this .children = new HashSet();
085:
086: if ((this .parent != null) && (this .parent != DEFAULT)) {
087: this .parent.addChild(this );
088: }
089: }
090:
091: //~ Methods ------------------------------------------------------------------------------------------------------------------
092:
093: public Set getChildren() {
094: return Collections.unmodifiableSet(children);
095: }
096:
097: public Collection getLabels() {
098: return new ArrayList(rootPath);
099: }
100:
101: public HierarchicalMark getParent() {
102: return parent;
103: }
104:
105: public boolean isRoot() {
106: return (parent == null) || (parent == DEFAULT);
107: }
108:
109: public Set getRootPath() {
110: return rootPath;
111: }
112:
113: public Object clone() {
114: return new HierarchicalMark(label, description, parent);
115: }
116:
117: protected void addChild(HierarchicalMark child) {
118: children.add(child);
119: }
120: }
|