/*******************************************************************************
* Copyright (c) 2012 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.hibernate.jpt.ui.internal.persistence.details;
import org.eclipse.jface.viewers.IBaseLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jpt.common.ui.internal.widgets.AddRemoveListPane;
import org.eclipse.jpt.common.ui.internal.widgets.Pane;
import org.eclipse.jpt.common.ui.internal.widgets.AddRemovePane.Adapter;
import org.eclipse.jpt.common.utility.model.value.ListValueModel;
import org.eclipse.jpt.common.utility.model.value.ModifiableCollectionValueModel;
import org.eclipse.jpt.jpa.core.context.persistence.ClassRef;
import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.jpa.ui.persistence.JptJpaUiPersistenceMessages;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
/**
*
*
* @author Dmitry Geraskov (geraskov@gmail.com)
*
*/
public class AddMappingListPane<E extends Object> extends AddRemoveListPane<PersistenceUnit, E> {
private Button addButton;
private ExtendedAdapter adapter;
public AddMappingListPane(Pane<? extends PersistenceUnit> parentPane,
Composite parent,
Adapter<E> adapter,
ListValueModel<E> listHolder,
ModifiableCollectionValueModel<E> selectedItemHolder,
ILabelProvider labelProvider,
String helpId) {
super(parentPane, parent, adapter, listHolder, selectedItemHolder, labelProvider, helpId);
}
@Override
protected void initialize(Adapter<E> adapter,
ListValueModel<?> listHolder,
ModifiableCollectionValueModel<E> selectedItemsModel,
IBaseLabelProvider labelProvider) {
super.initialize(adapter, listHolder, selectedItemsModel, labelProvider);
this.adapter = (ExtendedAdapter) adapter;
}
@Override
protected void addCustomButtonAfterAddButton(Composite container,
String helpId) {
// Add package button
this.addButton = addUnmanagedButton(container,
adapter.addPackageButtonText(),
buildAddPackageItemAction()
);
// addAlignRight(this.addButton);
}
private Runnable buildAddPackageItemAction() {
return new Runnable() {
public void run() {
adapter.addPackage((ModifiableCollectionValueModel<ClassRef>) getSelectedItemsModel());
}
};
}
}
abstract class ExtendedAdapter extends AddRemoveListPane.AbstractAdapter<ClassRef> {
@Override
public String addButtonText() {
return Messages.AddMappingListPane_Add_Class;
}
public String addPackageButtonText() {
return Messages.AddMappingListPane_Add_Package;
}
@Override
public boolean hasOptionalButton() {
return true;
}
@Override
public String optionalButtonText() {
return JptJpaUiPersistenceMessages.PERSISTENCE_UNIT_CLASSES_COMPOSITE_OPEN;
}
public abstract ClassRef addPackage(ModifiableCollectionValueModel<ClassRef> listSelectionModel);
}