| /******************************************************************************* |
| * Copyright (c) 2008 IBM, TietoEnator, corp. |
| * 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: |
| * Brian Schlosser - initial implementation |
| * Roman Smirak - update for EPFC 1.2 and 1.5 |
| *******************************************************************************/ |
| package org.eclipse.epf.publishing.cmdline; |
| |
| import java.io.File; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.IPlatformRunnable; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.epf.diagram.ui.service.DiagramImageService; |
| import org.eclipse.epf.library.ILibraryService; |
| import org.eclipse.epf.library.LibraryService; |
| import org.eclipse.epf.library.layout.ElementLayoutManager; |
| import org.eclipse.epf.library.xmi.XMILibraryManager; |
| import org.eclipse.epf.publishing.cmdline.dummyui.DummyWorkbenchAdvisor; |
| import org.eclipse.epf.publishing.services.AbstractViewBuilder; |
| import org.eclipse.epf.publishing.services.PublishHTMLOptions; |
| import org.eclipse.epf.publishing.services.PublishManager; |
| import org.eclipse.epf.publishing.services.PublishOptions; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodLibrary; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.ui.PlatformUI; |
| |
| // TODO Replace deprecated IPlatformRunnable with IApplication |
| public class Publish implements IPlatformRunnable { |
| |
| private static final String ABOUT = "-about"; //$NON-NLS-1$ |
| private static final String BANNER = "-banner"; //$NON-NLS-1$ |
| private static final String BANNER_HEIGHT = "-bannerHeight"; //$NON-NLS-1$ |
| private static final String CHECK_LINKS = "-checkLinks"; //$NON-NLS-1$ |
| private static final String CONFIG = "-config"; //$NON-NLS-1$ |
| private static final String DYNAMIC = "-dynamic"; //$NON-NLS-1$ |
| private static final String FEEDBACK = "-feedback"; //$NON-NLS-1$ |
| private static final String GLOSSARY = "-glossary"; //$NON-NLS-1$ |
| private static final String INDEX = "-index"; //$NON-NLS-1$ |
| private static final String LIBRARY_PATH = "-libraryPath"; //$NON-NLS-1$ |
| private static final String PUBLISH_PATH = "-publishPath"; //$NON-NLS-1$ |
| private static final String PUBLISH_UNVERIFIED_DIAGRAMS = "-publishUnverifiedDiagrams"; //$NON-NLS-1$ |
| private static final String TITLE = "-title"; //$NON-NLS-1$ |
| |
| private static final String PDELAUNCH = "-pdelaunch"; //$NON-NLS-1$ |
| |
| private static final String LIBRARY_XMI = "/library.xmi"; //$NON-NLS-1$ |
| |
| private String libraryPath; |
| |
| private String configuration; |
| |
| private Shell shell; |
| |
| public Object run(final Object args) throws Exception { |
| try { |
| // Parse parameters |
| final PublishOptions publishDataModel = parseArgs((String[]) args); |
| |
| // FIXME GMF requires workbench |
| Thread thread = new Thread(new Runnable() { |
| public void run() { |
| try { |
| final Display display = new Display(); |
| shell = new Shell(display); |
| shell.setLayoutData(new GridData(1, 1)); |
| // size can't be |
| // 0,0 |
| // otherwise the diagram |
| // will not be painted |
| shell.setLayout(new GridLayout()); |
| shell.setVisible(false); |
| |
| PlatformUI.createAndRunWorkbench(display, |
| new DummyWorkbenchAdvisor()); |
| |
| shell.close(); |
| display.dispose(); |
| } catch (Exception e) { |
| CmdlinePlugin.log(e); |
| e.printStackTrace(); |
| System.err.println(Messages.internalError); |
| } |
| } |
| }); |
| thread.start(); |
| |
| // Open method library |
| ILibraryService libService = LibraryService.getInstance(); |
| Map params = new HashMap(); |
| params.put(XMILibraryManager.ARG_LIBRARY_PATH, libraryPath); |
| libService.openMethodLibrary(XMILibraryManager.LIBRARY_TYPE, params); |
| |
| // Start publishing |
| return Publish.this.run(args, shell, publishDataModel); |
| } catch (UsageException ex) { |
| System.err.println(ex.getMessage()); |
| System.err.println(Messages.usage); |
| return new Integer(1); |
| } catch (Throwable ex) { |
| CmdlinePlugin.log(ex); |
| ex.printStackTrace(); |
| System.err.println(Messages.internalError); |
| return new Integer(2); |
| } |
| } |
| |
| public Object run(Object args, Shell shell, PublishOptions publishDataModel) |
| throws Exception { |
| // String selectedConfigName = publishDataModel.getSelectedConfig(); |
| // String publishDestFolder = publishDataModel.getPublicationPath(); |
| ILibraryService lp = LibraryService.getInstance(); |
| MethodLibrary library = lp.getCurrentMethodLibrary(); |
| try { |
| MethodConfiguration config = null; |
| |
| List configurations = library.getPredefinedConfigurations(); |
| for (Iterator iter = configurations.iterator(); iter.hasNext();) { |
| MethodConfiguration configuration = (MethodConfiguration) iter |
| .next(); |
| if (configuration.getName().equals(this.configuration)) { |
| config = configuration; |
| } |
| |
| } |
| |
| if (config == null) { |
| throw new UsageException(NLS.bind(Messages.badConfig, |
| this.configuration, libraryPath)); |
| } |
| |
| // Create and initialise Publish manager |
| PublishManager mgr = new PublishManager(); |
| mgr |
| .init(publishDataModel.getPublishDir(), config, |
| publishDataModel); |
| |
| // Activate Activity diagram service |
| AbstractViewBuilder viewBuilder = mgr.getViewBuilder(); |
| ElementLayoutManager layoutMgr = viewBuilder.getLayoutMgr(); |
| DiagramImageService diagramService = new DiagramImageService(shell, |
| new File(layoutMgr.getPublishDir())); |
| diagramService.setConfig(config); |
| diagramService.setPublishedUnCreatedADD(publishDataModel |
| .isPublishUnopenADD()); |
| diagramService.setPublishADForActivityExtension(publishDataModel |
| .isPublishBaseAD()); |
| layoutMgr.setActivityDiagramService(diagramService); |
| |
| IProgressMonitor monitor = new TextProgressMonitor(); |
| mgr.publish(monitor); |
| } finally { |
| lp.closeCurrentMethodLibrary(); |
| shell.getDisplay().wake(); |
| } |
| |
| return EXIT_OK; |
| } |
| |
| private PublishOptions parseArgs(String[] args) throws UsageException { |
| PublishHTMLOptions options = new PublishHTMLOptions(); |
| |
| // TODO Handle as a parameter |
| options.setPublishConfiguration(true); |
| options.setPublishProcess(true); |
| // options.setPublishJavaScriptTree(false); |
| // options.setPublishLightWeightTree(true); |
| |
| // TODO Proper handling of all parameters (e.g. convert broken links) |
| for (int i = 0; i < args.length; i++) { |
| if (args[i].charAt(0) == '-') { |
| if (args[i].equals(LIBRARY_PATH)) { |
| File path = new File(args[++i]); |
| if (!path.isAbsolute()) { |
| path = path.getAbsoluteFile(); |
| } |
| if (!new File(path, LIBRARY_XMI).exists()) { |
| throw new UsageException(NLS.bind( |
| Messages.invalidLibraryPath, args[i])); |
| } |
| libraryPath = path.getAbsolutePath(); |
| System.out.println(libraryPath); |
| } else if (args[i].equals(PUBLISH_PATH)) { |
| options.setPublishDir(args[++i]); |
| } else if (args[i].equals(CONFIG)) { |
| // options.setSelectedConfig(args[++i]); |
| this.configuration = args[++i]; |
| } else if (args[i].equals(BANNER)) { |
| options.setBannerImage(args[++i]); |
| if (!new File(args[i]).exists()) { |
| throw new UsageException(NLS.bind( |
| Messages.invalidBannerPath, args[i])); |
| } |
| } else if (args[i].equals(BANNER_HEIGHT)) { |
| try { |
| options.setBannerImageHeight(Integer |
| .parseInt(args[++i])); |
| } catch (NumberFormatException e) { |
| throw new UsageException(NLS.bind( |
| Messages.invalidImageHeight, args[i])); |
| } catch (ArrayIndexOutOfBoundsException e) { |
| throw new UsageException(NLS.bind( |
| Messages.invalidImageHeight, "<Missing>")); |
| } |
| } else if (args[i].equals(FEEDBACK)) { |
| options.setFeedbackURL(args[++i]); |
| } else if (args[i].equals(TITLE)) { |
| options.setTitle(args[++i]); |
| } else if (args[i].equals(ABOUT)) { |
| options.setAboutHTML(args[++i]); |
| if (!new File(args[i]).exists()) { |
| throw new UsageException(NLS.bind( |
| Messages.invalidAboutPath, args[i])); |
| } |
| } else if (args[i].equals(GLOSSARY)) { |
| options.setPublishGlossary(true); |
| } else if (args[i].equals(INDEX)) { |
| options.setPublishIndex(true); |
| } else if (args[i].equals(DYNAMIC)) { |
| options.setPublishDynamicWebApp(true); |
| options.setDynamicWebAppName(args[++i]); |
| } else if (args[i].equals(CHECK_LINKS)) { |
| options.setCheckExternalLinks(true); |
| options.setConvertBrokenLinks(true); |
| } else if (args[i].equals(PUBLISH_UNVERIFIED_DIAGRAMS)) { |
| options.setPublishUnopenADD(true); |
| options.setPublishBaseAD(true); |
| } else if (args[i].equals(PDELAUNCH)) { |
| // ignore |
| } else { |
| throw new UsageException(NLS.bind(Messages.unknownArg, |
| args[i])); |
| } |
| } else { |
| throw new UsageException(NLS.bind(Messages.unknownArg, args[i])); |
| } |
| } |
| |
| if (libraryPath == null) { |
| throw new UsageException(NLS.bind( |
| Messages.missingRequiredParameter, LIBRARY_PATH)); |
| } |
| if (options.getPublishDir() == null) { |
| throw new UsageException(NLS.bind( |
| Messages.missingRequiredParameter, PUBLISH_PATH)); |
| } |
| if (this.configuration == null) { |
| throw new UsageException(NLS.bind( |
| Messages.missingRequiredParameter, CONFIG)); |
| } |
| |
| return options; |
| } |
| |
| } |