/**
  * Bestimmt die betrachtete Version des Konfigurationsbereichs in dem das angegebene Objekt
  * enthalten ist.
  *
  * @param object Systemobjekt zu dem die Version ermittelt werden soll.
  * @return Version des Konfigurationsbereichs des angegebenen Systemobjekts
  */
 public short getVersion(final SystemObject object) {
   final ConfigurationArea configurationArea = object.getConfigurationArea();
   Short version = _configurationAreaVersions.get(configurationArea);
   if (version != null) return version.shortValue();
   // throw new IllegalStateException("Version des Konfigurationsbereichs " +
   // object.getConfigurationArea().getPidOrNameOrId() + " nicht definiert");
   // Falls in der Map ein Konfigurationsbereich nicht enthalten ist, dann wird die aktive Version
   // des Bereichs zurückgegeben.
   return configurationArea.getActiveVersion();
 }
 /**
  * Erstellt dieses Objekt
  *
  * @param configurationArea Konfigurationsbereich
  * @param pid
  * @param typePid Objekt-Typ-Pid
  * @param objectName Objekt-name falls vorhanden
  * @param allConfigurationData Konfigurationsdaten
  * @param origId
  * @param origConfigAuthority
  * @throws MissingObjectException Falls der angegebene Typ nicht existiert oder nicht vom Typ
  *     DynamicObjectType ist.
  * @throws ConfigurationChangeException Falls die Konfigurationsänderung nicht durchgeführt werden
  *     konnte
  */
 public void create(
     final ConfigurationArea configurationArea,
     final String pid,
     final String typePid,
     final String objectName,
     final Map<PidAttributeGroupUsage, Data> allConfigurationData,
     final long origId,
     final String origConfigAuthority)
     throws MissingObjectException, ConfigurationChangeException,
         MissingKExDaVAttributeGroupException {
   final SystemObject type = _connection.getDataModel().getObject(typePid);
   if (type == null) throw new MissingObjectException(type + " konnte nicht gefunden werden");
   if (!(type instanceof DynamicObjectType)) {
     throw new MissingObjectException(type + " ist kein Typ für dynamische Objekte");
   }
   final Map<PidAttributeGroupUsage, Data> map =
       new HashMap<PidAttributeGroupUsage, Data>(allConfigurationData);
   if (_connection.getDataModel().getAttributeGroup(Constants.Pids.AttributeGroupKExDaVConfigData)
       == null) {
     throw new MissingKExDaVAttributeGroupException();
   }
   if (origConfigAuthority != null) {
     map.put(
         new PidAttributeGroupUsage(
             Constants.Pids.AttributeGroupKExDaVConfigData, Constants.Pids.AspectProperties),
         createProperties(origId, origConfigAuthority));
   }
   final Collection<DataAndATGUsageInformation> dataList = convertConfigurationData(map);
   _manager.addMessage(
       Message.newInfo("Erstelle Objekt: " + (pid.length() == 0 ? '[' + origId + ']' : pid)));
   final DynamicObject dynamicObject =
       configurationArea.createDynamicObject((DynamicObjectType) type, pid, objectName, dataList);
   setWrappedObject(dynamicObject);
 }
  /**
   * Liefert das System-Objekt mit der angegebenen PID zurück.
   *
   * @param pid Die permanente ID des System-Objekts
   * @return Das gewünschte System-Objekt oder <code>null</code>, wenn es kein Objekt mit der
   *     angegebenen PID gibt.
   * @see de.bsvrz.dav.daf.main.config.DataModel
   */
  public SystemObject getObject(String pid) {
    if (pid == null || pid.equals("") || pid.equals("null")) return null;
    SystemObject object = _dataModel.getObject(pid);
    if (isValid(object)) return object;
    synchronized (this) {
      // Sans, STS, KonfigAss: Korrektur _newlyActiveObjects
      if (_newlyActiveObjects == null) {
        _newlyActiveObjects = new HashMap<String, SystemObject>();

        long startTime = System.currentTimeMillis();
        final Map<String, ConfigurationArea> areas =
            ((ConfigDataModel) _dataModel).getAllConfigurationAreas();
        for (ConfigurationArea configurationArea : areas.values()) {
          final Collection<SystemObject> newObjects = configurationArea.getNewObjects();
          for (SystemObject newObject : newObjects) {
            final String newObjectPid = newObject.getPid();
            if (newObjectPid != null && newObjectPid.length() > 0 && isValid(newObject)) {
              _newlyActiveObjects.put(newObjectPid, newObject);
            }
          }

          _debug.fine(
              "Zwischenspeicherung von neuerdings aktiven Objekten dauerte in Millisekunden",
              System.currentTimeMillis() - startTime);
        }
      }
      return _newlyActiveObjects.get(pid);
    }

    //    final Set<ConfigurationArea> configurationAreas = _configurationAreaVersions.keySet();
    //    for(ConfigurationArea configurationArea : configurationAreas) {
    //      final Collection<SystemObject> newObjects = configurationArea.getNewObjects();
    //      for(SystemObject systemObject : newObjects) {
    //        if(systemObject.getPid().equals(pid) && isValid(systemObject)) return systemObject;
    //      }
    //    }
    //    return null;
  }