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/GeneratorComposite.java')
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/GeneratorComposite.java206
1 files changed, 206 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/GeneratorComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/GeneratorComposite.java
new file mode 100644
index 0000000000..6571f2b676
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/GeneratorComposite.java
@@ -0,0 +1,206 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 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 org.eclipse.jpt.core.JpaProject;
+import org.eclipse.jpt.core.context.Generator;
+import org.eclipse.jpt.core.context.IdMapping;
+import org.eclipse.jpt.ui.internal.widgets.IntegerCombo;
+import org.eclipse.jpt.ui.internal.widgets.Pane;
+import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * This is the generic pane for a generator.
+ *
+ * @see IdMapping
+ * @see Generator
+ * @see SequenceGeneratorComposite - A sub-pane
+ * @see TalbeGeneratorComposite - A sub-pane
+ *
+ * @version 2.2
+ * @since 1.0
+ */
+public abstract class GeneratorComposite<T extends Generator> extends Pane<T>
+{
+
+ protected GeneratorBuilder<T> generatorBuilder;
+
+ protected GeneratorComposite(Pane<?> parentPane,
+ PropertyValueModel<T> subjectHolder,
+ Composite parent,
+ GeneratorBuilder<T> generatorBuilder) {
+
+ super(parentPane, subjectHolder, parent, false);
+ this.generatorBuilder = generatorBuilder;
+ }
+
+ /**
+ * Creates a new Generator. This makes it possible for the user
+ * to set values on a Generator before the model object has been created.
+ * Allows them not to first have to check the check box to enable the panel.
+ */
+ protected final T buildGenerator() {
+ return this.generatorBuilder.addGenerator();
+ }
+
+ /**
+ * Retrieves the <code>Generator</code> and if it is <code>null</code>, then
+ * create it.
+ *
+ * @param subject The subject used to retrieve the generator
+ * @return The <code>Generator</code> which should never be <code>null</code>
+ */
+ protected final T retrieveGenerator() {
+ T generator = getSubject();
+
+ if (generator == null) {
+ generator = this.buildGenerator();
+ }
+
+ return generator;
+ }
+
+ protected final WritablePropertyValueModel<String> buildGeneratorNameHolder() {
+ return new PropertyAspectAdapter<Generator, String>(getSubjectHolder(), Generator.NAME_PROPERTY) {
+ @Override
+ protected String buildValue_() {
+ return this.subject.getName();
+ }
+
+ @Override
+ public void setValue(String value) {
+ if (this.subject != null) {
+ setValue_(value);
+ return;
+ }
+ if (value.length() == 0) {
+ return;
+ }
+ retrieveGenerator().setName(value);
+ }
+
+ @Override
+ protected void setValue_(String value) {
+ if (value.length() == 0) {
+ value = null;
+ }
+ this.subject.setName(value);
+ }
+ };
+ }
+
+ protected void addAllocationSizeCombo(Composite container) {
+ new IntegerCombo<Generator>(this, getSubjectHolder(), container) {
+
+ @Override
+ protected String getLabelText() {
+ return JptUiDetailsMessages.GeneratorComposite_allocationSize;
+ }
+
+ @Override
+ protected String getHelpId() {
+ return null;//JpaHelpContextIds.MAPPING_COLUMN_LENGTH;
+ }
+
+ @Override
+ protected PropertyValueModel<Integer> buildDefaultHolder() {
+ return new PropertyAspectAdapter<Generator, Integer>(getSubjectHolder(), Generator.DEFAULT_ALLOCATION_SIZE_PROPERTY) {
+ @Override
+ protected Integer buildValue_() {
+ return Integer.valueOf(this.subject.getDefaultAllocationSize());
+ }
+ };
+ }
+
+ @Override
+ protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
+ return new PropertyAspectAdapter<Generator, Integer>(getSubjectHolder(), Generator.SPECIFIED_ALLOCATION_SIZE_PROPERTY) {
+ @Override
+ protected Integer buildValue_() {
+ return this.subject.getSpecifiedAllocationSize();
+ }
+
+ @Override
+ public void setValue(Integer value) {
+ retrieveGenerator().setSpecifiedAllocationSize(value);
+ }
+ };
+ }
+ };
+ }
+
+ protected void addInitialValueCombo(Composite container) {
+ new IntegerCombo<Generator>(this, getSubjectHolder(), container) {
+
+ @Override
+ protected String getLabelText() {
+ return JptUiDetailsMessages.GeneratorComposite_initialValue;
+ }
+
+ @Override
+ protected String getHelpId() {
+ return null;//JpaHelpContextIds.MAPPING_COLUMN_LENGTH;
+ }
+
+ @Override
+ protected PropertyValueModel<Integer> buildDefaultHolder() {
+ return new PropertyAspectAdapter<Generator, Integer>(getSubjectHolder(), Generator.DEFAULT_INITIAL_VALUE_PROPERTY) {
+ @Override
+ protected Integer buildValue_() {
+ return Integer.valueOf(this.subject.getDefaultInitialValue());
+ }
+ };
+ }
+
+ @Override
+ protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() {
+ return new PropertyAspectAdapter<Generator, Integer>(getSubjectHolder(), Generator.SPECIFIED_INITIAL_VALUE_PROPERTY) {
+ @Override
+ protected Integer buildValue_() {
+ return this.subject.getSpecifiedInitialValue();
+ }
+
+ @Override
+ public void setValue(Integer value) {
+ retrieveGenerator().setSpecifiedInitialValue(value);
+ }
+ };
+ }
+ };
+ }
+
+ /**
+ * Retrieves the JPA project.
+ *
+ * @return The JPA project or <code>null</code> if the subject is <code>null</code>
+ */
+ protected final JpaProject getJpaProject() {
+ return this.getSubject() == null ? null : this.getSubject().getJpaProject();
+ }
+
+ /**
+ * Returns the property name used to listen to the ID mapping when the
+ * generator changes.
+ *
+ * @return The property name associated with the generator
+ */
+ protected abstract String getPropertyName();
+
+
+ public interface GeneratorBuilder<T> {
+ /**
+ * Add a generator to the model and return it
+ */
+ T addGenerator();
+ }
+} \ No newline at end of file

Back to the top