aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java477
1 files changed, 0 insertions, 477 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java b/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
deleted file mode 100644
index 8f1f4932..00000000
--- a/framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
+++ /dev/null
@@ -1,477 +0,0 @@
-package org.apache.maven.lifecycle.internal.builder.multithreaded;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.maven.lifecycle.internal.ProjectBuildList;
-import org.apache.maven.lifecycle.internal.ProjectSegment;
-
-/**
- * @since 3.0
- * @author Kristian Rosenvold
- * <p/>
- * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
- * This class in particular may spontaneusly self-combust and be replaced by a plexus-compliant thread aware
- * logger implementation at any time.
- */
-@SuppressWarnings( { "SynchronizationOnLocalVariableOrMethodParameter" } )
-public class ThreadOutputMuxer
-{
- private final Iterator<ProjectSegment> projects;
-
- private final ThreadLocal<ProjectSegment> projectBuildThreadLocal = new ThreadLocal<ProjectSegment>();
-
- private final Map<ProjectSegment, ByteArrayOutputStream> streams =
- new HashMap<ProjectSegment, ByteArrayOutputStream>();
-
- private final Map<ProjectSegment, PrintStream> printStreams = new HashMap<ProjectSegment, PrintStream>();
-
- private final ByteArrayOutputStream defaultOutputStreamForUnknownData = new ByteArrayOutputStream();
-
- private final PrintStream defaultPringStream = new PrintStream( defaultOutputStreamForUnknownData );
-
- private final Set<ProjectSegment> completedBuilds = Collections.synchronizedSet( new HashSet<ProjectSegment>() );
-
- private volatile ProjectSegment currentBuild;
-
- private final PrintStream originalSystemOUtStream;
-
- private final ConsolePrinter printer;
-
- /**
- * A simple but safe solution for printing to the console.
- */
-
- class ConsolePrinter
- implements Runnable
- {
- public volatile boolean running;
-
- private final ProjectBuildList projectBuildList;
-
- ConsolePrinter( ProjectBuildList projectBuildList )
- {
- this.projectBuildList = projectBuildList;
- }
-
- public void run()
- {
- running = true;
- for ( ProjectSegment projectBuild : projectBuildList )
- {
- final PrintStream projectStream = printStreams.get( projectBuild );
- ByteArrayOutputStream projectOs = streams.get( projectBuild );
-
- do
- {
- synchronized ( projectStream )
- {
- try
- {
- projectStream.wait( 100 );
- }
- catch ( InterruptedException e )
- {
- throw new RuntimeException( e );
- }
- try
- {
- projectOs.writeTo( originalSystemOUtStream );
- }
- catch ( IOException e )
- {
- throw new RuntimeException( e );
- }
-
- projectOs.reset();
- }
- }
- while ( !completedBuilds.contains( projectBuild ) );
- }
- running = false;
- }
-
- /*
- Wait until we are sure the print-stream thread is running.
- */
-
- public void waitUntilRunning( boolean expect )
- {
- while ( !running == expect )
- {
- try
- {
- Thread.sleep( 10 );
- }
- catch ( InterruptedException e )
- {
- throw new RuntimeException( e );
- }
- }
- }
- }
-
- public ThreadOutputMuxer( ProjectBuildList segmentChunks, PrintStream originalSystemOut )
- {
- projects = segmentChunks.iterator();
- for ( ProjectSegment segmentChunk : segmentChunks )
- {
- final ByteArrayOutputStream value = new ByteArrayOutputStream();
- streams.put( segmentChunk, value );
- printStreams.put( segmentChunk, new PrintStream( value ) );
- }
- setNext();
- this.originalSystemOUtStream = originalSystemOut;
- System.setOut( new ThreadBoundPrintStream( this.originalSystemOUtStream ) );
- printer = new ConsolePrinter( segmentChunks );
- new Thread( printer ).start();
- printer.waitUntilRunning( true );
- }
-
- public void close()
- {
- printer.waitUntilRunning( false );
- System.setOut( this.originalSystemOUtStream );
- }
-
- private void setNext()
- {
- currentBuild = projects.hasNext() ? projects.next() : null;
- }
-
- private boolean ownsRealOutputStream( ProjectSegment projectBuild )
- {
- return projectBuild.equals( currentBuild );
- }
-
- private PrintStream getThreadBoundPrintStream()
- {
- ProjectSegment threadProject = projectBuildThreadLocal.get();
- if ( threadProject == null )
- {
- return defaultPringStream;
- }
- if ( ownsRealOutputStream( threadProject ) )
- {
- return originalSystemOUtStream;
- }
- return printStreams.get( threadProject );
- }
-
- public void associateThreadWithProjectSegment( ProjectSegment projectBuild )
- {
- projectBuildThreadLocal.set( projectBuild );
- }
-
- public void setThisModuleComplete( ProjectSegment projectBuild )
- {
- completedBuilds.add( projectBuild );
- PrintStream stream = printStreams.get( projectBuild );
- synchronized ( stream )
- {
- stream.notifyAll();
- }
- disconnectThreadFromProject();
- }
-
- private void disconnectThreadFromProject()
- {
- projectBuildThreadLocal.remove();
- }
-
- private class ThreadBoundPrintStream
- extends PrintStream
- {
-
- public ThreadBoundPrintStream( PrintStream systemOutStream )
- {
- super( systemOutStream );
- }
-
- private PrintStream getOutputStreamForCurrentThread()
- {
- return getThreadBoundPrintStream();
- }
-
- @Override
- public void println()
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.println();
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( char c )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( c );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( char x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.println( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( double d )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( d );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( double x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.println( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( float f )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( f );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( float x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.println( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( int i )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( i );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( int x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.println( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( long l )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( l );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( long x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( boolean b )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( b );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( boolean x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( char s[] )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( s );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( char x[] )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( Object obj )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( obj );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( Object x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.println( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void print( String s )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.print( s );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void println( String x )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.println( x );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void write( byte b[], int off, int len )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.write( b, off, len );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void close()
- {
- getOutputStreamForCurrentThread().close();
- }
-
- @Override
- public void flush()
- {
- getOutputStreamForCurrentThread().flush();
- }
-
- @Override
- public void write( int b )
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.write( b );
- currentStream.notifyAll();
- }
- }
-
- @Override
- public void write( byte b[] )
- throws IOException
- {
- final PrintStream currentStream = getOutputStreamForCurrentThread();
- synchronized ( currentStream )
- {
- currentStream.write( b );
- currentStream.notifyAll();
- }
- }
- }
-}