ExtendedVisitors.java :  » Scripting » java2script » net » sf » j2s » core » compiler » Java Open Source

Java Open Source » Scripting » java2script 
java2script » net » sf » j2s » core » compiler » ExtendedVisitors.java
/*******************************************************************************
 * Copyright (c) 2007 java2script.org 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:
 *     Zhou Renjian - initial API and implementation
 *******************************************************************************/
package net.sf.j2s.core.compiler;

import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;

/**
 * @author zhou renjian
 *
 * 2006-10-26
 */
public class ExtendedVisitors {

  public static Map visitors = new HashMap();

  private static boolean isExtensionPointsChecked = false;

  private static void checkExtensionPoints() {
    if (isExtensionPointsChecked) {
      return;
    }
    isExtensionPointsChecked = true;
    IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
    IExtensionPoint extensionPoint = extensionRegistry
        .getExtensionPoint("net.sf.j2s.core.extendedASTScriptVisitor"); //$NON-NLS-1$
    if (extensionPoint == null) {
      return;
    }
    IExtension[] extensions = extensionPoint.getExtensions();
    // For each extension ...
    for (int i = 0; i < extensions.length; i++) {
      IExtension extension = extensions[i];
      IConfigurationElement[] elements = extension
          .getConfigurationElements();
      // For each member of the extension ...
      for (int j = 0; j < elements.length; j++) {
        IConfigurationElement element = elements[j];
        if ("extendedASTScriptVisitor".equals(element.getName())) { //$NON-NLS-1$
          String className = element.getAttribute("class"); //$NON-NLS-1$
          String id = element.getAttribute("id"); //$NON-NLS-1$
          if (className != null && className.trim().length() != 0
              && id != null && id.trim().length() != 0) {
            try {
              Object callback = element
                  .createExecutableExtension("class");
              if (callback instanceof IExtendedVisitor) {
                visitors.put(id.trim(), callback);
              }
            } catch (CoreException e) {
              e.printStackTrace();
            }
          }
        }
      }
    }
  }

  public static void register(String visitorID, IExtendedVisitor visitor) {
    if (visitorID != null && visitorID.trim().length() != 0
        && visitor != null) {
      visitors.put(visitorID, visitor);
    }
  }

  public static IExtendedVisitor deregister(String visitorID) {
    if (visitorID != null && visitorID.trim().length() != 0) {
      return (IExtendedVisitor) visitors.remove(visitorID);
    }
    return null;
  }

  public static IExtendedVisitor[] getExistedVisitors() {
    checkExtensionPoints();
    return (IExtendedVisitor[]) visitors.values().toArray(new IExtendedVisitor[0]);
  }
  
  public static IExtendedVisitor getExistedVisitor(String id) {
    checkExtensionPoints();
    return (IExtendedVisitor) visitors.get(id);
  }
  
}
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.