package org.nightlabs.jfire.scripting.admin.ui.editor; import java.util.ArrayList; import java.util.List; import java.util.SortedSet; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.editor.ToolBarSectionPart; import org.nightlabs.base.ui.entity.editor.EntityEditorUtil; import org.nightlabs.base.ui.resource.SharedImages; import org.nightlabs.base.ui.wizard.DynamicPathWizardDialog; import org.nightlabs.jfire.scripting.IScriptParameter; import org.nightlabs.jfire.scripting.Script; import org.nightlabs.jfire.scripting.ScriptParameter; import org.nightlabs.jfire.scripting.ScriptParameterSet; import org.nightlabs.jfire.scripting.admin.ui.ScriptingAdminPlugin; import org.nightlabs.jfire.scripting.admin.ui.resource.Messages; import org.nightlabs.jfire.scripting.ui.ModificationListener; import org.nightlabs.jfire.scripting.ui.ModifyListenerEvent; import org.nightlabs.jfire.scripting.ui.ScriptParameterTable; import org.nightlabs.jfire.scripting.ui.ScriptParameterTableOption; /** * * @author vince - vince at guinaree dot com * */ public class ScriptTableSection extends ToolBarSectionPart { private String selectedParamID; private String secondParamId; private CreateParameterAction createAction; private DeleteParameterAction deleteAction; private EditParameterAction editAction; private DecreaseOrderNumberAction previousParameterAction; private IncreaseOrderNumberAction nextParameterAction; private Script script; private ScriptParameterTable scriptParameterTable; public ScriptTableSection(FormPage page, Composite parent, ScriptEditorPageController controller){ super(page,parent,ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE , Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.sectionTitle")); getSection().setExpanded(true); createClient(getSection(), page.getEditor().getToolkit()); previousParameterAction= new DecreaseOrderNumberAction(); nextParameterAction =new IncreaseOrderNumberAction(); createAction = new CreateParameterAction(); deleteAction = new DeleteParameterAction(); editAction = new EditParameterAction(); getToolBarManager().add(createAction); getToolBarManager().add(deleteAction); getToolBarManager().add(editAction); getToolBarManager().add(previousParameterAction); getToolBarManager().add(nextParameterAction); updateToolBarManager(); } @Override public boolean setFormInput(Object input) { this.script = (Script) input; scriptParameterTable.setInput(script.getParameterSet()); return super.setFormInput(input); } @Override public void refresh() { if (script == null) return; // data not yet loaded => silently ignore scriptParameterTable.refresh(); super.refresh(); } protected void createClient(Section section, FormToolkit toolkit){ // section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Composite container = EntityEditorUtil.createCompositeClient(toolkit, section, 1); XComposite composite=new XComposite(container, SWT.NONE, LayoutMode.TIGHT_WRAPPER); scriptParameterTable = new ScriptParameterTable(composite, SWT.NONE, ScriptParameterTableOption.editable); scriptParameterTable.setComparator(new ViewerComparator() { @Override public int compare(Viewer viewer, Object e1, Object e2) { if (e1 instanceof ScriptParameter && e2 instanceof ScriptParameter) { return new Integer(((ScriptParameter) e1).getOrderNumber()).compareTo(((ScriptParameter) e2).getOrderNumber()); } return 0; } }); scriptParameterTable.addModificationListener(new ModificationListener() { @Override public void ModifyTextListener(ModifyListenerEvent event) { // TODO Auto-generated method stub markDirty(); } }); } class DecreaseOrderNumberAction extends Action{ public DecreaseOrderNumberAction(){ super(); setId(DecreaseOrderNumberAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor(ScriptingAdminPlugin.getDefault(),ScriptTableSection.class,"Up")); setToolTipText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.PreviousParameterAction.toolTipText")); setText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.PreviousParameterAction.text")); } @Override public void run(){ ScriptParameter selectedScriptParameter = scriptParameterTable.getFirstSelectedElement(); if(selectedScriptParameter != null){ selectedParamID = selectedScriptParameter.getScriptParameterID(); ScriptParameterSet parameterSet = script.getParameterSet(); SortedSet<IScriptParameter> sortedParameters = parameterSet.getSortedParameters(); if(selectedScriptParameter.getOrderNumber() == 0){ return; } List<IScriptParameter> parameterList=new ArrayList<IScriptParameter>(sortedParameters); for(IScriptParameter parameter : parameterList){ if(selectedParamID.equals(parameter.getScriptParameterID())){ int firstOrderNum = parameter.getOrderNumber(); int secondOrderNum = --firstOrderNum; secondParamId = parameterList.get(secondOrderNum).getScriptParameterID(); parameterSet.swapParameters(selectedParamID, secondParamId); } } scriptParameterTable.setInput(parameterSet); markDirty(); } } } class IncreaseOrderNumberAction extends Action { public IncreaseOrderNumberAction(){ super(); setId(IncreaseOrderNumberAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor(ScriptingAdminPlugin.getDefault(),ScriptTableSection.class,"Down")); setToolTipText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.NextParameterAction.toolTipText")); setText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.NextParameterAction.text")); } @Override public void run() { ScriptParameter selectedScriptParameter = scriptParameterTable.getFirstSelectedElement(); if(selectedScriptParameter != null){ selectedParamID = selectedScriptParameter.getScriptParameterID(); ScriptParameterSet parameterSet = script.getParameterSet(); SortedSet<IScriptParameter> sortedParameters = parameterSet.getSortedParameters(); List<IScriptParameter> parameterList=new ArrayList<IScriptParameter>(sortedParameters); if(selectedScriptParameter.getOrderNumber() == parameterList.size()-1){ return; } for(IScriptParameter parameter : parameterList){ if(selectedParamID.equals(parameter.getScriptParameterID())){ int firstOrderNum = parameter.getOrderNumber(); int secondOrderNum = ++firstOrderNum; secondParamId = parameterList.get(secondOrderNum).getScriptParameterID(); parameterSet.swapParameters(selectedParamID, secondParamId); } } scriptParameterTable.setInput(parameterSet); markDirty(); } } } class CreateParameterAction extends Action{ public CreateParameterAction(){ super(); setId(CreateParameterAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( ScriptingAdminPlugin.getDefault(), ScriptTableSection.class, "Create")); setToolTipText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.CreateParameterAction.toolTipText")); setText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.CreateParameterAction.text")); } @Override public void run() { ScriptParameterWizard wizard=new ScriptParameterWizard(false,script); try { DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(getSection().getShell(), wizard); int result = dialog.open(); if(result == Dialog.OK) { scriptParameterTable.setInput(script.getParameterSet()); scriptParameterTable.refresh(true); markDirty(); } } catch (Exception ex) { throw new RuntimeException(ex); } } } class DeleteParameterAction extends Action{ public DeleteParameterAction(){ super(); setId(DeleteParameterAction .class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( ScriptingAdminPlugin.getDefault(), ScriptTableSection.class, "Delete")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.DeleteParameterAction.toolTipText")); setText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.DeleteParameterAction.text")); } @Override public void run() { boolean confirm= MessageDialog.openConfirm(getSection().getShell(),Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.DeleteParameterAction.dialog.confirmDelete.title"),Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.DeleteParameterAction.dialog.confirmDelete.description")); if(confirm) { script.getParameterSet().removeParameter(scriptParameterTable.getFirstSelectedElement().getScriptParameterID()); scriptParameterTable.refresh(true); markDirty(); } } } class EditParameterAction extends Action { public EditParameterAction() { super(); setId(EditParameterAction.class.getName()); setImageDescriptor(SharedImages.getSharedImageDescriptor( ScriptingAdminPlugin.getDefault(), ScriptTableSection.class, "Edit")); //$NON-NLS-1$ setToolTipText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.EditParameterAction.toolTipText")); setText(Messages.getString("org.nightlabs.jfire.scripting.admin.ui.editor.ScriptTableSection.EditParameterAction.text")); } @Override public void run() { ScriptParameter parameter=scriptParameterTable.getFirstSelectedElement(); ScriptEditWizard wizard = new ScriptEditWizard(parameter, false,null); try { DynamicPathWizardDialog dialog =new DynamicPathWizardDialog(getSection().getShell(), wizard); if(dialog.open() == Dialog.OK) { scriptParameterTable.refresh(true); markDirty(); } } catch (Exception ex) { throw new RuntimeException(ex); } } } }