-/*
- * Copyright (C) 2001-2006 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with any library licensed under the Apache Software License,
- * and distribute linked combinations including the two. You must obey the
- * GNU General Public License in all respects for all of the code used other than
- * the above mentioned libraries. If you modify this file, you may extend this
- * exception to your version of the file, but you are not obligated to do so.
- * If you do not wish to do so, delete this exception statement from your version.
- */package mir.changetracker;
-
-import mir.util.LockFile;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Class to report changes by writing to a file and using a lockfile.
- *
- * This class is NOT thread-safe, the perform() method should not be called
- * concurrently.
- */
-public class ChangeReporter {
- public static void reportChanges(
- ChangeTracker aTracker, String aBasePath,
- List anExcludedPaths, File aReportFilename,
- File aReportLockfile, long aMaxTimeOut, boolean aFlush) throws IOException {
-
- reportChanges(aTracker, aBasePath,
- (String[]) anExcludedPaths.toArray(new String[0]),
- aReportFilename, aReportLockfile, aMaxTimeOut, aFlush);
- }
-
- /**
- * @param aBasePath The base path that should be tracked
- * @param anExcludedPaths The paths that are excluded from tracking
- * @param aTracker The actual tracker to query for changes
- * @param aReportFilename The file to write changed filenames to
- * @param aReportLockfile The lockfile for the report file
- */
- public static void reportChanges(ChangeTracker aTracker, String aBasePath,
- String[] anExcludedPaths, File aReportFilename, File aReportLockfile,
- long aMaxTimeOut, boolean aFlush) throws IOException {
- List changesToReport = aTracker.getChanges(aBasePath, anExcludedPaths);
- LockFile lockFile = null;
-
- if (aReportLockfile!=null)
- lockFile = new LockFile(aReportLockfile);
-
- if (changesToReport.size()>0) {
- if (lockFile == null || lockFile.lock()) {
- try {
- FileWriter writer = new FileWriter(aReportFilename.getAbsolutePath(), true);
- try {
- Iterator i = changesToReport.iterator();
- while (i.hasNext()) {
- writer.write((String) i.next());
- writer.write("\n");
- }
- }
- finally {
- try {
- writer.close();
- }
- catch (Throwable t) {
- }
- }
-
- if (aFlush) {
- aTracker.removeChanges(changesToReport);
- }
- }
- finally {
- try {
- if (lockFile!=null)
- lockFile.unlock();
- }
- catch (Throwable t) {
- }
- }
- }
- }
- }
-}