/** * 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); }
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; }
/** * 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; }
/** * 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; }
/** * 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(); }
/** * 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; }
/** * 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)); } }
/** * 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; }
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); } } }
/** * 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()); }
/** * 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()); }