001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.core;
028
029
030 import java.util.Collections;
031 import java.util.List;
032 import java.util.concurrent.CopyOnWriteArrayList;
033
034
035 /**
036 * This classes defines a list of naming contexts for a network group.
037 */
038 public class NetworkGroupNamingContexts
039 {
040 // List of naming contexts.
041 private List<WorkflowTopologyNode> namingContexts;
042 // If list of naming contexts is returned, ensure it is immutable
043 private List<WorkflowTopologyNode> _namingContexts;
044
045 // List of public naming contexts.
046 private List<WorkflowTopologyNode> publicNamingContexts;
047 // If list of public naming contexts is returned, ensure it is immutable
048 private List<WorkflowTopologyNode> _publicNamingContexts;
049
050 // List of private naming contexts.
051 private List<WorkflowTopologyNode> privateNamingContexts;
052 // If list of private naming contexts is returned, ensure it is immutable
053 private List<WorkflowTopologyNode> _privateNamingContexts;
054
055 /**
056 * Create a list of naming contexts for a network group.
057 */
058 public NetworkGroupNamingContexts()
059 {
060 namingContexts = new CopyOnWriteArrayList<WorkflowTopologyNode>();
061 _namingContexts = Collections.unmodifiableList(namingContexts);
062
063 privateNamingContexts = new CopyOnWriteArrayList<WorkflowTopologyNode>();
064 _privateNamingContexts =
065 Collections.unmodifiableList(privateNamingContexts);
066
067 publicNamingContexts = new CopyOnWriteArrayList<WorkflowTopologyNode>();
068 _publicNamingContexts = Collections.unmodifiableList(publicNamingContexts);
069 }
070
071
072 /**
073 * Reset the list of naming contexts.
074 */
075 public void resetLists()
076 {
077 namingContexts.clear();
078 privateNamingContexts.clear();
079 publicNamingContexts.clear();
080 }
081
082
083 /**
084 * Add a workflow in the list of naming context.
085 *
086 * @param workflow the workflow to add in the list of naming contexts
087 */
088 public void addNamingContext (
089 WorkflowTopologyNode workflow
090 )
091 {
092 // add the workflow to the list of naming context
093 namingContexts.add (workflow);
094
095 // add the workflow to the private/public list of naming contexts
096 if (workflow.isPrivate())
097 {
098 privateNamingContexts.add (workflow);
099 }
100 else
101 {
102 publicNamingContexts.add (workflow);
103 }
104 }
105
106
107 /**
108 * Get the list of naming contexts.
109 *
110 * <br>Note: the returned iterable instance is immutable and attempts to
111 * remove elements will throw an UnsupportedOperationException exception.
112 *
113 * @return the list of all the naming contexts
114 */
115 public Iterable<WorkflowTopologyNode> getNamingContexts()
116 {
117 return _namingContexts;
118 }
119
120
121 /**
122 * Get the list of private naming contexts.
123 *
124 * <br>Note: the returned iterable instance is immutable and attempts to
125 * remove elements will throw an UnsupportedOperationException exception.
126 *
127 * @return the list of private naming contexts
128 */
129 public Iterable<WorkflowTopologyNode> getPrivateNamingContexts()
130 {
131 return _privateNamingContexts;
132 }
133
134
135 /**
136 * Get the list of public naming contexts.
137 *
138 * <br>Note: the returned iterable instance is immutable and attempts to
139 * remove elements will throw an UnsupportedOperationException exception.
140 *
141 * @return the list of public naming contexts
142 */
143 public Iterable<WorkflowTopologyNode> getPublicNamingContexts()
144 {
145 return _publicNamingContexts;
146 }
147
148
149 /**
150 * Dumps info from the current networkk group for debug purpose.
151 *
152 * @param leftMargin white spaces used to indent traces
153 * @return a string buffer that contains trace information
154 */
155 public StringBuilder toString (String leftMargin)
156 {
157 StringBuilder sb = new StringBuilder();
158 String newMargin = leftMargin + " ";
159
160 sb.append (leftMargin + "List of naming contexts:\n");
161 for (WorkflowTopologyNode w: namingContexts)
162 {
163 sb.append (w.toString (newMargin));
164 }
165
166 sb.append (leftMargin + "List of PRIVATE naming contexts:\n");
167 for (WorkflowTopologyNode w: privateNamingContexts)
168 {
169 sb.append (w.toString (newMargin));
170 }
171
172 sb.append (leftMargin + "List of PUBLIC naming contexts:\n");
173 for (WorkflowTopologyNode w: publicNamingContexts)
174 {
175 sb.append (w.toString (newMargin));
176 }
177
178 return sb;
179 }
180
181 }