// We must be in a template to delete nodes...
Node template = AkbJcrUtils.getCurrentTemplate(node);
- IEditorPart currPart = currentPage
- .findEditor(new AkbNodeEditorInput(
- template.getIdentifier(), nodeJcrId));
- if (currPart != null)
- currPart.dispose();
-
if (node != null) {
Boolean ok = MessageDialog.openConfirm(
HandlerUtil.getActiveShell(event), "Confirm deletion",
"Do you want to delete this item?");
if (ok) {
+ IEditorPart currPart = currentPage
+ .findEditor(new AkbNodeEditorInput(template
+ .getIdentifier(), nodeJcrId));
+ if (currPart != null)
+ currentPage.closeEditor(currPart, false);
+
node.remove();
session.save();
}
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
+import javax.jcr.Session;
import org.argeo.eclipse.ui.ErrorFeedback;
import org.argeo.eclipse.ui.utils.CommandUtils;
removeBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
- CommandUtils.CallCommandWithOneParameter(DeleteAkbNodes.ID,
- DeleteAkbNodes.PARAM_NODE_JCR_ID,
- AkbJcrUtils.getIdentifierQuietly(connectorAlias));
- // for (IFormPart part : form.getParts())
- // if (!formPart.equals(part))
- // part.refresh();
+ try {
+ // Manually check if corresponding node was really removed
+ Session session = connectorAlias.getSession();
+ String absPath = connectorAlias.getPath();
+
+ CommandUtils.CallCommandWithOneParameter(DeleteAkbNodes.ID,
+ DeleteAkbNodes.PARAM_NODE_JCR_ID,
+ AkbJcrUtils.getIdentifierQuietly(connectorAlias));
+
+ if (!session.nodeExists(absPath))
+ form.removePart(formPart);
+
+ } catch (RepositoryException re) {
+ throw new AkbException(
+ "Error while removing connector Alias ", re);
+ }
}
});
+ // force refresh to initialize various fields on creation
+ formPart.refresh();
form.addPart(formPart);
}
Node newAlias = definedAliases.get(selIndex);
// Only relies on the alias
- itemNode.setProperty(AkbNames.AKB_USED_CONNECTOR, newAlias
- .getProperty(Property.JCR_TITLE).getString());
+ itemNode.setProperty(AkbNames.AKB_USED_CONNECTOR,
+ newAlias.getPath());
part.markDirty();
} catch (RepositoryException e) {
throw new AkbException(
private int getCurrAliasIndex() {
try {
if (itemNode.hasProperty(AkbNames.AKB_USED_CONNECTOR)) {
- String aliasName = itemNode.getProperty(
+ String aliasPath = itemNode.getProperty(
AkbNames.AKB_USED_CONNECTOR).getString();
- return aliasCmb.indexOf(aliasName);
+ Node alias = itemNode.getSession().getNode(aliasPath);
+ return aliasCmb.indexOf(alias.getProperty(Property.JCR_TITLE).getString());
} else
return -1;
} catch (RepositoryException re) {
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.IFormPart;
import org.eclipse.ui.forms.IManagedForm;
/**
ObservationManager observationManager = getSession().getWorkspace()
.getObservationManager();
connectorObserver = new ConnectorObserver(panel.getDisplay(),
- formPart);
+ managedForm);
// observe tree changes under All results
observationManager.addEventListener(connectorObserver,
Event.NODE_ADDED | Event.NODE_REMOVED, getAkbNode()
class ConnectorObserver extends AsyncUiEventListener {
- private AbstractFormPart formPart;
+ private IManagedForm managedForm;
- public ConnectorObserver(Display display, AbstractFormPart formPart) {
+ public ConnectorObserver(Display display, IManagedForm managedForm) {
super(display);
- this.formPart = formPart;
+ this.managedForm = managedForm;
}
@Override
protected void onEventInUiThread(List<Event> events)
throws RepositoryException {
try {
- formPart.refresh();
+ for (IFormPart part : managedForm.getParts())
+ part.refresh();
} catch (Exception e) {
// silently fail
e.printStackTrace();
@Override
public void dispose() {
try {
- statement.close();
- statement.getConnection().close();
+ if (statement != null) {
+ statement.close();
+ statement.getConnection().close();
+ }
} catch (SQLException e) {
// silent
}
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.slc.akb.AkbException;
import org.argeo.slc.akb.AkbTypes;
import org.eclipse.jface.viewers.ITreeContentProvider;
/** Basic content provider for a tree of AKB environment templates */
public class TemplatesTreeContentProvider implements ITreeContentProvider {
+ private final static Log log = LogFactory
+ .getLog(TemplatesTreeContentProvider.class);
/**
* @param parent
public Object getParent(Object child) {
try {
Node node = (Node) child;
+
+ // Manual sanity check to avoid exception when tryin to refresh an
+ // element that displays a node which has been removed
+ try {
+ String id = node.getIdentifier();
+ node.getSession().getNodeByIdentifier(id);
+ } catch (Exception e) {
+ log.warn("Trying to refresh an unexisting node");
+ return null;
+ }
+
if (node.getDepth() == 0)
return null;
else
return node.getParent();
+
} catch (RepositoryException e) {
throw new AkbException("Error while getting parent node", e);
}
/* CONNECTOR PROPERTIES */
public final static String AKB_CONNECTOR_URL = "akb:connectorUrl";
- public final static String AKB_CONNECTOR_ALIAS_NAME = "akb:connectorName";
+ public final static String AKB_CONNECTOR_ALIAS_PATH = "akb:connectorAliasPath";
public final static String AKB_CONNECTOR_USER = "akb:connectorUser";
// Alias specific
public final static String AKB_DEFAULT_TEST_CONNECTOR = "defaultTestConnector";
/**
* @param envNode
* an environment or a template
- * @param aliasName
- * the alias of the node to get
- * @return
+ * @param aliasPath
+ * the path of the parent alias in the corresponding template
+ * environment used as key
+ * @return the corresponding active connector if found
* @throws RepositoryException
*/
- public Node getConnectorByAlias(Node envNode, String aliasName)
+ public Node getActiveConnectorByAlias(Node envNode, String aliasPath)
throws RepositoryException;
/**
// Node defaultConnector =
Node defaultConn = newConnector.addNode(
AkbNames.AKB_DEFAULT_TEST_CONNECTOR, connectorType);
- defaultConn.setProperty(AkbNames.AKB_CONNECTOR_ALIAS_NAME, name);
+ defaultConn.setProperty(AkbNames.AKB_CONNECTOR_ALIAS_PATH, newConnector.getPath());
return newConnector;
}
}
@Override
- public Node getConnectorByAlias(Node envNode, String aliasName)
+ public Node getActiveConnectorByAlias(Node envNode, String aliasPath)
throws RepositoryException {
try {
Session session = envNode.getSession();
Constraint connType = factory.comparison(
factory.propertyValue(source.getSelectorName(),
- AkbNames.AKB_CONNECTOR_ALIAS_NAME),
+ AkbNames.AKB_CONNECTOR_ALIAS_PATH),
QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, factory
.literal(session.getValueFactory().createValue(
- aliasName)));
+ aliasPath)));
defaultC = factory.and(defaultC, connType);
QueryObjectModel query;
Node connector = ni.nextNode();
if (ni.hasNext())
throw new AkbException("More than one alias with name "
- + aliasName + " has been defined for environment "
+ + aliasPath + " has been defined for environment "
+ envNode);
else
return connector;
}
} catch (RepositoryException e) {
- throw new AkbException("Unable to get connector " + aliasName
+ throw new AkbException("Unable to get connector " + aliasPath
+ " in " + envNode, e);
}
}
if (activeEnv == null) {
activeEnv = AkbJcrUtils.getCurrentTemplate(node);
}
- Node connectorNode = getConnectorByAlias(activeEnv,
+ Node connectorNode = getActiveConnectorByAlias(activeEnv,
connectorAliasStr);
String sqlQuery = node.getProperty(AKB_QUERY_TEXT).getString();
if (activeEnv == null) {
activeEnv = AkbJcrUtils.getCurrentTemplate(node);
}
- Node connectorNode = getConnectorByAlias(activeEnv,
+ Node connectorNode = getActiveConnectorByAlias(activeEnv,
connectorAliasStr);
String command = node.getProperty(AkbNames.AKB_COMMAND_TEXT)
.getString();
if (activeEnv == null) {
activeEnv = AkbJcrUtils.getCurrentTemplate(node);
}
- Node connectorNode = getConnectorByAlias(activeEnv,
+ Node connectorNode = getActiveConnectorByAlias(activeEnv,
connectorAliasStr);
// TODO do a proper scp
// GENERIC TYPE FOR A CONNECTOR
[akb:connector] > nt:unstructured, mix:title
- akb:connectorUrl (STRING)
-// the name of the corresponding alias. We assume it is unique.
-- akb:connectorName (STRING)
+// the path to the corresponding alias
+- akb:connectorAliasPath (STRING)
// add argeo keyring