/*******************************************************************************
* Copyright (c) 2015 IBH SYSTEMS GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBH SYSTEMS GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.packagedrone.repo.manage.core.apm;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.packagedrone.repo.MetaKey;
import org.eclipse.packagedrone.repo.manage.core.CoreService;
import org.eclipse.packagedrone.storage.apm.StorageManager;
import org.eclipse.packagedrone.storage.apm.StorageRegistration;
public class CoreServiceImpl implements CoreService
{
private static final MetaKey MODEL_KEY = new MetaKey ( "core", "default" );
private StorageManager manager;
private StorageRegistration handle;
public void setStorageManager ( final StorageManager manager )
{
this.manager = manager;
}
public void start ()
{
this.handle = this.manager.registerModel ( 100_000L, MODEL_KEY, new CoreStorageModelProvider () );
}
public void stop ()
{
this.handle.unregister ();
}
@Override
public String getCoreProperty ( final MetaKey key, final String defaultValue )
{
return this.manager.accessCall ( MODEL_KEY, CoreServiceViewModel.class, model -> model.getProperties ().get ( key ) );
}
@Override
public Map<MetaKey, String> getCoreProperties ( final Collection<MetaKey> keys )
{
final Map<MetaKey, String> result = new HashMap<> ( keys.size () );
final Map<MetaKey, String> all = list ();
for ( final MetaKey key : keys )
{
result.put ( key, all.get ( key ) );
}
return result;
}
@Override
public void setCoreProperty ( final MetaKey key, final String value )
{
this.manager.modifyRun ( MODEL_KEY, CoreServiceModel.class, model -> {
if ( value == null )
{
model.getProperties ().remove ( value );
}
else
{
model.getProperties ().put ( key, value );
}
} );
}
@Override
public Map<MetaKey, String> list ()
{
return this.manager.accessCall ( MODEL_KEY, CoreServiceViewModel.class, model -> model.getProperties () );
}
@Override
public void setCoreProperties ( final Map<MetaKey, String> properties )
{
this.manager.modifyRun ( MODEL_KEY, CoreServiceModel.class, model -> {
for ( final Map.Entry<MetaKey, String> entry : properties.entrySet () )
{
final String value = entry.getValue ();
if ( value != null )
{
model.getProperties ().put ( entry.getKey (), value );
}
else
{
model.getProperties ().remove ( entry.getKey () );
}
}
} );
}
}