blob: 8b0e70209d7e2d0b462d15e11791a178475edb7e [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2007 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.publishing.services;
import org.eclipse.epf.common.utils.Timer;
import org.eclipse.epf.library.layout.HtmlBuilder;
import org.eclipse.epf.library.layout.IElementLayout;
import org.eclipse.epf.uma.MethodElement;
/**
* runnable class to monitor the html generation
*
* @author Jinhua Xi
* @since 1.2
*
*/
public class PublishingRunnable implements Runnable {
int timeout_limit = 600000;
//PublishingContentValidator validator;
HtmlBuilder htmlBuilder;
String html_file;
IElementLayout layout;
public PublishingRunnable(HtmlBuilder htmlBuilder, int timeout) {
this.timeout_limit = timeout;
this.htmlBuilder = htmlBuilder;
}
private PublishingContentValidator getValidator() {
return (PublishingContentValidator)htmlBuilder.getValidator();
}
public void run() {
if ( htmlBuilder != null && this.layout != null ) {
this.html_file = null;
this.html_file = htmlBuilder.generateHtml(layout);
}
}
public String generateHtml(IElementLayout layout) {
this.layout = layout;
MethodElement element = this.layout.getElement();
Timer timer = new Timer();
try {
// set the target element for thre content validator
getValidator().setTargetElement(element);
// run the publishing and check the time, if timeout, terminate it
Thread t = new Thread(this);
t.start();
t.join(timeout_limit);
if (t.isAlive()) {
// wait for the thread to die and log an error
timer.stop();
getValidator()
.logInfo(
element,
"publishing element takes " + timer.getTime() + " mini seconds already and is still not done yet ..."); //$NON-NLS-1$ //$NON-NLS-2$
timer.start();
t.join();
}
} catch (InterruptedException e1) {
e1.printStackTrace();
} finally {
getValidator().setTargetElement(null);
getValidator().getReferencedElements().remove(element);
timer.stop();
getValidator().logInfo(element,
timer.getTotalTime() + " mini seconds publishing element"); //$NON-NLS-1$
}
return this.html_file;
}
public void dispose() {
this.layout = null;
this.html_file = null;
this.htmlBuilder = null;
}
}