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 @ 44395

History | View | Annotate | Download (3.7 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.impl.panels.SelectAttributesPanel;
15
import org.gvsig.export.swing.impl.panels.SelectCharsetPanel;
16
import org.gvsig.export.swing.spi.ExportPanel;
17
import org.gvsig.export.swing.spi.ExportPanelsFactory;
18
import org.gvsig.export.swing.spi.ExportPanelsManager;
19
import org.slf4j.Logger;
20
import org.slf4j.LoggerFactory;
21

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

    
29
    private static final Logger LOG = LoggerFactory.getLogger(DefaultExportPanelsManager.class);
30

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

    
34
    public DefaultExportPanelsManager() {
35
        super();
36
        this.factories = new HashMap<>();
37
        this.stdPanels = new HashMap();
38
        this.stdPanels.put(PANEL_CHECK_GEOMETRIES, CheckGeometriesPanel.class);
39
        this.stdPanels.put(PANEL_SELECT_CHARSET, SelectCharsetPanel.class );
40
        this.stdPanels.put(PANEL_SELECT_FILTER, SelectFilterPanel.class);
41
        this.stdPanels.put(PANEL_ATTRIBUTES_SELECTION, SelectAttributesPanel.class);
42
        this.stdPanels.put(PANEL_SELECT_GEOMETRY_TYPE, SelectGeometryTypePanel.class);
43
        this.stdPanels.put(PANEL_SELECT_OUTPUT_FILE, SelectOutputFilePanel.class);
44
        this.stdPanels.put(PANEL_SELECT_TARGET_PROJECTION, SelectTargetProjectionPanel.class);
45
        this.stdPanels.put(PANEL_SELECT_GEOMETRY_FIELD, SelectGeometryFieldPanel.class);
46
        
47

    
48
    }
49

    
50
    @Override
51
    public ExportPanelsFactory getPanelsFactory(String name) {
52
        ExportPanelsFactory factory = this.factories.get(name);
53
        if (factory == null) {
54
            throw new IllegalArgumentException("Don't exists export panels factory '" + name + "'.");
55
        }
56
        return factory;
57
    }
58

    
59
    @Override
60
    public void register(ExportPanelsFactory factory) {
61
        this.factories.put(factory.getName(), factory);
62
    }
63

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

    
94
}