blob: 316739cca2fdf6b2c8f1ff4a2677a62a067f16bc [file] [log] [blame]
package org.eclipse.jst.j2ee.refactor.operations;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jem.util.RegistryReader;
import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
public class OptionalRefactorHandler implements IOptionalRefactorHandler{
private static final String EXTENSION_POINT = "optionalRefactorHandler"; //$NON-NLS-1$
private static final String TAG_OPTIONAL_REFACTOR = "optionalRefactorHandler"; //$NON-NLS-1$
private static final String ATT_CLASS = "class"; //$NON-NLS-1$
private static OptionalRefactorHandler instance = new OptionalRefactorHandler();
private IOptionalRefactorHandler [] handlers = null;
private OptionalRefactorHandler () {
SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
J2EEPlugin.logError(0, exception.getMessage(), exception);
}
public void run() throws Exception {
OptionalRefactorHandlerRegistryReader reader = new OptionalRefactorHandlerRegistryReader();
reader.readRegistry();
handlers = reader.getHandlers();
}
});
}
public static OptionalRefactorHandler getInstance() {
return instance;
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.refactor.operations.IOptionalRefactorHandler#shouldRefactorDeletedProject(org.eclipse.jst.j2ee.refactor.operations.ProjectRefactorMetadata)
*/
public boolean shouldRefactorDeletedProject(final ProjectRefactorMetadata metadata) {
for(int i=0;i<handlers.length; i++){
if(!handlers[i].shouldRefactorDeletedProject(metadata)){
return false;
}
}
return true;
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.refactor.operations.IOptionalRefactorHandler#shouldRefactorRenamedProject(org.eclipse.jst.j2ee.refactor.operations.ProjectRefactorMetadata)
*/
public boolean shouldRefactorRenamedProject(final ProjectRefactorMetadata metadata) {
for(int i=0;i<handlers.length; i++){
if(!handlers[i].shouldRefactorRenamedProject(metadata)){
return false;
}
}
return true;
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.refactor.operations.IOptionalRefactorHandler#shouldRefactorDependentProjectOnDelete(org.eclipse.jst.j2ee.refactor.operations.ProjectRefactorMetadata, org.eclipse.jst.j2ee.refactor.operations.ProjectRefactorMetadata)
*/
public boolean shouldRefactorDependentProjectOnDelete(final ProjectRefactorMetadata deletedMetadata, ProjectRefactorMetadata dependentMetadata) {
for(int i=0;i<handlers.length; i++){
if(!handlers[i].shouldRefactorDependentProjectOnDelete(deletedMetadata, dependentMetadata)){
return false;
}
}
return true;
}
/* (non-Javadoc)
* @see org.eclipse.jst.j2ee.refactor.operations.IOptionalRefactorHandler#shouldRefactorDependentProjectOnRename(org.eclipse.jst.j2ee.refactor.operations.ProjectRefactorMetadata, org.eclipse.jst.j2ee.refactor.operations.ProjectRefactorMetadata)
*/
public boolean shouldRefactorDependentProjectOnRename(final ProjectRefactorMetadata renamedMetadata, ProjectRefactorMetadata dependentMetadata) {
for(int i=0;i<handlers.length; i++){
if(!handlers[i].shouldRefactorDependentProjectOnRename(renamedMetadata, dependentMetadata)){
return false;
}
}
return true;
}
private class OptionalRefactorHandlerRegistryReader extends RegistryReader {
private List handlers = new ArrayList();
public OptionalRefactorHandlerRegistryReader() {
super(J2EEPlugin.PLUGIN_ID, EXTENSION_POINT);
}
/**
* @see org.eclipse.wst.common.frameworks.internal.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement)
*/
public boolean readElement(final IConfigurationElement element) {
if (TAG_OPTIONAL_REFACTOR.equals(element.getName())) {
/*
* Because the only instance of this type is created from a static singleton field, and
* the registry is initialized in the constructor of this type, other threads cannot
* compete with readElement() for access to <i>descriptors</i>
*/
final IOptionalRefactorHandler[] handlerArray = new IOptionalRefactorHandler[1];
SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable exception) {
J2EEPlugin.logError(0, exception.getMessage(), exception);
}
public void run() throws Exception {
handlerArray[0] = (IOptionalRefactorHandler) element.createExecutableExtension(ATT_CLASS);
}
});
handlers.add(handlerArray[0]);
return true;
}
return false;
}
public IOptionalRefactorHandler [] getHandlers() {
IOptionalRefactorHandler [] handlersArray = new IOptionalRefactorHandler[handlers.size()];
for(int i=0;i<handlersArray.length;i++){
handlersArray[i] = (IOptionalRefactorHandler)handlers.get(i);
}
return handlersArray;
}
}
}