Revision 8035

View differences:

org.gvsig.report/trunk/org.gvsig.report/org.gvsig.report.swing/org.gvsig.report.swing.impl/src/main/java/org/gvsig/report/swing/impl/ReportSwingImplLibrary.java
29 29
import org.gvsig.report.lib.api.ReportLibrary;
30 30
import org.gvsig.report.swing.api.ReportSwingLibrary;
31 31
import org.gvsig.report.swing.api.ReportSwingLocator;
32
import org.gvsig.report.swing.impl.actions.JasperReportActionFactory;
33
import org.gvsig.report.swing.impl.actions.UserDefinedReportCustomActionFactory;
32 34
import org.gvsig.report.swing.impl.reportbuilder.DefaultJReportBuilder;
33 35
import org.gvsig.report.swing.impl.reportserver.dataset.DataSetPageFactory;
34 36
import org.gvsig.report.swing.impl.reportserver.service.ServicePageFactory;
......
72 74

  
73 75
    @Override
74 76
    protected void doPostInitialize() throws LibraryException {
77
        JasperReportActionFactory.selfRegister();
78
        UserDefinedReportCustomActionFactory.selfRegister();
75 79
    }
76 80

  
77 81
    private void registerIcons() {
org.gvsig.report/trunk/org.gvsig.report/org.gvsig.report.swing/org.gvsig.report.swing.impl/src/main/java/org/gvsig/report/swing/impl/actions/JasperReportAction.java
1
package org.gvsig.report.swing.impl.actions;
2

  
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import javax.json.JsonObject;
6
import org.gvsig.expressionevaluator.Expression;
7
import org.gvsig.fmap.dal.feature.FeatureQuery;
8
import org.gvsig.fmap.dal.feature.FeatureSet;
9
import org.gvsig.fmap.dal.feature.FeatureStore;
10
import org.gvsig.fmap.dal.feature.LabelsCacheForFieldValues;
11
import org.gvsig.fmap.dal.swing.report.AbstractReportAction;
12
import org.gvsig.fmap.dal.swing.report.ReportAction;
13
import org.gvsig.fmap.dal.swing.report.ReportActionFactory;
14
import org.gvsig.report.lib.api.Report;
15
import org.gvsig.report.lib.api.ReportConfig;
16
import org.gvsig.report.lib.api.ReportLocator;
17
import org.gvsig.report.swing.api.JReport;
18
import org.gvsig.report.swing.api.ReportSwingLocator;
19
import org.gvsig.report.swing.api.ReportSwingManager;
20
import org.gvsig.tools.ToolsLocator;
21
import org.gvsig.tools.dynobject.DynObjectManager;
22
import org.gvsig.tools.i18n.I18nManager;
23
import org.gvsig.tools.swing.api.ToolsSwingLocator;
24
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
25
import org.slf4j.Logger;
26
import org.slf4j.LoggerFactory;
27

  
28
/**
29
 *
30
 * @author jjdelcerro
31
 */
32
@SuppressWarnings("UseSpecificCatch")
33
public class JasperReportAction extends AbstractReportAction implements ReportAction {
34

  
35
    private static final Logger LOGGER = LoggerFactory.getLogger(JasperReportAction.class);
36

  
37
    private final JsonObject json;
38
    private final  FeatureSet selection;
39
    private final FeatureStore store;
40
    private final FeatureQuery query;
41

  
42
    @SuppressWarnings("OverridableMethodCallInConstructor")
43
    public JasperReportAction(ReportActionFactory factory, FeatureStore store, FeatureQuery query, FeatureSet selection, final JsonObject json) {
44
        super(factory, null);
45
        this.json = json;
46
        this.setLabel(this.json.getString("name", store.getName()));
47
        this.selection = selection;
48
        this.store = store;
49
        this.query = query;
50
    }
51

  
52
    @Override
53
    public void actionPerformed(ActionEvent e) {
54
        org.gvsig.report.lib.api.ReportManager manager = ReportLocator.getReportManager();                
55
        ReportConfig reportConfig = manager.createReportConfig();
56
        reportConfig.fromJSON(json);
57
        if (!reportConfig.hasDataSet()) {
58
            reportConfig.setDataSet(manager.createDataSet(store, query));
59
        }
60
        Report report = reportConfig.createReport();
61
        doShowReport(report);
62
    }
63
    
64
    private void doShowReport(Report report) {
65
        I18nManager i18n = ToolsLocator.getI18nManager();
66
        WindowManager winManager = ToolsSwingLocator.getWindowManager();
67

  
68
        ReportSwingManager swingManager = ReportSwingLocator.getReportSwingManager();
69
        FeatureQuery theQuery = this.query.getCopy();
70
        Expression filter;
71
        if( !this.selection.isEmpty() ) {
72
            filter = this.selection.makeFilter(100);
73
            if( filter == null ) {
74
                filter = theQuery.getExpressionFilter();
75
            }
76
        } else {
77
            filter = theQuery.getExpressionFilter();
78
        }
79

  
80
        theQuery.retrievesAllAttributes();
81
        JReport reportPanel = swingManager.createJReport(report, filter);
82
        reportPanel.asJComponent().setPreferredSize(new Dimension(800, 500));
83
        winManager.showWindow(
84
                reportPanel.asJComponent(),
85
                i18n.getTranslation("_Report") + ": " + report.getName(),
86
                WindowManager.MODE.WINDOW
87
        );
88
    }
89

  
90
}
org.gvsig.report/trunk/org.gvsig.report/org.gvsig.report.swing/org.gvsig.report.swing.impl/src/main/java/org/gvsig/report/swing/impl/actions/JasperReportActionFactory.java
1
package org.gvsig.report.swing.impl.actions;
2

  
3
import javax.json.JsonObject;
4
import org.apache.commons.lang3.StringUtils;
5
import org.gvsig.fmap.dal.feature.FeatureQuery;
6
import org.gvsig.fmap.dal.feature.FeatureSelection;
7
import org.gvsig.fmap.dal.feature.FeatureStore;
8
import org.gvsig.fmap.dal.swing.DALSwingLocator;
9
import org.gvsig.fmap.dal.swing.DataSwingManager;
10
import org.gvsig.fmap.dal.swing.report.AbstractReportActionFactory;
11
import org.gvsig.fmap.dal.swing.report.ReportAction;
12
import org.gvsig.fmap.dal.swing.report.ReportActionFactory;
13

  
14
/**
15
 *
16
 * @author jjdelcerro
17
 */
18
public class JasperReportActionFactory extends AbstractReportActionFactory implements ReportActionFactory {
19

  
20
    public JasperReportActionFactory() {
21
        super("jasper");
22
    }
23

  
24
    @Override
25
    public ReportAction createReportAction(FeatureStore store, FeatureQuery query, FeatureSelection selecteds, JsonObject json) {
26
        String type = json.getString("type", "jasper");
27
        if( !StringUtils.equalsIgnoreCase(type, "jasper") ) {
28
            return null;
29
        }
30
        ReportAction reportAction = new JasperReportAction(this, store, query, selecteds, json);
31
        return reportAction;
32
    }
33
    
34
    public static void selfRegister() {
35
        DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
36
        dalSwingManager.registerReportAction(new JasperReportActionFactory());
37
    }
38

  
39
    @Override
40
    public boolean isApplicable(Object... args) {
41
        JsonObject json = (JsonObject) args[0];
42
        String type = json.getString("type", "jasper").trim();
43
        return StringUtils.equalsIgnoreCase(type, "jasper");
44
    }
45
    
46
}
org.gvsig.report/trunk/org.gvsig.report/org.gvsig.report.swing/org.gvsig.report.swing.impl/src/main/java/org/gvsig/report/swing/impl/actions/UserDefinedReportCustomActionFactory.java
1
package org.gvsig.report.swing.impl.actions;
2

  
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import javax.swing.AbstractAction;
6
import javax.swing.Action;
7
import org.gvsig.expressionevaluator.Expression;
8
import org.gvsig.fmap.dal.feature.FeatureQuery;
9
import org.gvsig.fmap.dal.feature.FeatureStore;
10
import org.gvsig.fmap.dal.feature.FeatureType;
11
import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
12
import org.gvsig.fmap.dal.swing.DALSwingLocator;
13
import org.gvsig.fmap.dal.swing.DataSwingManager;
14
import org.gvsig.fmap.dal.swing.report.ReportActionFactory.ReportCustomActionFactory;
15
import org.gvsig.report.lib.api.Report;
16
import org.gvsig.report.lib.api.ReportBuilder;
17
import org.gvsig.report.lib.api.ReportDataSet;
18
import org.gvsig.report.lib.api.ReportLocator;
19
import org.gvsig.report.lib.api.ReportManager;
20
import org.gvsig.report.swing.api.JReport;
21
import org.gvsig.report.swing.api.JReportBuilder;
22
import org.gvsig.report.swing.api.ReportSwingLocator;
23
import org.gvsig.report.swing.api.ReportSwingManager;
24
import org.gvsig.tools.ToolsLocator;
25
import org.gvsig.tools.i18n.I18nManager;
26
import org.gvsig.tools.swing.api.ToolsSwingLocator;
27
import org.gvsig.tools.swing.api.windowmanager.Dialog;
28
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
29
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
30
import org.gvsig.tools.swing.impl.windowmanager.DefaultDialog;
31
import org.slf4j.Logger;
32
import org.slf4j.LoggerFactory;
33

  
34
/**
35
 *
36
 * @author jjdelcerro
37
 */
38
@SuppressWarnings("UseSpecificCatch")
39
public class UserDefinedReportCustomActionFactory implements ReportCustomActionFactory {
40

  
41
    private static final Logger LOGGER = LoggerFactory.getLogger(UserDefinedReportCustomActionFactory.class);
42

  
43
    public UserDefinedReportCustomActionFactory() {
44
    }
45

  
46
    @Override
47
    public String getName() {
48
        return "UserDefinedReport";
49
    }
50

  
51
    @Override
52
    public Action createCustomAction(ActionEvent event, DALActionContext context) {
53
        I18nManager i18n = ToolsLocator.getI18nManager();
54
        Action action = new AbstractAction(i18n.getTranslation("_User_defined")) {
55
            @Override
56
            public void actionPerformed(ActionEvent e) {
57
                WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
58
                ReportSwingManager reportSwingManager = ReportSwingLocator.getReportSwingManager();
59
                final ReportManager reportManager = ReportLocator.getReportManager();
60

  
61
                final FeatureStore store = (FeatureStore) context.getStore();
62

  
63
                FeatureType featureType;
64
                try {
65
                    featureType = store.getDefaultFeatureType();
66
                } catch (Exception ex) {
67
                    // TODO: Deberia hacer algo mas?
68
                    LOGGER.warn("Can't get feature type to make JReportBuilder", ex);
69
                    return;
70
                }
71

  
72
                final ReportBuilder builder = reportManager.createReportBuilder();
73
                final JReportBuilder panel = reportSwingManager.createJReportBuilder();
74
                panel.setFeatureType(featureType);
75

  
76
                builder.title(store.getName());
77
                panel.put(builder);
78
                final Dialog dialog = winmgr.createDialog(
79
                        panel.asJComponent(),
80
                        i18n.getTranslation("_Report_builder"),
81
                        null,
82
                        WindowManager_v2.BUTTONS_APPLY_OK_CANCEL
83
                );
84
                dialog.setAutoclose(false);
85

  
86
                dialog.addActionListener((ActionEvent e1) -> {
87
                    if (dialog.getAction() == WindowManager_v2.BUTTON_CANCEL) {
88
                        ((DefaultDialog) dialog).setVisible(false);
89
                        return;
90
                    }
91

  
92
                    StringBuilder msg = new StringBuilder();
93
                    FeatureQuery fquery = context.getQuery();
94
                    if( fquery!=null ) {
95
                        fquery = fquery.getCopy();
96
                    }
97
                    panel.setFeatureQuery(fquery);
98
                    if (!panel.checkPanel(msg)) {
99
                        return;
100
                    }
101
                    ReportBuilder fetchBuilder = reportManager.createReportBuilder();
102
                    panel.fetch(fetchBuilder);
103
                    if (dialog.getAction() == WindowManager_v2.BUTTONS_OK) {
104
                        ((DefaultDialog) dialog).setVisible(false);
105
                    }
106

  
107
                    ReportDataSet reportDataSet = reportManager.createDataSet(store, fquery);
108
                    Report report = fetchBuilder.toReport(reportDataSet);
109
                    doShowReport(report, context);
110
                });
111
                dialog.show(WindowManager.MODE.WINDOW);
112
            }
113
        };
114
        return action;
115
    }
116

  
117
    private void doShowReport(Report report, DALActionContext context) {
118
        I18nManager i18n = ToolsLocator.getI18nManager();
119
        WindowManager winManager = ToolsSwingLocator.getWindowManager();
120

  
121
        ReportSwingManager swingManager = ReportSwingLocator.getReportSwingManager();
122
        FeatureQuery query = context.getQuery();
123
        if( query!=null ) {
124
            query = query.getCopy();
125
        }
126
        Expression filter = null;
127
        if (context.getSelectedsCount() > 0) {
128
            filter = context.getFilterForSelecteds();
129
        } else {
130
            if( query!=null ) {
131
                filter = query.getExpressionFilter();
132
            }
133
        }
134

  
135
        if( query!=null ) {
136
            query.retrievesAllAttributes();
137
        }
138
        JReport reportPanel = swingManager.createJReport(report, filter);
139
        reportPanel.asJComponent().setPreferredSize(new Dimension(800, 500));
140
        winManager.showWindow(
141
                reportPanel.asJComponent(),
142
                i18n.getTranslation("_Report") + ": " + report.getName(),
143
                WindowManager.MODE.WINDOW
144
        );
145
    }
146
    
147
    public static void selfRegister() {
148
        DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
149
        dalSwingManager.registerReportsCustomAction(new UserDefinedReportCustomActionFactory(), true);
150
    }
151
}
org.gvsig.report/trunk/org.gvsig.report/pom.xml
3 3
    <parent>
4 4
        <groupId>org.gvsig</groupId>
5 5
        <artifactId>org.gvsig.desktop</artifactId>
6
        <version>2.0.409</version>
6
        <version>2.0.411-SNAPSHOT</version>
7 7
    </parent>
8 8
    <artifactId>org.gvsig.report</artifactId>
9 9
    <version>1.0.146-SNAPSHOT</version>
org.gvsig.report/trunk/org.gvsig.report/org.gvsig.report.app/org.gvsig.report.app.mainplugin/src/main/java/org/gvsig/report/app/mainplugin/StoreReportsAction.java
1
package org.gvsig.report.app.mainplugin;
2

  
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.io.InputStream;
6
import java.net.URL;
7
import java.util.ArrayList;
8
import java.util.List;
9
import javax.json.Json;
10
import javax.json.JsonObject;
11
import javax.swing.AbstractAction;
12
import javax.swing.Action;
13
import javax.swing.JComponent;
14
import javax.swing.JMenuItem;
15
import javax.swing.JPopupMenu;
16
import org.apache.commons.io.IOUtils;
17
import org.gvsig.app.ApplicationLocator;
18
import org.gvsig.app.project.DocumentsContainerNotification;
19
import org.gvsig.app.project.Project;
20
import org.gvsig.expressionevaluator.Expression;
21
import org.gvsig.fmap.dal.DataStore;
22
import org.gvsig.fmap.dal.feature.FeatureQuery;
23
import org.gvsig.fmap.dal.feature.FeatureSelection;
24
import org.gvsig.fmap.dal.feature.FeatureStore;
25
import org.gvsig.fmap.dal.feature.FeatureType;
26
import org.gvsig.fmap.dal.swing.DALSwingLocator;
27
import org.gvsig.fmap.dal.swing.DataSwingManager;
28
import org.gvsig.report.lib.api.Report;
29
import org.gvsig.report.lib.api.ReportDataSet;
30
import org.gvsig.report.lib.api.ReportLocator;
31
import org.gvsig.report.swing.api.JReport;
32
import org.gvsig.report.swing.api.ReportSwingLocator;
33
import org.gvsig.report.swing.api.ReportSwingManager;
34
import org.gvsig.tools.ToolsLocator;
35
import org.gvsig.tools.i18n.I18nManager;
36
import org.gvsig.tools.observer.Observable;
37
import org.gvsig.tools.swing.api.ToolsSwingLocator;
38
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
39
import org.gvsig.tools.swing.icontheme.IconTheme;
40
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
41
import org.gvsig.tools.resourcesstorage.ResourcesStorage.Resource;
42
import org.slf4j.Logger;
43
import org.slf4j.LoggerFactory;
44
import org.gvsig.fmap.dal.swing.DALActionFactory;
45
import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
46
import org.gvsig.pdf.swing.api.DynamicTextReport;
47
import org.gvsig.pdf.swing.api.PDFSwingLocator;
48
import org.gvsig.pdf.swing.api.PDFSwingManager;
49
import org.gvsig.report.lib.api.ReportBuilder;
50
import org.gvsig.report.lib.api.ReportConfig;
51
import org.gvsig.report.lib.api.ReportManager;
52
import org.gvsig.report.swing.api.JReportBuilder;
53
import org.gvsig.tools.dispose.DisposeUtils;
54
import org.gvsig.tools.swing.api.windowmanager.Dialog;
55
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
56
import org.gvsig.tools.swing.impl.windowmanager.DefaultDialog;
57

  
58
/**
59
 *
60
 * @author jjdelcerro
61
 */
62
@SuppressWarnings("UseSpecificCatch")
63
public class StoreReportsAction
64
        extends AbstractAction {
65

  
66
    public static String ACTION_NAME = "Reports";
67

  
68
    public static class ReportsActionFactory implements DALActionFactory {
69

  
70
        @Override
71
        public String getName() {
72
            return ACTION_NAME;
73
        }
74

  
75
        @Override
76
        public Action createAction(DALActionContext context) {
77
            return new StoreReportsAction(context);
78
        }
79
            
80
	@Override
81
        public boolean isApplicable(Object... args) {
82
            return true;
83
        }
84

  
85
        public static void selfRegister() {
86
            DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
87
            dalSwingManager.registerStoreAction(new ReportsActionFactory());
88
            String[][] iconNames = new String[][]{
89
                new String[]{"Report", "report-select-reports"}
90
            };
91
            IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
92
            for (String[] icon : iconNames) {
93
                URL url = StoreReportsAction.class.getResource("/images/report/" + icon[1] + ".png");
94
                theme.registerDefault("Report", icon[0], icon[1], null, url);
95
            }
96
        }
97

  
98
    }
99

  
100
    private static final Logger LOGGER = LoggerFactory.getLogger(StoreReportsAction.class);
101

  
102
    private final DALActionContext context;
103

  
104
    @SuppressWarnings("OverridableMethodCallInConstructor")
105
    public StoreReportsAction(DALActionContext context) {
106
        this.context = context;
107
        I18nManager i18n = ToolsLocator.getI18nManager();
108
        this.putValue(
109
                Action.ACTION_COMMAND_KEY,
110
                ACTION_NAME
111
        );
112
        this.putValue(
113
                Action.SHORT_DESCRIPTION,
114
                i18n.getTranslation("_Reports")
115
        );
116
        this.putValue(
117
                Action.SMALL_ICON,
118
                ToolsSwingLocator.getIconThemeManager().getCurrent().get("report-select-reports")
119
        );
120
        Project project = ApplicationLocator.getProjectManager().getCurrentProject();
121
        project.addObserver((Observable observable, Object notification) -> {
122
            if (notification instanceof DocumentsContainerNotification) {
123
                DocumentsContainerNotification n = (DocumentsContainerNotification) notification;
124
                switch (n.getNotificationType()) {
125
                    case DocumentsContainerNotification.AFTER_ADD_DOCUMENT:
126
                    case DocumentsContainerNotification.AFTER_REMOVE_DOCUMENT:
127
                        updateEnabled();
128
                }
129
            }
130
        });
131
        updateEnabled();
132
    }
133

  
134
    private List<JsonObject> getReports(Project project, FeatureStore store) {
135
        List<JsonObject> reports = new ArrayList<>();
136
        ResourcesStorage resources = null;
137
        try {
138
            resources = store.getResourcesStorage();
139
            if (resources != null) {
140
                List<Resource> reportsResources = resources.getResources("report");
141
                if (reportsResources != null && !reportsResources.isEmpty()) {
142
                    for (Resource resource : reportsResources) {
143
                        InputStream is = null;
144
                        try {
145
                            is = resource.asInputStream();
146
                            JsonObject json = Json.createReader(is).readObject();
147
                            String type = json.getString("type", "jasper").trim().toLowerCase();
148
                            switch(type) {
149
                                case "jasper":
150
                                    reports.add(json);
151
                                    break;
152
                                case "dynamictext":
153
                                    reports.add(json);
154
                                    break;
155
                            }
156
                        } catch (Exception ex) {
157
                            LOGGER.warn("Can't load report form resource (" + resource.getURL() + ")", ex);
158
                        } finally {
159
                            IOUtils.closeQuietly(is);
160
                        }
161
                    }
162
                }
163
            }
164
        } finally {
165
            DisposeUtils.disposeQuietly(resources);
166
        }
167
        if (reports.isEmpty()) {
168
            return null;
169
        }
170
        return reports;
171
    }
172

  
173
    private void updateEnabled() {
174
        Project project = ApplicationLocator.getProjectManager().getCurrentProject();
175
        DataStore store = this.context.getStore();
176
        if (!(store instanceof FeatureStore)) {
177
            return;
178
        }
179
        List<JsonObject> reports = this.getReports(project, (FeatureStore) store);
180
        if (reports == null || reports.isEmpty()) {
181
            this.setEnabled(false);
182
        } else {
183
            this.setEnabled(true);
184
        }
185
    }
186

  
187
    @Override
188
    public void actionPerformed(ActionEvent e) {
189
        try {
190
            this.setEnabled(false);
191
            DataStore store = this.context.getStore();
192
            if (!(store instanceof FeatureStore)) {
193
                return;
194
            }
195
            JPopupMenu popup = new JPopupMenu();
196
            Project project = ApplicationLocator.getProjectManager().getCurrentProject();
197
            List<JsonObject> reports = this.getReports(project, (FeatureStore) store);
198
            if (reports != null && !reports.isEmpty()) {
199
                for (JsonObject json : reports) {
200
                    popup.add(this.createItem((FeatureStore) store, this.context.getQuery(), this.context.getSelecteds(), json));
201
                }
202
                popup.addSeparator();
203
            }
204
            popup.add(this.createReportBuilderItem());
205
            JComponent button = this.context.getActionButton(ACTION_NAME);
206
            popup.show(button, 0, button.getHeight());
207
        } catch (Exception ex) {
208
            LOGGER.warn("Can't show form", ex);
209
        } finally {
210
            this.setEnabled(true);
211
        }
212
    }
213

  
214
    private JMenuItem createItem(FeatureStore store, FeatureQuery query, FeatureSelection selecteds, final  JsonObject json) {
215
        
216
        JMenuItem item = null;
217
        String type = json.getString("type", "jasper").trim().toLowerCase();
218
        switch(type) {
219
            case "jasper":
220
                org.gvsig.report.lib.api.ReportManager manager = ReportLocator.getReportManager();                
221
                ReportConfig reportConfig = manager.createReportConfig();
222
                reportConfig.fromJSON(json);
223
                if (!reportConfig.hasDataSet()) {
224
                    reportConfig.setDataSet(manager.createDataSet(store, query));
225
                }
226
                item = new JMenuItem(reportConfig.getName());
227
                item.addActionListener((ActionEvent e) -> {
228
                    Report report = reportConfig.createReport();
229
                    doShowReport(report);
230
                });
231
                item.setEnabled(reportConfig.isValid(null));
232
                break;
233
            case "dynamictext":
234
                PDFSwingManager pdfSwingManager = PDFSwingLocator.getPDFSwingManager();
235
                DynamicTextReport dtreport = pdfSwingManager.createDynamicTextReport(store, query, selecteds, json);
236
                item = new JMenuItem(dtreport.getName());
237
                item.addActionListener((ActionEvent e) -> {
238
                    dtreport.show();
239
                });
240
                item.setEnabled(dtreport.isValid());
241
                break;
242
        }
243
        return item;
244
    }
245
    
246
    private JMenuItem createReportBuilderItem() {
247
        I18nManager i18n = ToolsLocator.getI18nManager();
248
        JMenuItem item = new JMenuItem(i18n.getTranslation("_User_defined"));
249
        item.addActionListener((ActionEvent e) -> {
250
            WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
251
            ReportSwingManager reportSwingManager = ReportSwingLocator.getReportSwingManager();
252
            final ReportManager reportManager = ReportLocator.getReportManager();
253
            
254
            final FeatureStore store = (FeatureStore) context.getStore();
255
            
256
            FeatureType featureType;
257
            try {
258
                featureType = store.getDefaultFeatureType();
259
            } catch (Exception ex) {
260
                // TODO: Deberia hacer algo mas?
261
                LOGGER.warn("Can't get feature type to make JReportBuilder", ex);
262
                return;
263
            }
264
            
265
            final ReportBuilder builder = reportManager.createReportBuilder();
266
            final JReportBuilder panel = reportSwingManager.createJReportBuilder();
267
            panel.setFeatureType(featureType);
268
            
269
            builder.title(store.getName());
270
            panel.put(builder);
271
            final Dialog dialog = winmgr.createDialog(
272
                    panel.asJComponent(),
273
                    i18n.getTranslation("_Report_builder"),
274
                    null,
275
                    WindowManager_v2.BUTTONS_APPLY_OK_CANCEL
276
            );
277
            dialog.setAutoclose(false);
278
            
279
            
280
            dialog.addActionListener((ActionEvent e1) -> {
281
                if (dialog.getAction() == WindowManager_v2.BUTTON_CANCEL) {
282
                    ((DefaultDialog) dialog).setVisible(false);
283
                    return;
284
                }
285
                
286
                StringBuilder msg = new StringBuilder();
287
                FeatureQuery fquery = context.getQuery().getCopy();
288
                panel.setFeatureQuery(fquery);
289
                if (!panel.checkPanel(msg)) {
290
                    return;
291
                }
292
                ReportBuilder fetchBuilder = reportManager.createReportBuilder();
293
                panel.fetch(fetchBuilder);
294
                if (dialog.getAction() == WindowManager_v2.BUTTONS_OK) {
295
                    ((DefaultDialog) dialog).setVisible(false);
296
                }
297
                
298
                ReportDataSet reportDataSet = reportManager.createDataSet(store, fquery);
299
                Report report = fetchBuilder.toReport(reportDataSet);
300
                doShowReport(report);
301
            });
302
            dialog.show(WindowManager.MODE.WINDOW);
303
        });
304
        return item;
305
    }
306

  
307
    private void doShowReport(Report report) {
308
        I18nManager i18n = ToolsLocator.getI18nManager();
309
        WindowManager winManager = ToolsSwingLocator.getWindowManager();
310

  
311
        ReportSwingManager swingManager = ReportSwingLocator.getReportSwingManager();
312
        FeatureQuery query = this.context.getQuery().getCopy();
313
        Expression filter;
314
        if (this.context.getSelectedsCount() > 0) {
315
            filter = this.context.getFilterForSelecteds();
316
        } else {
317
            filter = query.getExpressionFilter();
318
        }
319

  
320
        query.retrievesAllAttributes();
321
        JReport reportPanel = swingManager.createJReport(report, filter);
322
        reportPanel.asJComponent().setPreferredSize(new Dimension(800, 500));
323
        winManager.showWindow(
324
                reportPanel.asJComponent(),
325
                i18n.getTranslation("_Report") + ": " + report.getName(),
326
                WindowManager.MODE.WINDOW
327
        );
328
    }
329
}
org.gvsig.report/trunk/org.gvsig.report/org.gvsig.report.app/org.gvsig.report.app.mainplugin/src/main/java/org/gvsig/report/app/mainplugin/ReportExtension.java
107 107
        PropertiesPageManager propertiesManager = ToolsUtilLocator.getPropertiesPageManager();
108 108
        propertiesManager.registerFactory(new ProjectReportPanelPageFactory());
109 109

  
110
        StoreReportsAction.ReportsActionFactory.selfRegister();
111

  
112 110
        registerInCatalog();
113 111

  
114 112
        ConfigurableActionsMamager cfgActionsManager = ToolsUtilLocator.getConfigurableActionsMamager();

Also available in: Unified diff