svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / actions / ReportStoreAction.java @ 47426
History | View | Annotate | Download (6.34 KB)
1 | 47049 | jjdelcerro | package org.gvsig.fmap.dal.swing.impl.actions; |
---|---|---|---|
2 | |||
3 | import java.awt.event.ActionEvent; |
||
4 | import java.net.URL; |
||
5 | import java.util.LinkedHashMap; |
||
6 | import java.util.List; |
||
7 | import java.util.Map; |
||
8 | import javax.json.JsonObject; |
||
9 | import javax.swing.AbstractAction; |
||
10 | import javax.swing.Action; |
||
11 | import javax.swing.JComponent; |
||
12 | import javax.swing.JMenuItem; |
||
13 | import javax.swing.JPopupMenu; |
||
14 | import org.apache.commons.lang3.tuple.ImmutablePair; |
||
15 | import org.apache.commons.lang3.tuple.Pair; |
||
16 | import org.gvsig.fmap.dal.DataStore; |
||
17 | import org.gvsig.fmap.dal.feature.FeatureStore; |
||
18 | 47340 | fdiaz | import org.gvsig.fmap.dal.swing.DALActionFactory; |
19 | import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext; |
||
20 | 47049 | jjdelcerro | import org.gvsig.fmap.dal.swing.DALSwingLocator; |
21 | import org.gvsig.fmap.dal.swing.DataSwingManager; |
||
22 | 47426 | jjdelcerro | import static org.gvsig.fmap.dal.swing.impl.DefaultDALSwingLibrary.LIBRARY_NAME; |
23 | 47340 | fdiaz | import static org.gvsig.fmap.dal.swing.impl.actions.ReportUtils.getReportActions; |
24 | import static org.gvsig.fmap.dal.swing.impl.actions.ReportUtils.getReports; |
||
25 | 47426 | jjdelcerro | import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel; |
26 | 47340 | fdiaz | import org.gvsig.fmap.dal.swing.report.ReportAction; |
27 | import org.gvsig.fmap.dal.swing.report.ReportActionFactory; |
||
28 | import org.gvsig.fmap.dal.swing.report.ReportActionFactory.ReportCustomActionFactory; |
||
29 | 47049 | jjdelcerro | import org.gvsig.tools.ToolsLocator; |
30 | import org.gvsig.tools.i18n.I18nManager; |
||
31 | import org.gvsig.tools.swing.api.ToolsSwingLocator; |
||
32 | 47426 | jjdelcerro | import org.gvsig.tools.swing.api.ToolsSwingUtils; |
33 | 47049 | jjdelcerro | import org.gvsig.tools.swing.icontheme.IconTheme; |
34 | import org.slf4j.Logger; |
||
35 | import org.slf4j.LoggerFactory; |
||
36 | |||
37 | /**
|
||
38 | *
|
||
39 | * @author jjdelcerro
|
||
40 | */
|
||
41 | @SuppressWarnings("UseSpecificCatch") |
||
42 | public class ReportStoreAction |
||
43 | extends AbstractAction { |
||
44 | |||
45 | public static String ACTION_NAME = "Reports"; |
||
46 | |||
47 | public static class ReportStoreActionFactory implements DALActionFactory { |
||
48 | |||
49 | private final Map<String,Pair<ReportCustomActionFactory,Boolean>> customActions; |
||
50 | |||
51 | public ReportStoreActionFactory() {
|
||
52 | this.customActions = new LinkedHashMap<>(); |
||
53 | } |
||
54 | |||
55 | @Override
|
||
56 | public String getName() { |
||
57 | return ACTION_NAME;
|
||
58 | } |
||
59 | |||
60 | @Override
|
||
61 | public Action createAction(DALActionContext context) { |
||
62 | return new ReportStoreAction(this, context); |
||
63 | } |
||
64 | |||
65 | @Override
|
||
66 | public boolean isApplicable(Object... args) { |
||
67 | return true; |
||
68 | } |
||
69 | |||
70 | public void registerCustomAction(ReportCustomActionFactory factory, boolean insertSeparator) { |
||
71 | this.customActions.put(factory.getName(), new ImmutablePair<>(factory,insertSeparator)); |
||
72 | } |
||
73 | |||
74 | public Map<String, Pair<ReportCustomActionFactory, Boolean>> getCustomActions() { |
||
75 | return this.customActions; |
||
76 | } |
||
77 | |||
78 | public static void selfRegister() { |
||
79 | DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager(); |
||
80 | dalSwingManager.registerStoreAction(new ReportStoreActionFactory());
|
||
81 | 47426 | jjdelcerro | |
82 | ToolsSwingUtils.registerIcons( |
||
83 | ReportStoreAction.class, |
||
84 | "images",
|
||
85 | LIBRARY_NAME, |
||
86 | new String[]{"storeaction", "storeaction-reports-select"} |
||
87 | ); |
||
88 | |||
89 | 47049 | jjdelcerro | } |
90 | |||
91 | } |
||
92 | |||
93 | private static final Logger LOGGER = LoggerFactory.getLogger(ReportStoreAction.class); |
||
94 | |||
95 | private final DALActionContext context; |
||
96 | private final ReportStoreActionFactory factory; |
||
97 | |||
98 | @SuppressWarnings("OverridableMethodCallInConstructor") |
||
99 | public ReportStoreAction(ReportStoreActionFactory factory, DALActionContext context) {
|
||
100 | this.factory = factory;
|
||
101 | this.context = context;
|
||
102 | I18nManager i18n = ToolsLocator.getI18nManager(); |
||
103 | this.putValue(
|
||
104 | Action.ACTION_COMMAND_KEY,
|
||
105 | ACTION_NAME |
||
106 | ); |
||
107 | this.putValue(
|
||
108 | Action.SHORT_DESCRIPTION,
|
||
109 | i18n.getTranslation("_Reports")
|
||
110 | ); |
||
111 | this.putValue(
|
||
112 | Action.SMALL_ICON,
|
||
113 | 47426 | jjdelcerro | ToolsSwingLocator.getIconThemeManager().getCurrent().get("storeaction-reports-select")
|
114 | 47049 | jjdelcerro | ); |
115 | } |
||
116 | |||
117 | |||
118 | @Override
|
||
119 | public void actionPerformed(ActionEvent e) { |
||
120 | try {
|
||
121 | // this.setEnabled(false);
|
||
122 | DataStore store = this.context.getStore();
|
||
123 | if (!(store instanceof FeatureStore)) { |
||
124 | return;
|
||
125 | } |
||
126 | 47340 | fdiaz | List<ReportAction> actions = getReportActions(store, null, context, e); |
127 | 47049 | jjdelcerro | JPopupMenu popup = new JPopupMenu(); |
128 | for (ReportAction action : actions) {
|
||
129 | popup.add(new JMenuItem(action)); |
||
130 | } |
||
131 | for (Pair<ReportCustomActionFactory, Boolean> customAction : this.factory.getCustomActions().values()) { |
||
132 | Action action = customAction.getLeft().createCustomAction(e, context);
|
||
133 | if( action !=null ) { |
||
134 | if( customAction.getRight() && popup.getComponentCount()>0 ) { |
||
135 | popup.addSeparator(); |
||
136 | } |
||
137 | popup.add(action); |
||
138 | } |
||
139 | } |
||
140 | JComponent button = this.context.getActionButton(ACTION_NAME); |
||
141 | popup.show(button, 0, button.getHeight());
|
||
142 | } catch (Exception ex) { |
||
143 | LOGGER.warn("Can't show form", ex);
|
||
144 | } finally {
|
||
145 | // this.setEnabled(true);
|
||
146 | } |
||
147 | } |
||
148 | |||
149 | @Override
|
||
150 | public boolean isEnabled() { |
||
151 | try {
|
||
152 | DataStore store = this.context.getStore();
|
||
153 | if (!(store instanceof FeatureStore)) { |
||
154 | return false; |
||
155 | } |
||
156 | DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager(); |
||
157 | 47340 | fdiaz | List<JsonObject> reports = getReports((FeatureStore) store);
|
158 | 47049 | jjdelcerro | if (reports != null && !reports.isEmpty()) { |
159 | for (JsonObject json : reports) {
|
||
160 | for (ReportActionFactory thefactory : dataSwingManager.getReportActionFactories()) {
|
||
161 | if( thefactory.isApplicable(json,this.context)) { |
||
162 | return true; |
||
163 | } |
||
164 | } |
||
165 | } |
||
166 | } |
||
167 | 47183 | jjdelcerro | Map<String, Pair<ReportCustomActionFactory, Boolean>> customActions = this.factory.getCustomActions(); |
168 | return customActions!=null && !customActions.isEmpty(); |
||
169 | 47049 | jjdelcerro | } catch (Exception ex) { |
170 | LOGGER.warn("Can't check isEnabled", ex);
|
||
171 | } |
||
172 | return false; |
||
173 | } |
||
174 | |||
175 | } |