Re: Update of properties - patch 1

Dan Tihelka <[email protected]>
Newsgroups gmane.comp.java.cruise-control.user
Message-ID <[email protected]>
Hallo Jeffrey,

I am sending the first code. It is the interface itself (FileResolver.java) 
and its incorporation in XmlConfigManager.Resolver. It does not break any 
other modules, nor it affects the function of CruiseControl.

Now, I am not sure about comments in the interface file. Could you check them 
and eventually correct them, please? Or delete it completely, as it is in 
XmlResolver.java :-)

I am going to continue with coding, and I will try send a small patch for each 
step ...

Thanks for eventual feedback.
Regards,
Dan T.


BTW: i tried to build the whole CruiseControl using 'ant release', but it 
failed with the error (not connected with my work ;-)):

    [junit] Running 
net.sourceforge.cruisecontrol.dashboard.service.BuildServiceTest
    [junit] Testsuite: 
net.sourceforge.cruisecontrol.dashboard.service.BuildServiceTest
    [junit] Tests run: 15, Failures: 1, Errors: 0, Time elapsed: 0,64 sec
    [junit] Tests run: 15, Failures: 1, Errors: 0, Time elapsed: 0,64 sec
    [junit]
    [junit] Testcase: 
testShouldReadTestSuitesFromFailedBuild(net.sourceforge.cruisecontrol.dashboard.service.BuildServiceTest):  
FAILED
    [junit] expected:<1000.109> but was:<1.0>
    [junit] junit.framework.AssertionFailedError: expected:<1000.109> but 
was:<1.0>
    [junit]     at 
net.sourceforge.cruisecontrol.dashboard.service.BuildServiceTest.testShouldReadTestSuitesFromFailedBuild(BuildServiceTest.java:169)
    [junit]     at 
org.jmock.core.VerifyingTestCase.runBare(VerifyingTestCase.java:39)
    [junit]
    [junit]

BUILD FAILED
/home/dtihelka/Pokusy/CruiseControl/cruisecontrol/build.xml:46: The following 
error occurred while executing this line:
/home/dtihelka/Pokusy/CruiseControl/cruisecontrol/reporting/dashboard/build.xml:166: 
Tests failed

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july

_______________________________________________
Cruisecontrol-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cruisecontrol-user
FileResolver.java (text/x-java, 2.9 KB)
/********************************************************************************
 * CruiseControl, a Continuous Integration Toolkit
 * Copyright (c) 2001, ThoughtWorks, Inc.
 * 200 E. Randolph, 25th Floor
 * Chicago, IL 60601 USA
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *     + Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *
 *     + Redistributions in binary form must reproduce the above
 *       copyright notice, this list of conditions and the following
 *       disclaimer in the documentation and/or other materials provided
 *       with the distribution.
 *
 *     + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
 *       names of its contributors may be used to endorse or promote
 *       products derived from this software without specific prior
 *       written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 ********************************************************************************/
package net.sourceforge.cruisecontrol.config;

import net.sourceforge.cruisecontrol.CruiseControlException;

import java.io.InputStream;

/**
 * The interface defining methods responsible for the general resolving of files used
 * to control CruiseControl.
 * 
 * The aim is to limit file system access to a {@link FileResolver} implementation,
 * which is good for testing, but also useful if we wanted to do something like try resolving 
 * paths against different known contexts (e.g. parent directories) rather than being limited 
 * to the working directory.
 * 
 * As the bonus, the resolved files are automatically monitored for changes which cause the 
 * reload of Cruisecontrol configuration.   
 */
public interface FileResolver {

    /**
     * Resolves the path (either absolute or relative to the location of CruiseControl 
     * configuration file).
     * 
     * @param path to file to resolve. 
     * @return stream to read the content of file from.
     * @throws CruiseControlException
     */
    InputStream getInputStream(String path) throws CruiseControlException;

}
FileResolver.patch1 (text/x-diff, 1.7 KB)
Index: main/src/net/sourceforge/cruisecontrol/config/XMLConfigManager.java
===================================================================
--- main/src/net/sourceforge/cruisecontrol/config/XMLConfigManager.java	(revision 4343)
+++ main/src/net/sourceforge/cruisecontrol/config/XMLConfigManager.java	(working copy)
@@ -36,9 +36,13 @@
  ********************************************************************************/
 package net.sourceforge.cruisecontrol.config;
 
+import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -140,7 +144,7 @@
         return md5;
     }
 
-    class Resolver implements XmlResolver {
+    class Resolver implements XmlResolver, FileResolver {
         private final Set<File> resolvedFiles = new HashSet<File>();
 
         public Element getElement(final String path) throws CruiseControlException {
@@ -149,6 +153,16 @@
             return Util.loadRootElement(file);
         }
 
+        public InputStream getInputStream(final String path) throws CruiseControlException {
+            final File file = new File(configFile.getParentFile(), path);
+            resolvedFiles.add(file);
+            try {
+                return new BufferedInputStream(new FileInputStream(file));
+            } catch (FileNotFoundException e) {
+                throw new CruiseControlException("exception when opening file " + file.getAbsolutePath(), e);
+            }
+        }
+
         public Set<File> getResolvedFiles() {
             return resolvedFiles;
         }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.