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;
// LogFactory.getLog(MixTitleComposite.class);
private final AkbService akbService;
- private final Node akbNode;
+ private final Node envNode;
+ private final Node itemNode;
private final FormToolkit toolkit;
private final IManagedForm form;
// Don't forget to unregister on dispose
// 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,
- AkbService akbService) {
+ 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;
// 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");
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)
Node newAlias = definedAliases.get(selIndex);
// Only relies on the alias
- akbNode.setProperty(AkbNames.AKB_USED_CONNECTOR, newAlias
+ itemNode.setProperty(AkbNames.AKB_USED_CONNECTOR, newAlias
.getProperty(Property.JCR_TITLE).getString());
part.markDirty();
} catch (RepositoryException e) {
List<Node> newAliases;
try {
newAliases = JcrUtils.nodeIteratorToList(akbService
- .getDefinedAliases(AkbJcrUtils.getCurrentTemplate(akbNode),
- AkbJcrUtils.getAliasTypeForNode(akbNode)));
+ .getDefinedAliases(
+ AkbJcrUtils.getCurrentTemplate(itemNode),
+ AkbJcrUtils.getAliasTypeForNode(itemNode)));
} catch (RepositoryException e) {
throw new AkbException("Unable to get defined aliases for node "
- + akbNode, e);
+ + itemNode, e);
}
boolean hasChanged = false;
// manually ckeck if something has changed
int i = 0;
for (Node node : definedAliases)
names[i++] = AkbJcrUtils.get(node, Property.JCR_TITLE);
- typeCmb.setItems(names);
+ aliasCmb.setItems(names);
}
}
*/
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 aliasName = itemNode.getProperty(
+ AkbNames.AKB_USED_CONNECTOR).getString();
+ return aliasCmb.indexOf(aliasName);
+ } else
+ return -1;
} catch (RepositoryException re) {
throw new AkbException("Unable to retrieve current Alias", re);
}
import org.argeo.jcr.JcrUtils;
import org.argeo.slc.akb.AkbException;
import org.argeo.slc.akb.AkbService;
+import org.argeo.slc.akb.AkbTypes;
import org.argeo.slc.akb.ui.AkbUiUtils;
import org.argeo.slc.akb.utils.AkbJcrUtils;
import org.eclipse.core.runtime.IProgressMonitor;
// Business Objects
private Node akbNode;
+ // a template or an active environment
+ private Node envNode;
+ // shortcut
+ private boolean isTemplate;
// Some constants
private final static int SHORT_NAME_LENGHT = 10;
session = repository.login();
AkbNodeEditorInput anei = (AkbNodeEditorInput) getEditorInput();
akbNode = session.getNodeByIdentifier(anei.getIdentifier());
+ envNode = session.getNodeByIdentifier(anei.getEnvIdentifier());
+ isTemplate = envNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE);
updatePartNameAndToolTip();
} catch (RepositoryException e) {
throw new AkbException("Unable open editor for akb node", e);
}
/* Pages management */
+ @SuppressWarnings("unused")
@Override
protected void addPages() {
try {
- addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
+ if (isTemplate)
+ addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
// Add AKB Type specific pages
addOtherPages();
- addPage(new HistoryPage(this, "historyPage", "History"));
+ // Use this when versioning is implemented
+ // if (isTemplate)
+ if (false)
+ addPage(new HistoryPage(this, "historyPage", "History"));
} catch (PartInitException e) {
throw new AkbException("Unable to initialise pages for editor "
+ getEditorId(), e);
return akbNode;
}
+ protected Node getEnvNode() {
+ return envNode;
+ }
+
+ protected boolean isTemplate() {
+ return isTemplate;
+ }
+
/* LIFE CYCLE MANAGEMENT */
@Override
public void dispose() {
parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
// First line main info
ItemTemplateTitleComposite ittCmp = new ItemTemplateTitleComposite(
- parent, SWT.NO_FOCUS, getToolkit(), managedForm, getAkbNode(), getAkbService());
+ parent, SWT.NO_FOCUS, getToolkit(), managedForm, getEnvNode(),
+ getAkbNode(), getAkbService());
GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
gd.minimumHeight = 250;
ittCmp.setLayoutData(gd);
private final String jcrId;
/**
- * the Env Jcr ID cannot be null, JcrId can only be null if current node is
- * an environment (active or template)
+ * @param envJcrId
+ * can be null when current node is an environment (active or
+ * template)
+ * @param jcrId
+ * cannot be null
*/
+
public AkbNodeEditorInput(String envJcrId, String jcrId) {
this.envJcrId = envJcrId;
this.jcrId = jcrId;
}
public String getIdentifier() {
- if (jcrId == null)
- return envJcrId;
- else
- return jcrId;
+ return jcrId;
}
public String getEnvIdentifier() {
- return envJcrId;
+ if (envJcrId == null)
+ return jcrId;
+ else
+ return envJcrId;
}
public boolean exists() {
return false;
AkbNodeEditorInput other = (AkbNodeEditorInput) obj;
if (!jcrId.equals(other.getIdentifier())
- || !envJcrId.equals(other.getEnvIdentifier()))
+ || !getEnvIdentifier().equals(other.getEnvIdentifier()))
return false;
return true;
}
@Override
protected void addOtherPages() throws PartInitException {
addPage(new JdbcTestPage(getAkbService(), this, "testPage", "Test",
- getAkbNode()));
+ getEnvNode(), getAkbNode()));
}
}
outputDisplay
.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- String output = getAkbService().executeCommand(getAkbNode());
+ String output = getAkbService().executeCommand(getEnvNode(),
+ getAkbNode());
outputDisplay.setText(output);
}
outputDisplay
.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
- String output = getAkbService().retrieveFile(getAkbNode());
+ String output = getAkbService()
+ .retrieveFile(getEnvNode(), getAkbNode());
outputDisplay.setText(output);
}
import org.argeo.jcr.JcrUtils;\r
import org.argeo.slc.akb.AkbException;\r
import org.argeo.slc.akb.AkbNames;\r
+import org.argeo.slc.akb.AkbService;\r
import org.argeo.slc.akb.AkbTypes;\r
import org.argeo.slc.akb.ui.AkbUiPlugin;\r
import org.argeo.slc.akb.ui.AkbUiUtils;\r
import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider;\r
import org.argeo.slc.akb.ui.providers.TemplatesTreeContentProvider;\r
import org.argeo.slc.akb.ui.utils.Refreshable;\r
-import org.argeo.slc.akb.ui.views.AkbTemplatesTreeView.ViewDoubleClickListener;\r
+import org.argeo.slc.akb.utils.AkbJcrUtils;\r
import org.eclipse.jface.action.IContributionItem;\r
import org.eclipse.jface.action.IMenuListener;\r
import org.eclipse.jface.action.IMenuManager;\r
\r
/* DEPENDENCY INJECTION */\r
private Session session;\r
+ private AkbService akbService;\r
\r
// This page widgets\r
private TreeViewer envTreeViewer;\r
.getSelection();\r
\r
Node selected = (Node) selection.getFirstElement();\r
+ Node currEnv = null;\r
\r
boolean hasSelection = selected != null;\r
+\r
+ if (hasSelection)\r
+ currEnv = AkbJcrUtils.getCurrentTemplate(selected);\r
+\r
boolean isTemplate = hasSelection ? selected\r
.isNodeType(AkbTypes.AKB_ENV_TEMPLATE) : false;\r
boolean isParentItemsFolder = hasSelection ? selected\r
\r
// Add Connector Alias\r
Map<String, String> params = new HashMap<String, String>();\r
- if (hasSelection && isTemplate)\r
+ if (hasSelection && isTemplate) {\r
params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
selected.getIdentifier());\r
+ params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+ currEnv.getIdentifier());\r
+ }\r
params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
AkbTypes.AKB_CONNECTOR_ALIAS);\r
\r
\r
// Item Submenu\r
params = new HashMap<String, String>();\r
- if (hasSelection)\r
+ if (hasSelection) {\r
params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
selected.getIdentifier());\r
+ params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+ currEnv.getIdentifier());\r
+ }\r
refreshItemsSubmenu(menuManager, window, "menu.itemsSubmenu",\r
"Add Item", isParentItemsFolder || isTemplate, params);\r
\r
// Add Item Folder\r
params = new HashMap<String, String>();\r
- if (hasSelection)\r
+ if (hasSelection) {\r
params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
selected.getIdentifier());\r
+ params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+ currEnv.getIdentifier());\r
+ }\r
params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
AkbTypes.AKB_ITEM_FOLDER);\r
+\r
AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
"cmd.addItemFolder", OpenAkbNodeEditor.ID,\r
"Add item folder", null, isParentItemsFolder || isTemplate,\r
try {\r
if (obj instanceof Node) {\r
Node node = (Node) obj;\r
- CommandUtils.callCommand(OpenAkbNodeEditor.ID,\r
- OpenAkbNodeEditor.PARAM_NODE_JCR_ID,\r
+ Node currEnv = AkbJcrUtils.getCurrentTemplate(node);\r
+\r
+ // Add Connector Alias\r
+ Map<String, String> params = new HashMap<String, String>();\r
+ params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID,\r
node.getIdentifier());\r
+ params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+ currEnv.getIdentifier());\r
+\r
+ CommandUtils.callCommand(OpenAkbNodeEditor.ID, params);\r
}\r
} catch (RepositoryException e) {\r
throw new AkbException("Cannot open " + obj, e);\r
throw new AkbException("unable to log in for " + ID + " view");\r
}\r
}\r
+\r
+ public void setAkbService(AkbService akbService) {\r
+ this.akbService = akbService;\r
+\r
+ }\r
}
\ No newline at end of file
/**
* If no active environment is defined, tries to execute query with default
* connector defined for the template
+ *
+ * @param activeEnvironment
+ * @param itemNode
+ * @return
*/
- public PreparedStatement prepareJdbcQuery(Node activeEnvironment, Node node);
+ public PreparedStatement prepareJdbcQuery(Node activeEnvironment,
+ Node itemNode);
- public String executeCommand(Node activeEnvironment, Node node);
+ /**
+ *
+ * @param activeEnvironment
+ * @param itemNode
+ * @return
+ */
+ public String executeCommand(Node activeEnvironment, Node itemNode);
- public String retrieveFile(Node activeEnvironment, Node node);
+ /**
+ *
+ * @param activeEnvironment
+ * @param itemNode
+ * @return
+ */
+ public String retrieveFile(Node activeEnvironment, Node itemNode);
}
\ No newline at end of file
import org.argeo.slc.akb.AkbNames;
import org.argeo.slc.akb.AkbService;
import org.argeo.slc.akb.AkbTypes;
+import org.argeo.slc.akb.utils.AkbJcrUtils;
import org.argeo.slc.jsch.SimpleUserInfo;
import org.argeo.util.security.Keyring;
public PreparedStatement prepareJdbcQuery(Node activeEnv, Node node) {
PreparedStatement statement = null;
try {
-
+
if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY)) {
- String connectorPath = node.getProperty(AKB_USED_CONNECTOR)
+ String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR)
.getString();
- Node connectorNode = node.getSession().getNode(connectorPath);
-
- if (activeEnv != null){
- String aliasName = connectorNode.getProperty(Property.JCR_TITLE).getString();
- connectorNode = getConnectorByAlias(activeEnv, aliasName);
+ // in case of a template passed env can be null
+ if (activeEnv == null) {
+ activeEnv = AkbJcrUtils.getCurrentTemplate(node);
}
+ Node connectorNode = getConnectorByAlias(activeEnv,
+ connectorAliasStr);
String sqlQuery = node.getProperty(AKB_QUERY_TEXT).getString();
public String executeCommand(Node activeEnv, Node node) {
try {
+
+ String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR)
+ .getString();
+ // in case of a template passed env can be null
+ if (activeEnv == null) {
+ activeEnv = AkbJcrUtils.getCurrentTemplate(node);
+ }
+ Node connectorNode = getConnectorByAlias(activeEnv,
+ connectorAliasStr);
String command = node.getProperty(AkbNames.AKB_COMMAND_TEXT)
.getString();
- String connectorPath = node.getProperty(AKB_USED_CONNECTOR)
- .getString();
- Node connectorNode = node.getSession().getNode(connectorPath);
String connectorUrl = connectorNode.getProperty(AKB_CONNECTOR_URL)
.getString();
String connectorUser = connectorNode
.getString();
String command = "cat " + filePath;
- // TODO do a proper scp
- String connectorPath = node.getProperty(AKB_USED_CONNECTOR)
+ String connectorAliasStr = node.getProperty(AKB_USED_CONNECTOR)
.getString();
- Node connectorNode = node.getSession().getNode(connectorPath);
+ // in case of a template passed env can be null
+ if (activeEnv == null) {
+ activeEnv = AkbJcrUtils.getCurrentTemplate(node);
+ }
+ Node connectorNode = getConnectorByAlias(activeEnv,
+ connectorAliasStr);
+
+ // TODO do a proper scp
String connectorUrl = connectorNode.getProperty(AKB_CONNECTOR_URL)
.getString();
String connectorUser = connectorNode
//
// GENERIC ITEM
//
-[akb:item] > nt:unstructured
-// a path to the corresponding connector
+[akb:item] > nt:unstructured, mix:title
+// the alias name of the corresponding connector
+// Must be unique in a given template environment
- akb:usedConnector (STRING)