Commit c85da611 authored by Christian Kniss's avatar Christian Kniss

Initialisierung GitLab-Repo fuer Sourcecode der SWE de.inovat.dua.aggraxl-FREI_V1.0.0_D2012-10-24

parents
This diff is collapsed.
This diff is collapsed.
/*
* Copyright (c) 2010-2011 by inovat, innovative systeme - verkehr - tunnel - technik, Dipl.-Ing. H. C. Kniss
*
* This file is part of de.inovat.dua.aggraxl.Auftrag
*
* de.inovat.dua.aggraxl.Auftrag is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* de.inovat.dua.aggraxl.Auftrag 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 General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with de.inovat.dua.aggraxl.Auftrag; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Contact Information:
* inovat, Dipl.-Ing. H. C. Kniss
* Koelner Strasse 30
* D-50859 Koeln
* +49 (0)2234 4301 800
* info@invat.de
* www.inovat.de
*/
package de.inovat.dua.aggraxl;
//~ JDK IMPORTE ===============================================================
import java.text.SimpleDateFormat;
import java.util.Date;
//~ KLASSEN ===================================================================
/**
* Enthält alle Informationen für einen Aggregationsauftrag.
*
* @author inovat, innovative systeme - verkehr - tunnel - technik
* @author Dipl.-Ing. Hans Christian Kniß (HCK)
* @version $Revision: 532 $ / $Date: 2010-12-17 09:49:09 +0100 (Fr, 17 Dez 2010) $ / ($Author: HCK $)
*/
public class Auftrag {
/** IntervallBeginn */
private long _intervallBeginn;
/** IntervallEnde: Intervallbeginn + Intervalllänge (ausschließlich!, also der nächste Intervallbeginn */
private long _intervallEnde;
/** Legt fest, ob Auftrag genau einmal OHNE weitere Folgeaufträge abgewickelt werden soll. */
private boolean _isEinmalAuftrag;
/** VewAXL - Verwaltungsobjekt, welches den Auftrag ausführen soll */
private VewAXL _vewAXL;
/** Zeitpunkt der geplanten Ausführung für diesen Auftrag in Millisekunden seit 1.1.1970 */
private long _ausfuehrungsZeitPunkt = 0;
/** Datumsformatierung für Ausgabe toString() */
SimpleDateFormat _datumsFormatierer = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss,SSS");
//~ KONSTRUKTOREN (und vom Konstruktor verwendete Methoden) ==============
/**
* Konstruktor, um einen Folgeauftrag auf Basis eines bestehenden Auftrags zu berechnen
*
* @param auftrag Aktueller Auftrag, für den der Folgeauftrag bestimmt werden soll
*/
public Auftrag(Auftrag auftrag) {
long intervallDauer = auftrag.getIntervallEnde() - auftrag.getIntervallBeginn();
long minimaleWarteZeit = auftrag.getAusfuehrungsZeitPunkt() - auftrag.getIntervallEnde();
this._intervallBeginn = auftrag.getIntervallBeginn() + intervallDauer;
this._intervallEnde = auftrag.getIntervallEnde() + intervallDauer;
this._vewAXL = auftrag.getVewAXL();
this._ausfuehrungsZeitPunkt = this._intervallEnde + minimaleWarteZeit;
this._isEinmalAuftrag = auftrag.isEinmalAuftrag();
}
/**
* Konstruktor, um den initialen Erstauftrag für ein Verwaltungsobjekt und das erste zu berechnende Intervall
* anzulegen
*
* @param ausfuehrungsZeitpunkt Zeitpunkt, zu dem Auftrag frühestens ausgeführt werden soll.
* @param intervallBeginn Intervallbeginn (EINSCHLIESSLICH!!) in Millisekunden seit 1.1. 1970
* @param intervallEnde Intervallende (AZSSCHLIESSLICH!!) in Millisekunden seit 1.1. 1970
* @param vewAXL Verwaltungsobjekt, welches den Auftrag letztendlich ausführen soll
* @param isEinmalAuftrag <code>true</code>, wenn es sich um einen einmalig auszuführenden Auftrag OHNE
* Folgeauftrag handelt, sonst <code>false</code>.
*/
public Auftrag(long ausfuehrungsZeitpunkt, long intervallBeginn, long intervallEnde, VewAXL vewAXL, boolean isEinmalAuftrag) {
_ausfuehrungsZeitPunkt = ausfuehrungsZeitpunkt;
_intervallBeginn = intervallBeginn;
_intervallEnde = intervallEnde;
_vewAXL = vewAXL;
_isEinmalAuftrag = isEinmalAuftrag;
}
//~ METHODEN ==============================================================
/**
* Führt den Auftrag aus, indem am zugeordneten Verwaltungsobjekt die Methode {@link
* de.inovat.dua.aggraxl.VewAXL#ausfuehren(Auftrag)} aufgerufen wir.
*
* @return Meldung mit dem Ergebnis der Ausführung des Auftrags.
*/
public String ausfuehren() {
return _vewAXL.ausfuehren(this);
}
//~ GET METHODEN ==========================================================
/**
* Liefert den Zeitpunkt der geplanten Ausführung für diesen Auftrag in Millisekunden seit 1.1.1970
*
* @return Zeitpunkt der geplanten Ausführung für diesen Auftrag in Millisekunden seit 1.1.1970
*/
public long getAusfuehrungsZeitPunkt() {
return _ausfuehrungsZeitPunkt;
}
/**
* Liefert den Zeitpunkt des Intervallbeginns (EINSCHLIESSLICH!!) in Millisekunden seit 1.1.1970
*
* @return Zeitpunkt des Intervallbeginns (EINSCHLIESSLICH!!) in Millisekunden seit 1.1.1970
*/
public long getIntervallBeginn() {
return _intervallBeginn;
}
/**
* Liefert den Zeitpunkt des Intervallendes (AUSSCHLIESSLICH!!) in Millisekunden seit 1.1.1970
*
* @return Zeitpunkt des Intervallendes (AUSSCHLIESSLICH!!) in Millisekunden seit 1.1.1970
*/
public long getIntervallEnde() {
return _intervallEnde;
}
/**
* Liefert das Verwaltungsobjekt, welches den Auftrag ausführen soll.
*
* @return Verwaltungsobjekt, welches den Auftrag ausführen soll.
*/
public VewAXL getVewAXL() {
return _vewAXL;
}
/**
* Test, ob es sich um einen Einmalauftrag oder um einen Auftrag mit zyklischer Wiederholung handelt.
*
* @return <code>true</code>, wenn es sich um einen einmalig auszuführenden Auftrag OHNE Folgeauftrag handelt, sonst
* <code>false</code>.
*/
public boolean isEinmalAuftrag() {
return _isEinmalAuftrag;
}
//~ METHODEN ==============================================================
@Override
/**
* Gibt die Textrepräsentation für einen Auftrag aus.
*/
public String toString() {
String ausfuehrung = "DauerAuftrag ";
if (_isEinmalAuftrag) {
ausfuehrung = "EinmalAuftrag";
}
return String.format("Auftrag (%s) %s: %s - %s fuer %s", ausfuehrung, _datumsFormatierer.format(new Date(_ausfuehrungsZeitPunkt)), _datumsFormatierer.format(new Date(_intervallBeginn)), _datumsFormatierer.format(new Date(_intervallEnde)), _vewAXL.getPid());
}
}
//~Formatiert mit 'inovat Kodierkonvention' am 08.12.10
/*
* Copyright (c) 2010-2011 by inovat, innovative systeme - verkehr - tunnel - technik, Dipl.-Ing. H. C. Kniss
*
* This file is part of de.inovat.dua.aggraxl.AuftragsListe
*
* de.inovat.dua.aggraxl.AuftragsListe is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* de.inovat.dua.aggraxl.AuftragsListe 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 General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with de.inovat.dua.aggraxl.AuftragsListe; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Contact Information:
* inovat, Dipl.-Ing. H. C. Kniss
* Koelner Strasse 30
* D-50859 Koeln
* +49 (0)2234 4301 800
* info@invat.de
* www.inovat.de
*/
package de.inovat.dua.aggraxl;
//~ JDK IMPORTE ===============================================================
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
//~ KLASSEN ===================================================================
/**
* Singletonklasse, welche die Auftragsliste fr Aggegationsauftrge verwaltet.
* <p/>
* Die Auftragsliste ermglicht das Hinzufgen von Auftrgen ({@link Auftrag} sowie die Entnahme des aktuell
* auszufhrenden Auftrags. Die Zugriffe auf die Auftragsliste ist intern syncronisiert.
*
* @author inovat, innovative systeme - verkehr - tunnel - technik
* @author Dipl.-Ing. Hans Christian Kni (HCK)
* @version $Revision: 532 $ / $Date: 2010-12-17 09:49:09 +0100 (Fr, 17 Dez 2010) $ / ($Author: HCK $)
*/
public class AuftragsListe {
private static AuftragsListe dieEinzigeInstanz = new AuftragsListe();
private static final List<Auftrag> _listeAuftraege = new ArrayList<Auftrag>();
//~ KONSTRUKTOREN (und vom Konstruktor verwendete Methoden) ==============
/** Privater Konstruktor. */
private AuftragsListe() {}
//~ GET METHODEN ==========================================================
/**
* Liefert die Instanz des Singletons.
*
* @return Instanz des Singletons
*/
public static AuftragsListe getInstanz() {
return dieEinzigeInstanz;
}
//~ METHODEN ==============================================================
/**
* Fgt einen neuen Auftrag zur Liste der Auftrge hinzu. Die Liste wird intern so sortiert, dass die Methode {@link
* #holeNaechstenAuftrag()} immer den zum aktuellen Zeitpunkt nchsten auszufhrenden Auftrag zurckliefert.
*
* @param auftrag Neuer Auftrag, der in die Liste der Auftrge eingetragen werden soll.
*/
public void addAuftrag(Auftrag auftrag) {
synchronized (_listeAuftraege) {
_listeAuftraege.add(auftrag);
Collections.sort(_listeAuftraege, new Comparator<Auftrag>() {
@Override
public int compare(Auftrag auftrag1, Auftrag auftrag2) {
// Zeitliche Sortierung der Auftrge nach Ausfhrungszeitpunkt und Auftragsart
if (auftrag1.getAusfuehrungsZeitPunkt() < auftrag2.getAusfuehrungsZeitPunkt()) {
return -1;
}
if (auftrag1.getAusfuehrungsZeitPunkt() > auftrag2.getAusfuehrungsZeitPunkt()) {
return 1;
}
return 0;
}
});
}
}
/**
* Gibt zurck, ob noch Auftrge (aktuell oder zuknftig) anstehen.
*
* @return <code>true</code>, wenn noch Auftrge (aktuell oder zuknftig) anstehen, andernfalls <code>false</code>.
*/
public boolean hatNochAuftraege() {
synchronized (_listeAuftraege) {
return _listeAuftraege.size() != 0;
}
}
/**
* Liefert eine Kopie der Auftragsliste.
*
* @return Kopie der Auftragsliste.
*/
public List<Auftrag> holeKopieAuftragsListe() {
List<Auftrag> listeKopieAuftraege = new ArrayList<Auftrag>();
synchronized (_listeAuftraege) {
for (Auftrag auftrag : _listeAuftraege) {
listeKopieAuftraege.add(auftrag);
}
}
return listeKopieAuftraege;
}
/**
* Liefert den, bezogen auf den aktuellen Zeitpunkt, nchsten auszufhrenden Auftrag zurck.
*
* @return Nchster auszufhrender Auftrag oder <code>null</code>, wenn kein Auftrag aktuell auszufhren ist. Der
* zurckgegebene Auftrag wird entfernt und kann nicht noch einmal abgerufen werden.
*/
public Auftrag holeNaechstenAuftrag() {
Auftrag naechsterAuftrag = null;
synchronized (_listeAuftraege) {
if ((_listeAuftraege.size() > 0) && (_listeAuftraege.get(0).getAusfuehrungsZeitPunkt() < System.currentTimeMillis())) {
naechsterAuftrag = _listeAuftraege.get(0);
_listeAuftraege.remove(0);
}
}
return naechsterAuftrag;
}
}
//~Formatiert mit 'inovat Kodierkonvention' am 08.12.10
/*
* Copyright (c) 2010-2011 by inovat, innovative systeme - verkehr - tunnel - technik, Dipl.-Ing. H. C. Kniss
*
* This file is part of de.inovat.dua.aggraxl.Parameter
*
* de.inovat.dua.aggraxl.Parameter is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* de.inovat.dua.aggraxl.Parameter 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 General Public License for more details.
* <p>
* You should have received a copy of the GNU General Public License
* along with de.inovat.dua.aggraxl.Parameter; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Contact Information:
* inovat, Dipl.-Ing. H. C. Kniss
* Koelner Strasse 30
* D-50859 Koeln
* +49 (0)2234 4301 800
* info@invat.de
* www.inovat.de
*/
package de.inovat.dua.aggraxl;
//~ NICHT JDK IMPORTE =========================================================
import de.bsvrz.sys.funclib.debug.Debug;
//~ KLASSEN ===================================================================
/**
* Singletonklasse zur Verwaltung der Parameter, die fr die Aggregation bentigt werden.
*
* @author inovat, innovative systeme - verkehr - tunnel - technik
* @author Dipl.-Ing. Hans Christian Kni (HCK)
* @version $Revision: 532 $ / $Date: 2010-12-17 09:49:09 +0100 (Fr, 17 Dez 2010) $ / ($Author: HCK $)
*/
public class Parameter {
/** DebugLogger fr Debug-Ausgaben. */
private static final Debug debug = Debug.getLogger();
private static Parameter dieEinzigeInstanz = new Parameter();
//~ FELDER ================================================================
private long[] _grenzenDoppelAchsen = { 4000, 8000, 12000, 16000, 18000, 19000, 20000, 22000 };
private long[] _grenzenDreifachAchsen = { 3000, 6000, 9000, 12000, 15000, 18000, 21000, 24000, 27000, 30000 };
private long[] _grenzenEinzelAchsen = { 2000, 4000, 6000, 8000, 10000, 11005, 12000, 13000, 14000, 15000 };
private long[] _grenzenFzKlasse3 = { 3500, 7500, 12000, 14000, 20000, 26000, 32000, 38000 };
private long[] _grenzenFzKlasse5 = { 7500, 14000, 20000, 26000, 32000 };
private long[] _grenzenFzKlasse8 = { 7500, 12000, 14000, 20000, 26000, 32000, 38000, 40000, 44000, 50000 };
private long[] _grenzenFzKlasse9 = { 7500, 12000, 14000, 20000, 26000, 32000, 38000, 40000, 44000, 50000 };
//~ KONSTRUKTOREN (und vom Konstruktor verwendete Methoden) ==============
private Parameter() {
// Hier die Konstruktion der Instanz durchfhren
}
//~ GET METHODEN ==========================================================
public static Parameter getInstanz() {
return dieEinzigeInstanz;
}
//~ METHODEN ==============================================================
public String ausgabe(long[] parameter) {
StringBuffer sb = new StringBuffer();
for (long wert : parameter) {
sb.append(wert);
sb.append(":");
}
// letzten : wieder entfernen
sb.replace(sb.length() - 1, sb.length(), "");
return sb.toString();
}
//~ GET METHODEN ==========================================================
public long[] getGrenzenDoppelAchsen() {
return _grenzenDoppelAchsen;
}
public long[] getGrenzenDreifachAchsen() {
return _grenzenDreifachAchsen;
}
public long[] getGrenzenEinzelAchsen() {
return _grenzenEinzelAchsen;
}
public long[] getGrenzenFzKlasse3() {
return _grenzenFzKlasse3;
}
public long[] getGrenzenFzKlasse5() {
return _grenzenFzKlasse5;
}
public long[] getGrenzenFzKlasse8() {
return _grenzenFzKlasse8;
}
public long[] getGrenzenFzKlasse9() {
return _grenzenFzKlasse9;
}
//~ METHODEN ==============================================================
public void initialisiereGrenzenDoppelAchsen(String grenzenDoppelAchsenAufrufParameter) {
String[] einzelParam = grenzenDoppelAchsenAufrufParameter.split("(,|;|:)");
long[] parameter = new long[einzelParam.length];
try {
for (int i = 0; i < einzelParam.length; i++) {
parameter[i] = new Long(einzelParam[i]);
}
_grenzenDoppelAchsen = parameter;
}
catch (NumberFormatException e) {
debug.warning(String.format("Aufrufparameter [-grenzenDoppelAchsen=%s] konnte nicht ausgewertet werden. Vorgaben werden auf BAStStandard gesetzt.", grenzenDoppelAchsenAufrufParameter));
}
}
public void initialisiereGrenzenDreifachAchsen(String grenzenDreifachAchsenAufrufParameter) {
String[] einzelParam = grenzenDreifachAchsenAufrufParameter.split("(,|;|:)");
long[] parameter = new long[einzelParam.length];
try {
for (int i = 0; i < einzelParam.length; i++) {
parameter[i] = new Long(einzelParam[i]);
}
_grenzenDreifachAchsen = parameter;
}
catch (NumberFormatException e) {
debug.warning(String.format("Aufrufparameter [-grenzenDreifachAchsen=%s] konnte nicht ausgewertet werden. Vorgaben werden auf BAStStandard gesetzt.", grenzenDreifachAchsenAufrufParameter));
}
}
public void initialisiereGrenzenEinzelAchsen(String grenzenEinzelAchsenAufrufParameter) {
String[] einzelParam = grenzenEinzelAchsenAufrufParameter.split("(,|;|:)");
long[] parameter = new long[einzelParam.length];
try {
for (int i = 0; i < einzelParam.length; i++) {
parameter[i] = new Long(einzelParam[i]);
}
_grenzenEinzelAchsen = parameter;
}
catch (NumberFormatException e) {
debug.warning(String.format("Aufrufparameter [-grenzenEinzelAchsen=%s] konnte nicht ausgewertet werden. Vorgaben werden auf BAStStandard gesetzt.", grenzenEinzelAchsenAufrufParameter));
}
}
public void initialisiereGrenzenFzKlasse3(String grenzenFzKlasse3AufrufParameter) {
String[] einzelParam = grenzenFzKlasse3AufrufParameter.split("(,|;|:)");
long[] parameter = new long[einzelParam.length];
try {
for (int i = 0; i < einzelParam.length; i++) {
parameter[i] = new Long(einzelParam[i]);
}
_grenzenFzKlasse3 = parameter;
}
catch (NumberFormatException e) {
debug.warning(String.format("Aufrufparameter [-grenzenFzKlasse3=%s] konnte nicht ausgewertet werden. Vorgaben werden auf BAStStandard gesetzt.", grenzenFzKlasse3AufrufParameter));
}
}
public void initialisiereGrenzenFzKlasse5(String grenzenFzKlasse5AufrufParameter) {
String[] einzelParam = grenzenFzKlasse5AufrufParameter.split("(,|;|:)");
long[] parameter = new long[einzelParam.length];
try {
for (int i = 0; i < einzelParam.length; i++) {
parameter[i] = new Long(einzelParam[i]);
}
_grenzenFzKlasse5 = parameter;
}
catch (NumberFormatException e) {
debug.warning(String.format("Aufrufparameter [-grenzenFzKlasse5=%s] konnte nicht ausgewertet werden. Vorgaben werden auf BAStStandard gesetzt.", grenzenFzKlasse5AufrufParameter));
}
}
public void initialisiereGrenzenFzKlasse8(String grenzenFzKlasse8AufrufParameter) {
String[] einzelParam = grenzenFzKlasse8AufrufParameter.split("(,|;|:)");
long[] parameter = new long[einzelParam.length];
try {
for (int i = 0; i < einzelParam.length; i++) {
parameter[i] = new Long(einzelParam[i]);
}
_grenzenFzKlasse8 = parameter;
}
catch (NumberFormatException e) {
debug.warning(String.format("Aufrufparameter [-grenzenFzKlasse8=%s] konnte nicht ausgewertet werden. Vorgaben werden auf BAStStandard gesetzt.", grenzenFzKlasse8AufrufParameter));
}
}
public void initialisiereGrenzenFzKlasse9(String grenzenFzKlasse9AufrufParameter) {
String[] einzelParam = grenzenFzKlasse9AufrufParameter.split("(,|;|:)");
long[] parameter = new long[einzelParam.length];
try {
for (int i = 0; i < einzelParam.length; i++) {
parameter[i] = new Long(einzelParam[i]);
}
_grenzenFzKlasse9 = parameter;
}
catch (NumberFormatException e) {
debug.warning(String.format("Aufrufparameter [-grenzenFzKlasse9=%s] konnte nicht ausgewertet werden. Vorgaben werden auf BAStStandard gesetzt.", grenzenFzKlasse9AufrufParameter));
}
}
}
//~Formatiert mit 'inovat Kodierkonvention' am 08.12.10
This diff is collapsed.
Platzhalterdatei, damit Ornderstruktur fuer Gradle in GitLab eingecheckt werden kann (Git ignoriert leere Ordner).
\ No newline at end of file
Platzhalterdatei, damit Ornderstruktur fuer Gradle in GitLab eingecheckt werden kann (Git ignoriert leere Ordner).
\ No newline at end of file
Platzhalterdatei, damit Ornderstruktur fuer Gradle in GitLab eingecheckt werden kann (Git ignoriert leere Ordner).
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment