]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java
Work on the active environments
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / composites / ItemTemplateTitleComposite.java
index 3b73d0939fbe9afe7f4288cb1d99b253368fd7fe..0c21c7e7cef557c86dc45286eecfdd404a2bc356 100644 (file)
@@ -1,15 +1,18 @@
 package org.argeo.slc.akb.ui.composites;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.jcr.Node;
 import javax.jcr.Property;
 import javax.jcr.RepositoryException;
-import javax.jcr.Session;
 
 import org.argeo.eclipse.ui.utils.CommandUtils;
+import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.akb.AkbException;
 import org.argeo.slc.akb.AkbNames;
+import org.argeo.slc.akb.AkbService;
 import org.argeo.slc.akb.ui.AkbUiUtils;
 import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor;
 import org.argeo.slc.akb.utils.AkbJcrUtils;
@@ -34,7 +37,9 @@ public class ItemTemplateTitleComposite extends Composite {
        // private final static Log log =
        // LogFactory.getLog(MixTitleComposite.class);
 
-       private final Node akbNode;
+       private final AkbService akbService;
+       private final Node envNode;
+       private final Node itemNode;
        private final FormToolkit toolkit;
        private final IManagedForm form;
        // Don't forget to unregister on dispose
@@ -42,16 +47,29 @@ public class ItemTemplateTitleComposite extends Composite {
 
        // To enable set focus
        private Text titleTxt;
-       private Combo typeCmb;
+       private Combo aliasCmb;
 
        private List<Node> definedAliases;
 
+       /**
+        * 
+        * @param parent
+        * @param style
+        * @param toolkit
+        * @param form
+        * @param envNode
+        * @param itemNode
+        * @param akbService
+        */
        public ItemTemplateTitleComposite(Composite parent, int style,
-                       FormToolkit toolkit, IManagedForm form, Node akbNode) {
+                       FormToolkit toolkit, IManagedForm form, Node envNode,
+                       Node itemNode, AkbService akbService) {
                super(parent, style);
-               this.akbNode = akbNode;
+               this.envNode = envNode;
+               this.itemNode = itemNode;
                this.toolkit = toolkit;
                this.form = form;
+               this.akbService = akbService;
                populate();
                toolkit.adapt(this);
        }
@@ -70,39 +88,32 @@ public class ItemTemplateTitleComposite extends Composite {
 
                // Second line: alias management
                toolkit.createLabel(parent, "Alias");
-               typeCmb = new Combo(parent, SWT.READ_ONLY);
-               toolkit.adapt(typeCmb, false, false);
+               aliasCmb = new Combo(parent, SWT.READ_ONLY);
+               toolkit.adapt(aliasCmb, false, false);
                gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
-               typeCmb.setLayoutData(gd);
+               aliasCmb.setLayoutData(gd);
 
                final Link openAliasLk = new Link(parent, SWT.NONE);
                toolkit.adapt(openAliasLk, false, false);
-               openAliasLk.setText("<a> Edit Alias </a>");
+               openAliasLk.setText("<a>Edit Alias</a>");
                openAliasLk.addSelectionListener(new SelectionAdapter() {
                        @Override
                        public void widgetSelected(final SelectionEvent event) {
-                               int index = typeCmb.getSelectionIndex();
+                               int index = aliasCmb.getSelectionIndex();
                                if (index != -1) {
                                        Node currAlias = definedAliases.get(index);
                                        String id = AkbJcrUtils.getIdentifierQuietly(currAlias);
-                                       CommandUtils.callCommand(OpenAkbNodeEditor.ID,
-                                                       OpenAkbNodeEditor.PARAM_NODE_JCR_ID, id);
+                                       Map<String, String> params = new HashMap<String, String>();
+                                       params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, id);
+                                       params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,
+                                                       AkbJcrUtils.getIdentifierQuietly(envNode));
+
+                                       CommandUtils.callCommand(OpenAkbNodeEditor.ID, params);
                                } else
                                        MessageDialog.openError(getShell(), "Error",
                                                        "No selected alias");
                        }
                });
-               //
-               // final Link testAliasLk= new Link(parent, SWT.NONE);
-               // openAliasLk.setText("<a> Edit Alias </a>");
-               // openAliasLk.addSelectionListener(new SelectionAdapter() {
-               // private static final long serialVersionUID = 1L;
-               //
-               // @Override
-               // public void widgetSelected(final SelectionEvent event) {
-               // MessageDialog.openInformation(getShell(), "test", "test");
-               // }
-               // });
 
                // 3rd line: description
                Label lbl = toolkit.createLabel(parent, "Description");
@@ -117,29 +128,29 @@ public class ItemTemplateTitleComposite extends Composite {
                        public void refresh() {
                                super.refresh();
                                // update display value
-                               AkbUiUtils.refreshFormTextWidget(titleTxt, akbNode,
+                               AkbUiUtils.refreshFormTextWidget(titleTxt, itemNode,
                                                Property.JCR_TITLE);
-                               AkbUiUtils.refreshFormTextWidget(descTxt, akbNode,
+                               AkbUiUtils.refreshFormTextWidget(descTxt, itemNode,
                                                Property.JCR_DESCRIPTION);
 
                                refreshTypeCmbValues();
-                               typeCmb.select(getCurrAliasIndex());
-                               typeCmb.setEnabled(AkbJcrUtils.isNodeCheckedOutByMe(akbNode));
+                               aliasCmb.select(getCurrAliasIndex());
+                               aliasCmb.setEnabled(AkbJcrUtils.isNodeCheckedOutByMe(itemNode));
                        }
                };
 
                // Listeners
-               AkbUiUtils.addTextModifyListener(titleTxt, akbNode, Property.JCR_TITLE,
-                               part);
-               AkbUiUtils.addTextModifyListener(descTxt, akbNode,
+               AkbUiUtils.addTextModifyListener(titleTxt, itemNode,
+                               Property.JCR_TITLE, part);
+               AkbUiUtils.addTextModifyListener(descTxt, itemNode,
                                Property.JCR_DESCRIPTION, part);
 
-               typeCmb.addModifyListener(new ModifyListener() {
+               aliasCmb.addModifyListener(new ModifyListener() {
                        @Override
                        public void modifyText(ModifyEvent event) {
                                try {
                                        int oldIndex = getCurrAliasIndex();
-                                       int selIndex = typeCmb.getSelectionIndex();
+                                       int selIndex = aliasCmb.getSelectionIndex();
 
                                        // insure something has really been modified
                                        if (selIndex < 0 || oldIndex == selIndex)
@@ -147,7 +158,9 @@ public class ItemTemplateTitleComposite extends Composite {
 
                                        // set new alias
                                        Node newAlias = definedAliases.get(selIndex);
-                                       akbNode.setProperty(AkbNames.AKB_USED_CONNECTOR,
+
+                                       // Only relies on the alias
+                                       itemNode.setProperty(AkbNames.AKB_USED_CONNECTOR,
                                                        newAlias.getPath());
                                        part.markDirty();
                                } catch (RepositoryException e) {
@@ -161,7 +174,16 @@ public class ItemTemplateTitleComposite extends Composite {
        }
 
        private void refreshTypeCmbValues() {
-               List<Node> newAliases = AkbJcrUtils.getDefinedAliasForNode(akbNode);
+               List<Node> newAliases;
+               try {
+                       newAliases = JcrUtils.nodeIteratorToList(akbService
+                                       .getDefinedAliases(
+                                                       AkbJcrUtils.getCurrentTemplate(itemNode),
+                                                       AkbJcrUtils.getAliasTypeForNode(itemNode)));
+               } catch (RepositoryException e) {
+                       throw new AkbException("Unable to get defined aliases for node "
+                                       + itemNode, e);
+               }
                boolean hasChanged = false;
                // manually ckeck if something has changed
                if (definedAliases == null
@@ -183,7 +205,7 @@ public class ItemTemplateTitleComposite extends Composite {
                        int i = 0;
                        for (Node node : definedAliases)
                                names[i++] = AkbJcrUtils.get(node, Property.JCR_TITLE);
-                       typeCmb.setItems(names);
+                       aliasCmb.setItems(names);
                }
        }
 
@@ -194,25 +216,13 @@ public class ItemTemplateTitleComposite extends Composite {
         */
        private int getCurrAliasIndex() {
                try {
-                       String path = null;
-                       int currAliasIndex = -1;
-                       if (akbNode.hasProperty(AkbNames.AKB_USED_CONNECTOR))
-                               path = akbNode.getProperty(AkbNames.AKB_USED_CONNECTOR)
-                                               .getString();
-
-                       Session session = akbNode.getSession();
-                       if (path != null && session.nodeExists(path)) {
-                               for (int i = 0; i < definedAliases.size(); i++) {
-                                       if (path.equals(definedAliases.get(i).getPath())) {
-                                               currAliasIndex = i;
-                                               break;
-                                       }
-                               }
-                               // does not work
-                               // Node chosenAlias = session.getNode(path);
-                               // currAliasIndex = definedAliases.indexOf(chosenAlias);
-                       }
-                       return currAliasIndex;
+                       if (itemNode.hasProperty(AkbNames.AKB_USED_CONNECTOR)) {
+                               String aliasPath = itemNode.getProperty(
+                                               AkbNames.AKB_USED_CONNECTOR).getString();
+                               Node alias = itemNode.getSession().getNode(aliasPath);
+                               return aliasCmb.indexOf(alias.getProperty(Property.JCR_TITLE).getString());
+                       } else
+                               return -1;
                } catch (RepositoryException re) {
                        throw new AkbException("Unable to retrieve current Alias", re);
                }