/********************************************************* 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.scheduler.model.objects;
import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Field;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlTransient;
import org.apache.log4j.Logger;
import com.sos.JSHelper.Exceptions.JobSchedulerException;
import com.sos.VirtualFileSystem.Interfaces.ISOSVirtualFile;
import com.sos.scheduler.model.SchedulerHotFolder;
import com.sos.scheduler.model.SchedulerObjectFactory;
/**
* \class JSObjBase
*
* \brief JSObjBase -
*
* \details
*
* \code
* .... code goes here ...
* \endcode
*
* <p style="text-align:center">
* <br />---------------------------------------------------------------------------
* <br /> APL/Software GmbH - Berlin
* <br />##### generated by ClaviusXPress (http://www.sos-berlin.com) #########
* <br />---------------------------------------------------------------------------
* </p>
* \author oh
* @version $Id: JSObjBase.java 14537 2011-05-31 10:31:58Z ss $
* \see reference
*
* Created on 03.02.2011 16:06:55
*/
public class JSObjBase implements Comparable<JSObjBase> {
private final String conClassName = "JSObjBase";
private static final Logger logger = Logger.getLogger(JSObjBase.class);
protected SchedulerObjectFactory objFactory = null;
private ISOSVirtualFile hotFolderSrc = null;
protected JAXBElement<JSObjBase> objJAXBElement = null;
public JSObjBase() {
//
}
public void setParent(SchedulerObjectFactory objParent) {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::setParent";
objFactory = objParent;
} // private void setParent
public Object unMarshal(File pobjFile) {
return objFactory.unMarshall(pobjFile);
}
public Object unMarshal(InputStream pobjInputStream) {
return objFactory.unMarshall(pobjInputStream);
}
public Object unMarshal(String pobjString) {
return objFactory.unMarshall(pobjString);
}
public Object unMarshal(ISOSVirtualFile pobjVirtualFile) {
return objFactory.unMarshall(pobjVirtualFile);
}
public Object marshal(Object objO, File objF) {
return objFactory.marshal(objO, objF);
}
public Object marshal(File objF) {
Object objO = null;
if(objJAXBElement == null) {
objO = this;
}
else {
objJAXBElement.setValue(this);
objO = objJAXBElement;
}
return marshal(objO, objF);
}
public String marshal() {
Object objO = null;
if(objJAXBElement == null) {
objO = this;
}
else {
objJAXBElement.setValue(this);
objO = objJAXBElement;
}
return objFactory.marshal(objO);
}
public Object toXMLFile(Object objO, ISOSVirtualFile pobjVirtualFile) {
return objFactory.toXMLFile(objO, pobjVirtualFile);
}
public Object toXMLFile(ISOSVirtualFile pobjVirtualFile) {
Object objO = null;
if(objJAXBElement == null) {
objO = this;
}
else {
objJAXBElement.setValue(this);
objO = objJAXBElement;
}
return toXMLFile(objO, pobjVirtualFile);
}
public Object toXMLFile() {
return toXMLFile(hotFolderSrc);
}
public String toXMLString(Object objO) {
return objFactory.toXMLString(objO);
}
public String toXMLString() {
String xmlString = null;
if(objJAXBElement == null) {
xmlString = objFactory.toXMLString(this);
}
else {
objJAXBElement.setValue(this);
xmlString = objFactory.toXMLString(objJAXBElement);
}
return xmlString;
}
@XmlTransient
public void setHotFolderSrc(ISOSVirtualFile pobjVirtualFile) {
hotFolderSrc = pobjVirtualFile;
}
public ISOSVirtualFile getHotFolderSrc() {
return hotFolderSrc;
}
@Override
public int compareTo(JSObjBase o) {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::compareTo";
int compareRet = 0;
boolean thisIsFolder = this.getClass().getSimpleName().equals("SchedulerHotFolder");
boolean oIsFolder = (o instanceof SchedulerHotFolder);
if( thisIsFolder && !oIsFolder ) {
compareRet = -1;
}
else if( !thisIsFolder && oIsFolder ) {
compareRet = 1;
}
else if( this.getHotFolderSrc() == null ) {
compareRet = 1;
}
else if( o.getHotFolderSrc() == null ) {
compareRet = -1;
}
else {
String hotFolderSrcName1 = this.getHotFolderSrc().getName().toLowerCase();
String hotFolderSrcName2 = o.getHotFolderSrc().getName().toLowerCase();
compareRet = hotFolderSrcName1.compareTo(hotFolderSrcName2);
}
return compareRet;
}
/**
*
* \brief setObjectFieldsFrom
*
* \details
* set all fields of a subclass according to its superclass
*
* \return void
*
* @param origObj
*/
protected void setObjectFieldsFrom(JSObjBase origObj) {
@SuppressWarnings("unused")
final String conMethodName = conClassName + "::setObjectFieldsFrom";
Field[] fields;
Class<?> origClass = origObj.getClass();
if (!origClass.isAssignableFrom(this.getClass())) {
throw new JobSchedulerException(String.format("%1$s must be a subclass of %2$s", this.getClass().getName(), origClass.getName()));
}
fields = origClass.getDeclaredFields();
for (Field field : fields) {
try {
// to see private and protected fields too
field.setAccessible(true);
if (field.isAccessible()) {
//final fields couldn't set and throws IllegalAccessException
//but that's ok because we don't want set final fields
field.set(this, field.get(origObj));
}
}
catch (IllegalArgumentException e) {
logger.error("", new JobSchedulerException("IllegalArgumentException", e));
}
catch (IllegalAccessException e) {
// this catch block is reached for final fields (that's ok)
}
}
}
// public void removeEmptyContentsFrom(List<Object> objList) {
// @SuppressWarnings("unused")
// final String conMethodName = conClassName + "::removeEmptyContentsFrom";
// List<String> emptyContents = new ArrayList<String>();
// for (Object listItem : objList) {
// if((listItem instanceof String) && (((String) listItem).trim().length() == 0)) {
// emptyContents.add(((String) listItem));
// }
// }
// objList.removeAll(emptyContents);
// } // private removeEmptyContentsFrom
}