source: trunk/gli/src/org/greenstone/gatherer/remote/ZipCollectionConfigurations.java@ 13320

Last change on this file since 13320 was 11942, checked in by mdewsnip, 18 years ago

ZipCollectionConfigurations now includes only those collections that the user has access to.

  • Property svn:keywords set to Author Date Id Revision
File size: 3.0 KB
Line 
1package org.greenstone.gatherer.remote;
2
3import java.io.*;
4import java.util.zip.*;
5import org.greenstone.gatherer.util.ZipTools;
6
7
8/**
9 */
10public class ZipCollectionConfigurations
11{
12 static public void main(String[] args)
13 {
14 if (args.length != 4) {
15 System.err.println("Usage: ZipCollectionConfigurations <zip-file> <collect-directory-path> <user-name> <user-groups>");
16 return;
17 }
18
19 String zip_file_path = args[0];
20 String collect_directory_path = args[1];
21 String user_name = args[2];
22 String user_groups = args[3];
23
24 if (!collect_directory_path.endsWith(File.separator)) {
25 collect_directory_path += File.separator;
26 }
27 File collect_directory = new File(collect_directory_path);
28
29 try {
30 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zip_file_path));
31 ZipTools.ZipFilter collection_etc_zip_filter = new CollectionEtcZipFilter();
32 ZipTools.ZipFilter collection_metadata_zip_filter = new CollectionMetadataZipFilter();
33
34 // Add the etc and metadata directories from each of the collections the user has access to
35 File[] collection_directories = collect_directory.listFiles();
36 for (int i = 0; i < collection_directories.length; i++) {
37 if (collection_directories[i].isDirectory()) {
38 String collection_name = collection_directories[i].getName();
39 if (checkAccess(collection_name, user_name, user_groups)) {
40 String etc_relative_path = collection_directories[i].getName() + File.separator + "etc";
41 ZipTools.addFileToZip(zos, collect_directory_path, etc_relative_path, collection_etc_zip_filter);
42 String metadata_relative_path = collection_directories[i].getName() + File.separator + "metadata";
43 ZipTools.addFileToZip(zos, collect_directory_path, metadata_relative_path, collection_metadata_zip_filter);
44 }
45 }
46 }
47
48 zos.putNextEntry(new ZipEntry(".gli"));
49 zos.close();
50 }
51 catch (Exception exception) {
52 exception.printStackTrace();
53 }
54 }
55
56
57 static private boolean checkAccess(String collection_name, String user_name, String user_groups)
58 {
59 String[] user_groups_array = user_groups.split(",");
60 for (int i = 0; i < user_groups_array.length; i++) {
61 if (user_groups_array[i].equals("all-collections-editor")) {
62 return true;
63 }
64 if (user_groups_array[i].equals("personal-collections-editor") && collection_name.startsWith(user_name + "-")) {
65 return true;
66 }
67 if (user_groups_array[i].equals(collection_name + "-collection-editor")) {
68 return true;
69 }
70 }
71
72 return false;
73 }
74
75
76 static private class CollectionEtcZipFilter
77 extends ZipTools.NullZipFilter
78 {
79 public boolean shouldIncludeFile(String relative_file_path)
80 {
81 // Only collect.cfg files are included
82 return (relative_file_path.equals("collect.cfg") || relative_file_path.endsWith(File.separator + "collect.cfg"));
83 }
84 }
85
86
87 static private class CollectionMetadataZipFilter
88 extends ZipTools.NullZipFilter
89 {
90 public boolean shouldIncludeFileContent(String relative_file_path)
91 {
92 // We don't include content for any of the metadata set files
93 return false;
94 }
95 }
96}
Note: See TracBrowser for help on using the repository browser.