package org.greenstone.gatherer.remote; import java.io.*; import java.util.zip.*; /** */ public class ZipCollectionConfigurations { static public void main(String[] args) { if (args.length != 4) { System.err.println("Usage: ZipCollectionConfigurations "); return; } String zip_file_path = args[0]; String collect_directory_path = args[1]; String user_name = args[2]; String user_groups = args[3]; if (!collect_directory_path.endsWith(File.separator)) { collect_directory_path += File.separator; } File collect_directory = new File(collect_directory_path); try { ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zip_file_path)); ZipTools.ZipFilter collection_etc_zip_filter = new CollectionEtcZipFilter(); ZipTools.ZipFilter collection_metadata_zip_filter = new CollectionMetadataZipFilter(); // Add the etc and metadata directories from each of the collections the user has access to File[] collection_directories = collect_directory.listFiles(); for (int i = 0; i < collection_directories.length; i++) { if (collection_directories[i].isDirectory()) { String collection_name = collection_directories[i].getName(); if (checkAccess(collection_name, user_name, user_groups)) { String etc_relative_path = collection_directories[i].getName() + File.separator + "etc"; ZipTools.addFileToZip(zos, collect_directory_path, etc_relative_path, collection_etc_zip_filter); // The "metadata" directory may not exist (non-GLI collections) String metadata_relative_path = collection_directories[i].getName() + File.separator + "metadata"; File metadata_directory = new File(collect_directory_path + File.separator + metadata_relative_path); if (metadata_directory.exists()) { ZipTools.addFileToZip(zos, collect_directory_path, metadata_relative_path, collection_metadata_zip_filter); } } } } zos.putNextEntry(new ZipEntry(".gli")); zos.close(); } catch (Exception exception) { exception.printStackTrace(); } } static private boolean checkAccess(String collection_name, String user_name, String user_groups) { String[] user_groups_array = user_groups.split(","); for (int i = 0; i < user_groups_array.length; i++) { if (user_groups_array[i].equals("all-collections-editor")) { return true; } if (user_groups_array[i].equals("personal-collections-editor") && collection_name.startsWith(user_name + "-")) { return true; } if (user_groups_array[i].equals(collection_name + "-collection-editor")) { return true; } } return false; } static private class CollectionEtcZipFilter extends ZipTools.NullZipFilter { public boolean shouldIncludeFile(String relative_file_path) { // Only collect.cfg files are included return (relative_file_path.equals("collect.cfg") || relative_file_path.endsWith(File.separator + "collect.cfg")); } } static private class CollectionMetadataZipFilter extends ZipTools.NullZipFilter { public boolean shouldIncludeFileContent(String relative_file_path) { // We don't include content for any of the metadata set files return false; } } }