/* * Copyright (c) 2012 Eike Stepper (Berlin, Germany) and others. * 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: * Eike Stepper - initial API and implementation */ package org.eclipse.emf.cdo.transfer.spi.ui; import org.eclipse.emf.cdo.transfer.CDOTransferElement; import org.eclipse.emf.cdo.transfer.CDOTransferSystem; import org.eclipse.emf.cdo.transfer.ui.TransferDragListener; import org.eclipse.emf.cdo.transfer.ui.TransferDropAdapter; import org.eclipse.emf.cdo.transfer.ui.TransferLabelProvider; import org.eclipse.net4j.util.container.IManagedContainer; import org.eclipse.net4j.util.factory.ProductCreationException; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.dnd.Transfer; import java.util.ArrayList; import java.util.List; /** * Abstracts the {@link CDOTransferSystem transfer system}-specific aspects that are needed by a generic transfer user interface. * <p> * Abstracted functionalities include: * <ul> * <li>{@link TransferLabelProvider Providing labels} for {@link CDOTransferElement transfer elements}, see {@link #createLabelProvider(CDOTransferSystem) createLabelProvider()}. * <li>Creating transfers for {@link TransferDragListener drag operations}, see {@link #addSupportedTransfers(List) addSupportedTransfers()}, {@link #convertSelection(IStructuredSelection) convertSelection()}. * <li>Creating transfers for {@link TransferDropAdapter drop operations}, see {@link #addSupportedTransfers(List) addSupportedTransfers()}, {@link #convertTransferData(Object) convertTransferData()}, {@link #convertTransferTarget(Object) convertTransferTarget()}. * </ul> * * @author Eike Stepper * @since 4.2 */ public interface TransferUIProvider { public ILabelProvider createLabelProvider(CDOTransferSystem system); public void addSupportedTransfers(List<Transfer> transfers); public List<CDOTransferElement> convertTransferData(Object data); public CDOTransferElement convertTransferTarget(Object target); public Object convertSelection(IStructuredSelection selection); /** * Creates {@link TransferUIProvider} instances. * * @author Eike Stepper */ public static abstract class Factory extends org.eclipse.net4j.util.factory.Factory { public static final String PRODUCT_GROUP = "org.eclipse.emf.cdo.transfer.ui.providers"; protected Factory(String type) { super(PRODUCT_GROUP, type); } public abstract TransferUIProvider create(String description) throws ProductCreationException; public static TransferUIProvider get(IManagedContainer container, String type) { return (TransferUIProvider)container.getElement(PRODUCT_GROUP, type, null); } public static TransferUIProvider[] getAll(IManagedContainer container) { List<TransferUIProvider> uiProviders = new ArrayList<TransferUIProvider>(); for (String type : container.getFactoryTypes(PRODUCT_GROUP)) { uiProviders.add((TransferUIProvider)container.getElement(PRODUCT_GROUP, type, null)); } return uiProviders.toArray(new TransferUIProvider[uiProviders.size()]); } } }