StepReferenceContentAssistCalculator.java :  » J2EE » spring-ide_2.3.0 » org » springframework » ide » eclipse » batch » ui » editor » contentassist » batch » Java Open Source

Java Open Source » J2EE » spring ide_2.3.0 
spring ide_2.3.0 » org » springframework » ide » eclipse » batch » ui » editor » contentassist » batch » StepReferenceContentAssistCalculator.java
/*******************************************************************************
 * Copyright (c) 2005, 2009 Spring IDE Developers
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     Spring IDE Developers - initial API and implementation
 *******************************************************************************/
package org.springframework.ide.eclipse.batch.ui.editor.contentassist.batch;

import org.eclipse.core.resources.IFile;
import org.eclipse.swt.graphics.Image;
import org.springframework.ide.eclipse.batch.BatchUIImages;
import org.springframework.ide.eclipse.beans.ui.editor.contentassist.IContentAssistCalculator;
import org.springframework.ide.eclipse.beans.ui.editor.contentassist.IContentAssistContext;
import org.springframework.ide.eclipse.beans.ui.editor.contentassist.IContentAssistProposalRecorder;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * {@link IContentAssistCalculator} implementation that can be used to locate references to
 * <code>step<step> elements.
 * @author Leo Dos Santos
 * @since 2.2.5
 */
public class StepReferenceContentAssistCalculator implements IContentAssistCalculator {

  private static final int RELEVANCE = 20;

  public void computeProposals(IContentAssistContext context,
      IContentAssistProposalRecorder recorder) {
    String prefix = context.getMatchString();
    if (prefix == null) {
      prefix = "";
    }
    IFile file = context.getFile();
    if (context.getDocument() != null) {
      searchStepElements(recorder, prefix, context.getParentNode(), file);
      if (context.getNode() != null && ("next".equals(context.getNode().getNodeName()) 
          || "stop".equals(context.getNode().getNodeName()))) {
        searchStepElements(recorder, prefix, context.getParentNode().getParentNode(), file);
      }
    }
  }

  private void searchStepElements(IContentAssistProposalRecorder recorder, String prefix,
      Node node, IFile file) {
    NodeList children = node.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
      Node child = children.item(i);
      if ("step".equals(child.getLocalName()) || "decision".equals(child.getLocalName()) 
          || "split".equals(child.getLocalName())) {
        NamedNodeMap attributes = child.getAttributes();
        Node id = attributes.getNamedItem("id");
        if (id != null && id.getNodeValue() != null && id.getNodeValue().startsWith(prefix)) {
          acceptStepMatch(recorder, child, file);
        }
      }
    }
  }

  private void acceptStepMatch(IContentAssistProposalRecorder recorder, Node stepNode, IFile file) {
    NamedNodeMap attrs = stepNode.getAttributes();
    Node id = attrs.getNamedItem("id");
    Node parentNode = stepNode.getParentNode();

    String stepName = id.getNodeValue();
    String replaceText = stepName;
    String fileName = file.getProjectRelativePath().toString();
    StringBuilder buf = new StringBuilder();
    buf.append(stepName);

    if (parentNode != null) {
      buf.append(" [");
      buf.append(parentNode.getNodeName());
      buf.append("]");
    }
    if (fileName != null) {
      buf.append(" - ");
      buf.append(fileName);
    }

    String displayText = buf.toString();
    Image image = BatchUIImages.getImage(BatchUIImages.IMG_OBJS_BATCH);
    recorder.recordProposal(image, RELEVANCE, displayText, replaceText, stepName);
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.