protected void updatePreviewText(IStructuredSelection selection) {
    if (previewText == null) return;

    VariableTreeContentProvider contentProvider =
        (VariableTreeContentProvider) super.getTreeViewer().getContentProvider();
    Object[] path = contentProvider.getPathToRoot(selection.getFirstElement());
    String preview = "$"; // $NON-NLS-1$
    if (path != null) {
      Variable var = null;
      for (int i = path.length - 1; i >= 0; i--) {
        String targetNamespace = null;
        String namespacePrefix = null;
        String segment = null;
        Object modelObject = BPELUtil.resolveXSDObject(((ITreeNode) path[i]).getModelObject());
        ;
        if (modelObject instanceof Variable) {
          var = (Variable) modelObject;
          segment = var.getName();
        } else if (modelObject instanceof XSDAttributeDeclaration) {

          XSDAttributeDeclaration att = (XSDAttributeDeclaration) modelObject;

          targetNamespace = att.getTargetNamespace();
          if (targetNamespace != null) {
            namespacePrefix = BPELUtils.getNamespacePrefix(var, targetNamespace);
            Assert.isNotNull(namespacePrefix, XPathExpressionUtil.MSG_NS_PREFIX_NULL);
            segment = "/@" + namespacePrefix + ":" + att.getName(); // $NON-NLS-1$ //$NON-NLS-2$
          } else {
            segment = "/@" + att.getName(); // $NON-NLS-1$
          }

        } else if (modelObject instanceof XSDElementDeclaration) {

          XSDElementDeclaration elm = (XSDElementDeclaration) modelObject;
          targetNamespace = elm.getTargetNamespace();

          XSDTypeDefinition typeDef = elm.getType();
          XSDParticle particle = typeDef.getComplexType();

          boolean isArray =
              particle != null
                  && (particle.getMaxOccurs() == XSDParticle.UNBOUNDED
                      || particle.getMaxOccurs() > 1);

          if (targetNamespace != null) {
            namespacePrefix = BPELUtils.getNamespacePrefix(var, targetNamespace);
            Assert.isNotNull(namespacePrefix, XPathExpressionUtil.MSG_NS_PREFIX_NULL);
            segment = "/" + namespacePrefix + ":" + elm.getName(); // $NON-NLS-1$ //$NON-NLS-2$
          } else {
            segment = "/" + elm.getName(); // $NON-NLS-1$
          }

          if (isArray) {
            segment += "[1]"; // $NON-NLS-1$
          }

        } else if (modelObject instanceof Part) {
          Part part = (Part) modelObject;
          segment = "." + part.getName(); // $NON-NLS-1$
        }

        if (segment != null) preview += segment;
      }

      // store away value
      previewText.setText(preview);
      thePreviewText = preview;
    }
  }