26 |
26 |
import java.awt.Component;
|
27 |
27 |
import java.awt.Font;
|
28 |
28 |
import java.awt.font.TextAttribute;
|
|
29 |
import java.io.IOException;
|
|
30 |
import java.io.InputStream;
|
29 |
31 |
import java.util.HashMap;
|
30 |
|
import java.util.List;
|
31 |
32 |
import java.util.Map;
|
|
33 |
import java.util.Objects;
|
|
34 |
import java.util.Properties;
|
32 |
35 |
import java.util.Set;
|
33 |
36 |
import javax.swing.JOptionPane;
|
34 |
37 |
import javax.swing.SwingUtilities;
|
35 |
38 |
import org.apache.commons.lang3.StringUtils;
|
36 |
|
import org.gvsig.fmap.dal.AbstractStoresRepository;
|
37 |
|
import org.gvsig.fmap.dal.BaseStoresRepository;
|
38 |
|
import org.gvsig.fmap.dal.DALLocator;
|
39 |
|
import org.gvsig.fmap.dal.DataManager;
|
40 |
|
import org.gvsig.fmap.dal.DataStoreParameters;
|
41 |
|
import org.gvsig.fmap.dal.OpenDataStoreParameters;
|
42 |
|
import org.gvsig.fmap.dal.StoresRepository;
|
43 |
39 |
import org.gvsig.fmap.dal.feature.FeatureStore;
|
44 |
40 |
import org.gvsig.fmap.geom.Geometry;
|
45 |
41 |
import org.gvsig.fmap.geom.GeometryUtils;
|
46 |
42 |
import org.gvsig.fmap.geom.primitive.Envelope;
|
47 |
43 |
import org.gvsig.tools.ToolsLocator;
|
|
44 |
import org.gvsig.tools.dataTypes.Coercion;
|
|
45 |
import org.gvsig.tools.dataTypes.CoercionException;
|
48 |
46 |
import org.gvsig.tools.i18n.I18nManager;
|
|
47 |
import org.gvsig.tools.swing.api.DataTypes;
|
49 |
48 |
import org.gvsig.tools.swing.api.ToolsSwingLocator;
|
50 |
49 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
|
51 |
|
import org.gvsig.tools.util.UnmodifiableBasicSet;
|
52 |
|
import org.gvsig.tools.util.UnmodifiableBasicSetAdapter;
|
53 |
|
import org.gvsig.vcsgis.lib.VCSGisEntity;
|
54 |
50 |
import org.gvsig.vcsgis.lib.VCSGisLocator;
|
55 |
51 |
import org.gvsig.vcsgis.lib.VCSGisManager;
|
56 |
52 |
import static org.gvsig.vcsgis.lib.VCSGisManager.ERR_AUTHENTICATION_EXPIRED;
|
... | ... | |
66 |
62 |
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_LOCAL_UNMODIFIED;
|
67 |
63 |
import static org.gvsig.vcsgis.lib.VCSGisManager.STATE_REPOSITORY_NEW;
|
68 |
64 |
import org.gvsig.vcsgis.lib.VCSGisRuntimeException;
|
69 |
|
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
|
70 |
65 |
import org.gvsig.vcsgis.swing.VCSGisSwingLocator;
|
71 |
66 |
import org.gvsig.vcsgis.swing.VCSGisSwingManager;
|
|
67 |
import org.gvsig.vcsgis.swing.impl.checkout.VCSGisJCheckoutImpl;
|
|
68 |
import org.slf4j.LoggerFactory;
|
72 |
69 |
|
73 |
70 |
/**
|
74 |
71 |
*
|
... | ... | |
76 |
73 |
*/
|
77 |
74 |
public class VCSGisSwingCommons {
|
78 |
75 |
|
79 |
|
// public static final Color COLOR_LOCAL_NEW = Color.GREEN.darker();
|
80 |
|
// public static final Color COLOR_LOCAL_MODIFIED = Color.BLUE.darker();
|
81 |
|
// public static final Color COLOR_LOCAL_UNMODIFIED = Color.BLACK;
|
82 |
|
// * public static final Color COLOR_REPOSITORY_MODIFIED = Color.BLACK; // bold
|
83 |
|
// * public static final Color COLOR_LOCAL_AND_REPOSITORY_MODIFIED = Color.RED;
|
84 |
|
// * public static final Color COLOR_CONFLICT = Color.RED;
|
|
76 |
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(VCSGisSwingCommons.class);
|
|
77 |
|
|
78 |
private static final String ID_COLOR_LOCAL_NEW = "COLOR_LOCAL_NEW";
|
|
79 |
private static final String ID_COLOR_LOCAL_MODIFIED = "COLOR_LOCAL_MODIFIED";
|
|
80 |
private static final String ID_COLOR_LOCAL_UNMODIFIED = "COLOR_LOCAL_UNMODIFIED";
|
|
81 |
private static final String ID_COLOR_LOCAL_AND_REPOSITORY_MODIFIED = "COLOR_LOCAL_AND_REPOSITORY_MODIFIED";
|
|
82 |
private static final String ID_COLOR_REPOSITORY_NEW = "COLOR_REPOSITORY_NEW";
|
|
83 |
private static final String ID_COLOR_REPOSITORY_MODIFIED = "COLOR_REPOSITORY_MODIFIED";
|
|
84 |
private static final String ID_COLOR_CONFLICT = "COLOR_CONFLICT";
|
|
85 |
private static final String ID_COLOR_UNKNOWN_STATE = "COLOR_UNKNOWN_STATE";
|
85 |
86 |
|
86 |
|
public static final Color COLOR_LOCAL_NEW = Color.GREEN.darker();
|
87 |
|
public static final Color COLOR_LOCAL_MODIFIED = Color.BLUE.darker();
|
88 |
|
public static final Color COLOR_LOCAL_UNMODIFIED = Color.BLACK;
|
89 |
|
public static final Color COLOR_LOCAL_AND_REPOSITORY_MODIFIED = Color.RED.brighter();
|
90 |
|
public static final Color COLOR_REPOSITORY_NEW = Color.MAGENTA.darker();
|
91 |
|
public static final Color COLOR_REPOSITORY_MODIFIED = Color.DARK_GRAY;
|
92 |
|
public static final Color COLOR_CONFLICT = Color.RED;
|
93 |
|
public static final Color COLOR_UNKNOWN_STATE = Color.LIGHT_GRAY;
|
|
87 |
private static final Color COLOR_LOCAL_NEW = Color.GREEN.darker();
|
|
88 |
private static final Color COLOR_LOCAL_MODIFIED = Color.BLUE.darker();
|
|
89 |
private static final Color COLOR_LOCAL_UNMODIFIED = Color.BLACK;
|
|
90 |
private static final Color COLOR_LOCAL_AND_REPOSITORY_MODIFIED = Color.RED.brighter();
|
|
91 |
private static final Color COLOR_REPOSITORY_NEW = Color.ORANGE.darker().darker();
|
|
92 |
private static final Color COLOR_REPOSITORY_MODIFIED = Color.MAGENTA.darker();
|
|
93 |
private static final Color COLOR_CONFLICT = Color.RED;
|
|
94 |
private static final Color COLOR_UNKNOWN_STATE = Color.LIGHT_GRAY;
|
94 |
95 |
|
95 |
|
public static final Color COLOR_OUTDATED = COLOR_REPOSITORY_MODIFIED;
|
96 |
|
public static final Color COLOR_OUTDATED_AND_MODIFIED = COLOR_LOCAL_AND_REPOSITORY_MODIFIED;
|
|
96 |
private static Map<String, Color> entityColors = null;
|
97 |
97 |
|
|
98 |
static {
|
|
99 |
loadColors();
|
|
100 |
}
|
|
101 |
|
98 |
102 |
public static String getHTMLColorTag(Color color, String text) {
|
99 |
103 |
return getHTMLColorTag(color, false, text);
|
100 |
104 |
}
|
... | ... | |
102 |
106 |
public static String getHTMLColorTag(Color color, boolean bold, String text) {
|
103 |
107 |
String pattern;
|
104 |
108 |
if( bold ) {
|
105 |
|
pattern = "<html><font color='rgb(%s, %s, %s)'><b>%s</b></font></html>";
|
|
109 |
pattern = "<html><font color='rgb(%s, %s, %s)'><i>%s</i></font></html>";
|
106 |
110 |
} else {
|
107 |
111 |
pattern = "<html><font color='rgb(%s, %s, %s)'>%s</font></html>";
|
108 |
112 |
}
|
... | ... | |
118 |
122 |
public static String getHTMLColorTag(int state, String text) {
|
119 |
123 |
switch (state) {
|
120 |
124 |
case STATE_LOCAL_UNMODIFIED:
|
121 |
|
return getHTMLColorTag(COLOR_LOCAL_UNMODIFIED, false, text);
|
|
125 |
return getHTMLColorTag(entityColors.get(ID_COLOR_LOCAL_UNMODIFIED), false, text);
|
122 |
126 |
case STATE_LOCAL_NEW:
|
123 |
|
return getHTMLColorTag(COLOR_LOCAL_NEW, false, text);
|
|
127 |
return getHTMLColorTag(entityColors.get(ID_COLOR_LOCAL_NEW), false, text);
|
124 |
128 |
case STATE_LOCAL_MODIFIED:
|
125 |
|
return getHTMLColorTag(COLOR_LOCAL_MODIFIED, false, text);
|
|
129 |
return getHTMLColorTag(entityColors.get(ID_COLOR_LOCAL_MODIFIED), false, text);
|
126 |
130 |
case STATE_LOCAL_OUTDATED:
|
127 |
|
return getHTMLColorTag(COLOR_REPOSITORY_MODIFIED, false, text);
|
|
131 |
return getHTMLColorTag(entityColors.get(ID_COLOR_REPOSITORY_MODIFIED), false, text);
|
128 |
132 |
case STATE_LOCAL_OUTDATED_AND_MODIFIED:
|
129 |
|
return getHTMLColorTag(COLOR_LOCAL_AND_REPOSITORY_MODIFIED, false, text);
|
|
133 |
return getHTMLColorTag(entityColors.get(ID_COLOR_LOCAL_AND_REPOSITORY_MODIFIED), false, text);
|
130 |
134 |
case STATE_CONFLICT:
|
131 |
|
return getHTMLColorTag(COLOR_CONFLICT, false, text);
|
|
135 |
return getHTMLColorTag(entityColors.get(ID_COLOR_CONFLICT), false, text);
|
132 |
136 |
case STATE_REPOSITORY_NEW:
|
133 |
|
return getHTMLColorTag(COLOR_REPOSITORY_NEW, false, text);
|
|
137 |
return getHTMLColorTag(entityColors.get(ID_COLOR_REPOSITORY_NEW), false, text);
|
134 |
138 |
default:
|
135 |
|
return getHTMLColorTag(COLOR_UNKNOWN_STATE, false, text);
|
|
139 |
return getHTMLColorTag(entityColors.get(ID_COLOR_UNKNOWN_STATE), false, text);
|
136 |
140 |
}
|
137 |
141 |
}
|
138 |
142 |
|
... | ... | |
149 |
153 |
public static void setColorCompoment(Component c, int state) {
|
150 |
154 |
switch (state) {
|
151 |
155 |
case STATE_LOCAL_UNMODIFIED:
|
152 |
|
setColorCompoment(c, COLOR_LOCAL_UNMODIFIED, false);
|
|
156 |
setColorCompoment(c, entityColors.get(ID_COLOR_LOCAL_UNMODIFIED), false);
|
153 |
157 |
break;
|
154 |
158 |
case STATE_LOCAL_NEW:
|
155 |
|
setColorCompoment(c, COLOR_LOCAL_NEW, false);
|
|
159 |
setColorCompoment(c, entityColors.get(ID_COLOR_LOCAL_NEW), false);
|
156 |
160 |
break;
|
157 |
161 |
case STATE_LOCAL_MODIFIED:
|
158 |
|
setColorCompoment(c, COLOR_LOCAL_MODIFIED, false);
|
|
162 |
setColorCompoment(c, entityColors.get(ID_COLOR_LOCAL_MODIFIED), false);
|
159 |
163 |
break;
|
160 |
164 |
case STATE_LOCAL_OUTDATED:
|
161 |
|
setColorCompoment(c, COLOR_REPOSITORY_MODIFIED, false);
|
|
165 |
setColorCompoment(c, entityColors.get(ID_COLOR_REPOSITORY_MODIFIED), false);
|
162 |
166 |
break;
|
163 |
167 |
case STATE_LOCAL_OUTDATED_AND_MODIFIED:
|
164 |
|
setColorCompoment(c, COLOR_LOCAL_AND_REPOSITORY_MODIFIED, false);
|
|
168 |
setColorCompoment(c, entityColors.get(ID_COLOR_LOCAL_AND_REPOSITORY_MODIFIED), false);
|
165 |
169 |
break;
|
166 |
170 |
case STATE_CONFLICT:
|
167 |
|
setColorCompoment(c, COLOR_CONFLICT, false);
|
|
171 |
setColorCompoment(c, entityColors.get(ID_COLOR_CONFLICT), false);
|
168 |
172 |
break;
|
169 |
173 |
case STATE_REPOSITORY_NEW:
|
170 |
|
setColorCompoment(c, COLOR_REPOSITORY_NEW, false);
|
|
174 |
setColorCompoment(c, entityColors.get(ID_COLOR_REPOSITORY_NEW), false);
|
171 |
175 |
break;
|
172 |
176 |
default:
|
173 |
|
setColorCompoment(c, COLOR_UNKNOWN_STATE, false);
|
|
177 |
setColorCompoment(c, entityColors.get(ID_COLOR_UNKNOWN_STATE), false);
|
174 |
178 |
break;
|
175 |
179 |
}
|
176 |
180 |
}
|
... | ... | |
255 |
259 |
);
|
256 |
260 |
return true;
|
257 |
261 |
}
|
|
262 |
|
|
263 |
private static void loadColors() {
|
|
264 |
entityColors = new HashMap<>();
|
|
265 |
entityColors.put(ID_COLOR_LOCAL_NEW,COLOR_LOCAL_NEW);
|
|
266 |
entityColors.put(ID_COLOR_LOCAL_MODIFIED,COLOR_LOCAL_MODIFIED);
|
|
267 |
entityColors.put(ID_COLOR_LOCAL_UNMODIFIED,COLOR_LOCAL_UNMODIFIED);
|
|
268 |
entityColors.put(ID_COLOR_LOCAL_AND_REPOSITORY_MODIFIED,COLOR_LOCAL_AND_REPOSITORY_MODIFIED);
|
|
269 |
entityColors.put(ID_COLOR_REPOSITORY_NEW,COLOR_REPOSITORY_NEW);
|
|
270 |
entityColors.put(ID_COLOR_REPOSITORY_MODIFIED,COLOR_REPOSITORY_MODIFIED);
|
|
271 |
entityColors.put(ID_COLOR_CONFLICT,COLOR_CONFLICT);
|
|
272 |
entityColors.put(ID_COLOR_UNKNOWN_STATE,COLOR_UNKNOWN_STATE);
|
|
273 |
InputStream x = VCSGisSwingCommons.class.getClassLoader().getResourceAsStream("/VCSGisEntityColors.properties");
|
|
274 |
Coercion toColor = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.COLOR);
|
|
275 |
if(x != null){
|
|
276 |
try {
|
|
277 |
Properties prop = new Properties();
|
|
278 |
prop.load(x);
|
|
279 |
for (Map.Entry<Object, Object> entry : prop.entrySet()) {
|
|
280 |
try {
|
|
281 |
entityColors.put((String)entry.getKey(), (Color) toColor.coerce(entry.getValue()));
|
|
282 |
} catch (CoercionException ex) {
|
|
283 |
LOGGER.trace("Can't parse color "+Objects.toString(entry.getKey()), ex);
|
|
284 |
//DO NOTHING
|
|
285 |
}
|
|
286 |
}
|
|
287 |
} catch (IOException ex) {
|
|
288 |
LOGGER.trace("Can't load colors.", ex);
|
|
289 |
//DO NOTHING
|
|
290 |
}
|
|
291 |
}
|
|
292 |
|
|
293 |
}
|
258 |
294 |
|
259 |
295 |
}
|