All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.setup.CmsSetupLoggingThread Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software GmbH & Co. KG, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.setup;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Logging Thread which collects the output from CmsSetupThread and
 * stores it in a Vector that the OpenCms setup wizard can read via
 * the getMessages() method.

* * @since 6.0.0 */ public class CmsSetupLoggingThread extends Thread { /** The line number reader to print out the report. */ private LineNumberReader m_lineReader; /** The file writer for logging. */ private FileWriter m_logWriter; /** A list of messages. */ private List m_messages; /** The piped input. */ private PipedInputStream m_pipedIn; /** The piped output. */ private PipedOutputStream m_pipedOut; /** Signals if the logging thread is finished. */ private boolean m_stopThread; /** * Constructor.

* * @param pipedOut the output stream to write to * @param log the file name to write the log to (if null, no log is written) */ public CmsSetupLoggingThread(PipedOutputStream pipedOut, String log) { super("OpenCms: Setup logging"); m_pipedOut = pipedOut; m_messages = new ArrayList(); m_stopThread = false; if (log != null) { try { File logFile = new File(log); if (logFile.exists()) { logFile.delete(); } m_logWriter = new FileWriter(logFile); } catch (Throwable t) { m_logWriter = null; } } else { m_logWriter = null; } try { m_pipedIn = new PipedInputStream(); m_pipedIn.connect(m_pipedOut); m_lineReader = new LineNumberReader(new BufferedReader(new InputStreamReader(m_pipedIn))); } catch (Exception e) { m_messages.add(e.toString()); } } /** * Returns a Vector with the last collected log messages.

* * @return a Vector with the last collected log messages */ public List getMessages() { return m_messages; } /** * Returns "true" if the logging is finished.

* * @return "true" if the logging is finished */ public boolean isFinished() { return m_stopThread; } /** * @see java.lang.Runnable#run() */ @Override public void run() { int lineNr = 0; int lastLineNr = -1; String line = null; while (!m_stopThread) { lineNr = m_lineReader.getLineNumber(); try { line = m_lineReader.readLine(); } catch (IOException e) { // "Write end dead" IO exceptions can be ignored } if (line != null) { if (lineNr > lastLineNr) { // supress multiple output of the same line after "Write end dead" IO exception String content = (lineNr + 1) + ":\t" + line; m_messages.add(content); lastLineNr = lineNr; if (m_logWriter != null) { try { m_logWriter.write(content + "\n"); } catch (IOException e) { m_logWriter = null; } } } } } try { m_pipedIn.close(); } catch (IOException e) { // ignore } if (m_logWriter != null) { try { m_logWriter.close(); } catch (IOException e) { m_logWriter = null; } } } /** * Used to break the loop in the run() method.

*/ public void stopThread() { try { // give the logging thread a chance to read all remaining messages Thread.sleep(1000); } catch (Throwable t) { // ignore } m_stopThread = true; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy