/*******************************************************************************
* Copyright (c) 2010 Philipp Kursawe.
* 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:
* Philipp Kursawe (phil.kursawe@gmail.com) - initial API and implementation
******************************************************************************/
package copyto.ui.internal.preferences;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.swt.widgets.Composite;
import osgiutils.services.DefaultCollectionServiceRunnable;
import osgiutils.services.SimpleServiceRunnable;
import osgiutils.services.Services;
import copyto.core.Target;
import copyto.core.TargetDescriptor;
import copyto.core.TargetService;
import eclipseutils.jface.databinding.TableEditor;
import eclipseutils.jface.preferences.AbstractTableViewerFieldEditor;
class TargetFieldEditor extends AbstractTableViewerFieldEditor<Target> {
TargetFieldEditor(final String preferencePath, final String labelText,
final Composite parent) {
super(preferencePath, labelText, parent);
}
@Override
protected Collection<Target> loadItems() {
return Services.run(TargetService.class,
new DefaultCollectionServiceRunnable<TargetService, Target>() {
public Collection<Target> run(final TargetService service) {
List<TargetDescriptor> descs = service.findAll();
Collection<Target> items = new ArrayList<Target>(descs.size());
for (TargetDescriptor desc : descs) {
items.add(desc.createTarget());
}
return items;
}
});
}
@Override
protected void doLoadDefault() {
doLoad();
}
@Override
protected void doStore() {
Services.run(TargetService.class,
new SimpleServiceRunnable<TargetService>() {
@Override
public void runWithService(final TargetService service) {
service.save(getItems());
}
});
}
@Override
protected TableEditor<Target> createEditorControl(Composite parent) {
return new TargetEditor(parent, null, 0);
}
}