/** * Gibt <tt>true</tt> zurück, wenn das Objekt mit diesem KExDaV von einem anderen * Datenverteilersystem kopiert wurde, d.h. wenn es also "im Besitz" dieses KExDaVs ist und damit * z.B. auch gelöscht werden darf. * * @return <tt>true</tt>, wenn das Objekt mit diesem KExDaV von einem anderen Datenverteilersystem * kopiert wurde, sonst <tt>false</tt> */ public boolean isCopy() throws MissingKExDaVAttributeGroupException { final ExchangeProperties exchangeProperties = getExchangeProperties(); return exchangeProperties != null && (_manager.getKExDaVObject() != null && _manager .getKExDaVObject() .getPidOrId() .equals(exchangeProperties.getKExDaVObject())); }
/** * 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 Data createProperties(final long origId, final String origConfigAuthority) throws MissingObjectException { KExDaVAttributeGroupData data = new KExDaVAttributeGroupData( _connection, Constants.Pids.AttributeGroupKExDaVConfigData, _manager); data.getUnscaledValue("originalId").set(origId); data.getTextValue("konfigurationsVerantwortlicher").setText(origConfigAuthority); data.getTextValue("kexdavObjekt").setText(_manager.getKExDaVObject().getPidOrId()); return data; }
/** * 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)); } }
private void registerSender(final InnerSender innerSender, final SystemObject systemObject) { try { if (innerSender.getSenderRole() != SenderRole.source()) { // Quellen werden verzögert beim ersten Datensatz angemeldet _connection.subscribeSender( innerSender, systemObject, innerSender.getDataDescription(), innerSender.getSenderRole()); } } catch (OneSubscriptionPerSendData oneSubscriptionPerSendData) { _manager.addMessage( Message.newMajor("Kann nicht als Sender anmelden", oneSubscriptionPerSendData)); } }
/** * Löscht dieses Objekt * * @param force Soll das Objekt auch gelöscht werden, wenn es nicht von KExDaV kopiert wurde? * @return true wenn das Objekt nicht mehr existiert, sonst false * @throws ConfigurationChangeException Falls das Ändern der Konfiguration fehlschlägt (z.B. keine * Berechtigung) */ public boolean invalidate(final boolean force) throws ConfigurationChangeException, MissingKExDaVAttributeGroupException { final SystemObject wrappedObject = getWrappedObject(); if (wrappedObject == null || !wrappedObject.isValid()) { return true; // Objekt existiert nicht mehr, es braucht nicht nochmal gelöscht zu werden. // Daher ist auch eine Warnung unnötig. } if (wrappedObject instanceof ConfigurationObject) { throw new IllegalArgumentException("Versuch, ein Konfigurationsobjekt zu löschen."); } if (!force && !isCopy()) return false; _manager.addMessage(Message.newInfo("Lösche Objekt: " + _objectSpecification)); wrappedObject.invalidate(); setWrappedObject(null); return true; }