private void processGroup ( final String group , final File parentFoder ) throws Exception { ByteArrayOutputStream resultOutputStream = null ; InputStream resultInputStream = null ; try { getLog ( ) . info ( "processing group: " + group ) ; // mock request final HttpServletRequest request = Mockito . mock ( HttpServletRequest . class ) ; Mockito . when ( request . getContextPath ( ) ) . thenReturn ( normalizeContextPath ( contextPath ) ) ; Mockito . when ( request . getRequestURI ( ) ) . thenReturn ( group ) ; // mock response final HttpServletResponse response = Mockito . mock ( HttpServletResponse . class ) ; resultOutputStream = new ByteArrayOutputStream ( ) ; Mockito . when ( response . getOutputStream ( ) ) . thenReturn ( new DelegatingServletOutputStream ( resultOutputStream ) ) ; // init context final WroConfiguration config = Context . get ( ) . getConfig ( ) ; // the maven plugin should ignore empty groups, since it will try to process all types of resources. config . setIgnoreEmptyGroup ( true ) ; Context . set ( Context . webContext ( request , response , Mockito . mock ( FilterConfig . class ) ) , config ) ; Context . get ( ) . setAggregatedFolderPath ( getAggregatedPathResolver ( ) . resolve ( ) ) ; // perform processing getManagerFactory ( ) . create ( ) . process ( ) ; // encode version & write result to file resultInputStream = new UnclosableBufferedInputStream ( resultOutputStream . toByteArray ( ) ) ; final File destinationFile = new File ( parentFoder , rename ( group , resultInputStream ) ) ; final File parentFolder = destinationFile . getParentFile ( ) ; if ( ! parentFolder . exists ( ) ) { // make directories if required parentFolder . mkdirs ( ) ; } destinationFile . createNewFile ( ) ; // allow the same stream to be read again resultInputStream . reset ( ) ; getLog ( ) . debug ( "Created file: " + destinationFile . getName ( ) ) ; final OutputStream fos = new FileOutputStream ( destinationFile ) ; // use reader to detect encoding IOUtils . copy ( resultInputStream , fos ) ; fos . close ( ) ; // delete empty files if ( destinationFile . length ( ) == 0 ) { getLog ( ) . debug ( "No content found for group: " + group ) ; destinationFile . delete ( ) ; } else { getLog ( ) . info ( "file size: " + destinationFile . getName ( ) + " -> " + destinationFile . length ( ) + " bytes" ) ; getLog ( ) . info ( destinationFile . getAbsolutePath ( ) + " (" + destinationFile . length ( ) + " bytes" + ")" ) ; } } finally { // instruct the build about the change in context of incremental build if ( getBuildContext ( ) != null ) { getBuildContext ( ) . refresh ( parentFoder ) ; } if ( resultOutputStream != null ) { resultOutputStream . close ( ) ; } if ( resultInputStream != null ) { resultInputStream . close ( ) ; } } }
Process a single group .