blob: 3c615476dd439b982e9da4cb13d54caa278122e5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 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.xml.details;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jpt.core.internal.AccessType;
import org.eclipse.jpt.core.internal.IJpaContentNode;
import org.eclipse.jpt.core.internal.XmlEObject;
import org.eclipse.jpt.core.internal.content.orm.OrmPackage;
import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType;
import org.eclipse.jpt.core.internal.content.orm.XmlTypeMapping;
import org.eclipse.jpt.ui.internal.details.PersistentTypeDetailsPage;
import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider;
import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddableUiProvider;
import org.eclipse.jpt.ui.internal.java.mappings.properties.EntityUiProvider;
import org.eclipse.jpt.ui.internal.java.mappings.properties.MappedSuperclassUiProvider;
import org.eclipse.jpt.ui.internal.widgets.CComboViewer;
import org.eclipse.jpt.ui.internal.xml.JptUiXmlMessages;
import org.eclipse.jpt.ui.internal.xml.details.AccessTypeComboViewer.AccessHolder;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
public class XmlPersistentTypeDetailsPage extends PersistentTypeDetailsPage
{
private XmlJavaClassChooser javaClassChooser;
private MetaDataCompleteComboViewer metadataCompleteComboViewer;
private AccessTypeComboViewer accessComboViewer;
public XmlPersistentTypeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) {
super(parent, widgetFactory);
}
protected Collection<ITypeMappingUiProvider> buildTypeMappingUiProviders() {
Collection<ITypeMappingUiProvider> typeMappingUiProviders = new ArrayList<ITypeMappingUiProvider>();
typeMappingUiProviders.add(new EntityUiProvider());
typeMappingUiProviders.add(new MappedSuperclassUiProvider());
typeMappingUiProviders.add(new EmbeddableUiProvider());
return typeMappingUiProviders;
}
@Override
protected void initializeLayout(Composite composite) {
composite.setLayout(new GridLayout(2, false));
GridData gridData;
CommonWidgets.buildJavaClassLabel(composite, getWidgetFactory());
this.javaClassChooser = CommonWidgets.buildJavaClassChooser(composite, this.commandStack, getWidgetFactory());
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.verticalAlignment = SWT.BEGINNING;
gridData.grabExcessHorizontalSpace = true;
this.javaClassChooser.getControl().setLayoutData(gridData);
buildTypeMappingLabel(composite);
CComboViewer typeMappingCombo = buildTypeMappingCombo(composite);
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.verticalAlignment = SWT.BEGINNING;
gridData.grabExcessHorizontalSpace = true;
typeMappingCombo.getCombo().setLayoutData(gridData);
buildMetadataCompleteLabel(composite);
this.metadataCompleteComboViewer = new MetaDataCompleteComboViewer(composite, this.commandStack, getWidgetFactory());
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.verticalAlignment = SWT.BEGINNING;
gridData.grabExcessHorizontalSpace = true;
this.metadataCompleteComboViewer.getControl().setLayoutData(gridData);
CommonWidgets.buildAccessLabel(composite, getWidgetFactory());
this.accessComboViewer = CommonWidgets.buildAccessTypeComboViewer(composite, this.commandStack, getWidgetFactory());
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.verticalAlignment = SWT.BEGINNING;
gridData.grabExcessHorizontalSpace = true;
this.accessComboViewer.getControl().setLayoutData(gridData);
PageBook typeMappingPageBook = buildTypeMappingPageBook(composite);
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.verticalAlignment = SWT.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalSpan = 2;
typeMappingPageBook.setLayoutData(gridData);
}
private Label buildMetadataCompleteLabel(Composite parent ) {
return getWidgetFactory().createLabel(parent, JptUiXmlMessages.PersistentTypePage_MetadataCompleteLabel);
}
@Override
protected void doPopulate(IJpaContentNode persistentTypeNode) {
super.doPopulate(persistentTypeNode);
if (persistentTypeNode == null) {
this.javaClassChooser.populate(null);
this.metadataCompleteComboViewer.populate(null);
this.accessComboViewer.populate(new MyAccessHolder(null));
}
else {
XmlTypeMapping mapping = ((XmlPersistentType) persistentTypeNode).getMapping();
this.javaClassChooser.populate(mapping);
this.metadataCompleteComboViewer.populate(mapping);
this.accessComboViewer.populate(new MyAccessHolder(mapping));
}
}
@Override
protected void doPopulate() {
super.doPopulate();
this.javaClassChooser.populate();
this.metadataCompleteComboViewer.populate();
this.accessComboViewer.populate();
}
@Override
public void dispose() {
this.javaClassChooser.dispose();
this.metadataCompleteComboViewer.dispose();
this.accessComboViewer.dispose();
super.dispose();
}
private class MyAccessHolder extends XmlEObject implements AccessHolder{
private XmlTypeMapping xmlTypeMapping;
MyAccessHolder(XmlTypeMapping xmlTypeMapping) {
super();
this.xmlTypeMapping = xmlTypeMapping;
}
public void setAccess(AccessType accessType) {
xmlTypeMapping.setSpecifiedAccess(accessType);
}
public AccessType getAccess() {
return xmlTypeMapping.getSpecifiedAccess();
}
public Class featureClass() {
return XmlTypeMapping.class;
}
public int featureId() {
return OrmPackage.XML_TYPE_MAPPING__SPECIFIED_ACCESS;
}
public EObject wrappedObject() {
return this.xmlTypeMapping;
}
}
}