blob: 4805822fb5fee026403be29244d5e201e215d455 [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 java.io.File;
import java.text.MessageFormat;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.epf.common.utils.Timer;
import org.eclipse.epf.library.services.NameCache;
import org.eclipse.epf.publishing.PublishingPlugin;
import org.eclipse.epf.uma.MethodConfiguration;
/**
* The abstract base class for all Publish Managers.
* <p>
* Use the org.eclipse.epf.publishing.ui.publishers extension point to extend
* this class if you need to customize the publishing.
*
* @author Jinhua Xi
* @since 1.0
*/
public abstract class AbstractPublishManager {
protected static boolean debug = PublishingPlugin.getDefault()
.isDebugging();
protected String pubDir;
protected MethodConfiguration config;
protected PublishHTMLOptions options;
protected AbstractViewBuilder viewBuilder;
protected boolean sucess = false;
/**
* Creates a new instance.
*/
public AbstractPublishManager() {
}
/**
* Initilizes the publishing manager.
*
* @param pubDir
* the publish directory
* @param config
* a method configuration
* @param options
* the publishing options
*/
public void init(String pubDir, MethodConfiguration config,
PublishOptions options) {
this.pubDir = pubDir;
if (!this.pubDir.endsWith(File.separator)) {
this.pubDir += File.separator;
}
this.config = config;
if (options instanceof PublishHTMLOptions) {
this.options = (PublishHTMLOptions) options;
}
else {
throw new IllegalArgumentException();
}
this.viewBuilder = createViewBuilder();
// clear the file name cache
NameCache.getInstance().clear();
}
/**
* get the publishing view builder. The view builder is responsible to build
* the publishing views and contents.
*
* @return AbstractViewBuilder
*/
public AbstractViewBuilder getViewBuilder() {
return this.viewBuilder;
}
public ISiteGenerator getSiteGenerator() {
return viewBuilder.getSiteGenerator();
}
/**
* do publishing. The publishing process is defined in three steps.
* prePublish to do some preparation before the actual publishing doPublish
* to publish the views and contents postPublish to do some cleanup work
* after publish. Extended classes can override these methods to achieve
* additional publishing results.
*
* @param monitor
* IProgressMonitor
* @throws PublishingServiceException
*/
public void publish(IProgressMonitor monitor)
throws PublishingServiceException {
if (options != null) {
options.validate();
}
Timer t = null;
if (debug) {
t = new Timer();
}
try {
prePublish(monitor);
doPublish(monitor);
postPublish(monitor);
sucess = true;
} catch (Exception e) {
throw new PublishingServiceException(e);
} finally {
if (debug && t != null) {
t.stop();
System.out
.println(MessageFormat
.format(
"Time taken to publish configuration ''{0}'': {1} secs", //$NON-NLS-1$
new Object[] {
config.getName(),
Long
.toString(t.getTime() / 1000) }));
}
}
}
/**
* dispose the object. Once disposed, the object is not valid any more.
*
*/
public void dispose() {
if (viewBuilder != null) {
viewBuilder.dispose();
viewBuilder = null;
}
}
/**
* abstract method to get the url to the published site
*
* @return String the url
*/
public abstract String getPublishedUrl();
/**
* abstract method to get the url to the publish report
*
* @return String
*/
public abstract String getPublishReportUrl();
protected abstract AbstractViewBuilder createViewBuilder();
protected abstract void prePublish(IProgressMonitor monitor)
throws Exception;
protected abstract void doPublish(IProgressMonitor monitor)
throws Exception;
protected abstract void postPublish(IProgressMonitor monitor)
throws Exception;
}