/******************************************************************************* * Copyright (c) 2008, 2009 Oracle. 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: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.ui.internal.persistence.details; import java.util.ListIterator; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.search.IJavaSearchScope; import org.eclipse.jdt.core.search.SearchEngine; import org.eclipse.jdt.ui.IJavaElementSearchConstants; import org.eclipse.jdt.ui.JavaUI; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.window.Window; import org.eclipse.jpt.core.context.java.JavaPersistentType; import org.eclipse.jpt.core.context.persistence.ClassRef; import org.eclipse.jpt.core.context.persistence.PersistenceUnit; import org.eclipse.jpt.ui.JptUiPlugin; import org.eclipse.jpt.ui.internal.JpaHelpContextIds; import org.eclipse.jpt.ui.internal.JpaMappingImageHelper; import org.eclipse.jpt.ui.internal.JptUiIcons; import org.eclipse.jpt.ui.internal.JptUiMessages; import org.eclipse.jpt.ui.internal.details.JptUiDetailsMessages; import org.eclipse.jpt.ui.internal.persistence.JptUiPersistenceMessages; import org.eclipse.jpt.ui.internal.widgets.AddRemoveListPane; import org.eclipse.jpt.ui.internal.widgets.Pane; import org.eclipse.jpt.ui.internal.widgets.AddRemovePane.Adapter; import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter; import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter; import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter; import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel; import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel; import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel; import org.eclipse.jpt.utility.model.value.ListValueModel; import org.eclipse.jpt.utility.model.value.PropertyValueModel; import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.SelectionDialog; import org.eclipse.ui.progress.IProgressService; /** * Here the layout of this pane: *
* ----------------------------------------------------------------------------- * | | * | Description | * | | * | ------------------------------------------------------------------------- | * | | | | * | | AddRemoveListPane | | * | | | | * | ------------------------------------------------------------------------- | * | | * | x Exclude Unlisted Mapped Classes | * | | * -----------------------------------------------------------------------------* * @see PersistenceUnit * @see PersistenceUnitGeneralComposite - The parent container * @see AddRemoveListPane * * @version 2.0 * @since 2.0 */ @SuppressWarnings("nls") public class PersistenceUnitClassesComposite extends Pane
PersistenceUnitMappedClassesComposite
.
*
* @param parentPane The parent pane of this one
* @param parent The parent container
*/
public PersistenceUnitClassesComposite(Pane extends PersistenceUnit> parentPane,
Composite parent) {
super(parentPane, parent);
}
private void addMappedClass(ObjectListSelectionModel listSelectionModel) {
IType type = chooseType();
if (type != null) {
String className = type.getFullyQualifiedName('$');
if(classRefExists(className)) {
return;
}
ClassRef classRef = getSubject().addSpecifiedClassRef();
classRef.setClassName(className);
listSelectionModel.setSelectedValue(classRef);
}
}
private boolean classRefExists(String className) {
for ( ListIteratornull
if the user
* cancelled the dialog
*/
private IType chooseType() {
IPackageFragmentRoot root = packageFragmentRoot();
if (root == null) {
return null;
}
IJavaElement[] elements = new IJavaElement[] { root.getJavaProject() };
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements);
IProgressService service = PlatformUI.getWorkbench().getProgressService();
SelectionDialog typeSelectionDialog;
try {
typeSelectionDialog = JavaUI.createTypeDialog(
getShell(),
service,
scope,
IJavaElementSearchConstants.CONSIDER_CLASSES,
false,
""
);
}
catch (JavaModelException e) {
JptUiPlugin.log(e);
return null;
}
typeSelectionDialog.setTitle(JptUiMessages.ClassChooserPane_dialogTitle);
typeSelectionDialog.setMessage(JptUiMessages.ClassChooserPane_dialogMessage);
if (typeSelectionDialog.open() == Window.OK) {
return (IType) typeSelectionDialog.getResult()[0];
}
return null;
}
private IType findType(ClassRef classRef) {
String className = classRef.getClassName();
if (className != null) {
try {
return getSubject().getJpaProject().getJavaProject().findType(className.replace('$', '.'));
}
catch (JavaModelException e) {
JptUiPlugin.log(e);
}
}
return null;
}
/*
* (non-Javadoc)
*/
@Override
protected void initializeLayout(Composite container) {
// Description
addMultiLineLabel(
container,
JptUiPersistenceMessages.PersistenceUnitClassesComposite_description
);
// List pane
new AddRemoveListPane