001: /* ====================================================================
002: * The JRefactory License, Version 1.0
003: *
004: * Copyright (c) 2001 JRefactory. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * 3. The end-user documentation included with the redistribution,
019: * if any, must include the following acknowledgment:
020: * "This product includes software developed by the
021: * JRefactory (http://www.sourceforge.org/projects/jrefactory)."
022: * Alternately, this acknowledgment may appear in the software itself,
023: * if and wherever such third-party acknowledgments normally appear.
024: *
025: * 4. The names "JRefactory" must not be used to endorse or promote
026: * products derived from this software without prior written
027: * permission. For written permission, please contact seguin@acm.org.
028: *
029: * 5. Products derived from this software may not be called "JRefactory",
030: * nor may "JRefactory" appear in their name, without prior written
031: * permission of Chris Seguin.
032: *
033: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
034: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
035: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
036: * DISCLAIMED. IN NO EVENT SHALL THE CHRIS SEGUIN OR
037: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
038: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
039: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
040: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
041: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
042: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
043: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
044: * SUCH DAMAGE.
045: * ====================================================================
046: *
047: * This software consists of voluntary contributions made by many
048: * individuals on behalf of JRefactory. For more information on
049: * JRefactory, please see
050: * <http://www.sourceforge.org/projects/jrefactory>.
051: */
052: package org.acm.seguin.ide.elixir.version;
053:
054: import org.acm.seguin.tools.RefactoryInstaller;
055:
056: import java.io.File;
057: import java.io.IOException;
058: import javax.swing.JMenuItem;
059: import com.elixirtech.ide.version.IVersionControl;
060: import com.elixirtech.tree.TNode;
061: import com.elixirtech.fx.*;
062: import org.acm.seguin.version.SourceSafe;
063: import org.acm.seguin.version.VersionControl;
064: import org.acm.seguin.version.VersionControlCache;
065:
066: /**
067: * Interact with version control
068: *
069: *@author Chris Seguin
070: *@created June 29, 1999
071: */
072: public class ElixirVersionControl implements IVersionControl {
073: // Instance Variables
074: private VersionControl delegate = null;
075:
076: /**
077: * Creates a menu item
078: *
079: *@param parent Node that describes the file
080: *@return The menu item
081: */
082: public JMenuItem getMenu(TNode parent) {
083: String name = parent.getName();
084:
085: JMenuItem jmi = new JMenuItem("Querying source control...");
086: jmi.setEnabled(false);
087:
088: if (delegate == null) {
089: init();
090: }
091: ElixirContainsThread ect = new ElixirContainsThread(jmi,
092: parent, delegate, this );
093: ect.start();
094:
095: return jmi;
096: }
097:
098: /**
099: * Adds a file to visual source safe
100: *
101: *@param filename The full path to the file
102: */
103: public void add(String filename) {
104: System.out.println("Add: " + filename);
105: VersionControlCache cache = VersionControlCache.getCache();
106: cache.add(filename, VersionControlCache.ADD_PROGRESS);
107: if (delegate == null) {
108: init();
109: }
110:
111: Thread evct = new ElixirVersionControlThread(delegate,
112: filename, ElixirVersionControlThread.ADD);
113: evct.start();
114: }
115:
116: /**
117: * Adds an array of files
118: *
119: *@param filenames The array of files to add
120: */
121: public void add(String[] filenames) {
122: System.out.println("Multiple Add");
123: for (int ndx = 0; ndx < filenames.length; ndx++) {
124: add(filenames[ndx]);
125: }
126: }
127:
128: /**
129: * Checks in a file to visual source safe
130: *
131: *@param filename The full pathname of the file
132: */
133: public void checkIn(String filename) {
134: System.out.println("Check In: " + filename);
135: if (delegate == null) {
136: init();
137: }
138:
139: Thread evct = new ElixirVersionControlThread(delegate,
140: filename, ElixirVersionControlThread.CHECK_IN);
141: evct.start();
142: }
143:
144: /**
145: * Checks in multiple files
146: *
147: *@param filenames Multiple files to check in
148: */
149: public void checkIn(String[] filenames) {
150: System.out.println("Multiple Check In");
151: for (int ndx = 0; ndx < filenames.length; ndx++) {
152: checkIn(filenames[ndx]);
153: }
154: }
155:
156: /**
157: * Checks out a file from visual source safe
158: *
159: *@param filename The full path name of the file
160: */
161: public void checkOut(String filename) {
162: System.out.println("Check Out: " + filename);
163: if (delegate == null) {
164: init();
165: }
166:
167: Thread evct = new ElixirVersionControlThread(delegate,
168: filename, ElixirVersionControlThread.CHECK_OUT);
169: evct.start();
170: }
171:
172: /**
173: * Is this file contained in visual source safe?
174: *
175: *@param filename The full path of the file in question
176: *@return Returns true if it is in source safe
177: */
178: public boolean contains(String filename) {
179: VersionControlCache cache = VersionControlCache.getCache();
180: return cache.lookup(filename) != VersionControlCache.ADD;
181: }
182:
183: /**
184: * Constructor for ElixirVersionControl object
185: */
186: private synchronized void init() {
187: if (delegate == null) {
188: // Make sure everything is installed properly
189: (new RefactoryInstaller(false)).run();
190:
191: delegate = new SourceSafe();
192: }
193: }
194: }
195: // EOF
|