1 /*
2  StatCvs - CVS statistics generation
3  Copyright (C) 2002  Lukasz Pekacki <lukasz@pekacki.de>
4  http://statcvs.sf.net/
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with this library; if not, write to the Free Software
18  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 
20  $RCSfile: ConfigurationOptions.java,v $
21  $Date: 2005/03/20 19:12:25 $
22  */
23 package net.sf.statsvn.output;
24 
25 import java.io.File;
26 
27 import net.sf.statcvs.output.ConfigurationException;
28 import net.sf.statcvs.output.ConfigurationOptions;
29 import net.sf.statcvs.util.FileUtils;
30 import net.sf.statsvn.util.ISvnProcessor;
31 import net.sf.statsvn.util.JavaUtilTaskLogger;
32 import net.sf.statsvn.util.SvnCommandLineProcessor;
33 import net.sf.statsvn.util.TaskLogger;
34 import net.sf.statsvn.util.svnkit.SvnKitProcessor;
35 
36 /**
37  * Class for storing all command line parameters. The parameters are set by the
38  * {@link net.sf.statsvn.Main#main} method. Interested classes can read all
39  * parameter values from here.
40  *
41  * @todo Should be moved to more appropriate package and made non-public
42  *
43  * @author jentzsch
44  * @version $Id: ConfigurationOptions.java,v 1.17 2005/03/20 19:12:25 squig Exp $
45  */
46 public final class SvnConfigurationOptions {
47 	private static final int DEFAULT_THRESHOLD_MS_FOR_CONCURRENCY = 2000;
48 
49 	private static final int DEFAULT_NUMBER_THREADS = 25;
50 
51 	private static String cacheDir = "";
52 
53 	private static final String DEFAULT_CACHE_DIR = System.getProperty("user.home") + FileUtils.getDirSeparator() + ".statsvn" + FileUtils.getDirSeparator();
54 
55 	private static String svnUsername = null;
56 
57 	private static String svnPassword = null;
58 
59 	private static TaskLogger taskLogger = new JavaUtilTaskLogger();
60 
61 	private static int numberSvnDiffThreads = DEFAULT_NUMBER_THREADS;
62 
63 	private static long thresholdInMsToUseConcurrency = DEFAULT_THRESHOLD_MS_FOR_CONCURRENCY;
64 
65 	private static boolean dump = false;
66 
67 	private static boolean anonymize = false;
68 
69 	private static String tagsDirectory = "/tags/";
70 
71 	// use the newer diff. will be overridden if this is not possible.
72 	private static boolean useLegacyDiff = false;
73 
74 	private static ISvnProcessor processor;
75 
76     private static boolean useSvnKit = false;
77 
78 	/**
79 	 * A utility class (only static methods) should be final and have a private
80 	 * constructor.
81 	 */
SvnConfigurationOptions()82 	private SvnConfigurationOptions() {
83 	}
84 
85 	/**
86 	 * Returns the cacheDir.
87 	 *
88 	 * @return String output Directory
89 	 */
getCacheDir()90 	public static String getCacheDir() {
91 		return cacheDir;
92 	}
93 
94 	/**
95 	 * Sets the cacheDir.
96 	 *
97 	 * @param cacheDir
98 	 *            The cacheDir to set
99 	 * @throws ConfigurationException
100 	 *             if the cache directory cannot be created
101 	 */
setCacheDir(String cacheDir)102 	public static void setCacheDir(String cacheDir) throws ConfigurationException {
103 		if (!cacheDir.endsWith(FileUtils.getDirSeparator())) {
104 			cacheDir += FileUtils.getDefaultDirSeparator();
105 		}
106 		final File cDir = new File(cacheDir);
107 		if (!cDir.exists() && !cDir.mkdirs()) {
108 			throw new ConfigurationException("Can't create cache directory: " + cacheDir);
109 		}
110 		SvnConfigurationOptions.cacheDir = cacheDir;
111 	}
112 
113 	/**
114 	 * Sets the cacheDir to the DEFAULT_CACHE_DIR
115 	 *
116 	 * @throws ConfigurationException
117 	 *             if the cache directory cannot be created
118 	 */
setCacheDirToDefault()119 	public static void setCacheDirToDefault() throws ConfigurationException {
120 		setCacheDir(DEFAULT_CACHE_DIR);
121 	}
122 
getCheckedOutDirectoryAsFile()123 	public static File getCheckedOutDirectoryAsFile() {
124 		return new File(FileUtils.getPathWithoutEndingSlash(ConfigurationOptions.getCheckedOutDirectory()) + FileUtils.getDirSeparator());
125 	}
126 
127 	/**
128 	 * @return Returns the svnPassword.
129 	 */
getSvnPassword()130 	public static String getSvnPassword() {
131 		return svnPassword;
132 	}
133 
134 	/**
135 	 * @param svnPassword
136 	 *            The svnPassword to set.
137 	 */
setSvnPassword(final String svnPassword)138 	public static void setSvnPassword(final String svnPassword) {
139 		SvnConfigurationOptions.svnPassword = svnPassword;
140 	}
141 
142 	/**
143 	 * @return Returns the svnUsername.
144 	 */
getSvnUsername()145 	public static String getSvnUsername() {
146 		return svnUsername;
147 	}
148 
149 	/**
150 	 * @param svnUsername
151 	 *            The svnUsername to set.
152 	 */
setSvnUsername(final String svnUsername)153 	public static void setSvnUsername(final String svnUsername) {
154 		SvnConfigurationOptions.svnUsername = svnUsername;
155 	}
156 
157 	/**
158 	 * @return the taskLogger
159 	 */
getTaskLogger()160 	public static TaskLogger getTaskLogger() {
161 		return taskLogger;
162 	}
163 
164 	/**
165 	 * @param taskLogger
166 	 *            the taskLogger to set
167 	 */
setTaskLogger(final TaskLogger taskLogger)168 	public static void setTaskLogger(final TaskLogger taskLogger) {
169 		SvnConfigurationOptions.taskLogger = taskLogger;
170 	}
171 
172 	/**
173 	 * @return the numberSvnDiffThreads
174 	 */
getNumberSvnDiffThreads()175 	public static int getNumberSvnDiffThreads() {
176 		return numberSvnDiffThreads;
177 	}
178 
179 	/**
180 	 * @param numberSvnDiffThreads
181 	 *            the numberSvnDiffThreads to set
182 	 */
setNumberSvnDiffThreads(final int numberSvnDiffThreads)183 	public static void setNumberSvnDiffThreads(final int numberSvnDiffThreads) {
184 		SvnConfigurationOptions.numberSvnDiffThreads = numberSvnDiffThreads;
185 	}
186 
187 	/**
188 	 * @return the thresholdInMsToUseConcurrency
189 	 */
getThresholdInMsToUseConcurrency()190 	public static long getThresholdInMsToUseConcurrency() {
191 		return thresholdInMsToUseConcurrency;
192 	}
193 
194 	/**
195 	 * @param thresholdInMsToUseConcurrency
196 	 *            the thresholdInMsToUseConcurrency to set
197 	 */
setThresholdInMsToUseConcurrency(final long thresholdToUseConcurrency)198 	public static void setThresholdInMsToUseConcurrency(final long thresholdToUseConcurrency) {
199 		SvnConfigurationOptions.thresholdInMsToUseConcurrency = thresholdToUseConcurrency;
200 	}
201 
setDumpContent(final boolean dumpContent)202 	public static void setDumpContent(final boolean dumpContent) {
203 		dump = dumpContent;
204 	}
205 
isDumpContent()206 	public static boolean isDumpContent() {
207 		return dump;
208 	}
209 
setAnonymize(final boolean bAnon)210 	public static void setAnonymize(final boolean bAnon) {
211 		anonymize = bAnon;
212 	}
213 
isAnonymize()214 	public static boolean isAnonymize() {
215 		return anonymize;
216 	}
217 
218 	/**
219 	 * Following request 1692245, add option -tags-dir to the command line.
220 	 */
setTagsDirectory(final String tagsDir)221 	public static void setTagsDirectory(final String tagsDir) {
222 		if (tagsDir != null) {
223 			tagsDirectory = tagsDir.replace('\\', '/');
224 			if (!tagsDirectory.endsWith("/")) {
225 				tagsDirectory = tagsDir + "/";
226 			}
227 		}
228 	}
229 
230 	/**
231 	 * Following request 1692245, add option -tags-dir to the command line.
232 	 */
getTagsDirectory()233 	public static String getTagsDirectory() {
234 		return tagsDirectory;
235 	}
236 
237 	/**
238 	 * Should we use a one diff per-file-per-revision or should we use the newer one diff per-revision?
239 	 *
240 	 * @return true if legacy diff should be used.
241 	 */
isLegacyDiff()242 	public static boolean isLegacyDiff() {
243 		return useLegacyDiff;
244 	}
245 
246 	/**
247 	 * Should we use a one diff per-file-per-revision or should we use the newer one diff per-revision?
248 	 *
249 	 * @param isLegacy true if the legacy diff should be used.
250 	 */
setLegacyDiff(final boolean isLegacy)251 	public static void setLegacyDiff(final boolean isLegacy) {
252 		useLegacyDiff = isLegacy;
253 	}
254 
255 	 /**
256      * Should we use svnkit to query the repository
257      *
258      * @return true if we should be using SVN kit.
259      */
isUsingSVNKit()260     public static boolean isUsingSVNKit() {
261         return useSvnKit;
262     }
263 
264     /**
265      * Should we use svnkit to query the repository.
266      *
267      * @param isSvnKit true if we should use svnkit
268      */
setUsingSvnKit(final boolean isSvnKit)269     public static void setUsingSvnKit(final boolean isSvnKit) {
270         useSvnKit = isSvnKit;
271     }
272 
getProcessor()273 	public static ISvnProcessor getProcessor()
274 	{
275 	    if (processor==null) {
276 	        if (isUsingSVNKit()) {
277 	            try {
278 	            processor = new SvnKitProcessor();
279 	            } catch (NoClassDefFoundError ex)
280 	            {
281 	                getTaskLogger().error("Unable to find svnkit.jar and/or jna.jar in the same folder as statsvn.jar. Please copy these files and try again.");
282 	                throw ex;
283 	            }
284 	        }
285 	        else
286 	            processor = new SvnCommandLineProcessor();
287 	    }
288 	    return processor;
289 
290 	}
291 
292 }
293