Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java')
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java169
1 files changed, 169 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java
new file mode 100644
index 0000000000..9bd6b98627
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentTypeDetailsPage.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 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.details;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.jpt.core.context.PersistentType;
+import org.eclipse.jpt.core.context.TypeMapping;
+import org.eclipse.jpt.ui.WidgetFactory;
+import org.eclipse.jpt.ui.details.JpaComposite;
+import org.eclipse.jpt.ui.internal.Tracing;
+import org.eclipse.jpt.ui.internal.util.ControlSwitcher;
+import org.eclipse.jpt.utility.Filter;
+import org.eclipse.jpt.utility.internal.Transformer;
+import org.eclipse.jpt.utility.internal.model.value.FilteringPropertyValueModel;
+import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.part.PageBook;
+
+/**
+ * The abstract definition of the details page responsible to show the
+ * information for an persistent type.
+ *
+ * @see PersistentType
+ *
+ * @version 2.2
+ * @since 1.0
+ */
+@SuppressWarnings("nls")
+public class PersistentTypeDetailsPage extends AbstractJpaDetailsPage<PersistentType>
+{
+ private Map<String, JpaComposite> mappingComposites;
+ private PageBook mappingPageBook;
+ private PropertyValueModel<TypeMapping> mappingHolder;
+
+ /**
+ * Creates a new <code>PersistentTypeDetailsPage</code>.
+ *
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public PersistentTypeDetailsPage(Composite parent,
+ WidgetFactory widgetFactory) {
+
+ super(parent, widgetFactory);
+ }
+
+ @Override
+ protected void initialize() {
+ super.initialize();
+ this.mappingComposites = new HashMap<String, JpaComposite>();
+ }
+
+ @Override
+ protected void initializeLayout(Composite container) {
+
+ // Map As composite
+ new PersistentTypeMapAsComposite(
+ this,
+ addSubPane(container, 0, 0, 5, 0)
+ );
+
+ // Type properties page
+ buildMappingPageBook(container);
+ }
+
+ protected PageBook buildMappingPageBook(Composite parent) {
+
+ this.mappingPageBook = new PageBook(parent, SWT.NONE);
+ this.mappingPageBook.showPage(this.addLabel(this.mappingPageBook, ""));
+
+ GridData gridData = new GridData();
+ gridData.horizontalAlignment = SWT.FILL;
+ gridData.verticalAlignment = SWT.TOP;
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.grabExcessVerticalSpace = true;
+
+ this.mappingPageBook.setLayoutData(gridData);
+
+ this.mappingHolder = this.buildMappingHolder();
+ new ControlSwitcher(this.mappingHolder, this.buildPaneTransformer(), this.mappingPageBook);
+
+ return this.mappingPageBook;
+ }
+
+ private Transformer<TypeMapping, Control> buildPaneTransformer() {
+ return new Transformer<TypeMapping, Control>() {
+ public Control transform(TypeMapping typeMapping) {
+ if (typeMapping == null) {
+ return null;
+ }
+ return getMappingComposite(typeMapping.getKey()).getControl();
+ }
+ };
+ }
+
+ protected PropertyValueModel<TypeMapping> buildMappingHolder(String key) {
+ return new FilteringPropertyValueModel<TypeMapping>(
+ this.mappingHolder,
+ buildMappingFilter(key)
+ );
+ }
+
+ private PropertyAspectAdapter<PersistentType, TypeMapping> buildMappingHolder() {
+ return new PropertyAspectAdapter<PersistentType, TypeMapping>(getSubjectHolder(), PersistentType.MAPPING_PROPERTY) {
+ @Override
+ protected TypeMapping buildValue_() {
+ return this.subject.getMapping();
+ }
+ };
+ }
+
+ private Filter<TypeMapping> buildMappingFilter(final String key) {
+ return new Filter<TypeMapping>() {
+ public boolean accept(TypeMapping mapping) {
+ return (mapping == null || key == null) || key.equals(mapping.getKey());
+ }
+ };
+ }
+
+
+ private JpaComposite getMappingComposite(String key) {
+ JpaComposite mappingComposite = this.mappingComposites.get(key);
+ if (mappingComposite != null) {
+ return mappingComposite;
+ }
+
+ mappingComposite = buildMappingComposite(this.mappingPageBook, key);
+
+ if (mappingComposite != null) {
+ this.mappingComposites.put(key, mappingComposite);
+ }
+
+ return mappingComposite;
+ }
+
+ protected JpaComposite buildMappingComposite(PageBook pageBook, String key) {
+ return getJpaPlatformUi().
+ buildTypeMappingComposite(
+ getSubject().getResourceType(),
+ key,
+ pageBook,
+ buildMappingHolder(key),
+ getWidgetFactory());
+ }
+
+ @Override
+ public void dispose() {
+ log(Tracing.UI_DETAILS_VIEW, "PersistentTypeDetailsPage.dispose()");
+
+ for (JpaComposite mappingComposite : this.mappingComposites.values()) {
+ mappingComposite.dispose();
+ }
+ this.mappingComposites.clear();
+ super.dispose();
+ }
+
+} \ No newline at end of file

Back to the top