[MRM-1702] make the locking configurable via the UI

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1550708 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2013-12-13 12:33:35 +00:00
parent 3e91228d28
commit 4803f6be06
5 changed files with 82 additions and 19 deletions

View File

@ -162,6 +162,13 @@ public class DefaultArchivaRuntimeConfigurationAdmin
} }
if ( archivaRuntimeConfiguration.getFileLockConfiguration() != null )
{
res.setFileLockConfiguration(
new BeanReplicator().replicateBean( archivaRuntimeConfiguration.getFileLockConfiguration(),
FileLockConfiguration.class ) );
}
return res; return res;
} }

View File

@ -375,30 +375,31 @@ public class DefaultRedbackRuntimeConfigurationAdmin
} }
private org.apache.archiva.configuration.RedbackRuntimeConfiguration build( private org.apache.archiva.configuration.RedbackRuntimeConfiguration build(
RedbackRuntimeConfiguration archivaRuntimeConfiguration ) RedbackRuntimeConfiguration redbackRuntimeConfiguration )
{ {
org.apache.archiva.configuration.RedbackRuntimeConfiguration redbackRuntimeConfiguration = org.apache.archiva.configuration.RedbackRuntimeConfiguration res =
new BeanReplicator().replicateBean( archivaRuntimeConfiguration, new BeanReplicator().replicateBean( redbackRuntimeConfiguration,
org.apache.archiva.configuration.RedbackRuntimeConfiguration.class ); org.apache.archiva.configuration.RedbackRuntimeConfiguration.class );
if ( archivaRuntimeConfiguration.getLdapConfiguration() == null ) if ( redbackRuntimeConfiguration.getLdapConfiguration() == null )
{ {
archivaRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() ); redbackRuntimeConfiguration.setLdapConfiguration( new LdapConfiguration() );
} }
redbackRuntimeConfiguration.setLdapConfiguration( res.setLdapConfiguration(
new BeanReplicator().replicateBean( archivaRuntimeConfiguration.getLdapConfiguration(), new BeanReplicator().replicateBean( redbackRuntimeConfiguration.getLdapConfiguration(),
org.apache.archiva.configuration.LdapConfiguration.class ) ); org.apache.archiva.configuration.LdapConfiguration.class ) );
if ( archivaRuntimeConfiguration.getUsersCacheConfiguration() == null ) if ( redbackRuntimeConfiguration.getUsersCacheConfiguration() == null )
{ {
archivaRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() ); redbackRuntimeConfiguration.setUsersCacheConfiguration( new CacheConfiguration() );
} }
redbackRuntimeConfiguration.setUsersCacheConfiguration(
new BeanReplicator().replicateBean( archivaRuntimeConfiguration.getUsersCacheConfiguration(), res.setUsersCacheConfiguration(
new BeanReplicator().replicateBean( redbackRuntimeConfiguration.getUsersCacheConfiguration(),
org.apache.archiva.configuration.CacheConfiguration.class ) ); org.apache.archiva.configuration.CacheConfiguration.class ) );
List<LdapGroupMapping> ldapGroupMappings = archivaRuntimeConfiguration.getLdapGroupMappings(); List<LdapGroupMapping> ldapGroupMappings = redbackRuntimeConfiguration.getLdapGroupMappings();
if ( ldapGroupMappings != null && ldapGroupMappings.size() > 0 ) if ( ldapGroupMappings != null && ldapGroupMappings.size() > 0 )
{ {
@ -416,9 +417,9 @@ public class DefaultRedbackRuntimeConfigurationAdmin
mappings.add( mapping ); mappings.add( mapping );
} }
redbackRuntimeConfiguration.setLdapGroupMappings( mappings ); res.setLdapGroupMappings( mappings );
} }
return redbackRuntimeConfiguration; return res;
} }
// wrapper for UserConfiguration to intercept values (and store it not yet migrated) // wrapper for UserConfiguration to intercept values (and store it not yet migrated)

View File

@ -681,6 +681,11 @@ archiva-runtime-configuration.title=Archiva Runtime Configuration
runtime-configuration.cache.failure.title=Url Cache Failure runtime-configuration.cache.failure.title=Url Cache Failure
runtime-configuration.maven.network.title=Maven Network runtime-configuration.maven.network.title=Maven Network
runtime-configuration.filelocking.title=FileLocking
runtime.fileLockConfiguration.lockingTimeout.label=Lock Timeout
runtime.fileLockConfiguration.skipLocking.label=Skip Locking
redback.runtime.ldap.mapping.group.label=LDAP Groups redback.runtime.ldap.mapping.group.label=LDAP Groups
redback.runtime.ldap.mapping.roles.label=Roles redback.runtime.ldap.mapping.roles.label=Roles
redback-runtime-ldap-group-mapping.updated=LDAP Role-Group mapping updated. redback-runtime-ldap-group-mapping.updated=LDAP Role-Group mapping updated.

View File

@ -317,7 +317,8 @@ define("archiva/admin/features/generaladmin/main",["jquery","i18n","utils","jque
var archivaRuntimeConfiguration=mapArchivaRuntimeConfiguration(data); var archivaRuntimeConfiguration=mapArchivaRuntimeConfiguration(data);
var archivaRuntimeConfigurationViewModel=new ArchivaRuntimeConfigurationViewModel(archivaRuntimeConfiguration); var archivaRuntimeConfigurationViewModel=new ArchivaRuntimeConfigurationViewModel(archivaRuntimeConfiguration);
ko.applyBindings(archivaRuntimeConfigurationViewModel,mainContent.find("#cache-failure-form").get(0)); ko.applyBindings(archivaRuntimeConfigurationViewModel,mainContent.find("#cache-failure-form").get(0));
var validator = mainContent.find("#cache-failure-form-id") ko.applyBindings(archivaRuntimeConfigurationViewModel,mainContent.find("#filelocking-form").get(0));
mainContent.find("#cache-failure-form-id")
.validate({ .validate({
showErrors: function(validator, errorMap, errorList) { showErrors: function(validator, errorMap, errorList) {
customShowError(mainContent.find("#cache-failure-form-id" ),validator,errorMap,errorMap); customShowError(mainContent.find("#cache-failure-form-id" ),validator,errorMap,errorMap);
@ -362,16 +363,31 @@ define("archiva/admin/features/generaladmin/main",["jquery","i18n","utils","jque
} }
} }
ArchivaRuntimeConfiguration=function(cacheConfiguration){ FileLockConfiguration=function(skipLocking,lockingTimeout){
this.urlFailureCacheConfiguration=ko.observable(cacheConfiguration); //private boolean skipLocking = true;
this.skipLocking=ko.observable(skipLocking);
//private int lockingTimeout = 0;
this.lockingTimeout=ko.observable(lockingTimeout) ;
} }
ArchivaRuntimeConfiguration=function(cacheConfiguration,fileLockConfiguration){
this.urlFailureCacheConfiguration=ko.observable(cacheConfiguration);
this.fileLockConfiguration=ko.observable(fileLockConfiguration);
}
mapFileLockConfiguration=function(data){
if (!data){
return null;
}
return new FileLockConfiguration(data.skipLocking,data.lockingTimeout);
}
mapArchivaRuntimeConfiguration=function(data){ mapArchivaRuntimeConfiguration=function(data){
if(!data){ if(!data){
return null; return null;
} }
return new ArchivaRuntimeConfiguration(data.urlFailureCacheConfiguration?mapCacheConfiguration(data.urlFailureCacheConfiguration):null); return new ArchivaRuntimeConfiguration(data.urlFailureCacheConfiguration?mapCacheConfiguration(data.urlFailureCacheConfiguration):null,
data.fileLockConfiguration?mapFileLockConfiguration(data.fileLockConfiguration):null);
} }
//--------------------------- //---------------------------
// organisation/appearance configuration part // organisation/appearance configuration part

View File

@ -287,6 +287,7 @@
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="active" id="network-configuration-form-li"><a href="#network-configuration-form-content" data-toggle="tab">${$.i18n.prop('runtime-configuration.maven.network.title')}</a></li> <li class="active" id="network-configuration-form-li"><a href="#network-configuration-form-content" data-toggle="tab">${$.i18n.prop('runtime-configuration.maven.network.title')}</a></li>
<li id="cache-failure-form-li"><a href="#cache-failure-form-content" data-toggle="tab">${$.i18n.prop('runtime-configuration.cache.failure.title')}</a></li> <li id="cache-failure-form-li"><a href="#cache-failure-form-content" data-toggle="tab">${$.i18n.prop('runtime-configuration.cache.failure.title')}</a></li>
<li id="filelocking-form-li"><a href="#filelocking-form-content" data-toggle="tab">${$.i18n.prop('runtime-configuration.filelocking.title')}</a></li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
@ -297,9 +298,11 @@
<div id="network-configuration-form" data-bind='template: {name:"network-configuration-form-tmpl"}'></div> <div id="network-configuration-form" data-bind='template: {name:"network-configuration-form-tmpl"}'></div>
</div> </div>
<div class="tab-pane" id="cache-failure-form-content"> <div class="tab-pane" id="cache-failure-form-content">
<div id="cache-failure-form" data-bind='template: {name:"cache-failure-form-tmpl"}'></div> <div id="cache-failure-form" data-bind='template: {name:"cache-failure-form-tmpl"}'></div>
</div> </div>
<div class="tab-pane" id="filelocking-form-content">
<div id="filelocking-form" data-bind='template: {name:"filelocking-form-tmpl"}'></div>
</div>
</div> </div>
</script> </script>
@ -369,6 +372,8 @@
</div> </div>
</div> </div>
<button id="cache-failure-form-btn-save" data-loading-text="${$.i18n.prop('common.loading')}" <button id="cache-failure-form-btn-save" data-loading-text="${$.i18n.prop('common.loading')}"
data-bind="click: save" class="btn">${$.i18n.prop('save')}</button> data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
@ -376,6 +381,35 @@
</script> </script>
<script id="filelocking-form-tmpl" type="text/html">
<form class="well form-horizontal" id="filelocking-form-id">
<div class="control-group">
<label class="control-label" for="skipLocking">${$.i18n.prop('runtime.fileLockConfiguration.skipLocking.label')}</label>
<div class="controls">
<input type="checkbox" class="xlarge" data-bind="checked: archivaRuntimeConfiguration().fileLockConfiguration().skipLocking"
id="skipLocking" name="skipLocking" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="lockingTimeout">${$.i18n.prop('runtime.fileLockConfiguration.lockingTimeout.label')}</label>
<div class="controls">
<input type="text" class="xlarge required digits" data-bind="value: archivaRuntimeConfiguration().fileLockConfiguration().lockingTimeout"
id="lockingTimeout" name="lockingTimeout" />
</div>
</div>
<button id="filelocking-form-btn-save" data-loading-text="${$.i18n.prop('common.loading')}"
data-bind="click: save" class="btn">${$.i18n.prop('save')}</button>
</form>
</script>
<script id="system-status-main" type="text/html"> <script id="system-status-main" type="text/html">
<div class="page-header"> <div class="page-header">
<h4>${$.i18n.prop('system-status.header.version.info')}</h4> <h4>${$.i18n.prop('system-status.header.version.info')}</h4>