Package org.eclipse.core.internal.registry

Source Code of org.eclipse.core.internal.registry.TemporaryObjectManager

/*******************************************************************************
* Copyright (c) 2004, 2006 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.core.internal.registry;

import java.util.Map;
import org.eclipse.core.runtime.InvalidRegistryObjectException;

/**
* @since 3.1
*/
public class TemporaryObjectManager implements IObjectManager {
  private Map actualObjects; //id --> registry objects
  private RegistryObjectManager parent; //the main object manager (should be equals to extensionRegistry.getObjectManager)

  public TemporaryObjectManager(Map actualObjects, RegistryObjectManager parent) {
    this.actualObjects = actualObjects;
    this.parent = parent;
  }

  public Handle getHandle(int id, byte type) {
    switch (type) {
      case RegistryObjectManager.EXTENSION_POINT :
        return new ExtensionPointHandle(this, id);

      case RegistryObjectManager.EXTENSION :
        return new ExtensionHandle(this, id);

      case RegistryObjectManager.CONFIGURATION_ELEMENT :
        return new ConfigurationElementHandle(this, id);

      case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
      default : //avoid compiler error, type should always be known
        return new ThirdLevelConfigurationElementHandle(this, id);
    }
  }

  public Handle[] getHandles(int[] ids, byte type) {
    Handle[] results = null;
    int nbrId = ids.length;
    switch (type) {
      case RegistryObjectManager.EXTENSION_POINT :
        if (nbrId == 0)
          return ExtensionPointHandle.EMPTY_ARRAY;
        results = new ExtensionPointHandle[nbrId];
        for (int i = 0; i < nbrId; i++) {
          results[i] = new ExtensionPointHandle(this, ids[i]);
        }
        break;

      case RegistryObjectManager.EXTENSION :
        if (nbrId == 0)
          return ExtensionHandle.EMPTY_ARRAY;
        results = new ExtensionHandle[nbrId];
        for (int i = 0; i < nbrId; i++) {
          results[i] = new ExtensionHandle(this, ids[i]);
        }
        break;

      case RegistryObjectManager.CONFIGURATION_ELEMENT :
        if (nbrId == 0)
          return ConfigurationElementHandle.EMPTY_ARRAY;
        results = new ConfigurationElementHandle[nbrId];
        for (int i = 0; i < nbrId; i++) {
          results[i] = new ConfigurationElementHandle(this, ids[i]);
        }
        break;

      case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
        if (nbrId == 0)
          return ConfigurationElementHandle.EMPTY_ARRAY;
        results = new ThirdLevelConfigurationElementHandle[nbrId];
        for (int i = 0; i < nbrId; i++) {
          results[i] = new ThirdLevelConfigurationElementHandle(this, ids[i]);
        }
        break;
    }
    return results;
  }

  synchronized public Object getObject(int id, byte type) {
    Object result = null;
    try {
      result = parent.getObject(id, type);
    } catch (InvalidRegistryObjectException e) {
      if (actualObjects != null) {
        result = actualObjects.get(new Integer(id));
      }
    }
    if (result == null)
      throw new InvalidRegistryObjectException();
    return result;
  }

  synchronized public RegistryObject[] getObjects(int[] values, byte type) {
    if (values.length == 0) {
      switch (type) {
        case RegistryObjectManager.EXTENSION_POINT :
          return ExtensionPoint.EMPTY_ARRAY;
        case RegistryObjectManager.EXTENSION :
          return Extension.EMPTY_ARRAY;
        case RegistryObjectManager.CONFIGURATION_ELEMENT :
        case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
          return ConfigurationElement.EMPTY_ARRAY;
      }
    }

    RegistryObject[] results = null;
    switch (type) {
      case RegistryObjectManager.EXTENSION_POINT :
        results = new ExtensionPoint[values.length];
        break;
      case RegistryObjectManager.EXTENSION :
        results = new Extension[values.length];
        break;
      case RegistryObjectManager.CONFIGURATION_ELEMENT :
      case RegistryObjectManager.THIRDLEVEL_CONFIGURATION_ELEMENT :
        results = new ConfigurationElement[values.length];
        break;
    }
    for (int i = 0; i < values.length; i++) {
      results[i] = (RegistryObject) getObject(values[i], type);
    }
    return results;
  }

  public synchronized void close() {
    actualObjects = null;
  }
}
TOP

Related Classes of org.eclipse.core.internal.registry.TemporaryObjectManager

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.