+ def validate_change
+ permitted = [:owner_uuid]
+
+ case self.state
+ when Uncommitted
+ # Permit updating most fields
+ permitted.push :command, :container_count_max,
+ :container_image, :cwd, :description, :environment,
+ :filters, :mounts, :name, :output_path, :priority,
+ :properties, :requesting_container_uuid, :runtime_constraints,
+ :state, :container_uuid
+
+ when Committed
+ if container_uuid.nil?
+ errors.add :container_uuid, "has not been resolved to a container."
+ end
+
+ if priority.nil?
+ errors.add :priority, "cannot be nil"
+ end
+
+ # Can update priority, container count.
+ permitted.push :priority, :container_count_max, :container_uuid
+
+ if self.state_changed?
+ # Allow create-and-commit in a single operation.
+ permitted.push :command, :container_image, :cwd, :description, :environment,
+ :filters, :mounts, :name, :output_path, :properties,
+ :requesting_container_uuid, :runtime_constraints,
+ :state, :container_uuid
+ end