Split project settings and app settings into separate classes (#724)...
26e7d961
Sam Carlberg
authored and
GitHub
committed
23 changed files
AppSettingsChangedEvent.java
/core/src/main/java/edu/wpi/grip/core/events/AppSettingsChangedEvent.java+23
/core/src/main/java/edu/wpi/grip/core/events/AppSettingsChangedEvent.java
Add comment 1 Plus  package edu.wpi.grip.core.events;
Add comment 2 Plus  
Add comment 3 Plus  import edu.wpi.grip.core.settings.AppSettings;
Add comment 4 Plus  
Add comment 5 Plus  import static com.google.common.base.Preconditions.checkNotNull;
Add comment 6 Plus  
Add comment 7 Plus  /**
Add comment 8 Plus   * An event fired when the app settings are changed.
Add comment 9 Plus   */
Add comment 10 Plus  public class AppSettingsChangedEvent {
Add comment 11 Plus  
Add comment 12 Plus   private final AppSettings appSettings;
Add comment 13 Plus  
Add comment 14 Plus   public AppSettingsChangedEvent(AppSettings appSettings) {
Add comment 15 Plus   this.appSettings = checkNotNull(appSettings, "appSettings");
Add comment 16 Plus   }
Add comment 17 Plus  
Add comment 18 Plus   public AppSettings getAppSettings() {
Add comment 19 Plus   return appSettings;
Add comment 20 Plus   }
Add comment 21 Plus  
Add comment 22 Plus  }
Add comment 23 Plus  
GripServer.java
/core/src/main/java/edu/wpi/grip/core/http/GripServer.java-8+42
/core/src/main/java/edu/wpi/grip/core/http/GripServer.java
Add comment 1 package edu.wpi.grip.core.http;
Add comment 2
Add comment 3 Minus  import edu.wpi.grip.core.events.ProjectSettingsChangedEvent;
Add comment 3 Plus  import edu.wpi.grip.core.events.AppSettingsChangedEvent;
Add comment 4 import edu.wpi.grip.core.exception.GripServerException;
Add comment 5 import edu.wpi.grip.core.settings.SettingsProvider;
Add comment 6
Add comment 48 * Possible lifecycle states of the server.
Add comment 49 */
Add comment 50 public enum State {
Add comment 51 Minus   /** The server has not been started yet. */
Add comment 51 Plus   /**
Add comment 52 Plus   * The server has not been started yet.
Add comment 53 Plus   */
Add comment 52 54 PRE_RUN,
Add comment 53 Minus   /** The server is currently running. */
Add comment 55 Plus   /**
Add comment 56 Plus   * The server is currently running.
Add comment 57 Plus   */
Add comment 54 58 RUNNING,
Add comment 55 Minus   /** The server was running and has been stopped. */
Add comment 59 Plus   /**
Add comment 60 Plus   * The server was running and has been stopped.
Add comment 61 Plus   */
Add comment 56 62 STOPPED
Add comment 57 63 }
Add comment 58 64
Add comment 100 106 */
Add comment 101 107 public static final String DATA_PATH = ROOT_PATH + "/data";
Add comment 102 108
Add comment 109 Plus   /**
Add comment 110 Plus   * The default port the server should run on.
Add comment 111 Plus   */
Add comment 112 Plus   public static final int DEFAULT_PORT = 8080;
Add comment 113 Plus  
Add comment 114 Plus   /**
Add comment 115 Plus   * The lowest valid TCP port number.
Add comment 116 Plus   */
Add comment 117 Plus   private static final int MIN_PORT = 1024;
Add comment 118 Plus  
Add comment 119 Plus   /**
Add comment 120 Plus   * The highest valid TCP port number.
Add comment 121 Plus   */
Add comment 122 Plus   private static final int MAX_PORT = 65535;
Add comment 123 Plus  
Add comment 124 Plus   /**
Add comment 125 Plus   * Checks if the given TCP port is valid for a server to run on. This doesn't check availability.
Add comment 126 Plus   *
Add comment 127 Plus   * @param port the port to check
Add comment 128 Plus   *
Add comment 129 Plus   * @return true if the port is valid, false if not
Add comment 130 Plus   */
Add comment 131 Plus   public static boolean isPortValid(int port) {
Add comment 132 Plus   return port >= MIN_PORT && port <= MAX_PORT;
Add comment 133 Plus   }
Add comment 134 Plus  
Add comment 103 135 public interface JettyServerFactory {
Add comment 104 136 Server create(int port);
Add comment 105 137 }
Add comment 116 148 GripServer(ContextStore contextStore,
Add comment 117 149 JettyServerFactory serverFactory,
Add comment 118 150 SettingsProvider settingsProvider) {
Add comment 119 Minus   this.port = settingsProvider.getProjectSettings().getServerPort();
Add comment 151 Plus   this.port = settingsProvider.getAppSettings().getServerPort();
Add comment 120 152 this.serverFactory = serverFactory;
Add comment 121 153 this.server = serverFactory.create(port);
Add comment 122 154 this.server.setHandler(handlers);
Add comment 213 245 * @param port the new port to run on.
Add comment 214 246 */
Add comment 215 247 public void setPort(int port) {
Add comment 248 Plus   if (!isPortValid(port)) {
Add comment 249 Plus   throw new IllegalArgumentException("Invalid port: " + port);
Add comment 250 Plus   }
Add comment 216 251 stop();
Add comment 217 252 server = serverFactory.create(port);
Add comment 218 253 server.setHandler(handlers);
Add comment 228 263 }
Add comment 229 264
Add comment 230 265 @Subscribe
Add comment 231 Minus   public void settingsChanged(ProjectSettingsChangedEvent event) {
Add comment 232 Minus   int port = event.getProjectSettings().getServerPort();
Add comment 266 Plus   public void settingsChanged(AppSettingsChangedEvent event) {
Add comment 267 Plus   int port = event.getAppSettings().getServerPort();
Add comment 233 268 if (port != getPort()) {
Add comment 234 269 setPort(port);
Add comment 235 Minus   start();
Add comment 236 270 }
Add comment 237 271 }
Add comment 238 272
HttpPipelineSwitcher.java
/core/src/main/java/edu/wpi/grip/core/http/HttpPipelineSwitcher.java-20+1
/core/src/main/java/edu/wpi/grip/core/http/HttpPipelineSwitcher.java
Add comment 1 package edu.wpi.grip.core.http;
Add comment 2
Add comment 3 import edu.wpi.grip.core.serialization.Project;
Add comment 4 Minus  import edu.wpi.grip.core.util.GripMode;
Add comment 5 4
Add comment 6 5 import com.google.inject.Inject;
Add comment 7 6 import com.google.inject.Singleton;
Add comment 22 21 public class HttpPipelineSwitcher extends PedanticHandler {
Add comment 23 22
Add comment 24 23 private final Project project;
Add comment 25 Minus   private final GripMode mode;
Add comment 26 24
Add comment 27 25 @Inject
Add comment 28 Minus   HttpPipelineSwitcher(ContextStore store, Project project, GripMode mode) {
Add comment 26 Plus   HttpPipelineSwitcher(ContextStore store, Project project) {
Add comment 29 27 super(store, GripServer.PIPELINE_UPLOAD_PATH, true);
Add comment 30 28 this.project = project;
Add comment 31 Minus   this.mode = mode;
Add comment 32 29 }
Add comment 33 30
Add comment 34 31 @Override
Add comment 41 38 baseRequest.setHandled(true);
Add comment 42 39 return;
Add comment 43 40 }
Add comment 44 Minus   switch (mode) {
Add comment 45 Minus   case HEADLESS:
Add comment 46 41 project.open(new String(IOUtils.toByteArray(request.getInputStream()), "UTF-8"));
Add comment 47 42 response.setStatus(HttpServletResponse.SC_CREATED);
Add comment 48 43 baseRequest.setHandled(true);
Add comment 49 Minus   break;
Add comment 50 Minus   case GUI:
Add comment 51 Minus   // Don't run in GUI mode, it doesn't make much sense and can easily deadlock if pipelines
Add comment 52 Minus   // are rapidly posted.
Add comment 53 Minus   // Intentional fall-through to default
Add comment 54 Minus   default:
Add comment 55 Minus   // Don't know the mode or the mode is unsupported; let the client know
Add comment 56 Minus   response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
Add comment 57 Minus   sendTextContent(response,
Add comment 58 Minus   String.format("GRIP is not in the correct mode: should be HEADLESS, but is %s", mode),
Add comment 59 Minus   CONTENT_TYPE_PLAIN_TEXT);
Add comment 60 Minus   baseRequest.setHandled(true);
Add comment 61 Minus   break;
Add comment 62 Minus   }
Add comment 63 44 }
Add comment 64 45 }
Add comment 65 46
Project.java
/core/src/main/java/edu/wpi/grip/core/serialization/Project.java+1
/core/src/main/java/edu/wpi/grip/core/serialization/Project.java
Add comment 49 ConnectionConverter connectionConverter,
Add comment 50 ProjectSettingsConverter projectSettingsConverter) {
Add comment 51 xstream.setMode(XStream.NO_REFERENCES);
Add comment 52 Plus   xstream.ignoreUnknownElements(); // ignores all unknown tags
Add comment 52 53 xstream.registerConverter(stepConverter);
Add comment 53 54 xstream.registerConverter(sourceConverter);
Add comment 54 55 xstream.registerConverter(socketConverter);
AppSettings.java
/core/src/main/java/edu/wpi/grip/core/settings/AppSettings.java
/core/src/main/java/edu/wpi/grip/core/settings/AppSettings.java
ProjectSettings.java
/core/src/main/java/edu/wpi/grip/core/settings/ProjectSettings.java
/core/src/main/java/edu/wpi/grip/core/settings/ProjectSettings.java
Setting.java
/core/src/main/java/edu/wpi/grip/core/settings/Setting.java
/core/src/main/java/edu/wpi/grip/core/settings/Setting.java
Settings.java
/core/src/main/java/edu/wpi/grip/core/settings/Settings.java
/core/src/main/java/edu/wpi/grip/core/settings/Settings.java
SettingsProvider.java
/core/src/main/java/edu/wpi/grip/core/settings/SettingsProvider.java
/core/src/main/java/edu/wpi/grip/core/settings/SettingsProvider.java
CoreCommandLineHelper.java
/core/src/main/java/edu/wpi/grip/core/CoreCommandLineHelper.java
/core/src/main/java/edu/wpi/grip/core/CoreCommandLineHelper.java
Main.java
/core/src/main/java/edu/wpi/grip/core/Main.java
/core/src/main/java/edu/wpi/grip/core/Main.java
Pipeline.java
/core/src/main/java/edu/wpi/grip/core/Pipeline.java
/core/src/main/java/edu/wpi/grip/core/Pipeline.java
GripServerTest.java
/core/src/test/java/edu/wpi/grip/core/http/GripServerTest.java
/core/src/test/java/edu/wpi/grip/core/http/GripServerTest.java
HttpPipelineSwitcherTest.java
/core/src/test/java/edu/wpi/grip/core/http/HttpPipelineSwitcherTest.java
/core/src/test/java/edu/wpi/grip/core/http/HttpPipelineSwitcherTest.java
HttpPublisherTest.java
/core/src/test/java/edu/wpi/grip/core/operations/network/http/HttpPublisherTest.java
/core/src/test/java/edu/wpi/grip/core/operations/network/http/HttpPublisherTest.java
HttpSourceTest.java
/core/src/test/java/edu/wpi/grip/core/sources/HttpSourceTest.java
/core/src/test/java/edu/wpi/grip/core/sources/HttpSourceTest.java
SourcesSanityTest.java
/core/src/test/java/edu/wpi/grip/core/sources/SourcesSanityTest.java
/core/src/test/java/edu/wpi/grip/core/sources/SourcesSanityTest.java
AppSettingsBeanInfo.java
/ui/src/main/java/edu/wpi/grip/core/settings/AppSettingsBeanInfo.java
/ui/src/main/java/edu/wpi/grip/core/settings/AppSettingsBeanInfo.java
ProjectSettingsBeanInfo.java
/ui/src/main/java/edu/wpi/grip/core/settings/ProjectSettingsBeanInfo.java
/ui/src/main/java/edu/wpi/grip/core/settings/ProjectSettingsBeanInfo.java
SimpleSettingsBeanInfo.java
/ui/src/main/java/edu/wpi/grip/core/settings/SimpleSettingsBeanInfo.java
/ui/src/main/java/edu/wpi/grip/core/settings/SimpleSettingsBeanInfo.java
Renamed from
/core/src/main/java/edu/wpi/grip/core/settings/ProjectSettingsBeanInfo.java
Main.java
/ui/src/main/java/edu/wpi/grip/ui/Main.java
/ui/src/main/java/edu/wpi/grip/ui/Main.java
MainWindowController.java
/ui/src/main/java/edu/wpi/grip/ui/MainWindowController.java
/ui/src/main/java/edu/wpi/grip/ui/MainWindowController.java
ProjectSettingsEditor.java
/ui/src/main/java/edu/wpi/grip/ui/ProjectSettingsEditor.java
/ui/src/main/java/edu/wpi/grip/ui/ProjectSettingsEditor.java