]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - cms/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/wizards/ConfirmOverwriteWizard.java
Clarify SLC project structure.
[gpl/argeo-slc.git] / cms / org.argeo.slc.client.ui / src / org / argeo / slc / client / ui / wizards / ConfirmOverwriteWizard.java
diff --git a/cms/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/wizards/ConfirmOverwriteWizard.java b/cms/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/wizards/ConfirmOverwriteWizard.java
new file mode 100644 (file)
index 0000000..d766219
--- /dev/null
@@ -0,0 +1,211 @@
+package org.argeo.slc.client.ui.wizards;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.argeo.slc.SlcException;
+import org.argeo.slc.client.ui.ClientUiPlugin;
+import org.argeo.slc.client.ui.SlcUiConstants;
+import org.argeo.slc.jcr.SlcJcrResultUtils;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.ISharedImages;
+
+public class ConfirmOverwriteWizard extends Wizard {
+
+       // Define widget here to simplify getters
+       private Button overwriteBtn, renameBtn;
+       private Text newNameTxt;
+       private Label newNameLbl;
+
+       // business object
+       private String sourceNodeName;
+       private Node targetParentNode;
+
+       private String newName;
+       private String parentRelPath;
+       private boolean overwrite;
+
+       public ConfirmOverwriteWizard(String sourceNodeName, Node targetParentNode) {
+               setWindowTitle("Confirm overwrite or define a new name");
+               this.sourceNodeName = sourceNodeName;
+               this.targetParentNode = targetParentNode;
+       }
+
+       @Override
+       public void addPages() {
+               try {
+                       addPage(new MyPage());
+               } catch (Exception e) {
+                       throw new SlcException("Cannot add page to wizard ", e);
+               }
+               getShell().setImage(
+                               ClientUiPlugin.getDefault().getWorkbench().getSharedImages()
+                                               .getImageDescriptor(ISharedImages.IMG_LCL_LINKTO_HELP)
+                                               .createImage());
+       }
+
+       // Expose info to the calling view
+       public boolean overwrite() {
+               return overwrite;
+       }
+
+       public String newName() {
+               return newName;
+       }
+
+       @Override
+       public boolean performFinish() {
+               boolean doFinish = false;
+
+               if (canFinish()) {
+                       if (overwriteBtn.getSelection())
+                               doFinish = MessageDialog.openConfirm(Display.getDefault()
+                                               .getActiveShell(), "CAUTION", "All data contained in ["
+                                               + (parentRelPath != null ? parentRelPath : "")
+                                               + "/"+ sourceNodeName
+                                               + "] are about to be definitively destroyed. \n "
+                                               + "Are you sure you want to proceed ?");
+                       else
+                               doFinish = true;
+                       // cache values
+               }
+               if (doFinish) {
+                       overwrite = overwriteBtn.getSelection();
+                       newName = newNameTxt.getText();
+               }
+               return doFinish;
+       }
+
+       class MyPage extends WizardPage implements ModifyListener {
+
+               public MyPage() {
+                       super("");
+                       String msg = "An object with same name (" + sourceNodeName
+                                       + ") already exists at chosen target path";
+
+                       // Add target rel path to the message
+                       Session session;
+                       String relPath;
+                       try {
+                               session = targetParentNode.getSession();
+                               relPath = targetParentNode.getPath();
+                               String basePath = SlcJcrResultUtils
+                                               .getMyResultsBasePath(session);
+                               if (relPath.startsWith(basePath))
+                                       relPath = relPath.substring(basePath.length());
+                               // FIXME currently add the default base label
+                               parentRelPath = SlcUiConstants.DEFAULT_MY_RESULTS_FOLDER_LABEL
+                                               + relPath;
+                       } catch (RepositoryException e) {
+                               throw new SlcException("Unexpected error while defining "
+                                               + "target parent node rel path", e);
+                       }
+                       msg = msg + (parentRelPath == null ? "." : ": \n" + parentRelPath);
+
+                       // Set Title
+                       setTitle(msg);
+               }
+
+               public void createControl(Composite parent) {
+                       Composite composite = new Composite(parent, SWT.NONE);
+                       composite.setLayout(new GridLayout(2, false));
+
+                       // choose between overwrite and rename
+                       overwriteBtn = new Button(composite, SWT.RADIO);
+                       overwriteBtn.setText("Overwrite");
+                       GridData gd = new GridData();
+                       gd.horizontalIndent = 30;
+                       gd.horizontalSpan = 2;
+                       overwriteBtn.setLayoutData(gd);
+                       overwriteBtn.setSelection(true);
+
+                       renameBtn = new Button(composite, SWT.RADIO);
+                       renameBtn.setText("Rename");
+                       renameBtn.setSelection(false);
+                       renameBtn.setText("Rename");
+                       gd = new GridData();
+                       gd.horizontalIndent = 30;
+                       gd.horizontalSpan = 2;
+                       renameBtn.setLayoutData(gd);
+
+                       newNameLbl = new Label(composite, SWT.LEAD);
+                       newNameLbl.setText("New name");
+                       newNameLbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,
+                                       false));
+                       newNameLbl.setEnabled(false);
+
+                       newNameTxt = new Text(composite, SWT.LEAD | SWT.BORDER);
+                       newNameTxt.setText(sourceNodeName);
+                       newNameTxt.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
+                                       false));
+                       if (newNameTxt != null)
+                               newNameTxt.addModifyListener(this);
+                       newNameTxt.setEnabled(false);
+
+                       SelectionAdapter sa = new SelectionAdapter() {
+                               public void widgetSelected(SelectionEvent e) {
+                                       updateSelection(overwriteBtn.getSelection());
+                               }
+                       };
+                       overwriteBtn.addSelectionListener(sa);
+                       renameBtn.addSelectionListener(sa);
+
+                       // Compulsory
+                       setControl(composite);
+               }
+
+               private void updateSelection(boolean overwrite) {
+                       newNameLbl.setEnabled(!overwrite);
+                       newNameTxt.setEnabled(!overwrite);
+                       if (overwrite)
+                               setPageComplete(true);
+                       else
+                               checkComplete();
+               }
+
+               protected String getTechName() {
+                       return newNameTxt.getText();
+               }
+
+               public void modifyText(ModifyEvent event) {
+                       checkComplete();
+               }
+
+               private void checkComplete() {
+                       try {
+
+                               String newName = newNameTxt.getText();
+                               if (newName == null || "".equals(newName.trim())) {
+                                       setMessage("Name cannot be blank or empty",
+                                                       WizardPage.ERROR);
+                                       setPageComplete(false);
+                               } else if (targetParentNode.hasNode(newName)) {
+                                       setMessage("An object with the same name already exists.",
+                                                       WizardPage.ERROR);
+                                       setPageComplete(false);
+                               } else {
+                                       setMessage("Complete", WizardPage.INFORMATION);
+                                       setPageComplete(true);
+                               }
+                       } catch (RepositoryException e) {
+                               throw new SlcException("Unexpected error while checking "
+                                               + "children node with same name", e);
+                       }
+               }
+       }
+}
\ No newline at end of file