30d3e0cbc761e8532752f6850db69e976c397059
[taxeditor.git] / eu.etaxonomy.taxeditor.printpublisher / src / main / java / eu / etaxonomy / taxeditor / printpublisher / wizard / AbstractPublishWizard.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.printpublisher.wizard;
5
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.Status;
9 import org.eclipse.core.runtime.jobs.Job;
10 import org.eclipse.jface.dialogs.MessageDialog;
11 import org.eclipse.jface.viewers.IStructuredSelection;
12 import org.eclipse.jface.wizard.IWizardPage;
13 import org.eclipse.jface.wizard.Wizard;
14 import org.eclipse.swt.widgets.Display;
15 import org.eclipse.ui.IExportWizard;
16 import org.eclipse.ui.IWorkbench;
17
18 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
19 import eu.etaxonomy.cdm.print.PublishConfigurator;
20 import eu.etaxonomy.cdm.print.Publisher;
21 import eu.etaxonomy.cdm.print.out.IPublishOutputModule;
22 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
23 import eu.etaxonomy.taxeditor.printpublisher.PrintUtil;
24 import eu.etaxonomy.taxeditor.printpublisher.internal.PrintpublisherPlugin;
25 import eu.etaxonomy.taxeditor.store.CdmStore;
26
27 /**
28 * <p>AbstractPublishWizard class.</p>
29 *
30 * @author n.hoffmann
31 * @created Apr 1, 2010
32 * @version 1.0
33 */
34 public abstract class AbstractPublishWizard extends Wizard implements IExportWizard, IHasPersistableSettings{
35
36 /** Constant <code>PAGE_SERVICE="PAGE_SERVICE"</code> */
37 public static final String PAGE_SERVICE = "PAGE_SERVICE";
38 /** Constant <code>PAGE_TAXA="PAGE_TAXA"</code> */
39 public static final String PAGE_TAXA = "PAGE_TAXA";
40 /** Constant <code>PAGE_OPTIONS="PAGE_OPTIONS"</code> */
41 public static final String PAGE_OPTIONS = "PAGE_OPTIONS";
42 /** Constant <code>PAGE_FOLDER="PAGE_FOLDER"</code> */
43 public static final String PAGE_FOLDER = "PAGE_FOLDER";
44 /** Constant <code>PAGE_OVERVIEW="PAGE_OVERVIEW"</code> */
45 public static final String PAGE_OVERVIEW = "PAGE_OVERVIEW";
46 /** Constant <code>PAGE_FEATURETREE="PAGE_FEATURETREE"</code> */
47 public static final String PAGE_FEATURETREE = "PAGE_FEATURETREE";
48 /** Constant <code>PAGE_STYLESHEET="PAGE_STYLESHEET"</code> */
49 public static final String PAGE_STYLESHEET = "PAGE_STYLESHEET";
50
51 protected SelectServiceWizardPage pageService;
52 protected SelectTaxaWizardPage pageTaxa;
53 protected SelectOptionsWizardPage pageOptions;
54 protected SelectFeatureTreeWizardPage pageFeatureTree;
55 protected SelectDirectoryWizardPage pageFolder;
56 protected SelectStylesheetWizardPage pageStylesheet;
57
58 private PublishConfigurator configurator;
59
60 private IPublishOutputModule outputModule;
61
62 /**
63 * <p>Constructor for AbstractPublishWizard.</p>
64 */
65 public AbstractPublishWizard(){
66 setNeedsProgressMonitor(true);
67 setDialogSettings(PrintpublisherPlugin.getDefault().getDialogSettings());
68 }
69
70 /* (non-Javadoc)
71 * @see org.eclipse.jface.wizard.Wizard#performFinish()
72 */
73 /** {@inheritDoc} */
74 @Override
75 public boolean performFinish() {
76
77 Job job = new Job("Running Print Publisher") {
78
79 @Override
80 protected IStatus run(IProgressMonitor monitor) {
81 monitor.beginTask("Print Publisher", getConfigurator().calculateNumberOfNodes() + 1);
82 ConversationHolder conversation = null;
83 try{
84 getConfigurator().setProgressMonitor(CdmProgressMonitorAdapter.CreateMonitor(monitor));
85
86 if(getConfigurator().isLocal()){
87 conversation= CdmStore.createConversation();
88 }
89
90 Publisher.publish(getConfigurator());
91
92 }finally{
93 monitor.done();
94 if(conversation != null) conversation.close();
95 Display.getDefault().asyncExec(new Runnable() {
96 @Override
97 public void run() {
98 MessageDialog.openInformation(Display.getDefault().getActiveShell(), "Print Publisher", "Your document was created.");
99 }
100 });
101 }
102 return Status.OK_STATUS;
103 }
104
105 };
106
107 job.setPriority(Job.BUILD);
108 job.schedule();
109
110 return true;
111 }
112
113 /** {@inheritDoc} */
114 @Override
115 public void addPages() {
116 super.addPages();
117
118 pageService = new SelectServiceWizardPage(PAGE_SERVICE);
119 addPage(pageService);
120
121 pageOptions = new SelectOptionsWizardPage(PAGE_OPTIONS);
122 addPage(pageOptions);
123
124 pageFeatureTree = new SelectFeatureTreeWizardPage(PAGE_FEATURETREE);
125 addPage(pageFeatureTree);
126
127 pageStylesheet = new SelectStylesheetWizardPage(PAGE_STYLESHEET);
128 addPage(pageStylesheet);
129
130 pageFolder = new SelectDirectoryWizardPage(PAGE_FOLDER);
131 addPage(pageFolder);
132
133 }
134
135 @Override
136 public void loadSettings() {
137 for(IWizardPage page : getPages()){
138 if(page instanceof IHasPersistableSettings){
139 ((IHasPersistableSettings) page).loadSettings();
140 }
141 }
142 }
143
144 /* (non-Javadoc)
145 * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
146 */
147 /** {@inheritDoc} */
148 public void init(IWorkbench workbench, IStructuredSelection selection) {
149 PrintUtil.info("Instantiating wizard: " + this.getClass().getSimpleName());
150 }
151
152
153
154 /** {@inheritDoc} */
155 @Override
156 public boolean canFinish() {
157 boolean canFinish = true;
158
159 canFinish &= pageService.isPageComplete();
160
161 // persistable settings pages
162 canFinish &= pageFeatureTree.isPageComplete();
163 canFinish &= pageFolder.isPageComplete();
164 canFinish &= pageStylesheet.isPageComplete();
165
166 return canFinish;
167 }
168
169 /**
170 * <p>Getter for the field <code>configurator</code>.</p>
171 *
172 * @return a {@link eu.etaxonomy.cdm.print.PublishConfigurator} object.
173 */
174 protected PublishConfigurator getConfigurator() {
175 return configurator;
176 }
177
178 /**
179 * <p>Setter for the field <code>configurator</code>.</p>
180 *
181 * @param configurator a {@link eu.etaxonomy.cdm.print.PublishConfigurator} object.
182 */
183 protected void setConfigurator(PublishConfigurator configurator){
184 this.configurator = configurator;
185 }
186
187 /**
188 * <p>Setter for the field <code>outputModule</code>.</p>
189 *
190 * @param outputModule a {@link eu.etaxonomy.cdm.print.out.IPublishOutputModule} object.
191 */
192 protected void setOutputModule(IPublishOutputModule outputModule){
193 this.outputModule = outputModule;
194 }
195
196 /**
197 * <p>Getter for the field <code>outputModule</code>.</p>
198 *
199 * @return a {@link eu.etaxonomy.cdm.print.out.IPublishOutputModule} object.
200 */
201 public IPublishOutputModule getOutputModule(){
202 return outputModule;
203 }
204 }