/*
* 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.transformation.ui.editors;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
import org.teiid.core.designer.util.CoreStringUtil;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.workspace.ModelResource;
import org.teiid.designer.core.workspace.ModelWorkspaceException;
import org.teiid.designer.metamodels.transformation.MappingClass;
import org.teiid.designer.metamodels.transformation.SqlTransformationMappingRoot;
import org.teiid.designer.transformation.ui.PluginConstants;
import org.teiid.designer.transformation.ui.UiConstants;
import org.teiid.designer.transformation.util.TransformationHelper;
import org.teiid.designer.ui.UiPlugin;
import org.teiid.designer.ui.editors.ModelEditorManager;
import org.teiid.designer.ui.viewsupport.SelectFromEObjectListDialog;
import org.teiid.designer.ui.viewsupport.SelectModelObjectLabelProvider;
/**
* This class provides helper methods to open/edit a transformation for a specific ModelResource
*
* @since 8.0
*/
public class EditTransformationHelper {
private static final String DIALOG_TITLE = UiConstants.Util.getString("EditTransformationHelper.dialogTitle"); //$NON-NLS-1$
//private static final String DIALOG_MESSAGE = UiConstants.Util.getString("EditTransformationHelper.dialogMessage"); //$NON-NLS-1$
private static final String STAGING_TABLE_STR = "<Staging Table>"; //$NON-NLS-1$
private static final String MAPPING_CLASS_STR = "<Mapping Class>"; //$NON-NLS-1$
private static final String TABLE_STR = "<Table>"; //$NON-NLS-1$
private static final String PROCEDURE_STR = "<Procedure>"; //$NON-NLS-1$
//private static final String VIEW_STR = "<View>"; //$NON-NLS-1$
private ModelResource modelResource;
/**
* @since 5.0
*/
public EditTransformationHelper(ModelResource modelResource) {
super();
this.modelResource = modelResource;
}
public void setModelResource(ModelResource theModelResource) {
this.modelResource = theModelResource;
}
public void openAndEdit(EObject eObj) {
ModelEditorManager.edit(eObj, PluginConstants.TRANSFORMATION_EDITOR_ID);
}
public Collection getAllTransformationTargets() throws ModelWorkspaceException {
return getAllTransformationTargets(this.modelResource);
}
/**
* @param theModelResource
* @return
* @throws ModelWorkspaceException
* @since 5.0
*/
public Collection getAllTransformationTargets(ModelResource theModelResource) throws ModelWorkspaceException {
List transformations = theModelResource.getModelTransformations().getTransformations();
int nTransforms = transformations.size();
Collection allTargets = new ArrayList(nTransforms);
for (Iterator iter = transformations.iterator(); iter.hasNext();) {
Object obj = iter.next();
if (obj instanceof SqlTransformationMappingRoot) {
EObject table = ((SqlTransformationMappingRoot)obj).getTarget();
if (table != null) {
allTargets.add(table);
}
}
}
return allTargets;
}
/**
* @param modelResource
* @return
* @throws ModelWorkspaceException
* @since 5.0
*/
public EObject queryUserToSelectTarget(ModelResource modelResource) {
EObject selectedTarget = null;
try {
Shell shell = UiPlugin.getDefault().getCurrentWorkbenchWindow().getShell();
String message = UiConstants.Util.getString("EditTransformationHelper.dialogMessage", modelResource.getItemName()); //$NON-NLS-1$
SelectFromEObjectListDialog dialog =
new SelectFromEObjectListDialog(
shell,
getAllTransformationTargets(modelResource),
false,
DIALOG_TITLE,
message,
new MyLabelProvider());
dialog.open();
if (dialog.getReturnCode() == Window.OK) {
// now select the object
Object[] results = dialog.getResult();
selectedTarget = (EObject)results[0];
}
} catch (ModelWorkspaceException theException) {
UiConstants.Util.log(IStatus.ERROR, theException.getMessage());
}
return selectedTarget;
}
/**
* @return
* @throws ModelWorkspaceException
* @since 5.0
*/
public EObject queryUserToSelectTarget() {
return queryUserToSelectTarget(this.modelResource);
}
class MyLabelProvider extends SelectModelObjectLabelProvider {
public MyLabelProvider() {
super();
}
@Override
public String getText(Object theElement) {
if ( theElement instanceof EObject ) {
EObject eo = (EObject)theElement;
String sText = ModelerCore.getModelEditor().getName(eo);
if( showPath ) {
String type = getType(eo);
if( type != null ) {
sText += CoreStringUtil.Constants.SPACE + type + CoreStringUtil.Constants.SPACE;
}
String path = getAppendedPath(eo);
if( path != null ) {
sText += " : " + getAppendedPath(eo); //$NON-NLS-1$
}
}
return sText;
}
return super.getText(theElement);
}
private String getType(EObject eObj) {
if( TransformationHelper.isStagingTable(eObj) ) {
return STAGING_TABLE_STR;
} else if( TransformationHelper.isMappingClass(eObj)) {
return MAPPING_CLASS_STR;
} else if( org.teiid.designer.core.metamodel.aspect.sql.SqlAspectHelper.isProcedure(eObj)) {
return PROCEDURE_STR;
} else if( org.teiid.designer.core.metamodel.aspect.sql.SqlAspectHelper.isTable(eObj)) {
return TABLE_STR;
}
return null;
}
private String getAppendedPath(EObject eObj) {
if( TransformationHelper.isMappingClass(eObj)) {
MappingClass mc = (MappingClass)eObj;
EObject doc = mc.getMappingClassSet().getTarget();
IPath pathToDoc = ModelerCore.getModelEditor().getFullPathToParent(doc);
pathToDoc = pathToDoc.append(ModelerCore.getModelEditor().getName(doc));
return pathToDoc.toString();
}
return ModelerCore.getModelEditor().getFullPathToParent(eObj).toString();
}
}
}