blob: 2da316d7635d056ea92d82da7d91d2d2ed65ea68 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2012 SAP AG and others.
* 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:
* Petya Sabeva - initial API, implementation and documentation
*
* </copyright>
*
*******************************************************************************/
package org.eclipse.jpt.jpadiagrameditor.ui.internal.command;
import org.eclipse.jpt.common.core.resource.java.Annotation;
import org.eclipse.jpt.common.utility.command.Command;
import org.eclipse.jpt.jpa.core.context.java.JavaPersistentAttribute;
import org.eclipse.jpt.jpa.core.context.persistence.PersistenceUnit;
import org.eclipse.jpt.jpa.core.resource.java.OwnableRelationshipMappingAnnotation;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.provider.IJPAEditorFeatureProvider;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.relations.IRelation;
import org.eclipse.jpt.jpadiagrameditor.ui.internal.util.EntityChangeListener;
public class SetMappedByNewValueCommand implements Command {
private IJPAEditorFeatureProvider fp;
private PersistenceUnit pu;
private String inverseEntityName;
private String inverseAttributeName;
private JavaPersistentAttribute newAt;
private JavaPersistentAttribute oldAt;
private IRelation rel;
public SetMappedByNewValueCommand(IJPAEditorFeatureProvider fp,
PersistenceUnit pu, String inverseEntityName,
String inverseAttributeName, JavaPersistentAttribute newAt,
JavaPersistentAttribute oldAt,
IRelation rel) {
super();
this.fp =fp;
this.pu = pu;
this.inverseEntityName = inverseEntityName;
this.inverseAttributeName = inverseAttributeName;
this.newAt = newAt;
this.oldAt = oldAt;
this.rel = rel;
}
public void execute() {
fp.addAttribForUpdate(pu, inverseEntityName
+ EntityChangeListener.SEPARATOR + inverseAttributeName
+ EntityChangeListener.SEPARATOR + newAt.getName()
+ EntityChangeListener.SEPARATOR + oldAt.getName());
Annotation a = rel.getInverseAnnotatedAttribute().getMapping().getMappingAnnotation();
if (OwnableRelationshipMappingAnnotation.class.isInstance(a)) {
String mappedBy = ((OwnableRelationshipMappingAnnotation)a).getMappedBy();
String[] mappedByAttrs = mappedBy.split("\\."); //$NON-NLS-1$
if(mappedByAttrs.length > 1){
if(mappedByAttrs[0].equals(oldAt.getName())){
mappedBy = newAt.getName() + "." + mappedByAttrs[1]; //$NON-NLS-1$
} else if(mappedByAttrs[1].equals(oldAt.getName())){
mappedBy = mappedByAttrs[0] + "." + newAt.getName(); //$NON-NLS-1$
}
} else {
mappedBy = newAt.getName();
}
((OwnableRelationshipMappingAnnotation)a).setMappedBy(mappedBy);
rel.getInverse().getJavaResourceType().getJavaResourceCompilationUnit().synchronizeWithJavaSource();
}
}
}