/*
* #%L
* gitools-ui-app
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.core.components.editor;
import org.apache.velocity.VelocityContext;
import org.gitools.api.analysis.IAnalysis;
import org.gitools.api.persistence.FileFormat;
import org.gitools.ui.core.utils.LogUtils;
import org.gitools.ui.platform.IconUtils;
import org.gitools.ui.platform.icons.IconNames;
import org.gitools.ui.platform.panel.TemplatePanel;
import org.gitools.utils.formatter.HeatmapTextFormatter;
import org.lobobrowser.html.FormInput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.*;
import java.net.URL;
import java.util.Map;
public abstract class AnalysisEditor<A extends IAnalysis> extends ResourceEditor<A> {
private static final Logger log = LoggerFactory.getLogger(AnalysisEditor.class);
private final String template;
private TemplatePanel templatePanel;
private String formatExtension;
protected AnalysisEditor(A analysis, String template, String formatExtension) {
super(analysis);
this.formatExtension = formatExtension;
this.template = template;
setIcon(IconUtils.getIconResource(IconNames.LOGO_ANALYSIS_DETAILS16));
createComponents();
}
@Override
protected FileFormat[] getFileFormats() {
return new FileFormat[]{
new FileFormat("Single file (*." + formatExtension + ".zip)", formatExtension + ".zip", false, false),
new FileFormat("Multiple files (*." + formatExtension + ")", formatExtension, false, false)
};
}
protected String getFormatExtension() {
return formatExtension;
}
private void createComponents() {
templatePanel = new TemplatePanel() {
@Override
protected void submitForm(String method, URL action, String target, String enctype, FormInput[] formInputs) throws LinkVetoException {
AnalysisEditor.this.submitForm(method, action, target, enctype, formInputs);
}
@Override
protected void performAction(String name, Map<String, String> params) {
AnalysisEditor.this.performUrlAction(name, params);
}
};
try {
URL url = getClass().getResource(template);
templatePanel.setTemplateFromResource(template, url);
VelocityContext context = new VelocityContext();
context.put("fmt", HeatmapTextFormatter.TWO_DECIMALS);
context.put("analysis", getModel());
prepareContext(context);
templatePanel.render(context);
} catch (Exception e) {
LogUtils.logException(e, log);
}
setLayout(new BorderLayout());
add(templatePanel, BorderLayout.CENTER);
}
protected void prepareContext(VelocityContext context) {
}
@Override
public void doVisible() {
templatePanel.requestFocusInWindow();
}
void submitForm(String method, URL action, String target, String enctype, FormInput[] formInputs) {
}
protected abstract void performUrlAction(String name, Map<String, String> params);
}