/******************************************************************************* * 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); } }