blob: d5998f5f61ec7a8ece6f60e53fe5f187d4431928 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 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.core.internal.content.java.mappings;
import java.util.Collection;
import java.util.List;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.core.internal.ITextRange;
import org.eclipse.jpt.core.internal.content.java.JavaEObject;
import org.eclipse.jpt.core.internal.jdtutility.AnnotationElementAdapter;
import org.eclipse.jpt.core.internal.jdtutility.Attribute;
import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationElementAdapter;
import org.eclipse.jpt.core.internal.jdtutility.ShortCircuitArrayAnnotationElementAdapter;
import org.eclipse.jpt.core.internal.mappings.CascadeType;
import org.eclipse.jpt.core.internal.mappings.ICascade;
import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
import org.eclipse.jpt.utility.internal.CollectionTools;
/**
* <!-- begin-user-doc -->
* A representation of the model object '<em><b>Java Cascade</b></em>'.
* <!-- end-user-doc -->
*
*
* @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getJavaCascade()
* @model kind="class"
* @generated
*/
public class JavaCascade extends JavaEObject implements ICascade
{
/**
* The default value of the '{@link #isAll() <em>All</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isAll()
* @generated
* @ordered
*/
protected static final boolean ALL_EDEFAULT = false;
/**
* The cached value of the '{@link #isAll() <em>All</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isAll()
* @generated
* @ordered
*/
protected boolean all = ALL_EDEFAULT;
/**
* The default value of the '{@link #isPersist() <em>Persist</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isPersist()
* @generated
* @ordered
*/
protected static final boolean PERSIST_EDEFAULT = false;
/**
* The cached value of the '{@link #isPersist() <em>Persist</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isPersist()
* @generated
* @ordered
*/
protected boolean persist = PERSIST_EDEFAULT;
/**
* The default value of the '{@link #isMerge() <em>Merge</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isMerge()
* @generated
* @ordered
*/
protected static final boolean MERGE_EDEFAULT = false;
/**
* The cached value of the '{@link #isMerge() <em>Merge</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isMerge()
* @generated
* @ordered
*/
protected boolean merge = MERGE_EDEFAULT;
/**
* The default value of the '{@link #isRemove() <em>Remove</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isRemove()
* @generated
* @ordered
*/
protected static final boolean REMOVE_EDEFAULT = false;
/**
* The cached value of the '{@link #isRemove() <em>Remove</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isRemove()
* @generated
* @ordered
*/
protected boolean remove = REMOVE_EDEFAULT;
/**
* The default value of the '{@link #isRefresh() <em>Refresh</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isRefresh()
* @generated
* @ordered
*/
protected static final boolean REFRESH_EDEFAULT = false;
/**
* The cached value of the '{@link #isRefresh() <em>Refresh</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #isRefresh()
* @generated
* @ordered
*/
protected boolean refresh = REFRESH_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected JavaCascade() {
super();
}
private Attribute attribute;
private AnnotationElementAdapter<String[]> cascadeAdapter;
private DeclarationAnnotationElementAdapter<String[]> cascadeDeclarationAdapter;
protected JavaCascade(Attribute attribute, DeclarationAnnotationElementAdapter<String[]> cascadeAdapter) {
super();
this.attribute = attribute;
this.cascadeDeclarationAdapter = cascadeAdapter;
this.cascadeAdapter = new ShortCircuitArrayAnnotationElementAdapter<String>(this.attribute, cascadeAdapter);
}
@Override
protected void notifyChanged(Notification notification) {
super.notifyChanged(notification);
switch (notification.getFeatureID(ICascade.class)) {
case JpaJavaMappingsPackage.JAVA_CASCADE__ALL :
updateJavaAnnotation(isAll(), CascadeType.ALL);
break;
case JpaJavaMappingsPackage.JAVA_CASCADE__MERGE :
updateJavaAnnotation(isMerge(), CascadeType.MERGE);
break;
case JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST :
updateJavaAnnotation(isPersist(), CascadeType.PERSIST);
break;
case JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE :
updateJavaAnnotation(isRemove(), CascadeType.REMOVE);
break;
case JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH :
updateJavaAnnotation(isRefresh(), CascadeType.REFRESH);
break;
default :
break;
}
}
private void updateJavaAnnotation(boolean isSet, CascadeType cascadeType) {
String[] javaValue = this.cascadeAdapter.getValue();
CascadeType[] cascadeTypes = CascadeType.fromJavaAnnotationValue(javaValue);
List<CascadeType> cascadeCollection = CollectionTools.list(cascadeTypes);
if (cascadeCollection.contains(cascadeType)) {
if (!isSet) {
if (javaValue.length == 1) {
this.cascadeAdapter.setValue(null);
}
else {
cascadeCollection.remove(cascadeType);
String[] newJavaValue = CascadeType.toJavaAnnotationValue(cascadeCollection.toArray(new CascadeType[cascadeCollection.size()]));
this.cascadeAdapter.setValue(newJavaValue);
}
}
}
else {
if (isSet) {
cascadeCollection.add(cascadeType);
String[] newJavaValue = CascadeType.toJavaAnnotationValue(cascadeCollection.toArray(new CascadeType[cascadeCollection.size()]));
this.cascadeAdapter.setValue(newJavaValue);
}
}
}
protected AnnotationElementAdapter<String[]> getCascadeAdapter() {
return this.cascadeAdapter;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
protected EClass eStaticClass() {
return JpaJavaMappingsPackage.Literals.JAVA_CASCADE;
}
/**
* Returns the value of the '<em><b>All</b></em>' attribute.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>All</em>' attribute isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>All</em>' attribute.
* @see #setAll(boolean)
* @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getICascade_All()
* @model
* @generated
*/
public boolean isAll() {
return all;
}
/**
* Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaCascade#isAll <em>All</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>All</em>' attribute.
* @see #isAll()
* @generated
*/
public void setAll(boolean newAll) {
boolean oldAll = all;
all = newAll;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_CASCADE__ALL, oldAll, all));
}
/**
* Returns the value of the '<em><b>Persist</b></em>' attribute.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Persist</em>' attribute isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Persist</em>' attribute.
* @see #setPersist(boolean)
* @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getICascade_Persist()
* @model
* @generated
*/
public boolean isPersist() {
return persist;
}
/**
* Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaCascade#isPersist <em>Persist</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Persist</em>' attribute.
* @see #isPersist()
* @generated
*/
public void setPersist(boolean newPersist) {
boolean oldPersist = persist;
persist = newPersist;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST, oldPersist, persist));
}
/**
* Returns the value of the '<em><b>Merge</b></em>' attribute.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Merge</em>' attribute isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Merge</em>' attribute.
* @see #setMerge(boolean)
* @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getICascade_Merge()
* @model
* @generated
*/
public boolean isMerge() {
return merge;
}
/**
* Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaCascade#isMerge <em>Merge</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Merge</em>' attribute.
* @see #isMerge()
* @generated
*/
public void setMerge(boolean newMerge) {
boolean oldMerge = merge;
merge = newMerge;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_CASCADE__MERGE, oldMerge, merge));
}
/**
* Returns the value of the '<em><b>Remove</b></em>' attribute.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Remove</em>' attribute isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Remove</em>' attribute.
* @see #setRemove(boolean)
* @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getICascade_Remove()
* @model
* @generated
*/
public boolean isRemove() {
return remove;
}
/**
* Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaCascade#isRemove <em>Remove</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Remove</em>' attribute.
* @see #isRemove()
* @generated
*/
public void setRemove(boolean newRemove) {
boolean oldRemove = remove;
remove = newRemove;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE, oldRemove, remove));
}
/**
* Returns the value of the '<em><b>Refresh</b></em>' attribute.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Refresh</em>' attribute isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Refresh</em>' attribute.
* @see #setRefresh(boolean)
* @see org.eclipse.jpt.core.internal.content.java.mappings.JpaJavaMappingsPackage#getICascade_Refresh()
* @model
* @generated
*/
public boolean isRefresh() {
return refresh;
}
/**
* Sets the value of the '{@link org.eclipse.jpt.core.internal.content.java.mappings.JavaCascade#isRefresh <em>Refresh</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Refresh</em>' attribute.
* @see #isRefresh()
* @generated
*/
public void setRefresh(boolean newRefresh) {
boolean oldRefresh = refresh;
refresh = newRefresh;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH, oldRefresh, refresh));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Object eGet(int featureID, boolean resolve, boolean coreType) {
switch (featureID) {
case JpaJavaMappingsPackage.JAVA_CASCADE__ALL :
return isAll() ? Boolean.TRUE : Boolean.FALSE;
case JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST :
return isPersist() ? Boolean.TRUE : Boolean.FALSE;
case JpaJavaMappingsPackage.JAVA_CASCADE__MERGE :
return isMerge() ? Boolean.TRUE : Boolean.FALSE;
case JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE :
return isRemove() ? Boolean.TRUE : Boolean.FALSE;
case JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH :
return isRefresh() ? Boolean.TRUE : Boolean.FALSE;
}
return super.eGet(featureID, resolve, coreType);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eSet(int featureID, Object newValue) {
switch (featureID) {
case JpaJavaMappingsPackage.JAVA_CASCADE__ALL :
setAll(((Boolean) newValue).booleanValue());
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST :
setPersist(((Boolean) newValue).booleanValue());
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__MERGE :
setMerge(((Boolean) newValue).booleanValue());
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE :
setRemove(((Boolean) newValue).booleanValue());
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH :
setRefresh(((Boolean) newValue).booleanValue());
return;
}
super.eSet(featureID, newValue);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public void eUnset(int featureID) {
switch (featureID) {
case JpaJavaMappingsPackage.JAVA_CASCADE__ALL :
setAll(ALL_EDEFAULT);
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST :
setPersist(PERSIST_EDEFAULT);
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__MERGE :
setMerge(MERGE_EDEFAULT);
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE :
setRemove(REMOVE_EDEFAULT);
return;
case JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH :
setRefresh(REFRESH_EDEFAULT);
return;
}
super.eUnset(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public boolean eIsSet(int featureID) {
switch (featureID) {
case JpaJavaMappingsPackage.JAVA_CASCADE__ALL :
return all != ALL_EDEFAULT;
case JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST :
return persist != PERSIST_EDEFAULT;
case JpaJavaMappingsPackage.JAVA_CASCADE__MERGE :
return merge != MERGE_EDEFAULT;
case JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE :
return remove != REMOVE_EDEFAULT;
case JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH :
return refresh != REFRESH_EDEFAULT;
}
return super.eIsSet(featureID);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass) {
if (baseClass == ICascade.class) {
switch (derivedFeatureID) {
case JpaJavaMappingsPackage.JAVA_CASCADE__ALL :
return JpaCoreMappingsPackage.ICASCADE__ALL;
case JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST :
return JpaCoreMappingsPackage.ICASCADE__PERSIST;
case JpaJavaMappingsPackage.JAVA_CASCADE__MERGE :
return JpaCoreMappingsPackage.ICASCADE__MERGE;
case JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE :
return JpaCoreMappingsPackage.ICASCADE__REMOVE;
case JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH :
return JpaCoreMappingsPackage.ICASCADE__REFRESH;
default :
return -1;
}
}
return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass) {
if (baseClass == ICascade.class) {
switch (baseFeatureID) {
case JpaCoreMappingsPackage.ICASCADE__ALL :
return JpaJavaMappingsPackage.JAVA_CASCADE__ALL;
case JpaCoreMappingsPackage.ICASCADE__PERSIST :
return JpaJavaMappingsPackage.JAVA_CASCADE__PERSIST;
case JpaCoreMappingsPackage.ICASCADE__MERGE :
return JpaJavaMappingsPackage.JAVA_CASCADE__MERGE;
case JpaCoreMappingsPackage.ICASCADE__REMOVE :
return JpaJavaMappingsPackage.JAVA_CASCADE__REMOVE;
case JpaCoreMappingsPackage.ICASCADE__REFRESH :
return JpaJavaMappingsPackage.JAVA_CASCADE__REFRESH;
default :
return -1;
}
}
return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public String toString() {
if (eIsProxy())
return super.toString();
StringBuffer result = new StringBuffer(super.toString());
result.append(" (all: ");
result.append(all);
result.append(", persist: ");
result.append(persist);
result.append(", merge: ");
result.append(merge);
result.append(", remove: ");
result.append(remove);
result.append(", refresh: ");
result.append(refresh);
result.append(')');
return result.toString();
}
public Attribute getAttribute() {
return this.attribute;
}
public ITextRange validationTextRange() {
return getAttribute().annotationElementTextRange(this.cascadeDeclarationAdapter);
}
public void updateFromJava(CompilationUnit astRoot) {
String[] javaValue = this.cascadeAdapter.getValue(astRoot);
CascadeType[] cascadeTypes = CascadeType.fromJavaAnnotationValue(javaValue);
Collection<CascadeType> cascadeCollection = CollectionTools.collection(cascadeTypes);
setAll(cascadeCollection.contains(CascadeType.ALL));
setPersist(cascadeCollection.contains(CascadeType.PERSIST));
setMerge(cascadeCollection.contains(CascadeType.MERGE));
setRemove(cascadeCollection.contains(CascadeType.REMOVE));
setRefresh(cascadeCollection.contains(CascadeType.REFRESH));
}
}