001: /*
002: * Copyright 2006 Pentaho Corporation. All rights reserved.
003: * This software was developed by Pentaho Corporation and is provided under the terms
004: * of the Mozilla Public License, Version 1.1, or any later version. You may not use
005: * this file except in compliance with the license. If you need a copy of the license,
006: * please go to http://www.mozilla.org/MPL/MPL-1.1.txt. The Original Code is the Pentaho
007: * BI Platform. The Initial Developer is Pentaho Corporation.
008: *
009: * Software distributed under the Mozilla Public License is distributed on an "AS IS"
010: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to
011: * the license for the specific language governing your rights and limitations.
012: */
013: package org.pentaho.designstudio.editors.actionsequence.pages.parameters;
014:
015: import java.util.ArrayList;
016: import java.util.Arrays;
017: import java.util.Iterator;
018:
019: import org.eclipse.jface.dialogs.Dialog;
020: import org.eclipse.jface.dialogs.IDialogConstants;
021: import org.eclipse.jface.dialogs.MessageDialog;
022: import org.eclipse.jface.viewers.CheckboxTableViewer;
023: import org.eclipse.jface.viewers.IStructuredContentProvider;
024: import org.eclipse.jface.viewers.LabelProvider;
025: import org.eclipse.jface.viewers.Viewer;
026: import org.eclipse.swt.SWT;
027: import org.eclipse.swt.layout.GridData;
028: import org.eclipse.swt.widgets.Composite;
029: import org.eclipse.swt.widgets.Control;
030: import org.eclipse.swt.widgets.Shell;
031: import org.eclipse.swt.widgets.Text;
032: import org.pentaho.actionsequence.dom.AbstractIOElement;
033: import org.pentaho.actionsequence.dom.ActionInput;
034: import org.pentaho.actionsequence.dom.ActionLoop;
035: import org.pentaho.actionsequence.dom.ActionOutput;
036: import org.pentaho.actionsequence.dom.ActionResource;
037: import org.pentaho.actionsequence.dom.ActionSequenceInput;
038: import org.pentaho.actionsequence.dom.ActionSequenceOutput;
039: import org.pentaho.actionsequence.dom.ActionSequenceResource;
040: import org.pentaho.actionsequence.dom.actions.ActionDefinition;
041: import org.pentaho.designstudio.controls.WidgetFactory;
042: import org.pentaho.designstudio.editors.actionsequence.pages.ActionSequenceLabelProvider;
043: import org.pentaho.designstudio.messages.Messages;
044:
045: public class RenameParameterDialog extends Dialog implements
046: IStructuredContentProvider {
047:
048: AbstractIOElement paramToRename;
049: Text newParamName;
050: CheckboxTableViewer checkboxTableViewer;
051: ArrayList parameterReferences = new ArrayList();
052:
053: public RenameParameterDialog(Shell parentShell) {
054: super (parentShell);
055: }
056:
057: protected void configureShell(Shell shell) {
058: super .configureShell(shell);
059: shell
060: .setText(Messages
061: .getString("RenameActionSequenceInputDialog.RENAME_INPUT")); //$NON-NLS-1$
062: }
063:
064: protected void createButtonsForButtonBar(Composite parent) {
065: createButton(parent, IDialogConstants.OK_ID,
066: IDialogConstants.OK_LABEL, true);
067: createButton(parent, IDialogConstants.CANCEL_ID,
068: IDialogConstants.CANCEL_LABEL, false);
069: }
070:
071: protected Control createDialogArea(Composite parent) {
072: Composite composite = (Composite) super
073: .createDialogArea(parent);
074: WidgetFactory
075: .createLabel(
076: composite,
077: Messages
078: .getString("RenameActionSequenceInputDialog.NEW_NAME_LABEL")); //$NON-NLS-1$
079: newParamName = WidgetFactory.createText(composite, ""); //$NON-NLS-1$
080: GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
081: gridData.widthHint = 300;
082: newParamName.setLayoutData(gridData);
083: WidgetFactory.createLabel(composite, ""); //$NON-NLS-1$
084: gridData = new GridData(GridData.FILL_HORIZONTAL);
085: gridData.widthHint = 10;
086: gridData.heightHint = 75;
087: WidgetFactory
088: .createLabel(
089: composite,
090: Messages
091: .getString("RenameActionSequenceInputDialog.REFERENCE_LIST_LABEL"), SWT.WRAP).setLayoutData(gridData); //$NON-NLS-1$
092: gridData = new GridData(GridData.FILL_HORIZONTAL);
093: gridData.heightHint = 100;
094: checkboxTableViewer = CheckboxTableViewer.newCheckList(
095: composite, SWT.NONE);
096: checkboxTableViewer.getControl().setLayoutData(gridData);
097: checkboxTableViewer.setContentProvider(this );
098: checkboxTableViewer.setLabelProvider(new LabelProvider() {
099: public String getText(Object element) {
100: String text = element.toString();
101: if (element instanceof ActionDefinition) {
102: text = ActionSequenceLabelProvider
103: .getText((ActionDefinition) element);
104: } else if (element instanceof ActionSequenceOutput) {
105: text = Messages
106: .getString("RenameParameterDialog.ACTION_SEQUENCE_OUTPUT"); //$NON-NLS-1$
107: } else if (element instanceof ActionLoop) {
108: text = ActionSequenceLabelProvider
109: .getText((ActionLoop) element);
110: }
111: return text;
112: }
113: });
114: if (paramToRename instanceof ActionSequenceInput) {
115: setParamToRename((ActionSequenceInput) paramToRename);
116: } else if (paramToRename instanceof ActionOutput) {
117: setParamToRename((ActionOutput) paramToRename);
118: } else if (paramToRename instanceof ActionSequenceResource) {
119: setParamToRename((ActionSequenceResource) paramToRename);
120: }
121: newParamName.forceFocus();
122: newParamName.selectAll();
123: return composite;
124: }
125:
126: public void setParamToRename(ActionSequenceInput actionSequenceInput) {
127: paramToRename = actionSequenceInput;
128: parameterReferences.clear();
129: parameterReferences.addAll(Arrays.asList(paramToRename
130: .getDocument().getReferencesTo(
131: (ActionSequenceInput) paramToRename)));
132: ActionSequenceOutput actionSequenceOutput = paramToRename
133: .getDocument().getOutput(actionSequenceInput.getName());
134: if (actionSequenceOutput != null) {
135: parameterReferences.add(actionSequenceOutput);
136: }
137: if (checkboxTableViewer != null) {
138: getShell()
139: .setText(
140: Messages
141: .getString("RenameActionSequenceInputDialog.RENAME_INPUT_DIALOG_TITLE")); //$NON-NLS-1$
142: checkboxTableViewer.setInput(actionSequenceInput);
143: checkboxTableViewer.setAllChecked(true);
144: }
145: if (newParamName != null) {
146: newParamName.setText(actionSequenceInput.getName());
147: }
148: }
149:
150: public void setParamToRename(
151: ActionSequenceResource actionSequenceResource) {
152: paramToRename = actionSequenceResource;
153: parameterReferences.clear();
154: parameterReferences.addAll(Arrays.asList(paramToRename
155: .getDocument().getReferencesTo(
156: (ActionSequenceResource) paramToRename)));
157: if (checkboxTableViewer != null) {
158: getShell()
159: .setText(
160: Messages
161: .getString("RenameActionSequenceInputDialog.RENAME_RESOURCE_DIALOG_TITLE")); //$NON-NLS-1$
162: checkboxTableViewer.setInput(actionSequenceResource);
163: checkboxTableViewer.setAllChecked(true);
164: }
165: if (newParamName != null) {
166: newParamName.setText(actionSequenceResource.getName());
167: }
168: }
169:
170: public void setParamToRename(ActionOutput actionOutput) {
171: paramToRename = actionOutput;
172: parameterReferences.clear();
173: parameterReferences.addAll(Arrays.asList(paramToRename
174: .getDocument().getReferencesTo(
175: (ActionOutput) paramToRename)));
176: ActionSequenceOutput actionSequenceOutput = paramToRename
177: .getDocument().getOutput(actionOutput.getPublicName());
178: if (actionSequenceOutput != null) {
179: parameterReferences.add(actionSequenceOutput);
180: }
181: if (checkboxTableViewer != null) {
182: getShell()
183: .setText(
184: Messages
185: .getString("RenameActionSequenceInputDialog.RENAME_ACTION_DIALOG_TITLE")); //$NON-NLS-1$
186: checkboxTableViewer.setInput(actionOutput);
187: checkboxTableViewer.setAllChecked(true);
188: }
189: if (newParamName != null) {
190: newParamName.setText(actionOutput.getPublicName());
191: }
192: }
193:
194: public Object[] getElements(Object inputElement) {
195: ArrayList elements = new ArrayList();
196: for (Iterator iter = parameterReferences.iterator(); iter
197: .hasNext();) {
198: Object object = iter.next();
199: if (object instanceof ActionInput) {
200: ActionInput actionInput = (ActionInput) object;
201: ActionDefinition actionDefinition = actionInput
202: .getActionDefinition();
203: if (!elements.contains(actionDefinition)) {
204: elements.add(actionInput.getActionDefinition());
205: }
206: } else if (object instanceof ActionResource) {
207: ActionResource actionResource = (ActionResource) object;
208: ActionDefinition actionDefinition = actionResource
209: .getActionDefinition();
210: if (!elements.contains(actionDefinition)) {
211: elements.add(actionResource.getActionDefinition());
212: }
213: } else if (object instanceof ActionSequenceOutput) {
214: elements.add(object);
215: } else if (object instanceof ActionLoop) {
216: elements.add(object);
217: }
218: }
219: return elements.toArray();
220: }
221:
222: public void dispose() {
223: }
224:
225: public void inputChanged(Viewer viewer, Object oldInput,
226: Object newInput) {
227: }
228:
229: private void renameInput(ActionSequenceInput actionSequenceInput,
230: String newName) {
231: String oldName = actionSequenceInput.getName();
232: actionSequenceInput.setName(newName);
233: Object[] checkedActions = checkboxTableViewer
234: .getCheckedElements();
235: for (int i = 0; i < checkedActions.length; i++) {
236: if (checkedActions[i] instanceof ActionDefinition) {
237: ActionDefinition actionDefinition = (ActionDefinition) checkedActions[i];
238: ActionInput[] actionInputs = actionDefinition
239: .getAllInputParams();
240: for (int j = 0; j < actionInputs.length; j++) {
241: if (actionInputs[j].getReferencedVariableName()
242: .equals(oldName)) {
243: String mapping = actionInputs[j].getMapping();
244: if ((mapping != null)
245: && (mapping.trim().length() > 0)) {
246: actionInputs[j].setMapping(newName);
247: } else {
248: if (Arrays
249: .asList(
250: actionDefinition
251: .getReservedInputNames())
252: .contains(actionInputs[j].getName())) {
253: actionInputs[j].setMapping(newName);
254: } else {
255: actionInputs[j].setMapping(null);
256: actionDefinition.renameInputParam(
257: actionInputs[j].getName(),
258: newName);
259: }
260: }
261: }
262: }
263: } else if (checkedActions[i] instanceof ActionSequenceOutput) {
264: ((ActionSequenceOutput) checkedActions[i])
265: .setName(newName);
266: } else if (checkedActions[i] instanceof ActionLoop) {
267: ((ActionLoop) checkedActions[i]).setLoopOn(newName);
268: }
269: }
270: }
271:
272: private void renameResource(
273: ActionSequenceResource actionSequenceResource,
274: String newName) {
275: String oldName = actionSequenceResource.getName();
276: actionSequenceResource.setName(newName);
277: Object[] checkedActions = checkboxTableViewer
278: .getCheckedElements();
279: for (int i = 0; i < checkedActions.length; i++) {
280: ActionDefinition actionDefinition = (ActionDefinition) checkedActions[i];
281: ActionResource[] actionResource = actionDefinition
282: .getAllResourceParams();
283: for (int j = 0; j < actionResource.length; j++) {
284: if (actionResource[j].getPublicName().equals(oldName)) {
285: String mapping = actionResource[j].getMapping();
286: if ((mapping != null)
287: && (mapping.trim().length() > 0)) {
288: actionResource[j].setMapping(newName);
289: } else {
290: if (Arrays.asList(
291: actionDefinition
292: .getReservedResourceNames())
293: .contains(actionResource[j].getName())) {
294: actionResource[j].setMapping(newName);
295: } else {
296: actionResource[j].setMapping(null);
297: actionResource[j].setName(newName);
298: }
299: }
300: }
301: }
302: }
303: }
304:
305: protected void renameOutput(ActionOutput actionOutput,
306: String newName) {
307: String oldName = actionOutput.getPublicName();
308: String mapping = actionOutput.getMapping();
309: if ((mapping.trim().length() != 0)
310: || Arrays.asList(
311: actionOutput.getActionDefinition()
312: .getReservedOutputNames()).contains(
313: actionOutput.getName())) {
314: actionOutput.setMapping(newName);
315: } else {
316: actionOutput.setName(newName);
317: }
318: Object[] checkedActions = checkboxTableViewer
319: .getCheckedElements();
320: for (int i = 0; i < checkedActions.length; i++) {
321: if (checkedActions[i] instanceof ActionDefinition) {
322: ActionDefinition actionDefinition = (ActionDefinition) checkedActions[i];
323: ActionInput[] actionInputs = actionDefinition
324: .getAllInputParams();
325: for (int j = 0; j < actionInputs.length; j++) {
326: if (actionInputs[j].getReferencedVariableName()
327: .equals(oldName)) {
328: mapping = actionInputs[j].getMapping();
329: if ((mapping != null)
330: && (mapping.trim().length() > 0)) {
331: actionInputs[j].setMapping(newName);
332: } else {
333: if (Arrays
334: .asList(
335: actionDefinition
336: .getReservedInputNames())
337: .contains(actionInputs[j].getName())) {
338: actionInputs[j].setMapping(newName);
339: } else {
340: actionInputs[j].setMapping(null);
341: actionDefinition.renameInputParam(
342: actionInputs[j].getName(),
343: newName);
344: }
345: }
346: }
347: }
348: } else if (checkedActions[i] instanceof ActionSequenceOutput) {
349: ((ActionSequenceOutput) checkedActions[i])
350: .setName(newName);
351: } else if (checkedActions[i] instanceof ActionLoop) {
352: ((ActionLoop) checkedActions[i]).setLoopOn(newName);
353: }
354: }
355: }
356:
357: protected void okPressed() {
358: String newName = newParamName.getText().trim();
359: if (newName.length() > 0) {
360: if (paramToRename instanceof ActionSequenceInput) {
361: ActionSequenceInput actionSequenceInput = (ActionSequenceInput) paramToRename;
362: if (!newName.equals(actionSequenceInput.getName())) {
363: if (actionSequenceInput.getDocument().getInput(
364: newName) != null) {
365: MessageDialog
366: .openError(
367: getShell(),
368: Messages
369: .getString("RenameActionSequenceInputDialog.RENAME_ERROR_DIALOG_TITLE"), Messages.getString("RenameActionSequenceInputDialog.DUPLICATE_NAME_ERROR_MSG")); //$NON-NLS-1$ //$NON-NLS-2$
370: } else {
371: Object[] checkedActions = checkboxTableViewer
372: .getCheckedElements();
373: boolean foundDuplicateName = false;
374: for (int i = 0; (i < checkedActions.length)
375: && !foundDuplicateName; i++) {
376: foundDuplicateName = (checkedActions[i] instanceof ActionSequenceOutput)
377: && ((ActionSequenceOutput) checkedActions[i])
378: .getName().equals(newName);
379: }
380: if (foundDuplicateName) {
381: MessageDialog
382: .openError(
383: getShell(),
384: Messages
385: .getString("RenameActionSequenceInputDialog.RENAME_ERROR_DIALOG_TITLE"), Messages.getString("RenameParameterDialog.DUPLICATE_ACTION_SEQUENCE_OUTPUT")); //$NON-NLS-1$ //$NON-NLS-2$
386: } else {
387: renameInput(actionSequenceInput, newName);
388: setReturnCode(OK);
389: close();
390: }
391: }
392: } else {
393: setReturnCode(OK);
394: close();
395: }
396: } else if (paramToRename instanceof ActionSequenceResource) {
397: ActionSequenceResource actionSequenceResource = (ActionSequenceResource) paramToRename;
398: if (!newName.equals(actionSequenceResource.getName())) {
399: if (actionSequenceResource.getDocument()
400: .getResource(newName) != null) {
401: MessageDialog
402: .openError(
403: getShell(),
404: Messages
405: .getString("RenameActionSequenceInputDialog.RENAME_ERROR_DIALOG_TITLE"), Messages.getString("RenameActionSequenceInputDialog.DUPLICATE_NAME_ERROR_MSG")); //$NON-NLS-1$ //$NON-NLS-2$
406: } else {
407: renameResource(actionSequenceResource, newName);
408: setReturnCode(OK);
409: close();
410: }
411: } else {
412: setReturnCode(OK);
413: close();
414: }
415: } else if (paramToRename instanceof ActionOutput) {
416: ActionOutput actionOutput = (ActionOutput) paramToRename;
417: if (!newName.equals(actionOutput.getPublicName())) {
418: ActionDefinition actionDefinition = actionOutput
419: .getActionDefinition();
420: ActionOutput[] actionOutputs = actionDefinition
421: .getAllOutputParams();
422: boolean foundDuplicateName = false;
423: for (int i = 0; (i < actionOutputs.length)
424: && !foundDuplicateName; i++) {
425: foundDuplicateName = actionOutputs[i]
426: .getPublicName().equals(newName);
427: }
428: if (foundDuplicateName) {
429: MessageDialog
430: .openError(
431: getShell(),
432: Messages
433: .getString("RenameActionSequenceInputDialog.RENAME_ERROR_DIALOG_TITLE"), Messages.getString("RenameActionSequenceInputDialog.DUPLICATE_NAME_ERROR_MSG")); //$NON-NLS-1$ //$NON-NLS-2$
434: } else {
435: Object[] checkedActions = checkboxTableViewer
436: .getCheckedElements();
437: for (int i = 0; (i < checkedActions.length)
438: && !foundDuplicateName; i++) {
439: foundDuplicateName = (checkedActions[i] instanceof ActionSequenceOutput)
440: && ((ActionSequenceOutput) checkedActions[i])
441: .getName().equals(newName);
442: }
443: if (foundDuplicateName) {
444: MessageDialog
445: .openError(
446: getShell(),
447: Messages
448: .getString("RenameActionSequenceInputDialog.RENAME_ERROR_DIALOG_TITLE"), Messages.getString("RenameParameterDialog.DUPLICATE_ACTION_SEQUENCE_OUTPUT")); //$NON-NLS-1$ //$NON-NLS-2$
449: } else {
450: renameOutput(actionOutput, newName);
451: setReturnCode(OK);
452: close();
453: }
454: }
455: } else {
456: setReturnCode(OK);
457: close();
458: }
459: }
460: } else {
461: MessageDialog
462: .openError(
463: getShell(),
464: Messages
465: .getString("RenameActionSequenceInputDialog.RENAME_ERROR_DIALOG_TITLE"), Messages.getString("RenameActionSequenceInputDialog.NO_NAME_ERROR_MSG")); //$NON-NLS-1$ //$NON-NLS-2$
466: }
467: }
468:
469: }
|