/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.cdi.internal.core.refactoring;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.CompositeChange;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.TextFileChange;
import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
import org.eclipse.text.edits.MultiTextEdit;
import org.jboss.tools.cdi.core.CDICoreMessages;
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.common.EclipseUtil;
import org.jboss.tools.common.refactoring.FileChangeFactory;
public class AddQualifiersToBeanProcessor extends CDIRefactoringProcessor {
protected IBean selectedBean;
protected IInjectionPoint injectionPoint;
protected List<IBean> beans;
protected ArrayList<ValuedQualifier> qualifiers;
public AddQualifiersToBeanProcessor(String label, IInjectionPoint injectionPoint, List<IBean> beans, IBean bean) {
super(label);
this.selectedBean = bean;
this.injectionPoint = injectionPoint;
this.beans = beans;
}
@Override
public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
throws CoreException, OperationCanceledException {
status = new RefactoringStatus();
if(injectionPoint == null){
status.addFatalError(CDICoreMessages.CDI_RENAME_PROCESSOR_ERROR_INJECTION_POINT_NOT_FOUND);
return status;
}
IFile injectionPointFile = (IFile)injectionPoint.getClassBean().getResource();
isFileCorrect(injectionPointFile);
return status;
}
@Override
public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
CheckConditionsContext context) throws CoreException,
OperationCanceledException {
if(selectedBean == null){
status.addFatalError(CDICoreMessages.CDI_RENAME_PROCESSOR_ERROR_BEAN_NOT_FOUND);
return status;
}
IFile beanFile = (IFile)selectedBean.getBeanClass().getResource();
if(!isFileCorrect(beanFile)){
return status;
}
return status;
}
@Override
public Change createChange(IProgressMonitor pm) throws CoreException,
OperationCanceledException {
rootChange = new CompositeChange(getLabel());
IFile file = (IFile)selectedBean.getBeanClass().getResource();
ICompilationUnit original = EclipseUtil.getCompilationUnit(file);
if(original == null) {
return rootChange;
}
ICompilationUnit compilationUnit = original.getWorkingCopy(pm);
TextFileChange fileChange = FileChangeFactory.getFileChange(file);
MultiTextEdit edit = new MultiTextEdit();
CDIMarkerResolutionUtils.addQualifiersToBean(qualifiers, selectedBean, compilationUnit, edit);
IFile file2 = (IFile)injectionPoint.getClassBean().getResource();
ICompilationUnit original2 = injectionPoint.getClassBean().getBeanClass().getCompilationUnit();
ICompilationUnit compilationUnit2 = original2.getWorkingCopy(pm);
if(!original.equals(original2)){
compilationUnit.discardWorkingCopy();
if(edit.getChildrenSize() > 0){
fileChange.setEdit(edit);
rootChange.add(fileChange);
}
fileChange = FileChangeFactory.getFileChange(file2);
edit = new MultiTextEdit();
}else{
compilationUnit2 = compilationUnit;
}
CDIMarkerResolutionUtils.addQualifiersToInjectionPoint(qualifiers, injectionPoint, compilationUnit2, edit);
if(edit.getChildrenSize() > 0){
fileChange.setEdit(edit);
rootChange.add(fileChange);
}
compilationUnit.discardWorkingCopy();
return rootChange;
}
@Override
protected void createRootChange(){
}
public IBean getSelectedBean(){
return selectedBean;
}
public IInjectionPoint getInjectionPoint(){
return injectionPoint;
}
public List<IBean> getBeans(){
return beans;
}
public void setSelectedBean(IBean bean){
selectedBean = bean;
}
public void setDeployedQualifiers(ArrayList<ValuedQualifier> qualifiers){
this.qualifiers = qualifiers;
}
}