// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataprofiler.core.ui.action.actions;
import org.apache.log4j.Logger;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.talend.core.model.context.ContextUtils;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.ContextItem;
import org.talend.core.model.properties.Item;
import org.talend.dataprofiler.core.CorePlugin;
import org.talend.dataprofiler.core.ImageLib;
import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl;
import org.talend.dq.CWMPlugin;
import org.talend.dq.nodes.ConnectionRepNode;
import org.talend.metadata.managment.ui.utils.SwitchContextGroupNameImpl;
import org.talend.metadata.managment.ui.wizard.metadata.ContextSetsSelectionDialog;
/**
* DOC msjian class global comment. Detailled comment
*/
public class SwitchContextAction extends Action {
private static Logger log = Logger.getLogger(SwitchContextAction.class);
private Object selectedObject;
public SwitchContextAction(Object selectedNode, String menuText) {
super(menuText);
this.selectedObject = selectedNode;
setImageDescriptor(ImageLib.getImageDescriptor(ImageLib.SWITCH_IMAGE));
}
/*
* MOD yyin 20120917 TDQ-5362, do NOT reload DB when switching context.
*
* @see org.eclipse.jface.action.Action#run()
*/
@Override
public void run() {
// MOD msjian 2012-2-13 TDQ-4559: make it support file connection
if (selectedObject instanceof ConnectionRepNode) {
ConnectionRepNode conRepNode = (ConnectionRepNode) selectedObject;
Item item = conRepNode.getObject().getProperty().getItem();
if (item instanceof ConnectionItem) {
ConnectionItem connItem = (ConnectionItem) item;
// Added yyin 20120925 TDQ-5668, check this connection's editor is open or not, if open, close.
CorePlugin.getDefault().closeEditorIfOpened(connItem);
// ~
String chooseContext = chooseContext(connItem.getConnection());
boolean isUpdated = SwitchContextGroupNameImpl.getInstance().updateContextGroup(connItem, chooseContext);
if (isUpdated) {
if (log.isDebugEnabled()) {
log.debug(DefaultMessagesImpl.getString("SwitchContextAction.saveMessage", chooseContext, "successful"));//$NON-NLS-1$ //$NON-NLS-2$
}
// ADD msjian TDQ-8834 2014-4-10: after switch the context, update the sql explore alias
// information.
CWMPlugin.getDefault()
.updateConnetionAliasByName(connItem.getConnection(), connItem.getProperty().getLabel());
// TDQ-8834~
CorePlugin.getDefault().refreshDQView(selectedObject);
} else {
MessageDialog.openWarning(CorePlugin.getDefault().getWorkbench().getDisplay().getActiveShell(), "", //$NON-NLS-1$
DefaultMessagesImpl.getString("SwitchContextAction.nullParameterError")); //$NON-NLS-1$
log.error(DefaultMessagesImpl.getString("SwitchContextAction.saveMessage", chooseContext, "failed"));//$NON-NLS-1$ //$NON-NLS-2$
}
}
}
// TDQ-4559~
}
/**
* DOC talend Comment method "chooseContext".
*/
private String chooseContext(Connection conn) {
String selectedContext = null;
if (conn != null) {
String contextId = conn.getContextId();
ContextItem contextItem = ContextUtils.getContextItemById2(contextId);
selectedContext = contextItem.getDefaultContext();
if (contextItem.getContext().size() > 1) {
ContextSetsSelectionDialog setsDialog = new ContextSetsSelectionDialog(contextItem);
if (setsDialog.open() == Window.OK) {
selectedContext = setsDialog.getSelectedContext();
}
}
}
return selectedContext;
}
}