import java.io.*;
import java.util.jar.*;

try
{
  JarFile file = new JarFile( new File( basedir, "child2/target/child2-1.0-SNAPSHOT-bin.jar" ) );
  JarEntry handlerEntry = file.getEntry( "META-INF/spring.handlers" );
  if ( handlerEntry == null )
  {
    return false;
  }

  BufferedReader br = new BufferedReader( new InputStreamReader( file.getInputStream( handlerEntry ) ) );

  boolean aopFound = false;
  boolean ctxFound = false;

  String line = null;
  while( ( line = br.readLine() ) != null )
  {
    if ( line.endsWith( "AopNamespaceHandler1" ) )
    {
      aopFound = true;
    }
    else if ( line.endsWith( "ContextNamespaceHandler1" ) )
    {
      ctxFound = true;
    }

    if ( aopFound && ctxFound )
    {
      break;
    }
  }

  if ( !aopFound )
  {
    System.out.println( "Cannot find entry 'AopNamespaceHandler1' in: " + handlerEntry.getName() );
    return false;
  }

  br.close();
  
  if ( !ctxFound )
  {
    System.out.println( "Cannot find entry 'ContextNamespaceHandler1' in: " + handlerEntry.getName() );
    return false;
  }
  
  JarEntry schemaEntry = file.getEntry( "META-INF/spring.schemas" );
  if ( schemaEntry == null )
  {
    return false;
  }

  br = new BufferedReader( new InputStreamReader( file.getInputStream( schemaEntry ) ) );

  boolean found30 = false;
  boolean found40 = false;

  String line = null;
  while( ( line = br.readLine() ) != null )
  {
    if ( line.endsWith( "spring-aop-3.0.xsd" ) )
    {
      found30 = true;
    }
    else if ( line.endsWith( "spring-aop-4.0.xsd" ) )
    {
      found40 = true;
    }

    if ( found30 && found40 )
    {
      break;
    }
  }

  br.close();
  
  if ( !found30 )
  {
    System.out.println( "Cannot find entry 'spring-aop-3.0.xsd' in: " + schemaEntry.getName() );
    return false;
  }

  if ( !found40 )
  {
    System.out.println( "Cannot find entry 'spring-aop-4.0.xsd' in: " + schemaEntry.getName() );
    return false;
  }
  
  return true;
}
catch( IOException e )
{
    e.printStackTrace();
}

return false;
