simplify core api

This commit is contained in:
Eduard Heimbuch
2020-09-09 08:54:38 +02:00
parent 80a822932c
commit 0abe47f666
6 changed files with 25 additions and 33 deletions

View File

@@ -24,14 +24,11 @@
package sonia.scm.repository; package sonia.scm.repository;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.io.ByteSource; import com.google.common.io.ByteSource;
import sonia.scm.plugin.ExtensionPoint; import sonia.scm.plugin.ExtensionPoint;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Collections;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
/** /**
@@ -47,15 +44,6 @@ public interface RepositoryContentInitializer {
*/ */
void initialize(InitializerContext context) throws IOException; void initialize(InitializerContext context) throws IOException;
/**
* returns the class to which the creation context will be mapped
*
* @return the class of the creation context
*/
default Optional<Class<?>> getType() {
return Optional.empty();
}
/** /**
* Use this {@link InitializerContext} to create new files on repository initialization * Use this {@link InitializerContext} to create new files on repository initialization
* which will be included in the first commit * which will be included in the first commit
@@ -76,10 +64,15 @@ public interface RepositoryContentInitializer {
CreateFile create(String path); CreateFile create(String path);
/** /**
* @return creation context of repository which is going to be initialized * Find the the context object with the given key and unmarshalls it to the given type.
*
* @param key key of the context object
* @param type type of the context object
* @return context object or empty optional
* @since 2.5.0
*/ */
default Map<String, JsonNode> getCreationContext() { default <T> Optional<T> getCreationContext(String key, Class<T> type) {
return Collections.emptyMap(); return Optional.empty();
} }
} }

View File

@@ -258,7 +258,7 @@ class RepositoryForm extends React.Component<Props, State> {
helpText={t("help.initializeRepository")} helpText={t("help.initializeRepository")}
/> />
{this.state.initRepository && ( {this.state.initRepository && (
<ExtensionPoint name="repos.create.initialize" props={extensionProps} renderAll={false} /> <ExtensionPoint name="repos.create.initialize" props={extensionProps} renderAll={true} />
)} )}
</CheckboxWrapper> </CheckboxWrapper>
</SpaceBetween> </SpaceBetween>

View File

@@ -59,8 +59,7 @@ type Props = WithTranslation & {
link: string, link: string,
repository: RepositoryCreation, repository: RepositoryCreation,
initRepository: boolean, initRepository: boolean,
callback: (repo: Repository) => void, callback: (repo: Repository) => void
initRepositoryContext?: any
) => void; ) => void;
resetForm: () => void; resetForm: () => void;

View File

@@ -25,6 +25,7 @@
package sonia.scm.repository; package sonia.scm.repository;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.io.ByteSource; import com.google.common.io.ByteSource;
import com.google.common.io.CharSource; import com.google.common.io.CharSource;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -40,6 +41,7 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.Set; import java.util.Set;
@Singleton @Singleton
@@ -56,10 +58,6 @@ public class RepositoryInitializer {
this.contentInitializers = Priorities.sortInstances(contentInitializerSet); this.contentInitializers = Priorities.sortInstances(contentInitializerSet);
} }
public void initialize(Repository repository) {
initialize(repository, null);
}
public void initialize(Repository repository, Map<String, JsonNode> creationContext) { public void initialize(Repository repository, Map<String, JsonNode> creationContext) {
try (RepositoryService service = serviceFactory.create(repository)) { try (RepositoryService service = serviceFactory.create(repository)) {
ModifyCommandBuilder modifyCommandBuilder = service.getModifyCommand(); ModifyCommandBuilder modifyCommandBuilder = service.getModifyCommand();
@@ -85,6 +83,8 @@ public class RepositoryInitializer {
private final ModifyCommandBuilder builder; private final ModifyCommandBuilder builder;
private final Map<String, JsonNode> creationContext; private final Map<String, JsonNode> creationContext;
private static final ObjectMapper mapper = new ObjectMapper();
InitializerContextImpl(Repository repository, ModifyCommandBuilder builder, Map<String, JsonNode> creationContext) { InitializerContextImpl(Repository repository, ModifyCommandBuilder builder, Map<String, JsonNode> creationContext) {
this.repository = repository; this.repository = repository;
this.builder = builder; this.builder = builder;
@@ -97,8 +97,8 @@ public class RepositoryInitializer {
} }
@Override @Override
public Map<String, JsonNode> getCreationContext() { public <T> Optional<T> getCreationContext(String key, Class<T> type) {
return creationContext; return Optional.of(mapper.convertValue(creationContext.get(key), type));
} }
@Override @Override
@@ -134,5 +134,4 @@ public class RepositoryInitializer {
return initializerContext; return initializerContext;
} }
} }
} }

View File

@@ -74,6 +74,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.ArgumentMatchers.anyObject;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
@@ -315,7 +316,7 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
assertEquals(HttpServletResponse.SC_CREATED, response.getStatus()); assertEquals(HttpServletResponse.SC_CREATED, response.getStatus());
assertEquals("/v2/repositories/otherspace/repo", response.getOutputHeaders().get("Location").get(0).toString()); assertEquals("/v2/repositories/otherspace/repo", response.getOutputHeaders().get("Location").get(0).toString());
verify(repositoryManager).create(any(Repository.class)); verify(repositoryManager).create(any(Repository.class));
verify(repositoryInitializer, never()).initialize(any(Repository.class)); verify(repositoryInitializer, never()).initialize(any(Repository.class), anyMap());
} }
@Test @Test
@@ -336,7 +337,7 @@ public class RepositoryRootResourceTest extends RepositoryTestBase {
assertEquals(HttpServletResponse.SC_CREATED, response.getStatus()); assertEquals(HttpServletResponse.SC_CREATED, response.getStatus());
ArgumentCaptor<Repository> captor = ArgumentCaptor.forClass(Repository.class); ArgumentCaptor<Repository> captor = ArgumentCaptor.forClass(Repository.class);
verify(repositoryInitializer).initialize(captor.capture()); verify(repositoryInitializer).initialize(captor.capture(), anyMap());
Repository repository = captor.getValue(); Repository repository = captor.getValue();
assertEquals("space", repository.getNamespace()); assertEquals("space", repository.getNamespace());

View File

@@ -29,7 +29,6 @@ import com.google.common.io.ByteSource;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Answers; import org.mockito.Answers;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
@@ -44,6 +43,7 @@ import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
@@ -88,7 +88,7 @@ class RepositoryInitializerTest {
); );
RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, repositoryContentInitializers); RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, repositoryContentInitializers);
initializer.initialize(repository); initializer.initialize(repository, Collections.emptyMap());
verifyFileCreation(readmeContentLoader, "# HeartOfGold"); verifyFileCreation(readmeContentLoader, "# HeartOfGold");
verifyFileCreation(licenseContentLoader, "MIT"); verifyFileCreation(licenseContentLoader, "MIT");
@@ -108,7 +108,7 @@ class RepositoryInitializerTest {
); );
RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, repositoryContentInitializers); RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, repositoryContentInitializers);
initializer.initialize(repository); initializer.initialize(repository, Collections.emptyMap());
verifyFileCreationWithStream(contentLoader, "awesome"); verifyFileCreationWithStream(contentLoader, "awesome");
@@ -138,7 +138,7 @@ class RepositoryInitializerTest {
); );
RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, repositoryContentInitializers); RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, repositoryContentInitializers);
initializer.initialize(repository); initializer.initialize(repository, Collections.emptyMap());
assertThat(reference.get()).isEqualTo("MIT"); assertThat(reference.get()).isEqualTo("MIT");
} }
@@ -149,7 +149,7 @@ class RepositoryInitializerTest {
doThrow(new IOException("epic fail")).when(contentLoader).withData(any(ByteSource.class)); doThrow(new IOException("epic fail")).when(contentLoader).withData(any(ByteSource.class));
RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, ImmutableSet.of(new ReadmeContentInitializer())); RepositoryInitializer initializer = new RepositoryInitializer(repositoryServiceFactory, ImmutableSet.of(new ReadmeContentInitializer()));
assertThrows(InternalRepositoryException.class, () -> initializer.initialize(repository)); assertThrows(InternalRepositoryException.class, () -> initializer.initialize(repository, Collections.emptyMap()));
verify(repositoryService).close(); verify(repositoryService).close();
} }