adds namespace strategies for current year, repository type, username and custom

This commit is contained in:
Sebastian Sdorra
2019-03-11 10:53:49 +01:00
parent 3c22ad2393
commit e179b00ecd
11 changed files with 203 additions and 57 deletions

View File

@@ -0,0 +1,29 @@
package sonia.scm.repository;
import com.google.common.annotations.VisibleForTesting;
import sonia.scm.plugin.Extension;
import javax.inject.Inject;
import java.time.Clock;
import java.time.Year;
@Extension
public class CurrentYearNamespaceStrategy implements NamespaceStrategy {
private final Clock clock;
@Inject
public CurrentYearNamespaceStrategy() {
this(Clock.systemDefaultZone());
}
@VisibleForTesting
CurrentYearNamespaceStrategy(Clock clock) {
this.clock = clock;
}
@Override
public String createNamespace(Repository repository) {
return String.valueOf(Year.now(clock).getValue());
}
}

View File

@@ -0,0 +1,20 @@
package sonia.scm.repository;
import sonia.scm.plugin.Extension;
import sonia.scm.util.ValidationUtil;
import static sonia.scm.ScmConstraintViolationException.Builder.doThrow;
@Extension
public class CustomNamespaceStrategy implements NamespaceStrategy {
@Override
public String createNamespace(Repository repository) {
String namespace = repository.getNamespace();
doThrow()
.violation("invalid namespace", "namespace")
.when(!ValidationUtil.isRepositoryNameValid(namespace));
return namespace;
}
}

View File

@@ -1,24 +0,0 @@
package sonia.scm.repository;
import com.google.common.base.Strings;
import org.apache.shiro.SecurityUtils;
import sonia.scm.plugin.Extension;
/**
* The DefaultNamespaceStrategy returns the predefined namespace of the given repository, if the namespace was not set
* the username of the currently loggedin user is used.
*
* @since 2.0.0
*/
@Extension
public class DefaultNamespaceStrategy implements NamespaceStrategy {
@Override
public String createNamespace(Repository repository) {
String namespace = repository.getNamespace();
if (Strings.isNullOrEmpty(namespace)) {
namespace = SecurityUtils.getSubject().getPrincipal().toString();
}
return namespace;
}
}

View File

@@ -0,0 +1,11 @@
package sonia.scm.repository;
import sonia.scm.plugin.Extension;
@Extension
public class RepositoryTypeNamespaceStrategy implements NamespaceStrategy {
@Override
public String createNamespace(Repository repository) {
return repository.getType();
}
}

View File

@@ -0,0 +1,13 @@
package sonia.scm.repository;
import org.apache.shiro.SecurityUtils;
import sonia.scm.plugin.Extension;
@Extension
public class UsernameNamespaceStrategy implements NamespaceStrategy {
@Override
public String createNamespace(Repository repository) {
return SecurityUtils.getSubject().getPrincipal().toString();
}
}