/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program 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.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.mantle.client.workspace;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import java.util.Date;
public class JsJob extends JavaScriptObject {
// Overlay types always have protected, zero argument constructors.
protected JsJob() {
}
// JSNI methods to get job data.
public final native String getJobId() /*-{ return this.jobId; }-*/; //
public final native String getJobName() /*-{ return this.jobName; }-*/; //
public final native String getUserName() /*-{ return this.userName; }-*/; //
private final native String getNativeNextRun() /*-{ return this.nextRun; }-*/; //
private final native String getNativeLastRun() /*-{ return this.lastRun; }-*/; //
public final native JsArray<JsJobParam> getJobParams() /*-{ return this.jobParams.jobParams; }-*/; //
public final native JsJobTrigger getJobTrigger() /*-{ return this.jobTrigger; }-*/; //
public final native String getState() /*-{ return this.state; }-*/; //
public final native void setState( String newState ) /*-{ this.state = newState; }-*/; //
public final String getJobParamValue( String name ) {
if ( hasJobParams() ) {
JsArray<JsJobParam> params = getJobParams();
for ( int i = 0; i < params.length(); i++ ) {
JsJobParam param = params.get( i );
if ( param.getName().equals( name ) ) {
return param.getValue();
}
}
}
return null;
}
public final JsJobParam getJobParam( String name ) {
if ( hasJobParams() ) {
JsArray<JsJobParam> params = getJobParams();
for ( int i = 0; i < params.length(); i++ ) {
JsJobParam param = params.get( i );
if ( param.getName().equals( name ) ) {
return param;
}
}
}
return null;
}
private final native boolean hasJobParams() /*-{ return this.jobParams != null; }-*/; //
public final boolean hasResourceName() {
String resource = getJobParamValue( "ActionAdapterQuartzJob-StreamProvider" );
return ( resource != null && !"".equals( resource ) );
}
public final String getFullResourceName() {
String resource = getJobParamValue( "ActionAdapterQuartzJob-StreamProvider" );
if ( resource == null || "".equals( resource ) ) {
return getJobName();
}
if ( getJobName().contains( ":" ) ) {
resource = resource.substring( resource.indexOf( "/" ), resource.indexOf( ":outputFile = /" ) );
}
else {
resource = resource.substring( resource.indexOf( "/" ), resource.indexOf( ":" ) );
}
return resource;
}
public final String getOutputPath() {
String resource = getJobParamValue( "ActionAdapterQuartzJob-StreamProvider" );
if ( resource == null || "".equals( resource ) ) {
return "";
}
resource = resource.substring( resource.indexOf( ":" ) );
resource = resource.substring( resource.indexOf( "/" ), resource.lastIndexOf( "/" ) );
return resource;
}
public final void setOutputPath( String outputPath, String outputFileName ) {
JsJobParam resource = getJobParam( "ActionAdapterQuartzJob-StreamProvider" );
// input file = /public/Inventory.prpt:outputFile = /public/TEST.*
resource.setValue( "input file = " + getFullResourceName() + ":outputFile = " + outputPath + "/" + outputFileName
+ ".*" );
}
public final String getShortResourceName() {
String resource = getFullResourceName();
if ( resource.indexOf( "/" ) != -1 ) {
resource = resource.substring( resource.lastIndexOf( "/" ) + 1 );
}
return resource;
}
public final Date getLastRun() {
return formatDate( getNativeLastRun() );
}
public final Date getNextRun() {
return formatDate( getNativeNextRun() );
}
public static Date formatDate( String dateStr ) {
try {
DateTimeFormat format = DateTimeFormat.getFormat( PredefinedFormat.ISO_8601 );
return format.parse( dateStr );
} catch ( Throwable t ) {
//ignored
}
try {
DateTimeFormat format = DateTimeFormat.getFormat( "yyyy-MM-dd'T'HH:mm:ssZZZ" );
return format.parse( dateStr );
} catch ( Throwable t ) {
//ignored
}
return null;
}
public final native void setJobTrigger( JsJobTrigger trigger ) /*-{ this.jobTrigger = trigger; }-*/;
public final native String setJobName( String name ) /*-{ this.jobName = name; }-*/; //
}