/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.ui.viewsupport;
import java.util.HashMap;
import java.util.Iterator;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.teiid.designer.ui.UiConstants;
import org.teiid.designer.ui.actions.IModelObjectEditHelper;
/**
* @author BLaFond
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*
* @since 8.0
*/
public abstract class ModelObjectEditHelperManager {
/** Array of all extensions to the DiagramHelper extension point */
private static HashMap editHelpers;
private static boolean helpersLoaded = false;
public static boolean canRename(Object obj) {
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canRename(obj);
}
return oK;
}
public static boolean canCopy(Object obj) {
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canCopy(obj);
}
return oK;
}
public static boolean canCut(Object obj) {
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canCut(obj);
}
return oK;
}
public static boolean canUndoCut(Object obj) {
/*
* Defect 17739: disallow this operation if the selection includes tables
* "with a dependent FK/PK relationships"
* Should 'obj' be an array of tables for this to make sense?
* Yes!
*/
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canUndoCut(obj);
}
return oK;
}
public static boolean canDelete(Object obj) {
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canDelete(obj);
}
return oK;
}
public static boolean canUndoDelete(Object obj) {
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canUndoDelete(obj);
}
return oK;
}
public static boolean canClone(Object obj) {
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canClone(obj);
}
return oK;
}
public static boolean canPaste(Object obj, Object pasteParent) {
if( !helpersLoaded )
loadHelperExtensions();
boolean oK = true;
Iterator iter = editHelpers.values().iterator();
IModelObjectEditHelper helper = null;
while( iter.hasNext() && oK) {
helper = (IModelObjectEditHelper)iter.next();
oK = helper.canPaste(obj, pasteParent);
}
return oK;
}
private static void loadHelperExtensions() {
editHelpers = new HashMap();
helpersLoaded = true;
// get the extension point from the plugin class
String id = UiConstants.ExtensionPoints.ModelObjectEditHelperExtension.ID;
String classTag = UiConstants.ExtensionPoints.ModelObjectEditHelperExtension.CLASS;
String className = UiConstants.ExtensionPoints.ModelObjectEditHelperExtension.CLASSNAME;
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(UiConstants.PLUGIN_ID, id);
// get the all extensions to the NewChildAction extension point
IExtension[] extensions = extensionPoint.getExtensions();
// walk through the extensions and find all INewChildAction implementations
for ( int i=0 ; i<extensions.length ; ++i ) {
IConfigurationElement[] elements = extensions[i].getConfigurationElements();
try {
// first, find the content provider instance and add it to the instance list
for ( int j=0 ; j<elements.length ; ++j ) {
if ( elements[j].getName().equals(classTag)) {
Object helper = elements[j].createExecutableExtension(className);
if ( helper instanceof IModelObjectEditHelper ) {
String sThisClassName = elements[j].getAttribute( className );
editHelpers.put( sThisClassName, helper );
}
}
}
} catch (Exception e) {
// catch any Exception that occurred obtaining the configuration and log it
String message = UiConstants.Util.getString("ModelerActionService.configurationErrorMessage", //$NON-NLS-1$
extensions[i].getUniqueIdentifier());
UiConstants.Util.log(IStatus.ERROR, e, message);
}
}
}
}