public void savePackage(PackageConfigData data) throws SerializationException {
    log.info("USER:"******" SAVING package [" + data.getName() + "]");

    PackageItem item = rulesRepository.loadPackage(data.getName());

    // If package is being unarchived.
    boolean unarchived = (!data.isArchived() && item.isArchived());
    Calendar packageLastModified = item.getLastModified();

    DroolsHeader.updateDroolsHeader(data.getHeader(), item);
    updateCategoryRules(data, item);

    item.updateExternalURI(data.getExternalURI());
    item.updateDescription(data.getDescription());
    item.archiveItem(data.isArchived());
    item.updateBinaryUpToDate(false);
    if (!data.getFormat().equals("")) {
      item.updateFormat(data.getFormat());
    }
    RuleBaseCache.getInstance().remove(data.getUuid());
    item.checkin(data.getDescription());

    // If package is archived, archive all the assets under it
    if (data.isArchived()) {
      handleArchivedForSavePackage(data, item);
    } else if (unarchived) {
      handleUnarchivedForSavePackage(data, item, packageLastModified);
    }
  }
 private void handleIsPackagesListed(
     boolean archive,
     String workspace,
     RepositoryFilter filter,
     List<PackageConfigData> result,
     PackageConfigData data) {
   if (!archive
       && (filter == null || filter.accept(data, RoleType.PACKAGE_READONLY.getName()))
       && (workspace == null || isWorkspace(workspace, data.getWorkspaces()))) {
     result.add(data);
   } else if (archive
       && data.isArchived()
       && (filter == null || filter.accept(data, RoleType.PACKAGE_READONLY.getName()))
       && (workspace == null || isWorkspace(workspace, data.getWorkspaces()))) {
     result.add(data);
   }
 }