blob: 9bc4790c04605cd9cba1eddb247b33651ee0ce8e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 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.jaxb.core.internal.context.java;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.jaxb.core.context.JaxbContextNode;
import org.eclipse.jpt.jaxb.core.context.XmlJavaTypeAdapter;
import org.eclipse.jpt.jaxb.core.resource.java.XmlJavaTypeAdapterAnnotation;
public abstract class AbstractJavaXmlJavaTypeAdapter
extends AbstractJavaContextNode
implements XmlJavaTypeAdapter
{
protected final XmlJavaTypeAdapterAnnotation resourceXmlJavaTypeAdapter;
protected String value;
protected String specifiedType;
protected String defaultType;
protected AbstractJavaXmlJavaTypeAdapter(JaxbContextNode parent, XmlJavaTypeAdapterAnnotation resource) {
super(parent);
this.resourceXmlJavaTypeAdapter = resource;
this.value = this.getResourceValue();
this.specifiedType = this.getResourceTypeString();
this.defaultType = this.buildDefaultType();
}
// ********** synchronize/update **********
@Override
public void synchronizeWithResourceModel() {
super.synchronizeWithResourceModel();
this.setValue_(this.getResourceValue());
this.setSpecifiedType_(this.getResourceTypeString());
this.setDefaultType(this.buildDefaultType());
}
// ********** xml java type adapter annotation **********
public XmlJavaTypeAdapterAnnotation getResourceXmlJavaTypeAdapter() {
return this.resourceXmlJavaTypeAdapter;
}
// ********** value **********
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.resourceXmlJavaTypeAdapter.setValue(value);
this.setValue_(value);
}
protected void setValue_(String value) {
String old = this.value;
this.value = value;
this.firePropertyChanged(VALUE_PROPERTY, old, value);
}
protected String getResourceValue() {
return this.resourceXmlJavaTypeAdapter.getValue();
}
// ********** type **********
public String getType() {
return this.specifiedTypeNotSet() ? this.getDefaultType() : this.getSpecifiedType();
}
/**
* @see javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT
*/
protected boolean specifiedTypeNotSet() {
return getSpecifiedType() == null || getSpecifiedType().equals(DEFAULT_TYPE);
}
public String getDefaultType() {
return this.defaultType;
}
protected void setDefaultType(String defaultType) {
String oldDefaultType = this.defaultType;
this.defaultType = defaultType;
firePropertyChanged(DEFAULT_TYPE_PROPERTY, oldDefaultType, defaultType);
}
protected abstract String buildDefaultType();
public String getSpecifiedType() {
return this.specifiedType;
}
public void setSpecifiedType(String location) {
this.resourceXmlJavaTypeAdapter.setType(location);
this.setSpecifiedType_(location);
}
protected void setSpecifiedType_(String type) {
String old = this.specifiedType;
this.specifiedType = type;
this.firePropertyChanged(SPECIFIED_TYPE_PROPERTY, old, type);
}
protected String getResourceTypeString() {
return this.resourceXmlJavaTypeAdapter.getType();
}
// ********** validation **********
@Override
public TextRange getValidationTextRange(CompilationUnit astRoot) {
return getResourceXmlJavaTypeAdapter().getTextRange(astRoot);
}
}