コード例 #1
0
 /**
  * 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);
 }
コード例 #2
0
 private Collection<DataAndATGUsageInformation> convertConfigurationData(
     final Map<PidAttributeGroupUsage, Data> allConfigurationData) {
   final Collection<DataAndATGUsageInformation> dataList =
       new ArrayList<DataAndATGUsageInformation>();
   for (final Map.Entry<PidAttributeGroupUsage, Data> entry : allConfigurationData.entrySet()) {
     final PidAttributeGroupUsage attributeGroupUsagePids = entry.getKey();
     final SystemObject attributeGroup =
         _connection.getDataModel().getObject(attributeGroupUsagePids.getAttributeGroupPid());
     final SystemObject aspect =
         _connection.getDataModel().getObject(attributeGroupUsagePids.getAspectPid());
     if (attributeGroup != null
         && attributeGroup instanceof AttributeGroup
         && aspect != null
         && aspect instanceof Aspect) {
       final AttributeGroupUsage attributeGroupUsage =
           ((AttributeGroup) attributeGroup).getAttributeGroupUsage((Aspect) aspect);
       if (attributeGroupUsage != null) {
         Data data = entry.getValue();
         if (!(data instanceof KExDaVAttributeGroupData)) {
           data = new KExDaVAttributeGroupData(data, _manager);
         }
         dataList.add(
             new DataAndATGUsageInformation(
                 attributeGroupUsage,
                 ((KExDaVAttributeGroupData) data).toData(_connection.getDataModel())));
       }
     }
   }
   return dataList;
 }
コード例 #3
0
  /**
   * Anmeldung als Sender oder Quelle
   *
   * @param atg Attributgruppe
   * @param asp Aspekt
   * @param simulationVariant Simulationsvariante
   * @param senderRole Sender oder Quelle
   * @param senderObject Beliebiges Objekt das zu diesem Sender gespeichert wird. Jedes Objekt ist
   *     einer Datenidentifikation fest zugeordnet und kann nur einmal angemeldet werden.
   * @throws MissingObjectException Falls Attributgruppe oder Aspekt nicht vorhanden sind
   * @return true wenn das Objekt angemeldet wurde, sonst false.
   */
  public boolean registerSender(
      final String atg,
      final String asp,
      final short simulationVariant,
      final SenderRole senderRole,
      final KExDaVSender senderObject)
      throws MissingObjectException {
    if (atg == null) throw new IllegalArgumentException("atg ist null");
    if (asp == null) throw new IllegalArgumentException("asp ist null");
    if (senderRole == null) throw new IllegalArgumentException("senderRole ist null");
    if (senderObject == null) throw new IllegalArgumentException("senderObject ist null");

    if (_senders.containsKey(senderObject))
      throw new IllegalArgumentException("Der Sender " + senderObject + " ist bereits angemeldet.");

    final DataDescription dataDescription = makeDataDescription(atg, asp, simulationVariant);

    final InnerSender innerSender = new InnerSender(senderObject, dataDescription, senderRole);

    final SystemObject systemObject = getWrappedObject();
    if (systemObject == null) return true;

    if (!checkType(systemObject.getType(), dataDescription.getAttributeGroup())) return false;

    registerSender(innerSender, systemObject);
    return true;
  }
コード例 #4
0
  /**
   * Anmeldung als Empfänger/Senke
   *
   * @param atg Attributgruppe
   * @param asp Aspekt
   * @param simulationVariant Simulationsvariante
   * @param receiverRole (Empfänger oder Senke)
   * @param receiveOptions (Delta oder Nachgeliefert oder Normal)
   * @param receiver Objekt an das Empfangene Daten gesendet werden. Jedes Objekt ist einer
   *     Datenidentifikation fest zugeordnet und kann nur einmal angemeldet werden.
   * @throws MissingObjectException Falls Attributgruppe oder Aspekt nicht vorhanden sind
   */
  public boolean registerReceiver(
      final String atg,
      final String asp,
      final short simulationVariant,
      final ReceiverRole receiverRole,
      final ReceiveOptions receiveOptions,
      final KExDaVReceiver receiver)
      throws MissingObjectException {
    if (atg == null) throw new IllegalArgumentException("atg ist null");
    if (asp == null) throw new IllegalArgumentException("asp ist null");
    if (receiverRole == null) throw new IllegalArgumentException("receiverRole ist null");
    if (receiver == null) throw new IllegalArgumentException("receiver ist null");

    if (_receivers.containsKey(receiver))
      throw new IllegalArgumentException("Der Empfänger " + receiver + " ist bereits angemeldet.");

    final DataDescription dataDescription = makeDataDescription(atg, asp, simulationVariant);
    final InnerReceiver innerReceiver =
        new InnerReceiver(receiver, receiverRole, dataDescription, receiveOptions);

    final SystemObject systemObject = getWrappedObject();
    if (systemObject == null) return true;

    if (!checkType(systemObject.getType(), dataDescription.getAttributeGroup())) return false;

    registerReceiver(innerReceiver, systemObject);
    return true;
  }
コード例 #5
0
 /**
  * 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();
 }
コード例 #6
0
 /**
  * Liest alle Konfigurationsdaten dieses Objekts
  *
  * @return Konfigurationsdaten
  * @throws MissingObjectException Falls ein Objekt fehlt (entweder das Systemobjekt, oder die
  *     Attributgruppe oder der Aspekt)
  */
 public Map<PidAttributeGroupUsage, KExDaVAttributeGroupData> getAllConfigurationData()
     throws MissingObjectException {
   final SystemObject wrappedObject = getWrappedObjectOrThrowException();
   final Map<PidAttributeGroupUsage, KExDaVAttributeGroupData> result =
       new HashMap<PidAttributeGroupUsage, KExDaVAttributeGroupData>();
   final List<AttributeGroup> attributeGroups = wrappedObject.getType().getAttributeGroups();
   for (final AttributeGroup attributeGroup : attributeGroups) {
     final Collection<Aspect> aspects = attributeGroup.getAspects();
     for (final Aspect aspect : aspects) {
       final Data data = wrappedObject.getConfigurationData(attributeGroup, aspect);
       if (data != null) {
         result.put(
             new PidAttributeGroupUsage(attributeGroup.getPid(), aspect.getPid()),
             new KExDaVAttributeGroupData(data, _manager));
       }
     }
   }
   return result;
 }
コード例 #7
0
 /**
  * Sendet Daten an das Objekt
  *
  * @param senderObject Sender-Objekt
  * @param data Daten
  * @param dataTime Zeit des Datensatzes
  */
 public void sendData(final KExDaVSender senderObject, final Data data, final long dataTime) {
   final SystemObject systemObject = getWrappedObject();
   if (systemObject == null) return;
   try {
     final InnerSender sender = _senders.get(senderObject);
     if (sender == null) throw new IllegalStateException("Sender wurde noch nicht angemeldet");
     sender.sendData(systemObject, data, dataTime);
   } catch (SendSubscriptionNotConfirmed sendSubscriptionNotConfirmed) {
     _manager.addMessage(
         Message.newMajor("Kann derzeit nicht senden", sendSubscriptionNotConfirmed));
   }
 }
コード例 #8
0
  /**
   * 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;
  }
コード例 #9
0
  private synchronized void setWrappedObject(final SystemObject wrappedObject) {
    if (_wrappedObject == wrappedObject) return;

    _wrappedObject = wrappedObject;
    if (wrappedObject != null) {
      for (final InnerReceiver receiver : _receivers.values()) {
        if (checkType(wrappedObject.getType(), receiver.getDataDescription().getAttributeGroup())) {
          registerReceiver(receiver, wrappedObject);
        }
      }
      for (final InnerSender sender : _senders.values()) {
        if (checkType(wrappedObject.getType(), sender.getDataDescription().getAttributeGroup())) {
          registerSender(sender, wrappedObject);
        }
      }
      for (final ExistenceListener listener : _existenceListeners) {
        listener.objectCreated(this);
      }
    } else {
      for (final ExistenceListener listener : _existenceListeners) {
        listener.objectInvalidated(this);
      }
    }
  }
コード例 #10
0
 /**
  * Meldet einen Empfänger ab
  *
  * @param receiverObject Empfänger-Objekt
  */
 public void unsubscribeReceiver(final KExDaVReceiver receiverObject) {
   final InnerReceiver receiver = _receivers.remove(receiverObject);
   final SystemObject systemObject = getWrappedObject();
   if (systemObject == null) return;
   _connection.unsubscribeReceiver(receiver, systemObject, receiver.getDataDescription());
 }
コード例 #11
0
 /**
  * Meldet einen Sender ab
  *
  * @param senderObject Sender-Objekt
  */
 public void unsubscribeSender(final KExDaVSender senderObject) {
   final InnerSender sender = _senders.remove(senderObject);
   final SystemObject systemObject = getWrappedObject();
   if (systemObject == null) return;
   _connection.unsubscribeSender(sender, systemObject, sender.getDataDescription());
 }