Package org.eclipse.wst.xml.core.internal.validation.core

Source Code of org.eclipse.wst.xml.core.internal.validation.core.Helper

/*******************************************************************************
* Copyright (c) 2001, 2005 IBM Corporation and others.
* 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:
*     IBM Corporation - initial API and implementation
*******************************************************************************/

package org.eclipse.wst.xml.core.internal.validation.core;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.wst.validation.internal.operations.ValidatorManager;
import org.eclipse.wst.validation.internal.operations.WorkbenchContext;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;


/**
* A helper class for validation in the validation framework.
*
* @author Ernest Mah (ernest@ca.ibm.com)
* @author Lawrence Mandel, IBM
*/
public class Helper extends WorkbenchContext
{
  public static final String GET_PROJECT_FILES = "getAllFiles"; //$NON-NLS-1$
  public static final String GET_FILE = "getFile"; //$NON-NLS-1$
  //dw private static final IContainer[] NO_CONTAINERS = new IContainer[0];
  public static final String VALIDATION_MARKER = "org.eclipse.wst.validation.problemmarker"; //$NON-NLS-1$
  public static final String VALIDATION_MARKER_OWNER = "owner";   //$NON-NLS-1$

  /**
   * Constructor.
   */
  public Helper()
  {
    super();

    // the following will register the helper's symbolic methods
    Class [] args = new Class[1] ;
    args[0] = String.class // a string argument denoting a specific JSP.
   
    registerModel(GET_FILE, "getFile", args);//$NON-NLS-1$
    registerModel(GET_PROJECT_FILES, "getFiles", args);//$NON-NLS-1$
  }

  /**
   * Get the IFile for the given filename.
   *
   * @param filename The name of the file to retrieve.
   * @return An IFile representing the file specified or null if it can't be resolved.
   */
  public IFile getFile(String filename)
  {
    //    System.out.println("file name = " + filename);
    IResource res = getProject().findMember(filename, true); // true means include phantom resources
    if (res instanceof IFile)
    {
      return (IFile) res;
    }
    return null;
  }
 
  /**
   * Get the collection of files from the project that are relevant for the
   * validator with the given class name.
   *
   * @param validatorClassName The name of the validator class.
   * @return The collection of files relevant for the validator class specified.
   */
  public Collection getFiles(String validatorClassName)
  {
    IProject project = getProject();
    List files = new ArrayList();
    getFiles(files, project, validatorClassName);
    return files;
  }

  /**
   * Get the collection of files from the project that are relevant for the
   * validator with the given class name.
   *
   * @param files The files relevant for the class name.
   * @param resource The resource to look for files in.
   * @param validatorClassName The name of the validator class.
   */
  protected void getFiles(Collection files, IContainer resource, String validatorClassName)
  {
    try
    {
      IResource [] resourceArray = resource.members(false);
      for (int i=0; i<resourceArray.length; i++)
      {      
        if (ValidatorManager.getManager().isApplicableTo(validatorClassName, resourceArray[i]))
        {
          if (resourceArray[i] instanceof IFile)
          {
            files.add(resourceArray[i]);
          }
        }
        if (resourceArray[i].getType() == IResource.FOLDER)
         getFiles(files,(IContainer)resourceArray[i], validatorClassName) ;
      }
    }
    catch (Exception e) {}
  }

 
/**
* Return the name of the resource, without the project-specific information
* in front.
*
* This method is used by ValidationOperation to calculate the non-environment
* specific names of the files. Only the IWorkbenchContext implementation knows how
* much information to strip off of the IResource name. For example, if there is
* an EJB Project named "MyEJBProject", and it uses the default names for the
* source and output folders, "source" and "ejbModule", respectively, then the
* current implementation of EJB Helper knows how much of that structure is
* eclipse-specific.
*
* Since the "source" folder contains Java source files, a portable name would
* be the fully-qualified name of the Java class, without the eclipse-specific
* project and folder names in front of the file name. The EJBHelper knows that
* everything up to the "source" folder, for example, can be removed, because,
* according to the definition of the EJB Project, everything contained
* in the source folder is java source code. So if there is an IResource in an
* EJB Project named "/MyEJBProject/source/com/ibm/myclasses/MyJavaFile.java",
* this method would make this name portable by stripping off the
* "/MyEJBProject/source", and returning "com/ibm/myclasses/MyJavaFile.java".
*
* The output of this method is used by the ValidationOperation, when it
* is calculating the list of added/changed/deleted file names for incremental
* validation. If getPortableName(IResource) returns null, that means
* that the IWorkbenchContext's implementation does not support that particular
* type of resource, and the resource should not be included in the array of
* IFileDelta objects in the IValidator's "validate" method.
*
* @param resource The resource to get the name from.
* @return The portable name of the resource.
*/
public String getPortableName(IResource resource)
  {
    //    System.out.println("get portablename for " + resource);
    return resource.getProjectRelativePath().toString();
  }

/**
* When an IValidator associates a target object with an IMessage,
* the WorkbenchReporter eventually resolves that target object
* with an IResource. Sometimes more than one target object resolves
* to the same IResource (usually the IProject, which is the default
* IResource when an IFile cannot be found). This method is called,
* by the WorkbenchReporter, so that the WorkbenchReporter can
* distinguish between the IMessages which are on the same IResource,
* but refer to different target objects. This is needed for the
* removeAllMessages(IValidator, Object) method, so that when one
* target object removes all of its messages, that it doesn't remove
* another target object's messages.
*
* This method may return null only if object is null. Otherwise, an
* id which can uniquely identify a particular object must be returned.
* The id needs to be unique only within one particular IValidator.
*
* @param object The object from which to get the name.
* @return The name of the object or null if the object is null.
*/
public String getTargetObjectName(Object object)
  {
    if (object == null)
    {
      return null;
    }
   
    //    System.out.println("get targetname for " + object);
    return object.toString();
  }
 
  /**
   * Delete the markers of the specified type from the specified resource.
   *
   * @param resource The resource to delete the markers from.
   * @param markerType The type of markers to delete from the resource.
   * @param attributeName The name of the attribute which the markers must have to be deleted.
   * @param attributeValue The value of the attribute corresponding to attributeName which the markers must have to be deleted.
   * @throws CoreException
   */
  public static void deleteMarkers(IResource resource, String markerType, final String attributeName, final Object attributeValue) throws CoreException
  {         
    final IMarker[] v400Markers = resource.findMarkers(IMarker.PROBLEM, false, IResource.DEPTH_INFINITE);
    final IMarker[] markers = resource.findMarkers(markerType, true, IResource.DEPTH_INFINITE);
    IWorkspaceRunnable op = new IWorkspaceRunnable()
     {
       public void run(IProgressMonitor progressMonitor) throws CoreException
       {   
         // this fixes defect 193406
         // here we remove markers that may have been added by the v400 code
         // hopefully the '.markers' metadata files will be removed for the V5 install
         // and this kludge will not be needed there
         for (int i = 0; i < v400Markers.length; i++)
         {
           IMarker marker = markers[i];          
           marker.delete();          
         }
   
         for (int i = 0; i < markers.length; i++)
         {
           IMarker marker = markers[i];
          
           Object value = marker.getAttribute(attributeName);
           if (value != null &&
               value.equals(attributeValue))
           {
             marker.delete();
           }
         }
       }
     };
   
    try
    {
      ResourcesPlugin.getWorkspace().run(op, null);
    }
    catch (Exception e) { }
  }
 
  /**
   * Get the validation framework severity for the given severity.
   *
   * @param severity The severity to convert to validation framework severity.
   * @return The validation framework severity for the given severity.
   */
  static public int getValidationFrameworkSeverity(int severity)
  {
    switch (severity)
    {
      case IMarker.SEVERITY_ERROR:
        return IMessage.HIGH_SEVERITY;
      case IMarker.SEVERITY_WARNING:
        return IMessage.NORMAL_SEVERITY;
      case IMarker.SEVERITY_INFO:
        return IMessage.LOW_SEVERITY;
    }
    return IMessage.LOW_SEVERITY; 
  }
}
TOP

Related Classes of org.eclipse.wst.xml.core.internal.validation.core.Helper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.