/**
   * This prepares the package builder, loads the jars/classpath.
   *
   * @return true if everything is good to go, false if its all gone horribly wrong, and we can't
   *     even get the package header up.
   */
  private boolean preparePackage() {

    // firstly we loadup the classpath
    builder.addPackage(new PackageDescr(pkg.getName()));

    // now we deal with the header (imports, templates, globals).
    addDrl(ServiceImplementation.getDroolsHeader(pkg));
    loadDeclaredTypes();
    if (builder.hasErrors()) {
      recordBuilderErrors(pkg);
      // if we have any failures, lets drop out now, no point in going
      // any further
      return false;
    }

    loadDSLFiles();

    // finally, any functions we will load at this point.
    AssetItemIterator it = this.pkg.listAssetsByFormat(new String[] {AssetFormats.FUNCTION});
    while (it.hasNext()) {
      AssetItem func = (AssetItem) it.next();
      addDrl(func.getContent());
      if (builder.hasErrors()) {
        recordBuilderErrors(func);
        builder.clearErrors();
      }
    }

    return errors.size() == 0;
  }
 private void loadDSLFiles() {
   // now we load up the DSL files
   builder.setDSLFiles(
       BRMSPackageBuilder.getDSLMappingFiles(
           pkg,
           new BRMSPackageBuilder.DSLErrorEvent() {
             public void recordError(AssetItem asset, String message) {
               errors.add(new ContentAssemblyError(asset, message));
             }
           }));
 }
 /** Builds assets that are "rule" assets (ie things that are not functions etc). */
 private void buildAsset(AssetItem asset) {
   ContentHandler h = ContentManager.getHandler(asset.getFormat());
   if (h instanceof IRuleAsset) {
     try {
       ((IRuleAsset) h).compile(builder, asset, new ErrorLogger());
       if (builder.hasErrors()) {
         this.recordBuilderErrors(asset);
         // clear the errors, so we don't double report.
         builder.clearErrors();
       }
     } catch (DroolsParserException e) {
       throw new RulesRepositoryException(e);
     } catch (IOException e) {
       throw new RulesRepositoryException(e);
     }
   }
 }
  public String getDRL() {
    StringBuffer src = new StringBuffer();
    src.append("package " + this.pkg.getName() + "\n");
    src.append(ServiceImplementation.getDroolsHeader(this.pkg) + "\n\n");

    // now we load up the DSL files
    builder.setDSLFiles(
        BRMSPackageBuilder.getDSLMappingFiles(
            pkg,
            new BRMSPackageBuilder.DSLErrorEvent() {
              public void recordError(AssetItem asset, String message) {
                errors.add(new ContentAssemblyError(asset, message));
              }
            }));

    // do the functions and declared types.
    AssetItemIterator it =
        this.pkg.listAssetsByFormat(new String[] {AssetFormats.FUNCTION, AssetFormats.DRL_MODEL});
    while (it.hasNext()) {
      AssetItem func = (AssetItem) it.next();
      if (!func.isArchived()) {
        src.append(func.getContent() + "\n\n");
      }
    }

    // now the rules
    Iterator iter = pkg.getAssets();
    while (iter.hasNext()) {
      AssetItem asset = (AssetItem) iter.next();
      if (!asset.isArchived()) {

        ContentHandler h = ContentManager.getHandler(asset.getFormat());
        if (h instanceof IRuleAsset) {
          IRuleAsset ruleAsset = (IRuleAsset) h;
          ruleAsset.assembleDRL(builder, asset, src);
        }

        src.append("\n\n");
      }
    }

    return src.toString();
  }
 private void addDrl(String drl) {
   if ("".equals(drl)) {
     return;
   }
   try {
     builder.addPackageFromDrl(new StringReader(drl));
   } catch (DroolsParserException e) {
     throw new RulesRepositoryException("Unexpected error when parsing package.", e);
   } catch (IOException e) {
     throw new RulesRepositoryException("IO Exception occurred when parsing package.", e);
   }
 }
 private void loadDeclaredTypes() {
   AssetItemIterator it = this.pkg.listAssetsByFormat(new String[] {AssetFormats.DRL_MODEL});
   while (it.hasNext()) {
     AssetItem as = it.next();
     try {
       builder.addPackageFromDrl(new StringReader(as.getContent()));
     } catch (DroolsParserException e) {
       this.errors.add(new ContentAssemblyError(as, "Parser exception: " + e.getMessage()));
     } catch (IOException e) {
       this.errors.add(new ContentAssemblyError(as, "IOException: " + e.getMessage()));
     }
   }
 }
 public void createBuilder() {
   List<JarInputStream> jars = BRMSPackageBuilder.getJars(pkg);
   builder = BRMSPackageBuilder.getInstance(jars);
 }
 /** I've got a package people ! */
 public Package getBinaryPackage() {
   if (this.hasErrors()) {
     throw new IllegalStateException("There is no package available, as there were errors.");
   }
   return builder.getPackage();
 }
 /** This will accumulate the errors. */
 private void recordBuilderErrors(VersionableItem asset) {
   DroolsError[] errs = builder.getErrors().getErrors();
   for (int i = 0; i < errs.length; i++) {
     this.errors.add(new ContentAssemblyError(asset, errs[i].getMessage()));
   }
 }