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: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.lib.cvsclient.command.watchers;
043:
044: import java.io.*;
045: import java.util.*;
046:
047: import org.netbeans.lib.cvsclient.command.*;
048: import org.netbeans.lib.cvsclient.util.*;
049:
050: /**
051: * Describes "cvs watchers" commands' parsed information for a file.
052: * The fields in instances of this object are populated
053: * by response handlers.
054: *
055: * @author Milos Kleint
056: */
057: public class WatchersInformation extends FileInfoContainer {
058:
059: public static final String WATCH_EDIT = "edit"; //NOI18N
060: public static final String WATCH_UNEDIT = "unedit"; //NOI18N
061: public static final String WATCH_COMMIT = "commit"; //NOI18N
062: public static final String WATCH_TEMP_EDIT = "tedit"; //NOI18N
063: public static final String WATCH_TEMP_UNEDIT = "tunedit"; //NOI18N
064: public static final String WATCH_TEMP_COMMIT = "tcommit"; //NOI18N
065:
066: /**
067: * Holds the file that this info belongs to.
068: */
069: private final File file;
070:
071: /**
072: * List of users (Watchers instances) that are listening
073: * on events for this file.
074: */
075: private final List userList = new LinkedList();
076:
077: /**
078: * Creates new istance of the WatchersInformation class.
079: */
080: public WatchersInformation(File file) {
081: this .file = file;
082: }
083:
084: /**
085: * Getter for file concerned in this instance.
086: */
087: public File getFile() {
088: return file;
089: }
090:
091: /**
092: * Adds a watcher to the watchers list.
093: * @param watchingInfo a String that's first word is a user name and the
094: * rest are watching types.
095: */
096: void addWatcher(String watchingInfo) {
097: String temp = watchingInfo.trim();
098: temp = temp.replace('\t', ' ');
099: int spaceIndex = temp.indexOf(' ');
100: if (spaceIndex < 0) {
101: //BUGLOG assert.
102: } else {
103: String user = temp.substring(0, spaceIndex);
104: String watches = temp.substring(spaceIndex + 1);
105: this .userList.add(new WatchersInformation.Watcher(user,
106: watches));
107: }
108: }
109:
110: /**
111: * Returns the Iterator with WatchersInformation.Watcher instances.
112: * Never returns null.
113: */
114: public Iterator getWatchersIterator() {
115: return this .userList.iterator();
116: }
117:
118: /**
119: * Inner class that holds information about single user and his watches
120: * on the file.
121: */
122: public static class Watcher {
123:
124: private final String userName;
125: private final String watches;
126: private boolean watchingEdit;
127: private boolean watchingUnedit;
128: private boolean watchingCommit;
129: private boolean temporaryEdit;
130: private boolean temporaryUnedit;
131: private boolean temporaryCommit;
132:
133: /**
134: * Package private constuctor that creates a new instance of the Watcher.
135: * To Be called from outerclass only.
136: */
137: Watcher(String userName, String watches) {
138: this .userName = userName;
139: this .watches = watches;
140:
141: final StringTokenizer tok = new StringTokenizer(watches,
142: " ", false);
143: while (tok.hasMoreTokens()) {
144: String token = tok.nextToken();
145: if (WATCH_EDIT.equals(token)) {
146: watchingEdit = true;
147: } else if (WATCH_UNEDIT.equals(token)) {
148: watchingUnedit = true;
149: } else if (WATCH_COMMIT.equals(token)) {
150: watchingCommit = true;
151: } else if (WATCH_TEMP_COMMIT.equals(token)) {
152: temporaryCommit = true;
153: } else if (WATCH_TEMP_EDIT.equals(token)) {
154: temporaryEdit = true;
155: } else if (WATCH_TEMP_UNEDIT.equals(token)) {
156: temporaryUnedit = true;
157: } else {
158: BugLog.getInstance().bug("unknown = " + token);
159: }
160: }
161: }
162:
163: /**
164: * Gets the user that is watching the file.
165: */
166: public String getUserName() {
167: return userName;
168: }
169:
170: /**
171: * Returns all the watches defined on the file.
172: */
173: public String getWatches() {
174: return watches;
175: }
176:
177: /**
178: * User is/isn't watching commit opration.
179: */
180: public boolean isWatchingCommit() {
181: return watchingCommit;
182: }
183:
184: /**
185: * User is/isn't watching edit opration.
186: */
187: public boolean isWatchingEdit() {
188: return watchingEdit;
189: }
190:
191: /**
192: * User is/isn't watching unedit opration.
193: */
194: public boolean isWatchingUnedit() {
195: return watchingUnedit;
196: }
197:
198: /**
199: * User is/isn't temporary watching commit opration.
200: */
201: public boolean isTempWatchingCommit() {
202: return temporaryCommit;
203: }
204:
205: /**
206: * User is/isn't temporary watching edit opration.
207: */
208: public boolean isTempWatchingEdit() {
209: return temporaryEdit;
210: }
211:
212: /**
213: * User is/isn't temporary watching unedit opration.
214: */
215: public boolean isTempWatchingUnedit() {
216: return temporaryUnedit;
217: }
218: }
219: }
|