1 package fr.in2p3.jsaga.command;
2
3 import org.apache.commons.cli.*;
4 import org.ogf.saga.error.*;
5 import org.ogf.saga.logicalfile.LogicalFile;
6 import org.ogf.saga.logicalfile.LogicalFileFactory;
7 import org.ogf.saga.namespace.Flags;
8 import org.ogf.saga.session.Session;
9 import org.ogf.saga.session.SessionFactory;
10 import org.ogf.saga.url.URL;
11 import org.ogf.saga.url.URLFactory;
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public class NSLogicalLocation extends AbstractCommand {
26 private static final String OPT_HELP = "h", LONGOPT_HELP = "help";
27 private static final String OPT_CREATE = "c", LONGOPT_CREATE = "create";
28 private static final String OPT_REGISTER = "r", LONGOPT_REGISTER = "register";
29 private static final String OPT_UNREGISTER = "u", LONGOPT_UNREGISTER = "unregister";
30 private static final String OPT_LIST = "l", LONGOPT_LIST = "list";
31
32 public NSLogicalLocation() {
33 super("jsaga-logical-location", new String[]{"Logical URL"}, new String[]{OPT_HELP, LONGOPT_HELP});
34 }
35
36 public static void main(String[] args) throws Exception {
37 NSLogicalLocation command = new NSLogicalLocation();
38 CommandLine line = command.parse(args);
39 if (line.hasOption(OPT_HELP))
40 {
41 command.printHelpAndExit(null);
42 }
43 else if (line.hasOption(OPT_REGISTER))
44 {
45 LogicalFile file;
46 if (line.hasOption(OPT_CREATE)) {
47 file = command.getLogicalFile(Flags.CREATE.or(Flags.EXCL));
48 } else {
49 file = command.getLogicalFile();
50 }
51 file.addLocation(URLFactory.createURL(line.getOptionValue(OPT_REGISTER)));
52 file.close();
53 System.exit(0);
54 }
55 else if (line.hasOption(OPT_UNREGISTER))
56 {
57 LogicalFile file = command.getLogicalFile();
58 file.removeLocation(URLFactory.createURL(line.getOptionValue(OPT_UNREGISTER)));
59 if (file.listLocations().size() == 0) {
60 file.remove();
61 }
62 file.close();
63 System.exit(0);
64 }
65 else if (line.hasOption(OPT_LIST))
66 {
67 LogicalFile file = command.getLogicalFile();
68 for (URL location : file.listLocations()) {
69 System.out.println(location);
70 }
71 file.close();
72 System.exit(0);
73 }
74 }
75
76 private LogicalFile getLogicalFile() throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, DoesNotExistException, TimeoutException, NoSuccessException, IncorrectStateException, AlreadyExistsException {
77 return this.getLogicalFile(Flags.NONE.getValue());
78 }
79 private LogicalFile getLogicalFile(int flags) throws NotImplementedException, IncorrectURLException, AuthenticationFailedException, AuthorizationFailedException, PermissionDeniedException, BadParameterException, DoesNotExistException, TimeoutException, NoSuccessException, IncorrectStateException, AlreadyExistsException {
80 URL logicalUrl = URLFactory.createURL(m_nonOptionValues[0]);
81 Session session = SessionFactory.createSession(true);
82 return LogicalFileFactory.createLogicalFile(session, logicalUrl, flags);
83 }
84
85 protected Options createOptions() {
86 Options opt = new Options();
87
88
89 OptionGroup group = new OptionGroup();
90 group.setRequired(true);
91 {
92 group.addOption(OptionBuilder.withDescription("Display this help and exit")
93 .withLongOpt(LONGOPT_HELP)
94 .create(OPT_HELP));
95 group.addOption(OptionBuilder.withDescription("Register replica <Physical URL>")
96 .hasArg()
97 .withArgName("Physical URL")
98 .withLongOpt(LONGOPT_REGISTER)
99 .create(OPT_REGISTER));
100 group.addOption(OptionBuilder.withDescription("Unregister replica <Physical URL>")
101 .hasArg()
102 .withArgName("Physical URL")
103 .withLongOpt(LONGOPT_UNREGISTER)
104 .create(OPT_UNREGISTER));
105 group.addOption(OptionBuilder.withDescription("List replicas <Physical URL>")
106 .withLongOpt(LONGOPT_LIST)
107 .create(OPT_LIST));
108 }
109 opt.addOptionGroup(group);
110
111
112 opt.addOption(OptionBuilder.withDescription("Create logical file")
113 .withLongOpt(LONGOPT_CREATE)
114 .create(OPT_CREATE));
115
116 return opt;
117 }
118 }