Commit ff38933b authored by Christian Kniss's avatar Christian Kniss

Initialisierung GitLab-Repo fuer Sourcecode der SWE...

Initialisierung GitLab-Repo fuer Sourcecode der SWE de.bsvrz.sys.funclib.bitctrl.dua-FREI_V1.9.0_D2017-02-28
parents
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Peuker
Created-By: Apache Maven 3.2.3
Build-Jdk: 1.8.0_121
/*
* Allgemeine Funktionen für das Segment DuA
* Copyright (C) 2007-2015 BitCtrl Systems GmbH
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Contact Information:
* BitCtrl Systems GmbH
* Weißenfelser Straße 67
* 04229 Leipzig
* Phone: +49 341-490670
* mailto: info@bitctrl.de
*/
package de.bsvrz.sys.funclib.bitctrl.dua;
import de.bsvrz.dav.daf.main.Data;
/**
* Messwert <b>für ein Attribut</b> mit Plausibilisierungsinformationen.
*
* @author BitCtrl Systems GmbH, Thierfelder
*/
public abstract class AbstraktMesswert extends MesswertMarkierung implements Comparable<AbstraktMesswert> {
/**
* Der Attributname dieses Messwertes.
*/
private final String attName;
/**
* der Messwert als <code>double</code>.
*/
private double wertSkaliert = -4;
/**
* der Messwert als <code>long</code>.
*/
private long wertUnskaliert = -4;
/**
* der Guete-Index.
*/
private GanzZahl guete = GanzZahl.getGueteIndex();
/**
* das Guete-Verfahren.
*/
private int verfahren;
/**
* Standardkonstruktor.
*
* @param attName
* der Attributname dieses Messwertes
* @param datum
* das Datum aus dem der Messwert ausgelesen werden soll
*/
public AbstraktMesswert(final String attName, final Data datum) {
if (attName == null) {
throw new NullPointerException("Der Attributname ist <<null>>");
}
if (datum == null) {
throw new NullPointerException("Das Datum ist <<null>>");
}
this.attName = attName;
if (!isSkaliert()) {
wertUnskaliert = datum.getItem(attName).getUnscaledValue("Wert").longValue();
}
setNichtErfasst(datum.getItem(attName).getItem("Status").getItem("Erfassung").getUnscaledValue("NichtErfasst")
.intValue() == DUAKonstanten.JA);
setFormalMax(datum.getItem(attName).getItem("Status").getItem("PlFormal").getUnscaledValue("WertMax")
.intValue() == DUAKonstanten.JA);
setFormalMin(datum.getItem(attName).getItem("Status").getItem("PlFormal").getUnscaledValue("WertMin")
.intValue() == DUAKonstanten.JA);
setLogischMax(datum.getItem(attName).getItem("Status").getItem("PlLogisch").getUnscaledValue("WertMaxLogisch")
.intValue() == DUAKonstanten.JA);
setLogischMin(datum.getItem(attName).getItem("Status").getItem("PlLogisch").getUnscaledValue("WertMinLogisch")
.intValue() == DUAKonstanten.JA);
setImplausibel(datum.getItem(attName).getItem("Status").getItem("MessWertErsetzung")
.getUnscaledValue("Implausibel").intValue() == DUAKonstanten.JA);
setInterpoliert(datum.getItem(attName).getItem("Status").getItem("MessWertErsetzung")
.getUnscaledValue("Interpoliert").intValue() == DUAKonstanten.JA);
guete.setWert(datum.getItem(attName).getItem("Güte").getUnscaledValue("Index").longValue());
verfahren = datum.getItem(attName).getItem("Güte").getUnscaledValue("Verfahren").intValue();
}
/**
* Standardkonstruktor.
*
* @param attName
* der Attributname dieses Messwertes
*/
public AbstraktMesswert(final String attName) {
this.attName = attName;
}
/**
* Erfragt, ob es sich um einen Wert handelt, der skaliert gelesen bzw.
* geschrieben werden soll
*
* @return ob es sich um einen Wert handelt, der skaliert gelesen bzw.
* geschrieben werden soll
*/
public abstract boolean isSkaliert();
/**
* Erfragt die Guete dieses Attributwertes.
*
* @return die Guete dieses Attributwertes
*/
public final GanzZahl getGueteIndex() {
return guete;
}
/**
* Setzte die Guete dieses Attributwertes.
*
* @param guete1
* die Guete dieses Attributwertes
*/
public final void setGueteIndex(final GanzZahl guete1) {
guete = guete1;
}
/**
* Erfragt das Gueteverfahren.
*
* @return das Gueteverfahren
*/
public final int getVerfahren() {
return verfahren;
}
/**
* Setzt das Gueteverfahren.
*
* @param verfahren
* das Gueteverfahren
*/
public final void setVerfahren(final int verfahren) {
this.verfahren = verfahren;
}
/**
* Setzt den skalierten Attributwert.
*
* @param wert
* der skalierte Attributwert
*/
public final void setWertSkaliert(final double wert) {
wertSkaliert = wert;
}
/**
* Erfragt den skalierten Attributwert.
*
* @return den skalierten Attributwert
*/
public final double getWertSkaliert() {
return wertSkaliert;
}
/**
* Setzt den unskalierte Attributwert.
*
* @param wert
* der unskalierte Attributwert
*/
public final void setWertUnskaliert(final long wert) {
wertUnskaliert = wert;
}
/**
* Erfragt den unskalierten Attributwert.
*
* @return der unskalierte Attributwert
*/
public final long getWertUnskaliert() {
return wertUnskaliert;
}
/**
* Erfragt, ob dieser Messwert entweder <code>fehlerhaft</code>,
* <code>nicht ermittelbar/fehlerhaft</code> oder <code>implausibel</code>
* ist.
*
* @return ob dieser Messwert entweder <code>fehlerhaft</code>,
* <code>nicht ermittelbar/fehlerhaft</code> oder
* <code>implausibel</code> ist
*/
public final boolean isFehlerhaftBzwImplausibel() {
return (wertUnskaliert == DUAKonstanten.FEHLERHAFT)
|| (wertUnskaliert == DUAKonstanten.NICHT_ERMITTELBAR_BZW_FEHLERHAFT) || isImplausibel();
}
@Override
public int compareTo(final AbstraktMesswert that) {
return isSkaliert() ? new Double(getWertSkaliert()).compareTo(that.getWertSkaliert())
: new Long(getWertUnskaliert()).compareTo(that.getWertUnskaliert());
}
/**
* Kopiert den Inhalt dieses Objektes in das übergebene Datum.
*
* @param datum
* ein veränderbares Datum
*/
public final void kopiereInhaltNach(final Data datum) {
if (isSkaliert()) {
datum.getItem(attName).getScaledValue("Wert").set(wertSkaliert);
} else {
if (DUAUtensilien.isWertInWerteBereich(datum.getItem(attName).getItem("Wert"), wertUnskaliert)) {
datum.getItem(attName).getUnscaledValue("Wert").set(wertUnskaliert);
} else {
datum.getItem(attName).getUnscaledValue("Wert").set(DUAKonstanten.NICHT_ERMITTELBAR_BZW_FEHLERHAFT);
}
}
datum.getItem(attName).getItem("Status").getItem("Erfassung").getUnscaledValue("NichtErfasst")
.set(isNichtErfasst() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlFormal").getUnscaledValue("WertMax")
.set(isFormalMax() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlFormal").getUnscaledValue("WertMin")
.set(isFormalMin() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlLogisch").getUnscaledValue("WertMaxLogisch")
.set(isLogischMax() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlLogisch").getUnscaledValue("WertMinLogisch")
.set(isLogischMin() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("MessWertErsetzung").getUnscaledValue("Implausibel")
.set(isImplausibel() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("MessWertErsetzung").getUnscaledValue("Interpoliert")
.set(isInterpoliert() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Güte").getUnscaledValue("Index").set(guete.getWert());
datum.getItem(attName).getItem("Güte").getUnscaledValue("Verfahren").set(verfahren);
}
/**
* Kopiert den Inhalt dieses Objektes in das übergebene Datum.
*
* @param datum
* ein veränderbares Datum
*/
public final void kopiereInhaltNachModifiziereIndex(final Data datum) {
if (isSkaliert()) {
datum.getItem(attName).getScaledValue("Wert").set(wertSkaliert);
} else {
if (DUAUtensilien.isWertInWerteBereich(datum.getItem(attName).getItem("Wert"), wertUnskaliert)) {
datum.getItem(attName).getUnscaledValue("Wert").set(wertUnskaliert);
} else {
datum.getItem(attName).getUnscaledValue("Wert").set(DUAKonstanten.NICHT_ERMITTELBAR_BZW_FEHLERHAFT);
}
}
datum.getItem(attName).getItem("Status").getItem("Erfassung").getUnscaledValue("NichtErfasst")
.set(isNichtErfasst() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlFormal").getUnscaledValue("WertMax")
.set(isFormalMax() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlFormal").getUnscaledValue("WertMin")
.set(isFormalMin() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlLogisch").getUnscaledValue("WertMaxLogisch")
.set(isLogischMax() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("PlLogisch").getUnscaledValue("WertMinLogisch")
.set(isLogischMin() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("MessWertErsetzung").getUnscaledValue("Implausibel")
.set(isImplausibel() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
datum.getItem(attName).getItem("Status").getItem("MessWertErsetzung").getUnscaledValue("Interpoliert")
.set(isInterpoliert() ? DUAKonstanten.JA : DUAKonstanten.NEIN);
if (datum.getItem(attName).getUnscaledValue("Wert").longValue() < 0) {
datum.getItem(attName).getItem("Güte").getUnscaledValue("Index").set(0);
} else {
datum.getItem(attName).getItem("Güte").getUnscaledValue("Index").set(guete.getWert());
}
datum.getItem(attName).getItem("Güte").getUnscaledValue("Verfahren").set(verfahren);
}
/* FIXME equals und hashCode verletzt den API-Kontrakt und sollte
* hier entfernt bzw. überdacht werden. */
@Override
public boolean equals(final Object obj) {
boolean gleich = false;
if (obj instanceof AbstraktMesswert) {
final AbstraktMesswert that = (AbstraktMesswert) obj;
gleich = super.equals(obj) && (getWertUnskaliert() == that.getWertUnskaliert()) && guete.equals(that.guete);
}
return gleich;
}
@Override
public String toString() {
return (isSkaliert() ? getWertSkaliert() : getWertUnskaliert()) + " " + super.toString() + " "
+ guete.getSkaliertenWert() + " (" + verfahren + ")";
}
/**
* Erfragt den Namen dieses Messwertes.
*
* @return der Name dieses Messwertes
*/
public final String getName() {
return attName;
}
}
/*
* Allgemeine Funktionen für das Segment DuA
* Copyright (C) 2007-2015 BitCtrl Systems GmbH
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Contact Information:
* BitCtrl Systems GmbH
* Weißenfelser Straße 67
* 04229 Leipzig
* Phone: +49 341-490670
* mailto: info@bitctrl.de
*/
package de.bsvrz.sys.funclib.bitctrl.dua;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.bitctrl.Constants;
import de.bsvrz.sys.funclib.debug.Debug;
/**
* Allgemeine Klasse für die Beschreibung von Objekten, die <b>nur</b> Daten
* halten, auf welche über Getter-Methoden (<b>ohne Argumente</b>) zugegriffen
* werden kann. (z.B. Attributgruppeninhalte)
*
* @author BitCtrl Systems GmbH, Thierfelder
*
* @deprecated die Klasse sollte nicht mehr verwendet werden, weil der
* API-Kontrakt für die Implementierung von equals und hashCode
* verletzt wird und auch nicht sinnvoll implementiert werden kann.
* Für die hashCode-Methode wird hier die hashCode-Methode der
* Superklasse aufgerufen und eine entsprechende Fehlermeldung
* ausgegeben. Die Verwendung der Klasse in Set und Maps als Key
* führt aber zu undefiniertem Verhalten.
*/
@Deprecated
public class AllgemeinerDatenContainer {
private static final Debug LOGGER = Debug.getLogger();
/**
* Vergleicht dieses Objekt mit dem übergebenen Objekt. Die beiden Objekte
* sind dann gleich, wenn sie vom selben Typ sind und wenn alle
* Getter-Methoden die gleichen Werte zurückliefern.
*
* FIXME equals und hashCode verletzt den API-Kontrakt und sollte hier
* entfernt bzw. überdacht werden.
*
* @param that
* ein anderes Objekt
* @return ob die beiden Objekte inhaltlich gleich sind
*/
@Override
public boolean equals(final Object that) {
if (that != null) {
if (that.getClass().equals(this.getClass())) {
for (final Method method : this.getClass().getMethods()) {
if (method.getName().startsWith("get")) {
final Object thisInhalt;
final Object thatInhalt;
try {
thisInhalt = method.invoke(this, new Object[0]);
thatInhalt = method.invoke(that, new Object[0]);
if (!thisInhalt.equals(thatInhalt)) {
return false;
}
} catch (final IllegalAccessException e) {
LOGGER.error(Constants.EMPTY_STRING, e);
e.printStackTrace();
return false;
} catch (final InvocationTargetException e) {
LOGGER.error(Constants.EMPTY_STRING, e);
e.printStackTrace();
return false;
}
}
}
return true;
}
}
return false;
}
@Override
public int hashCode() {
LOGGER.error("Das Objekt wird ohne korrekte HashCode-Equals-Implementierung verwendet");
return super.hashCode();
}
/**
* Erfragt eine Zeichenkette, welche die aktuellen Werte aller über
* Getter-Methoden zugänglichen Member-Variable enthält.
*
* @return eine Inhaltsangabe dieses Objektes
*/
@Override
public String toString() {
String s = Constants.EMPTY_STRING;
for (final Method methode : this.getClass().getMethods()) {
if (methode.getName().startsWith("get") && methode.getDeclaringClass().equals(this.getClass())) {
s += methode.getName().substring(3) + " = ";
try {
s += methode.invoke(this, new Object[0]);
} catch (final IllegalArgumentException e) {
e.printStackTrace();
s += "unbekannt";
} catch (final IllegalAccessException e) {
e.printStackTrace();
s += "unbekannt";
} catch (final InvocationTargetException e) {
e.printStackTrace();
s += "unbekannt";
}
s += "\n";
} else if (methode.getName().startsWith("is") && methode.getDeclaringClass().equals(this.getClass())) {
s += methode.getName().substring(2) + " = ";
try {
s += methode.invoke(this, new Object[0]);
} catch (final IllegalArgumentException e) {
e.printStackTrace();
s += "unbekannt";
} catch (final IllegalAccessException e) {
e.printStackTrace();
s += "unbekannt";
} catch (final InvocationTargetException e) {
e.printStackTrace();
s += "unbekannt";
}
s += "\n";
}
}
return s;
}
}
/*
* Allgemeine Funktionen für das Segment DuA
* Copyright (C) 2007-2015 BitCtrl Systems GmbH
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Contact Information:
* BitCtrl Systems GmbH
* Weißenfelser Straße 67
* 04229 Leipzig
* Phone: +49 341-490670
* mailto: info@bitctrl.de
*/
package de.bsvrz.sys.funclib.bitctrl.dua;
/**
* Ausnahme, die geworfen wird, wenn ein Modul innerhalb einer SWE nicht
* initialisiert werden konnte. Also, wenn z.B. keine Anmeldung zum Empfangen
* oder Versenden von Daten durchgeführt werden konnte.
*
* @author BitCtrl Systems GmbH, Thierfelder
*/
public final class DUAInitialisierungsException extends Exception {
/**
* die Fehlermeldung.
*/
private final String meldung;
/**
* Standardkonstruktor Ausnahmen mit Fehlermeldungen.
*
* @param meldung
* die Fehlermeldung