View Javadoc

1   /*
2    * This file is a part of CAST project.
3    * (c) Copyright 2007, AGH University of Science & Technology
4    * https://caribou.iisg.agh.edu.pl/trac/cast
5    *
6    * Licensed under the Eclipse Public License, Version 1.0 (the "License").
7    * You may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    * http://www.eclipse.org/legal/epl-v10.html
10   */
11  /*
12   * File: TemplateManagementPresenter.java
13   * Created: 2009-09-17
14   * Author: kpietak
15   * $Id$
16   */
17  
18  package pl.edu.agh.cast.importer.wizard.template;
19  
20  import java.io.File;
21  import java.util.ArrayList;
22  import java.util.Collection;
23  import java.util.UUID;
24  
25  import org.apache.log4j.Logger;
26  import org.eclipse.osgi.util.NLS;
27  import org.eclipse.swt.SWT;
28  
29  import pl.edu.agh.cast.data.model.Activator;
30  import pl.edu.agh.cast.importer.base.template.IImportTemplate;
31  import pl.edu.agh.cast.importer.base.template.ImportTemplateGroup;
32  import pl.edu.agh.cast.importer.base.template.ImportTemplateManager;
33  import pl.edu.agh.cast.importer.base.template.exception.TemplateException;
34  import pl.edu.agh.cast.importer.wizard.util.Messages;
35  import pl.edu.agh.cast.ui.util.IMsgBoxHelper;
36  
37  /**
38   * Presenter for {@link ITemplateManagementView}.
39   * 
40   * @author AGH CAST Team
41   */
42  public class TemplateManagementPresenter implements ITemplateSelectionListener {
43  
44  	private static Logger log = Activator.getLogger();
45  
46  	private Collection<ImportTemplateGroup> model;
47  
48  	private Collection<TemplateGroupTreeEntry> input;
49  
50  	private ITemplateManagementView view;
51  
52  	private ImportTemplateManager manager;
53  
54  	private IImportTemplate selectedTemplate;
55  
56  	/**
57  	 * Constructor.
58  	 * 
59  	 * @param view
60  	 *            view for this presenter
61  	 */
62  	public TemplateManagementPresenter(ITemplateManagementView view) {
63  		this.view = view;
64  		initialize();
65  	}
66  
67  	public Collection<ImportTemplateGroup> getModel() {
68  		return model;
69  	}
70  
71  	public ITemplateManagementView getView() {
72  		return view;
73  	}
74  
75  	public IImportTemplate getSelectedTemplate() {
76  		return selectedTemplate;
77  	}
78  
79  	/**
80  	 * Handle remove template action.
81  	 */
82  	public void handleRemoveTemplate() {
83  		try {
84  			if (selectedTemplate != null) {
85  				if (view.showRemoveTemplateConfirmationQuestion(selectedTemplate) == SWT.YES) {
86  					manager.removeTemplate(selectedTemplate.getId());
87  					refreshModel();
88  				}
89  			} else {
90  				view.showNoTemplateSelectedInfo();
91  
92  			}
93  		} catch (TemplateException e) {
94  			view.showCannotRemoveTemplateError(selectedTemplate, e);
95  		}
96  	}
97  
98  	/**
99  	 * Handle import from file. The calling view is responsible for choosing appropriate file.
100 	 * 
101 	 * @param file
102 	 *            file from template will be imported
103 	 * @param msgBoxHelper
104 	 *            message box helper which is used to show messages to user
105 	 * @return imported template
106 	 * @throws TemplateException
107 	 *             if any error occurs during import; exceptions should contain localized message which can be displayed
108 	 *             to user
109 	 */
110 	public IImportTemplate handleImportTemplate(File file, IMsgBoxHelper msgBoxHelper) throws TemplateException {
111 		IImportTemplate template = manager.importTemplateFromFile(file, msgBoxHelper);
112 		if (template != null) {
113 			refreshModel();
114 		}
115 		return template;
116 	}
117 
118 	/**
119 	 * Handle template export to file.
120 	 * 
121 	 * @param file
122 	 *            destination file
123 	 * @param msgBoxHelper
124 	 *            message box helper which is used to show messages to user
125 	 */
126 	public void handleExportTemplate(File file, IMsgBoxHelper msgBoxHelper) {
127 		if (file == null || msgBoxHelper == null) {
128 			throw new IllegalArgumentException();
129 		}
130 		IImportTemplate template = getSelectedTemplate();
131 		if (template == null) {
132 			msgBoxHelper.showWarningBox(Messages.TemplateManagementPresenter_0, Messages.TemplateManagementPresenter_1);
133 		}
134 		try {
135 			manager.exportTemplateToFile(template.getId(), file);
136 			msgBoxHelper.showInfoBox(Messages.TemplateManagementPresenter_2, NLS.bind(
137 			        Messages.TemplateManagementPresenter_3, template.getName(), file.getAbsolutePath()));
138 		} catch (TemplateException e) {
139 			log.error(String.format("Error during exporting template %s to file: %s", template.getName(), file //$NON-NLS-1$
140 			        .getAbsolutePath()), e);
141 			msgBoxHelper.showErrorBox(Messages.TemplateManagementPresenter_4, Messages.TemplateManagementPresenter_5);
142 		}
143 	}
144 
145 	/**
146 	 * {@inheritDoc}
147 	 * 
148 	 * @see pl.edu.agh.cast.importer.wizard.template.ITemplateSelectionListener
149 	 *      #selectionChanged(pl.edu.agh.cast.importer.base.template.IImportTemplate)
150 	 */
151 	@Override
152 	public void selectionChanged(IImportTemplate selected) {
153 		selectedTemplate = selected;
154 	}
155 
156 	/**
157 	 * Disposes this presenter. Note that view must be disposed manually.
158 	 */
159 	public void dispose() {
160 		view.removeTemplateSelectionListener(this);
161 	}
162 
163 	private void initialize() {
164 		view.initialize(this);
165 		view.addTemplateSelecionListener(this);
166 		manager = pl.edu.agh.cast.importer.base.Activator.getDefault().getTemplateManager();
167 		if (manager == null) {
168 			return; // templates are unavailable
169 			// TODO: set input such as "Templates are unavailable".
170 		}
171 
172 		refreshModel();
173 
174 	}
175 
176 	private void refreshModel() {
177 		model = manager.getAllTemplateGroups();
178 
179 		// initialize input
180 		input = new ArrayList<TemplateGroupTreeEntry>(model.size());
181 		for (ImportTemplateGroup group : model) {
182 			TemplateGroupTreeEntry groupEntry = new TemplateGroupTreeEntry(group, input);
183 			for (UUID templateId : group.getTemplates()) {
184 				IImportTemplate template = manager.getTemplate(templateId);
185 				if (template == null) {
186 					// TODO:
187 					continue;
188 				}
189 				groupEntry.addChild(new TemplateTreeEntry(template, groupEntry));
190 			}
191 			input.add(groupEntry);
192 		}
193 		view.setInput(input);
194 	}
195 
196 }