/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.model.handlers.bean;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.*;
import org.eclipse.jdt.internal.corext.refactoring.changes.*;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.TextFileChange;
import org.eclipse.text.edits.ReplaceEdit;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.filesystems.impl.FileAnyImpl;
import org.jboss.tools.common.model.impl.XModelObjectImpl;
import org.jboss.tools.common.model.util.*;
import org.jboss.tools.jsf.messages.JSFUIMessages;
public class JSFRenameManagedPropertyChange extends TextFileChange {
private XModelObject beanProperty;
private String newName;
XModel model;
boolean ok = false;
public static JSFRenameManagedPropertyChange createChange(XModelObject beanProperty, String newName) {
String name = beanProperty.getPresentationString();
IFile f = getFile(beanProperty);
if(f == null) return null;
return new JSFRenameManagedPropertyChange(name, f, beanProperty, newName);
}
private JSFRenameManagedPropertyChange(String name, IFile file, XModelObject beanProperty, String newName) {
super(name, file);
this.beanProperty = beanProperty;
this.newName = newName;
model = beanProperty.getModel();
addEdits();
}
void addEdits() {
PositionSearcher searcher = new PositionSearcher();
XModelObject o = ((XModelObjectImpl)beanProperty).getResourceAncestor();
String text = ((FileAnyImpl)o).getAsText();
searcher.init(text, beanProperty, "property-name"); //$NON-NLS-1$
searcher.execute();
int bp = searcher.getStartPosition();
int ep = searcher.getEndPosition();
ok = false;
if(bp >= 0 && ep >= ep) {
ReplaceEdit edit = new ReplaceEdit(bp, ep - bp, newName);
TextChangeCompatibility.addTextEdit(this, JSFUIMessages.UPDATE_FIELD_REFERENCE, edit);
ok = true;
}
}
private static IFile getFile(XModelObject beanProperty) {
XModelObject o = ((XModelObjectImpl)beanProperty).getResourceAncestor();
return o == null ? null : (IFile)EclipseResourceUtil.getResource(o);
}
public String getName() {
return JSFUIMessages.MANAGED_PROPERTY_RENAME;
}
public Change perform(IProgressMonitor pm) throws CoreException {
if(ok) {
return super.perform(pm);
}
if(beanProperty != null) {
beanProperty.getModel().changeObjectAttribute(beanProperty, "property-name", newName); //$NON-NLS-1$
}
return null;
}
public Object getModifiedElement() {
return null;
}
}