1 package nl.toolforge.karma.cli.cmd;
2
3 import nl.toolforge.karma.core.boot.WorkingContext;
4 import nl.toolforge.karma.core.boot.WorkingContextConfiguration;
5 import nl.toolforge.karma.core.boot.WorkingContextException;
6 import nl.toolforge.karma.core.cmd.CommandDescriptor;
7 import nl.toolforge.karma.core.cmd.CommandException;
8 import nl.toolforge.karma.core.cmd.CommandResponse;
9 import nl.toolforge.karma.core.cmd.DefaultCommand;
10 import nl.toolforge.karma.core.cmd.event.ExceptionEvent;
11 import nl.toolforge.karma.core.cmd.event.MessageEvent;
12 import nl.toolforge.karma.core.cmd.event.SimpleMessage;
13 import nl.toolforge.karma.core.location.LocationException;
14 import nl.toolforge.karma.core.manifest.Manifest;
15 import nl.toolforge.karma.core.manifest.ManifestException;
16
17 import java.util.prefs.BackingStoreException;
18 import java.util.prefs.Preferences;
19
20 /***
21 * Sets the default working context identifier as a user preference. Note, this command has no effect
22 *
23 * @author D.A. Smedes
24 * @version $Id: SetWorkingContext.java,v 1.9 2004/11/12 08:39:23 asmedes Exp $
25 */
26 public class SetWorkingContext extends DefaultCommand {
27
28 private CommandResponse response = new CommandResponse();
29
30 public SetWorkingContext(CommandDescriptor descriptor) {
31 super(descriptor);
32 }
33
34 public void execute() throws CommandException {
35
36 String workingContextName = getCommandLine().getOptionValue("w");
37
38 try {
39 Preferences.userRoot().put(WorkingContext.WORKING_CONTEXT_PREFERENCE, workingContextName);
40 Preferences.userRoot().flush();
41
42 response.addEvent(new MessageEvent(this, new SimpleMessage("Loading new working context `" + workingContextName + "` ...")));
43
44 WorkingContext w = new WorkingContext(workingContextName);
45
46 WorkingContextConfiguration configuration = new WorkingContextConfiguration(w);
47 try {
48 configuration.load();
49 } catch (WorkingContextException e) {
50 throw new CommandException(CommandException.INVALID_WORKING_CONTEXT_CONFIGURATION, new Object[]{w.getName()});
51 }
52 w.configure(configuration);
53
54 getContext().setWorkingContext(w);
55
56 response.addEvent(new MessageEvent(this, new SimpleMessage("Working context set to `" + workingContextName + "`")));
57
58 } catch (BackingStoreException e) {
59 response.addEvent(new ExceptionEvent(this, e));
60 }
61
62
63
64 try {
65 response.addEvent(new MessageEvent(this, new SimpleMessage(getFrontendMessages().getString("message.LOADING_MANIFEST_FROM_HISTORY"))));
66 Manifest manifest = getContext().getWorkingContext().getManifestCollector().loadManifestFromHistory();
67 if (manifest != null) {
68
69 getContext().changeCurrentManifest(getContext().getWorkingContext().getManifestCollector().loadManifestFromHistory());
70
71 SimpleMessage message =
72 new SimpleMessage(getFrontendMessages().getString("message.MANIFEST_ACTIVATED"), new Object[]{getContext().getCurrentManifest()});
73 response.addEvent(new MessageEvent(this, message));
74
75 } else {
76 response.addEvent(new MessageEvent(this, new SimpleMessage(getFrontendMessages().getString("message.NO_MANIFEST_IN_HISTORY"))));
77 }
78 } catch (ManifestException e) {
79 throw new CommandException(e.getErrorCode(), e.getMessageArguments());
80 } catch (LocationException e) {
81 throw new CommandException(e.getErrorCode(), e.getMessageArguments());
82 }
83 }
84
85 public CommandResponse getCommandResponse() {
86 return response;
87 }
88 }