Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.exportto / org.gvsig.exportto.swing / org.gvsig.exportto.swing.impl / src / main / java / org / gvsig / export / swing / impl / DefaultExportPanelsManager.java @ 43925

History | View | Annotate | Download (3.41 KB)

1
package org.gvsig.export.swing.impl;
2

    
3
import java.lang.reflect.Constructor;
4
import java.util.HashMap;
5
import java.util.Map;
6
import org.gvsig.export.ExportParameters;
7
import org.gvsig.export.swing.JExportProcessPanel;
8
import org.gvsig.export.swing.impl.panels.CheckGeometriesPanel;
9
import org.gvsig.export.swing.impl.panels.SelectFilterPanel;
10
import org.gvsig.export.swing.impl.panels.SelectGeometryTypePanel;
11
import org.gvsig.export.swing.impl.panels.SelectOutputFilePanel;
12
import org.gvsig.export.swing.impl.panels.SelectTargetProjectionPanel;
13
import org.gvsig.export.swing.impl.panels.SelectGeometryFieldPanel;
14
import org.gvsig.export.swing.spi.ExportPanel;
15
import org.gvsig.export.swing.spi.ExportPanelsFactory;
16
import org.gvsig.export.swing.spi.ExportPanelsManager;
17
import org.slf4j.Logger;
18
import org.slf4j.LoggerFactory;
19

    
20
/**
21
 *
22
 * @author jjdelcerro
23
 */
24
public class DefaultExportPanelsManager
25
        implements ExportPanelsManager {
26

    
27
    private static final Logger LOG = LoggerFactory.getLogger(DefaultExportPanelsManager.class);
28

    
29
    private final Map<String, ExportPanelsFactory> factories;
30
    private final Map<String, Class<? extends ExportPanel>> stdPanels;
31

    
32
    public DefaultExportPanelsManager() {
33
        super();
34
        this.factories = new HashMap<>();
35
        this.stdPanels = new HashMap();
36
        this.stdPanels.put(PANEL_CHECK_GEOMETRIES, CheckGeometriesPanel.class);
37
        this.stdPanels.put(PANEL_SELECT_FILTER, SelectFilterPanel.class);
38
        this.stdPanels.put(PANEL_SELECT_GEOMETRY_TYPE, SelectGeometryTypePanel.class);
39
        this.stdPanels.put(PANEL_SELECT_OUTPUT_FILE, SelectOutputFilePanel.class);
40
        this.stdPanels.put(PANEL_SELECT_TARGET_PROJECTION, SelectTargetProjectionPanel.class);
41
        this.stdPanels.put(PANEL_SELECT_GEOMETRY_FIELD, SelectGeometryFieldPanel.class);
42

    
43
    }
44

    
45
    @Override
46
    public ExportPanelsFactory getPanelsFactory(String name) {
47
        ExportPanelsFactory factory = this.factories.get(name);
48
        if (factory == null) {
49
            throw new IllegalArgumentException("Don't exists export panels factory '" + name + "'.");
50
        }
51
        return factory;
52
    }
53

    
54
    @Override
55
    public void register(ExportPanelsFactory factory) {
56
        this.factories.put(factory.getName(), factory);
57
    }
58

    
59
    @Override
60
    public ExportPanel createStandardPanel(
61
            String panelId,
62
            JExportProcessPanel processPanel,
63
            ExportParameters parameters,
64
            Object... args
65
    ) {
66
        Class<? extends ExportPanel> panelClass = this.stdPanels.get(panelId);
67
        if (panelClass == null) {
68
            throw new IllegalArgumentException("The panel '"+panelId+"' is not registered.");
69
        }
70
        Class[] classArgs = new Class[args.length + 2];
71
        Object[] args2 = new Object[args.length + 2];
72
        classArgs[0] = JExportProcessPanel.class;
73
        classArgs[1] = ExportParameters.class;
74
        args2[0] = processPanel;
75
        args2[1] = parameters;
76
        for (int i = 0; i < args.length; i++) {
77
            classArgs[i + 2] = args[i].getClass();
78
            args2[i + 2] = args[i];
79
        }
80
        try {
81
            Constructor<? extends ExportPanel> constructor = panelClass.getConstructor(classArgs);
82
            ExportPanel panel = constructor.newInstance(args2);
83
            return panel;
84
        } catch (Exception ex) {
85
            throw new IllegalArgumentException("Can't create a standard panel with id '" + panelId + "'.", ex);
86
        }
87
    }
88

    
89
}