blob: 2119f7e8caeca07d8a32505788ab3662468c7e60 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 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.jpa.eclipselink.ui.internal.details.orm;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.internal.ui.refactoring.contentassist.JavaTypeCompletionProcessor;
import org.eclipse.jpt.common.ui.internal.widgets.ClassChooserPane;
import org.eclipse.jpt.common.ui.internal.widgets.Pane;
import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter;
import org.eclipse.jpt.common.utility.model.value.ModifiablePropertyValueModel;
import org.eclipse.jpt.common.utility.model.value.PropertyValueModel;
import org.eclipse.jpt.jpa.core.context.AccessHolder;
import org.eclipse.jpt.jpa.core.context.AttributeMapping;
import org.eclipse.jpt.jpa.core.context.orm.OrmAttributeMapping;
import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkAccessType;
import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages;
import org.eclipse.swt.widgets.Composite;
public class OrmAttributeTypeComposite
extends ClassChooserPane<AttributeMapping>
{
public OrmAttributeTypeComposite(Pane<?> parentPane,
PropertyValueModel<? extends AttributeMapping> subjectHolder,
Composite parent) {
this(parentPane, subjectHolder, parent, buildVirtualAttributeModel(subjectHolder));
}
public OrmAttributeTypeComposite(Pane<?> parentPane,
PropertyValueModel<? extends AttributeMapping> subjectHolder,
Composite parent,
PropertyValueModel<Boolean> enabledModel) {
super(parentPane, subjectHolder, parent, enabledModel);
}
@Override
protected JavaTypeCompletionProcessor buildJavaTypeCompletionProcessor() {
return new JavaTypeCompletionProcessor(true, true);
}
@Override
protected String getLabelText() {
return EclipseLinkUiDetailsMessages.OrmAttributeTypeComposite_attributeType;
}
@Override
protected ModifiablePropertyValueModel<String> buildTextHolder() {
return new PropertyAspectAdapter<AttributeMapping, String>(
getSubjectHolder(),
OrmAttributeMapping.DEFAULT_ATTRIBUTE_TYPE_PROPERTY,
OrmAttributeMapping.SPECIFIED_ATTRIBUTE_TYPE_PROPERTY) {
@Override
protected String buildValue_() {
if (this.subject.getPersistentAttribute().isVirtual()) {
return this.subject.getPersistentAttribute().getTypeName();
}
//get the attributeType instead of the specifiedAttributeType.
//this widget will only be enabled if the mapping is VIRTUAL access
//so we don't need to display the default differently
return ((OrmAttributeMapping) this.subject).getAttributeType();
}
@Override
protected void setValue_(String value) {
if (this.subject.getPersistentAttribute().isVirtual()) {
return;
}
if (value.length() == 0) {
value = null;
}
// we can safely cast to an orm.xml mapping since it is not virtual
((OrmAttributeMapping) this.subject).setSpecifiedAttributeType(value);
}
};
}
@Override
protected String getClassName() {
return ((OrmAttributeMapping) getSubject()).getAttributeType();
}
@Override
protected void setClassName(String className) {
((OrmAttributeMapping) getSubject()).setSpecifiedAttributeType(className);
}
@Override
protected IJavaProject getJavaProject() {
return getSubject().getJpaProject().getJavaProject();
}
private static PropertyValueModel<AccessHolder> buildAccessHolderHolder(PropertyValueModel<? extends AttributeMapping> mappingHolder) {
return new PropertyAspectAdapter<AttributeMapping, AccessHolder>(mappingHolder) {
@Override
protected AccessHolder buildValue_() {
return this.subject.getPersistentAttribute();
}
};
}
private static PropertyValueModel<Boolean> buildVirtualAttributeModel(PropertyValueModel<? extends AttributeMapping> mappingHolder) {
return new PropertyAspectAdapter<AccessHolder, Boolean>(
buildAccessHolderHolder(mappingHolder),
AccessHolder.SPECIFIED_ACCESS_PROPERTY,
AccessHolder.DEFAULT_ACCESS_PROPERTY) {
@Override
protected Boolean buildValue() {
if (this.subject == null) {
return Boolean.FALSE;
}
return this.buildValue_();
}
@Override
protected Boolean buildValue_() {
return Boolean.valueOf(this.subject.getAccess() == EclipseLinkAccessType.VIRTUAL);
}
};
}
}