use of org.talend.designer.core.ui.editor.subjobcontainer.SubjobContainerPart in project tdi-studio-se by Talend.
the class GEFPasteAction method run.
@Override
@SuppressWarnings("unchecked")
public void run() {
Object clipBoardContent;
try {
clipBoardContent = Clipboard.getDefault().getContents();
} catch (RuntimeException e) {
return;
}
AbstractTalendEditor editor = (AbstractTalendEditor) this.getWorkbenchPart();
org.eclipse.swt.dnd.Clipboard systemClipboard = new org.eclipse.swt.dnd.Clipboard(Display.getCurrent());
Object systemObject = systemClipboard.getContents(TextTransfer.getInstance());
if (clipBoardContent instanceof List) {
List<EditPart> partsList = (List<EditPart>) clipBoardContent;
if (partsList == null || partsList.isEmpty()) {
return;
}
List<NodePart> nodeParts = new ArrayList<NodePart>();
List<NoteEditPart> noteParts = new ArrayList<NoteEditPart>();
List<SubjobContainerPart> subjobParts = new ArrayList<SubjobContainerPart>();
for (Object o : partsList) {
if (o instanceof NodePart) {
if (!nodeParts.contains(o)) {
nodeParts.add((NodePart) o);
}
} else if (o instanceof NoteEditPart) {
noteParts.add((NoteEditPart) o);
} else if (o instanceof SubjobContainerPart) {
SubjobContainerPart subjob = (SubjobContainerPart) o;
for (Iterator iterator = subjob.getChildren().iterator(); iterator.hasNext(); ) {
NodeContainerPart nodeContainerPart = (NodeContainerPart) iterator.next();
// add for bug TDI-20206
if (nodeContainerPart instanceof JobletContainerPart) {
for (Object obj : nodeContainerPart.getChildren()) {
if (obj instanceof NodePart && !nodeParts.contains(obj)) {
nodeParts.add((NodePart) obj);
}
}
}
NodePart nodePart = nodeContainerPart.getNodePart();
if (nodePart != null) {
if (!nodeParts.contains(nodePart)) {
nodeParts.add(nodePart);
}
subjobParts.add(subjob);
}
}
}
}
Map<JobletContainerPart, List<NodePart>> jobletMap = new HashMap<JobletContainerPart, List<NodePart>>();
for (NodePart nodePart : nodeParts) {
boolean isCollapsedNode = false;
if (editor.getProcess().getGraphicalNodes().contains(nodePart.getModel())) {
isCollapsedNode = true;
}
if (!isCollapsedNode && nodePart.getParent() instanceof JobletContainerPart) {
JobletContainerPart jobletContainer = (JobletContainerPart) nodePart.getParent();
List<NodePart> jobletNodeParts = jobletMap.get(jobletContainer);
if (jobletNodeParts == null) {
jobletNodeParts = new ArrayList<NodePart>();
jobletMap.put(jobletContainer, jobletNodeParts);
}
jobletNodeParts.add(nodePart);
}
}
List<NodePart> expandedJobletNodes = new ArrayList<NodePart>();
for (JobletContainerPart jobletContainer : jobletMap.keySet()) {
boolean copyJobletNode = true;
List<NodePart> list = jobletMap.get(jobletContainer);
for (Object obj : jobletContainer.getChildren()) {
if (obj instanceof NodePart) {
if (!list.contains(obj)) {
copyJobletNode = false;
break;
}
}
}
if (copyJobletNode) {
nodeParts.removeAll(list);
PartFactory factory = new PartFactory();
NodePart createEditPart = (NodePart) factory.createEditPart(jobletContainer, ((NodeContainer) jobletContainer.getModel()).getNode());
createEditPart.setParent(jobletContainer);
nodeParts.add(createEditPart);
expandedJobletNodes.add(createEditPart);
}
}
org.eclipse.draw2d.geometry.Point gefPoint = getCursorLocation();
// qli comment
// if the components instanceof JobletInputOutputComponent and current process instanceof not
// JobletGEFProcess,just create a messageBox and return.
AbstractProcessProvider findProcessProviderFromPID = AbstractProcessProvider.findProcessProviderFromPID(IComponent.JOBLET_PID);
if (findProcessProviderFromPID != null) {
for (NodePart copiedNodePart : nodeParts) {
Node copiedNode = (Node) copiedNodePart.getModel();
// add for bug TDI-20207.if copy joblet/job to itself,then return.
EComponentType componentType = null;
String copideNodeId = null;
String editorProcessId = null;
if (copiedNode.getComponent() != null) {
componentType = copiedNode.getComponent().getComponentType();
if (copiedNode.getComponent().getProcess() != null) {
copideNodeId = copiedNode.getComponent().getProcess().getId();
}
}
if (editor.getProcess() != null) {
editorProcessId = editor.getProcess().getId();
}
for (IElementParameter element : copiedNode.getElementParametersFromField(EParameterFieldType.PROCESS_TYPE)) {
for (Map.Entry<String, IElementParameter> entry : element.getChildParameters().entrySet()) {
if (("PROCESS_TYPE_PROCESS").equals(entry.getKey())) {
if (editorProcessId != null && editorProcessId.equals(entry.getValue().getValue())) {
return;
}
}
}
}
if ((EComponentType.JOBLET).equals(componentType)) {
if (editorProcessId != null && editorProcessId.equals(copideNodeId)) {
return;
}
}
if (findProcessProviderFromPID.isJobletInputOrOutputComponent(copiedNode)) {
if (!findProcessProviderFromPID.isExtensionProcess(editor.getProcess())) {
MessageBox messagebox = new MessageBox(PlatformUI.getWorkbench().getDisplay().getActiveShell(), SWT.ICON_WARNING);
//$NON-NLS-1$
messagebox.setText(Messages.getString("GEFPasteAction.textWarning"));
//$NON-NLS-1$
messagebox.setMessage(Messages.getString("GEFPasteAction.warningMessages"));
messagebox.open();
return;
}
}
if (copiedNode.getJobletNode() != null) {
boolean canP = canPasteJobletNode(editor.getProcess(), copiedNode);
if (!canP) {
return;
}
}
}
}
if (nodeParts.size() != 0 && noteParts.size() != 0) {
MultiplePasteCommand mpc = new MultiplePasteCommand(nodeParts, noteParts, (org.talend.designer.core.ui.editor.process.Process) editor.getProcess(), gefPoint);
mpc.setSelectedSubjobs(subjobParts);
mpc.setSelectedExpandedJoblet(expandedJobletNodes);
execute(mpc);
} else if (nodeParts.size() != 0) {
NodesPasteCommand cmd = new NodesPasteCommand(nodeParts, editor.getProcess(), gefPoint);
cmd.setSelectedSubjobs(subjobParts);
cmd.setSelectedExpandedJoblet(expandedJobletNodes);
execute(cmd);
} else if (noteParts.size() != 0) {
NotesPasteCommand cmd = new NotesPasteCommand(noteParts, (org.talend.designer.core.ui.editor.process.Process) editor.getProcess(), gefPoint, false, null);
execute(cmd);
}
setCursorLocation(null);
} else if (clipBoardContent instanceof String) {
List objects = getSelectedObjects();
if (objects.size() == 1) {
String content = (String) clipBoardContent;
if (objects.get(0) instanceof NoteEditPart && ((NoteEditPart) objects.get(0)).getDirectEditManager() != null) {
Text text = ((NoteEditPart) objects.get(0)).getDirectEditManager().getTextControl();
if (text != null) {
text.insert(content);
}
} else if (objects.get(0) instanceof ConnLabelEditPart && ((ConnLabelEditPart) objects.get(0)).getDirectEditManager() != null) {
Text text = ((ConnLabelEditPart) objects.get(0)).getDirectEditManager().getTextControl();
if (text != null) {
text.insert(content);
}
} else if (objects.get(0) instanceof NodeLabelEditPart && ((NodeLabelEditPart) objects.get(0)).getDirectEditManager() != null) {
{
Text text = (Text) ((NodeLabelEditPart) objects.get(0)).getDirectEditManager().getCellEditor().getControl();
if (text != null) {
text.insert(content);
}
}
}
}
} else if (systemObject != null && systemObject instanceof String) {
List objects = getSelectedObjects();
if (objects.size() == 1) {
String content = (String) systemObject;
if (objects.get(0) instanceof NoteEditPart && ((NoteEditPart) objects.get(0)).getDirectEditManager() != null) {
Text text = ((NoteEditPart) objects.get(0)).getDirectEditManager().getTextControl();
if (text != null) {
text.insert(content);
}
} else if (objects.get(0) instanceof ConnLabelEditPart && ((ConnLabelEditPart) objects.get(0)).getDirectEditManager() != null) {
Text text = ((ConnLabelEditPart) objects.get(0)).getDirectEditManager().getTextControl();
if (text != null) {
text.insert(content);
}
} else if (objects.get(0) instanceof NodeLabelEditPart && ((NodeLabelEditPart) objects.get(0)).getDirectEditManager() != null) {
{
Text text = (Text) ((NodeLabelEditPart) objects.get(0)).getDirectEditManager().getCellEditor().getControl();
if (text != null) {
text.insert(content);
}
}
}
}
}
}
use of org.talend.designer.core.ui.editor.subjobcontainer.SubjobContainerPart in project tdi-studio-se by Talend.
the class DisplaySubjobAction method canPerformAction.
/**
* Test if the selected item is a node.
*
* @return true / false
*/
private boolean canPerformAction() {
if (getSelectedObjects().isEmpty()) {
return false;
}
List parts = getSelectedObjects();
if (parts.size() == 1) {
Object o = parts.get(0);
if (o instanceof NodePart) {
NodePart part = (NodePart) o;
Node node = (Node) part.getModel();
//fix TESB-8326
if (node != null && node.getComponent() != null) {
if (ComponentCategory.CATEGORY_4_CAMEL.getName().equals(node.getComponent().getPaletteType())) {
return false;
}
}
if (node.getJobletNode() != null) {
node = (Node) node.getJobletNode();
}
if (!isDisplayWholeSubjob()) {
// if the subjobs are not displayed, no need to display this action.
return false;
}
if (node.getNodeContainer().getSubjobContainer() != null && node.getNodeContainer().getSubjobContainer().isDisplayed()) {
setText(TEXT_HIDE_SUBJOB);
} else {
setText(TEXT_DISPLAY_SUBJOB);
}
} else if (o instanceof SubjobContainerPart) {
SubjobContainerPart part = (SubjobContainerPart) o;
SubjobContainer subjob = (SubjobContainer) part.getModel();
if (!isDisplayWholeSubjob()) {
// if the subjobs are not displayed, no need to display this action.
return false;
}
if (!subjob.isDisplayed()) {
return false;
}
setText(TEXT_HIDE_SUBJOB);
} else {
return false;
}
return true;
}
return false;
}
use of org.talend.designer.core.ui.editor.subjobcontainer.SubjobContainerPart in project tdi-studio-se by Talend.
the class DisableParallelizationAction method run.
@Override
public void run() {
List editparts = getSelectedObjects();
if (editparts.size() == 1) {
Object o = editparts.get(0);
if (o instanceof NodePart) {
NodePart part = (NodePart) o;
Node node = (Node) part.getModel();
getCommandStack().execute(new DisableParallelizationCommand(node));
} else if (o instanceof SubjobContainerPart) {
boolean hasStartNode = false;
List<NodeContainerPart> childNodes = ((SubjobContainerPart) o).getChildren();
for (NodeContainerPart childNode : childNodes) {
NodeContainerPart part = (NodeContainerPart) childNode;
NodeContainer node = (NodeContainer) part.getModel();
if (node.getNode().isStart()) {
hasStartNode = true;
getCommandStack().execute(new DisableParallelizationCommand(node.getNode()));
}
}
if (!hasStartNode) {
for (NodeContainerPart childNode : childNodes) {
NodeContainerPart part = (NodeContainerPart) childNode;
NodeContainer node = (NodeContainer) part.getModel();
if (node.getNode().isSubProcessStart()) {
getCommandStack().execute(new DisableParallelizationCommand(node.getNode()));
}
}
}
}
}
}
use of org.talend.designer.core.ui.editor.subjobcontainer.SubjobContainerPart in project tdi-studio-se by Talend.
the class ComponentChooseDialog method createNewComponent.
public void createNewComponent(DropTargetEvent event1) {
boolean quickCreateInput = event1.detail == DND.DROP_LINK;
boolean quickCreateOutput = event1.detail == DND.DROP_COPY;
Iterator iterator = getSelection().iterator();
List<TempStore> list = new ArrayList<TempStore>();
List<IComponent> components = new ArrayList<IComponent>();
while (iterator.hasNext()) {
Object obj = iterator.next();
if (obj instanceof RepositoryNode) {
RepositoryNode sourceNode = (RepositoryNode) obj;
if (equalsJobInCurrentEditor(sourceNode)) {
continue;
}
Item item = sourceNode.getObject().getProperty().getItem();
if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) {
ITestContainerProviderService testContainerService = (ITestContainerProviderService) GlobalServiceRegister.getDefault().getService(ITestContainerProviderService.class);
if (testContainerService != null && testContainerService.isTestContainerItem(item)) {
continue;
}
}
ERepositoryObjectType type = sourceNode.getObjectType();
if (!(item instanceof ConnectionItem) && !(item instanceof ProcessItem) && !(item instanceof JobletProcessItem) && !(item instanceof RulesItem) && !(item instanceof LinkRulesItem)) {
// RulesItem
return;
}
{
/**
* Remove this limitation for feature: TDI-32362, I think it should be ok, don't know why adding
* this limitation to forbid to d&d salseforce connection, I keep those code in case this behavior
* will cause some bugs when d&d salseforce connection, then maybe need to review
*/
// if (item instanceof SalesforceSchemaConnectionItem && type ==
// ERepositoryObjectType.METADATA_SALESFORCE_SCHEMA) {
// return;
// }
}
TempStore store = new TempStore();
store.seletetedNode = sourceNode;
getAppropriateComponent(item, quickCreateInput, quickCreateOutput, store, type);
if (store.component != null) {
list.add(store);
} else {
MessageDialog.openInformation(editor.getEditorSite().getShell(), //$NON-NLS-1$
Messages.getString("TalendEditorDropTargetListener.dngsupportdialog.title"), //$NON-NLS-1$
Messages.getString("TalendEditorDropTargetListener.dngsupportdialog.content"));
}
}
org.eclipse.swt.graphics.Point swtLocation = new org.eclipse.swt.graphics.Point(event1.x, event1.y);
Canvas canvas = (Canvas) editor.getViewer().getControl();
/*
* translate to Canvas coordinate
*/
swtLocation = canvas.toControl(swtLocation);
org.eclipse.swt.graphics.Point size = canvas.getSize();
/*
* translate to Viewport coordinate with zoom
*/
org.eclipse.draw2d.geometry.Point draw2dPosition = new org.eclipse.draw2d.geometry.Point(swtLocation.x, swtLocation.y);
/*
* calcule the view port position. Take into acounte the scroll position
*/
ProcessPart part = (ProcessPart) editor.getViewer().getRootEditPart().getRoot().getChildren().get(0);
IFigure targetFigure = part.getFigure();
translateAbsolateToRelative(targetFigure, draw2dPosition);
//$NON-NLS-1$
String lastUniqname = "";
// creates every node
for (TempStore store : list) {
RepositoryNode selectedNode = store.seletetedNode;
IComponent element = store.component;
if (!components.contains(element)) {
components.add(element);
}
Node node = new Node(element);
// for bug4564(metadata label format)
// IPreferenceStore preferenceStore = DesignerPlugin.getDefault().getPreferenceStore();
// if (preferenceStore.getBoolean(TalendDesignerPrefConstants.USE_REPOSITORY_NAME)) {
// node.setPropertyValue(EParameterName.LABEL.getName(), selectedNode.getObject().getLabel());
// }
IPreferenceStore preferenceStore = DesignerPlugin.getDefault().getPreferenceStore();
if (preferenceStore.getBoolean(TalendDesignerPrefConstants.USE_REPOSITORY_NAME)) {
String LabelValue = null;
RepositoryNode repositoryNode = null;
repositoryNode = (RepositoryNode) getSelection().getFirstElement();
// dnd a table
IElementParameter dbTableParam = node.getElementParameterFromField(EParameterFieldType.DBTABLE);
boolean hasDbTableField = dbTableParam != null;
if (repositoryNode.getObjectType() == ERepositoryObjectType.METADATA_CON_TABLE && repositoryNode.getObject() != null && repositoryNode.getObject().getProperty().getItem() instanceof DatabaseConnectionItem && hasDbTableField) {
LabelValue = DesignerUtilities.getParameterVar(dbTableParam.getName());
} else if (repositoryNode.getObjectType() == ERepositoryObjectType.PROCESS || repositoryNode.getObjectType() == ERepositoryObjectType.PROCESS_MR || repositoryNode.getObjectType() == ERepositoryObjectType.PROCESS_STORM) {
// dnd a job
LabelValue = DesignerUtilities.getParameterVar(EParameterName.PROCESS);
} else if (repositoryNode.getObjectType() == ERepositoryObjectType.JOBLET || repositoryNode.getObjectType() == ERepositoryObjectType.SPARK_JOBLET || repositoryNode.getObjectType() == ERepositoryObjectType.SPARK_STREAMING_JOBLET) {
LabelValue = element.getName();
} else if (CorePlugin.getDefault().getDesignerCoreService().getPreferenceStore(TalendDesignerPrefConstants.DEFAULT_LABEL).equals(node.getPropertyValue(EParameterName.LABEL.getName()))) {
// dnd a default
LabelValue = selectedNode.getObject().getLabel();
}
if (LabelValue != null) {
node.setPropertyValue(EParameterName.LABEL.getName(), LabelValue);
}
}
processSpecificDBTypeIfSameProduct(store.componentName, node);
NodeContainer nc = ((Process) node.getProcess()).loadNodeContainer(node, false);
;
// create component on link
boolean executed = false;
if (getSelection().size() == 1 && getTargetEditPart() instanceof SubjobContainerPart) {
executed = createComponentOnLink(node, draw2dPosition);
}
if (!executed) {
// create the node on the design sheet
execCommandStack(new CreateNodeContainerCommand((Process) editor.getProcess(), nc, draw2dPosition));
}
// initialize the propertiesView
CompoundCommand cc = new CompoundCommand();
createRefreshingPropertiesCommand(cc, selectedNode, node);
execCommandStack(cc);
// for (Command command : commands) {
// }
propaHadoopCfgChanges(selectedNode);
draw2dPosition = draw2dPosition.getCopy();
draw2dPosition.x += TalendEditor.GRID_SIZE;
draw2dPosition.y += TalendEditor.GRID_SIZE;
node.checkNode();
lastUniqname = node.getUniqueName();
}
// setselecte(part, lastUniqname);
}
// Shell shell = Display.getCurrent().getActiveShell();
// ModulesInstallerUtil.installModules(new Shell(shell), components);
}
use of org.talend.designer.core.ui.editor.subjobcontainer.SubjobContainerPart in project tdi-studio-se by Talend.
the class CreateComponentOnLinkHelper method getConnectionParts.
public static List<ConnectionPart> getConnectionParts(ProcessPart processPart, Point point, Node node) {
List<ConnectionPart> connectionParts = new ArrayList<ConnectionPart>();
for (Object child : processPart.getChildren()) {
if (child instanceof SubjobContainerPart) {
SubjobContainerPart subJobPart = (SubjobContainerPart) child;
for (Object sChilde : subJobPart.getChildren()) {
if (sChilde instanceof NodeContainerPart) {
NodeContainerPart nodeCPart = (NodeContainerPart) sChilde;
for (Object nChild : nodeCPart.getChildren()) {
if (nChild instanceof NodePart) {
for (Object conn : ((NodePart) nChild).getTargetConnections()) {
if (conn instanceof ConnectionPart && canCreateNodeOnLink((Connection) ((ConnectionPart) conn).getModel(), node)) {
ConnectionPart connPart = (ConnectionPart) conn;
// if (connPart.getFigure() != null &&
// connPart.getFigure().getBounds().contains(point)) {
connectionParts.add((ConnectionPart) conn);
// }
}
}
}
}
}
}
}
}
return connectionParts;
}
Aggregations