View Javadoc

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      // Reload the last used manifest for the new working context.
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  }