/********************************************************* begin of preamble
**
** Copyright (C) 2003-2010 Software- und Organisations-Service GmbH.
** All rights reserved.
**
** This file may be used under the terms of either the
**
** GNU General Public License version 2.0 (GPL)
**
** as published by the Free Software Foundation
** http://www.gnu.org/licenses/gpl-2.0.txt and appearing in the file
** LICENSE.GPL included in the packaging of this file.
**
** or the
**
** Agreement for Purchase and Licensing
**
** as offered by Software- und Organisations-Service GmbH
** in the respective terms of supply that ship with this file.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
** IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
** POSSIBILITY OF SUCH DAMAGE.
********************************************************** end of preamble*/
package com.sos.JSHelper.DataElements;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import com.sos.JSHelper.Exceptions.FormatPatternException;
/**
* \file JSDataElementDate.java
* \brief Datenelement vom Typ Datum
*
* \class JSDataElementDate
* \brief Datenelement vom Typ Datum
*
* \details
* Diese Klasse bildet ein Datenelement vom Typ Datum ab. Instanzen dieser Klasse k�nnen
* - je nach vorliegendem Ausgangswert - wie folgt gebildet werden:
*
* 1. Ohne Wertzuweisung (diese mu� dann mit der Methode Value() erfolgen):
* \code
* JSDataElementDate objDate = new JSDataElementDate();
* \endcode
*
* 2. Auf Basis einer Datumsvariablen:
* \code
* Date objDat = new Date(2009, 05, 12);
* JSDataElementDate objDate = new JSDataElementDate(objDat);
* \endcode
*
* 3. Auf Basis eines Strings (das Stringformat mu� dem Standardformat JSDateFormat.dfISO entsprechen):
* \code
* JSDataElementDate objDate = new JSDataElementDate("2005-04-02T18:13:25");
* \endcode
*
* 4. Auf Basis eines Strings mit Vorgabe des Datumsformates (aus der Klasse JSDateFormat):
* \code
* JSDataElementDate objDate = new JSDataElementDate("12.05.2009",JSDateFormat.dfGERMAN_SHORT);
* \endcode
*
* Wahlweise kann das Eingabeformat mit der Methode setParsePattern(JSDateFormat pobjFormat) gesetzt werden.
* Die Formatierung der Ausgabe kann mit setFormatPattern(JSDateFormat pobjFormat) beeinflusst werden. Vorgabe ist
* auch hier das ISO-Format (JSDateFormat.dfISO.toPattern()).
*
* \author EQCPN
* @version $Id: JSDataElementDate.java 14731 2011-07-05 20:50:42Z sos $13.05.2009 10:36:25
* <div class="sos_branding">
* <p>� 2009 APL/Software GmbH - Berlin - generated by ClaviusXPress (<a style="color:silver" href="http://www.sos-berlin.com" target="_blank">http://www.sos-berlin.com</a>)</p>
* </div>
*/
public class JSDataElementDate extends JSDataElement {
private final String conClassName = "JSDataElementDate";
// private Date datValue = new Date();
private JSDateFormat objFormat = null; // JSDateFormat.dfISO;
/**
* \brief Konstruktor ohne Initialisierung
*
* \details
* Stellt eine Instanz des Objektes ohne Wertezuweisung zur Verf�gung.
*/
public JSDataElementDate() {
super();
}
public JSDataElementDate(final String pstrDate, final String pstrTime) {
super.Value(pstrDate + pstrTime);
}
public JSDataElementDate(final JSDataElement pelemDate, final JSDataElement pelemTime) {
final String strD = pelemDate.Value();
String strT = pelemTime.Value();
if (strT.trim().length() <= 0) {
strT = "000000";
}
super.Value(strD + strT);
}
/**
* \brief Initialisierung mit Datumsstring im Standardormat
*
* \details
* Der �bergebene Datumsstring muss dem ISO-Format yyyy-MM-dd'T'HH:mm:ss (JSDateFormat.dfISO) entsprechen.
*
* @param pstrDate
*/
public JSDataElementDate(final String pstrDate) {
super.Value(pstrDate);
}
/**
* \brief Initialisierung mit Datumsstring und vorgegebenen Format
*
* \details
* Der �bergebene Datumsstring muss dem mit setFormatPattern(JSDateFormat pobjFormat)
* gesetztem Format entsprechen (Standard ist JSDateFormat.dfISO).
*
* @param pstrDate
* @param pobjFormat
*/
public JSDataElementDate(final String pstrDate, final JSDateFormat pobjFormat) {
super.Value(pstrDate);
objFormat = pobjFormat;
}
public JSDataElementDate(final Date pdteDate, final JSDateFormat pobjFormat) {
this.Value(pdteDate);
objFormat = pobjFormat;
}
/**
* \brief Initialisierung mit Datumswert.
* @param pdatDate
*/
public JSDataElementDate(final Date pdatDate) {
JSDateFormat objFormat = JSDateFormat.dfTIMESTAMPS24;
this.Value(objFormat.format(pdatDate));
}
public JSDataElementDate(final String pPstrValue, final String pPstrDescription, final int pPintSize, final int pPintPos, final String pPstrFormatString,
final String pPstrColumnHeader, final String pPstrXMLTagName) {
super(pPstrValue, pPstrDescription, pPintSize, pPintPos, pPstrFormatString, pPstrColumnHeader, pPstrXMLTagName);
// TODO Auto-generated constructor stub
}
@Override
public void Value(String pstrValue) {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::Value";
if (pstrValue == null || pstrValue.equals("00000000")) {
pstrValue = "";
}
super.Value(pstrValue);
} // public void Value}
/**
*
* \brief Value
*
* \details
* \return void
*
* @param pdblValue
*/
public void Value(final Date pdatValue) {
if (objFormat == null) {
objFormat = JSDateFormat.dfDATE_N8;
}
super.Value(objFormat.format(pdatValue));
// this.datValue = pdatValue;
}
/**
*
* \brief Datumsobjekt liefern
*
* \details
* Normalerweise sollte hier die Methode getDate aus JSToolbox �berschrieben werden, die liefert aber
* einen String statt Date.
*
* \return Date
* @throws ParseException
*/
public Date getDateObject() {
// return datValue;
try {
if (objFormat == null) {
objFormat = JSDateFormat.dfDATE_N8;
}
return objFormat.parse(this.Value());
}
catch (final ParseException e) {
message(e.getMessage());
e.printStackTrace();
}
return null;
}
/**
* \brief Setzen des Musters zur Datumserkennung
*
* \details
* Setzt das Muster, nach dem die (Text-)Datumsangaben peparst werden. Diese Muster
* ist NICHT identisch mit dem f�r die formatierte Ausgabe. Das kann �ber die Methode
* setFormatString() festgelegt werden.
*
* \see checkFormatPattern()
* \return void
*
* @param pobjFormat
*/
public void setParsePattern(final JSDateFormat pobjFormat) {
objFormat = pobjFormat;
}
public JSDateFormat getParsePattern() {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::getParsePattern";
return objFormat;
} // public void getParsePattern}
/**
* \brief Setzen des Musters zur Ausgabeformatierung
*
* \details
* Setzt das Muster, nach dem die Datumsangabe formatiert wird �ber ein JSDateFormat-Objekt.
* Wahlweise kann auch die Methode FormatString() verwendet werden.
*
* \return void
*
* @param pobjFormat
*
* \see FormattedValue ()
*/
public void setFormatPattern(final JSDateFormat pobjFormat) {
super.FormatString(pobjFormat.toPattern());
}
/**
*
* \brief doInit
*
* \details
* \return void
*
*/
@Override
public void doInit() {
// super.FormatString(JSDateFormat.dfISO.toPattern());
super.FormatString(JSDateFormat.dfDATE_N8.toPattern());
super.Description("Date");
super.ColumnHeader("Date");
super.XMLTagName("Date");
final String strFormat = super.FormatString();
if (isNotEmpty(strFormat)) {
final JSDateFormat df = new JSDateFormat(strFormat);
super.setFormatPattern(df.toPattern());
}
}
/**
* \brief FormattedValue - Liefert den Wert des Elements formatiert
*
* \details
* das Format (die Edit-Maske) wird �ber die Eigenschaft FormatString
* definiert.
*
* Wenn kein Format-String definiert ist, so wird der Wert als String
* zur�ckgegeben.
*
* \see setFormatPattern(JSDateFormat pobjFormat)
* \see JSDataElement::FormatString(String pstrFormatString)
* \return String
*/
@Override
public String FormattedValue() {
String strFormat = super.FormatString();
if (strFormat.length() <= 0) {
strFormat = JSDateFormat.dfDATE_N8.toPattern();
}
if (isNotEmpty(strFormat) && HasAValue() == true) {
final JSDateFormat df = new JSDateFormat(strFormat);
return df.format(getDateObject());
}
else {
return this.Value();
}
}
/**
* \brief checkFormatPattern
*
* \details
*
* \return
*
* @throws FormatPatternException
*
* \see setParsePattern(JSDateFormat pobjFormat)
*/
@Override
public void checkFormatPattern() throws FormatPatternException {
if (objFormat != null) {
try {
objFormat.parse(this.Value());
}
catch (final ParseException e) {
throw new FormatPatternException("the value '" + this.Value() + "' does not correspond with the pattern " + objFormat.toPattern());
}
}
}
public boolean HasAValue() {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::HasAValue";
return !this.isEmpty();
} // public boolean HasAValue}
/**
*
* \brief ISEmpty
*
* \details
*
* \return boolean
*
* @return
*/
public boolean isEmpty() {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::ISEmpty";
if (super.Value().trim().length() <= 0 || super.Value().trim().equals("00000000")) {
return true;
}
else {
return false;
}
} // public boolean ISEmpty
@Override
public String SQLValue() {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::SQLValue";
this.FormatString(JSDateFormat.dfTIMESTAMPS.toPattern());
String strV = FormattedValue();
/**
* \todo die "richtige" Maske f�r das date-format in Oracle einbauen ...
*/
strV = strV.substring(0, 14);
final String strMask = "YYYYMMDDHH24MISS"; // .substring(0, 8);
return "to_date(" + strV + ", '" + strMask + "')";
} // public String SQLValue}
/**
*
* \brief Now
*
* \details
*
* \return
*
* @return
*/
public Date Now() {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::Now";
final java.util.Calendar now = java.util.Calendar.getInstance();
return now.getTime();
} // public Date Now}
public static String getCurrentTimeAsString(String dateTimeFormat) throws Exception {
String strFormat = dateTimeFormat;
if (dateTimeFormat == null || dateTimeFormat.length() <= 0) {
strFormat = "yyyyMMddHHmmss";
}
SimpleDateFormat formatter = new SimpleDateFormat(strFormat);
// formatter.setLenient(lenient);
Calendar now = Calendar.getInstance();
return formatter.format(now.getTime());
}
public static String getCurrentTimeAsString() throws Exception {
return getCurrentTimeAsString("yyyyMMddHHmmss");
}
}