public static Builder builder() { return new Builder(); }
public TaskDefinition build() { Preconditions.checkArgument(!StringUtils.isEmpty(key), "Task key must be set"); Preconditions.checkArgument(Pattern.matches(KEY_PATTERN, key), "Task key '" + key + "' must match " + KEY_PATTERN); Preconditions.checkArgument(!StringUtils.isEmpty(description), "Description must be set for task '" + key + "'"); Preconditions.checkArgument(taskClass != null, "Class must be set for task '" + key + "'"); return new TaskDefinition(this); } }
@Test public void test_compare() { TaskDefinition foo = TaskDefinition.builder().key("foo").taskClass(FooTask.class).description("Foo").build(); TaskDefinition bar = TaskDefinition.builder().key("bar").taskClass(FooTask.class).description("Bar").build(); assertThat(foo.compareTo(bar)).isGreaterThan(0); assertThat(foo.compareTo(foo)).isEqualTo(0); assertThat(bar.compareTo(foo)).isLessThan(0); }
@Test public void should_build() { TaskDefinition def = TaskDefinition.builder().key("foo").taskClass(FooTask.class).description("Foo").build(); assertThat(def.key()).isEqualTo("foo"); assertThat(def.description()).isEqualTo("Foo"); assertThat(def.taskClass()).isEqualTo(FooTask.class); assertThat(def.toString()).isEqualTo("Task foo[class=org.sonar.api.task.TaskDefinitionTest$FooTask, desc=Foo]"); }
@Override public void execute() { StringBuilder sb = new StringBuilder(); sb.append("\nAvailable tasks:\n"); for (TaskDefinition def : tasks.definitions()) { sb.append(" - " + def.key() + ": " + def.description() + "\n"); } sb.append("\n"); LOG.info(sb.toString()); }
@Override public void doAfterStart() { // default value is declared in CorePlugin String taskKey = StringUtils.defaultIfEmpty(taskProperties.get(CoreProperties.TASK), CoreProperties.SCAN_TASK); // Release memory taskProperties.clear(); TaskDefinition def = getComponentByType(Tasks.class).definition(taskKey); if (def == null) { throw MessageException.of("Task '" + taskKey + "' does not exist. Please use '" + ListTask.KEY + "' task to see all available tasks."); } Task task = getComponentByType(def.taskClass()); if (task != null) { task.execute(); } else { throw new IllegalStateException("Task " + taskKey + " is badly defined"); } } }
private void checkDuplicatedClasses() { Map<Class<? extends Task>, TaskDefinition> byClass = Maps.newHashMap(); for (TaskDefinition def : definitions()) { TaskDefinition other = byClass.get(def.taskClass()); if (other == null) { byClass.put(def.taskClass(), def); } else { throw new IllegalStateException("Task '" + def.taskClass().getName() + "' is defined twice: first by '" + other.key() + "' and then by '" + def.key() + "'"); } } } }
public Tasks(TaskDefinition[] definitions) { SortedMap<String, TaskDefinition> map = Maps.newTreeMap(); for (TaskDefinition definition : definitions) { if (map.containsKey(definition.key())) { throw new IllegalStateException("Task '" + definition.key() + "' is declared twice"); } map.put(definition.key(), definition); } this.byKey = ImmutableSortedMap.copyOf(map); }
@Test public void key_should_not_contain_spaces() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Task key 'fo o' must match " + TaskDefinition.KEY_PATTERN); TaskDefinition.builder().key("fo o").description("foo").taskClass(FooTask.class).build(); }
@Override public void execute() { logBlankLine(); log("Available tasks:"); logBlankLine(); for (TaskDefinition def : tasks.definitions()) { log(" - " + def.key() + ": " + def.description()); } logBlankLine(); }
@Override public void doAfterStart() { // default value is declared in CorePlugin String taskKey = StringUtils.defaultIfEmpty(taskProperties.get(CoreProperties.TASK), CoreProperties.SCAN_TASK); // Release memory taskProperties.clear(); TaskDefinition def = getComponentByType(Tasks.class).definition(taskKey); if (def == null) { throw MessageException.of("Task " + taskKey + " does not exist"); } Task task = getComponentByType(def.taskClass()); if (task != null) { task.execute(); } else { throw new IllegalStateException("Task " + taskKey + " is badly defined"); } } }
public static Builder builder() { return new Builder(); }
public TaskDefinition build() { Preconditions.checkArgument(!Strings.isNullOrEmpty(key), "Task key must be set"); Preconditions.checkArgument(Pattern.matches(KEY_PATTERN, key), "Task key '" + key + "' must match " + KEY_PATTERN); Preconditions.checkArgument(!Strings.isNullOrEmpty(description), "Description must be set for task '" + key + "'"); Preconditions.checkArgument(taskClass != null, "Class must be set for task '" + key + "'"); return new TaskDefinition(this); } }
public Tasks(TaskDefinition[] definitions) { SortedMap<String, TaskDefinition> map = Maps.newTreeMap(); for (TaskDefinition definition : definitions) { if (map.containsKey(definition.key())) { throw new SonarException("Task '" + definition.key() + "' is declared twice"); } map.put(definition.key(), definition); } this.byKey = ImmutableSortedMap.copyOf(map); }
public static Builder builder() { return new Builder(); }
public TaskDefinition build() { Preconditions.checkArgument(!StringUtils.isEmpty(key), "Task key must be set"); Preconditions.checkArgument(Pattern.matches(KEY_PATTERN, key), "Task key '" + key + "' must match " + KEY_PATTERN); Preconditions.checkArgument(!StringUtils.isEmpty(description), "Description must be set for task '" + key + "'"); Preconditions.checkArgument(taskClass != null, "Class must be set for task '" + key + "'"); return new TaskDefinition(this); } }
@Test public void key_should_be_required() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Task key must be set"); TaskDefinition.builder().description("Foo").taskClass(FooTask.class).build(); }
@Test public void test_equals_and_hashcode() { TaskDefinition def1 = TaskDefinition.builder().key("one").taskClass(FooTask.class).description("Foo").build(); TaskDefinition def1bis = TaskDefinition.builder().key("one").taskClass(FooTask.class).description("Foo").build(); TaskDefinition def2 = TaskDefinition.builder().key("two").taskClass(FooTask.class).description("Foo").build(); assertThat(def1).isEqualTo(def1); assertThat(def1).isEqualTo(def1bis); assertThat(def2).isNotEqualTo(def1); assertThat(def2).isNotEqualTo("one"); assertThat(def2).isNotEqualTo(null); assertThat(def1.hashCode()).isEqualTo(def1.hashCode()); assertThat(def1.hashCode()).isEqualTo(def1bis.hashCode()); }
@Test public void class_should_be_required() { thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Class must be set for task 'foo'"); TaskDefinition.builder().key("foo").description("Foo").build(); }