Revision 22119
branches/v10/applications/appgvSIG/src/com/iver/cit/gvsig/ProjectExtension.java | ||
---|---|---|
56 | 56 |
import java.net.MalformedURLException; |
57 | 57 |
import java.net.URL; |
58 | 58 |
import java.text.DateFormat; |
59 |
import java.util.ArrayList; |
|
59 | 60 |
import java.util.Date; |
60 | 61 |
import java.util.prefs.Preferences; |
61 | 62 |
|
... | ... | |
70 | 71 |
import com.iver.andami.Launcher; |
71 | 72 |
import com.iver.andami.PluginServices; |
72 | 73 |
import com.iver.andami.Launcher.TerminationProcess; |
73 |
import com.iver.andami.messages.Messages; |
|
74 | 74 |
import com.iver.andami.messages.NotificationManager; |
75 | 75 |
import com.iver.andami.plugins.Extension; |
76 | 76 |
import com.iver.andami.plugins.IExtension; |
... | ... | |
96 | 96 |
import com.iver.utiles.extensionPoints.ExtensionPoint; |
97 | 97 |
import com.iver.utiles.extensionPoints.ExtensionPoints; |
98 | 98 |
import com.iver.utiles.extensionPoints.ExtensionPointsSingleton; |
99 |
import com.iver.utiles.save.AfterSavingListener; |
|
100 |
import com.iver.utiles.save.BeforeSavingListener; |
|
101 |
import com.iver.utiles.save.SaveEvent; |
|
99 | 102 |
import com.iver.utiles.swing.threads.IMonitorableTask; |
100 | 103 |
import com.iver.utiles.xml.XMLEncodingUtils; |
101 | 104 |
import com.iver.utiles.xmlEntity.generate.XmlTag; |
... | ... | |
107 | 110 |
* en esta clase. |
108 | 111 |
* |
109 | 112 |
* @author Fernando Gonz?lez Cort?s |
113 |
* @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es) |
|
110 | 114 |
*/ |
111 | 115 |
public class ProjectExtension extends Extension implements IExtensionStatus { |
112 | 116 |
private static String projectPath = null; |
... | ... | |
117 | 121 |
private String lastSavePath; |
118 | 122 |
private String templatesPath; |
119 | 123 |
private WindowInfo seedProjectWindow; |
124 |
|
|
120 | 125 |
/** |
121 | 126 |
* Use UTF-8 for encoding, as it can represent characters from |
122 | 127 |
* any language. |
... | ... | |
128 | 133 |
public static String PROJECTENCODING = "UTF-8"; |
129 | 134 |
|
130 | 135 |
/** |
136 |
* <p>Identifier of the extension point used by <code>ProjectExtension</code> to manage {@link BeforeSavingListener BeforeSavingListener}s.</p> |
|
137 |
*/ |
|
138 |
public static final String BEFORE_SAVING_ID = "Before_Saving_PrjExt"; |
|
139 |
|
|
140 |
/** |
|
141 |
* <p>Identifier of the extension point used by <code>ProjectExtension</code> to manage {@link BeforeSavingListener BeforeSavingListener}s.</p> |
|
142 |
*/ |
|
143 |
public static final String AFTER_SAVING_ID = "After_Saving_PrjExt"; |
|
144 |
|
|
145 |
/** |
|
131 | 146 |
* @see com.iver.mdiApp.plugins.IExtension#initialize() |
132 | 147 |
*/ |
133 | 148 |
public void initialize() { |
... | ... | |
446 | 461 |
} |
447 | 462 |
// write it out as XML |
448 | 463 |
try { |
449 |
FileOutputStream fos = new FileOutputStream(file.getAbsolutePath()); |
|
464 |
fireBeforeSavingFileEvent(new SaveEvent(this, SaveEvent.BEFORE_SAVING, file)); |
|
465 |
FileOutputStream fos = new FileOutputStream(file.getAbsolutePath()); |
|
450 | 466 |
OutputStreamWriter writer = new OutputStreamWriter(fos, PROJECTENCODING); |
451 | 467 |
Marshaller m = new Marshaller(writer); |
452 | 468 |
m.setEncoding(PROJECTENCODING); |
... | ... | |
457 | 473 |
XMLEntity xml = p.getXMLEntity(); |
458 | 474 |
xml.putProperty("followHeaderEncoding", true); |
459 | 475 |
m.marshal(xml.getXmlTag()); |
476 |
fireAfterSavingFileEvent(new SaveEvent(this, SaveEvent.AFTER_SAVING, file)); |
|
460 | 477 |
PluginServices.getMainFrame().setTitle(file.getName()); |
461 | 478 |
setPath(file.toString()); |
462 |
|
|
463 | 479 |
} catch (Exception e) { |
464 | 480 |
NotificationManager.addError("Error guardando el proyecto", e); |
465 | 481 |
return false; |
... | ... | |
800 | 816 |
// TODO Auto-generated method stub |
801 | 817 |
return false; |
802 | 818 |
} |
819 |
|
|
820 |
/** |
|
821 |
* Adds the specified before saving listener to receive "before saving file events" from |
|
822 |
* this component. |
|
823 |
* If l is null, no exception is thrown and no action is performed. |
|
824 |
* |
|
825 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
826 |
* |
|
827 |
* @param l the before saving listener. |
|
828 |
* @see SaveEvent |
|
829 |
* @see BeforeSavingListener |
|
830 |
* @see #removeListener(BeforeSavingListener) |
|
831 |
* @see #getBeforeSavingListeners |
|
832 |
*/ |
|
833 |
public synchronized void addListener(BeforeSavingListener l) { |
|
834 |
if (l == null) { |
|
835 |
return; |
|
836 |
} |
|
837 |
|
|
838 |
ExtensionPoints ePs = ((ExtensionPoints) ExtensionPointsSingleton.getInstance()); |
|
839 |
|
|
840 |
if (ePs.get(BEFORE_SAVING_ID) == null) { |
|
841 |
ArrayList aL = new ArrayList(); |
|
842 |
aL.add(l); |
|
843 |
|
|
844 |
ePs.add(BEFORE_SAVING_ID, "", aL); |
|
845 |
return; |
|
846 |
} |
|
847 |
|
|
848 |
((ArrayList)((ExtensionPoint)ePs.get(BEFORE_SAVING_ID)).get("")).add(l); |
|
849 |
} |
|
850 |
|
|
851 |
/** |
|
852 |
* Adds the specified after saving listener to receive "after saving file events" from |
|
853 |
* this component. |
|
854 |
* If l is null, no exception is thrown and no action is performed. |
|
855 |
* |
|
856 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
857 |
* |
|
858 |
* @param l the after saving listener. |
|
859 |
* @see SaveEvent |
|
860 |
* @see AfterSavingListener |
|
861 |
* @see #removeListener(AfterSavingListener) |
|
862 |
* @see #getAfterSavingListeners() |
|
863 |
*/ |
|
864 |
public synchronized void addListener(AfterSavingListener l) { |
|
865 |
if (l == null) { |
|
866 |
return; |
|
867 |
} |
|
868 |
|
|
869 |
ExtensionPoints ePs = ((ExtensionPoints) ExtensionPointsSingleton.getInstance()); |
|
870 |
|
|
871 |
if (ePs.get(AFTER_SAVING_ID) == null) { |
|
872 |
ArrayList aL = new ArrayList(); |
|
873 |
aL.add(l); |
|
874 |
|
|
875 |
ePs.add(AFTER_SAVING_ID, "", aL); |
|
876 |
return; |
|
877 |
} |
|
878 |
|
|
879 |
((ArrayList)((ExtensionPoint)ePs.get(AFTER_SAVING_ID)).get("")).add(l); |
|
880 |
} |
|
881 |
|
|
882 |
/** |
|
883 |
* Returns an array of all the before saving listeners |
|
884 |
* registered on this component. |
|
885 |
* |
|
886 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
887 |
* |
|
888 |
* @return all of this component's <code>BeforeSavingListener</code>s |
|
889 |
* or an empty array if no key |
|
890 |
* listeners are currently registered |
|
891 |
* |
|
892 |
* @see #addBeforeSavingListener(BeforeSavingListener) |
|
893 |
* @see #removeBeforeSavingListener(BeforeSavingListener) |
|
894 |
*/ |
|
895 |
public synchronized BeforeSavingListener[] getBeforeSavingListeners() { |
|
896 |
ExtensionPoint eP = (ExtensionPoint)((ExtensionPoints) ExtensionPointsSingleton.getInstance()).get(BEFORE_SAVING_ID); |
|
897 |
|
|
898 |
if (eP == null) |
|
899 |
return null; |
|
900 |
|
|
901 |
return eP.get("") == null ? null : (BeforeSavingListener[]) ((ArrayList)eP.get("")).toArray(new BeforeSavingListener[0]); |
|
902 |
} |
|
903 |
|
|
904 |
/** |
|
905 |
* Returns an array of all the after saving listeners |
|
906 |
* registered on this component. |
|
907 |
* |
|
908 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
909 |
* |
|
910 |
* @return all of this component's <code>AfterSavingListener</code>s |
|
911 |
* or an empty array if no key |
|
912 |
* listeners are currently registered |
|
913 |
* |
|
914 |
* @see #addAfterSavingListener(AfterSavingListener) |
|
915 |
* @see #removeAfterSavingListener |
|
916 |
*/ |
|
917 |
public synchronized AfterSavingListener[] getAfterSavingListeners() { |
|
918 |
ExtensionPoint eP = (ExtensionPoint)((ExtensionPoints) ExtensionPointsSingleton.getInstance()).get(AFTER_SAVING_ID); |
|
919 |
|
|
920 |
if (eP == null) |
|
921 |
return null; |
|
922 |
|
|
923 |
return eP.get("") == null ? null : (AfterSavingListener[]) ((ArrayList)eP.get("")).toArray(new AfterSavingListener[0]); |
|
924 |
} |
|
925 |
|
|
926 |
/** |
|
927 |
* Removes the specified before saving listener so that it no longer |
|
928 |
* receives save file events from this component. This method performs |
|
929 |
* no function, nor does it throw an exception, if the listener |
|
930 |
* specified by the argument was not previously added to this component. |
|
931 |
* If listener <code>l</code> is <code>null</code>, |
|
932 |
* no exception is thrown and no action is performed. |
|
933 |
* |
|
934 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
935 |
* |
|
936 |
* @param l the before saving listener |
|
937 |
* @see SaveEvent |
|
938 |
* @see BeforeSavingListener |
|
939 |
* @see #addListener(BeforeSavingListener) |
|
940 |
* @see #getBeforeSavingListeners() |
|
941 |
*/ |
|
942 |
public synchronized void removeListener(BeforeSavingListener l) { |
|
943 |
if (l == null) { |
|
944 |
return; |
|
945 |
} |
|
946 |
|
|
947 |
ExtensionPoint eP = (ExtensionPoint)((ExtensionPoints) ExtensionPointsSingleton.getInstance()).get(BEFORE_SAVING_ID); |
|
948 |
|
|
949 |
if (eP != null) { |
|
950 |
((ArrayList)eP.get("")).remove(l); |
|
951 |
} |
|
952 |
} |
|
953 |
|
|
954 |
/** |
|
955 |
* Removes the specified after saving listener so that it no longer |
|
956 |
* receives save file events from this component. This method performs |
|
957 |
* no function, nor does it throw an exception, if the listener |
|
958 |
* specified by the argument was not previously added to this component. |
|
959 |
* If listener <code>l</code> is <code>null</code>, |
|
960 |
* no exception is thrown and no action is performed. |
|
961 |
* |
|
962 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
963 |
* |
|
964 |
* @param l the after saving listener |
|
965 |
* @see SaveEvent |
|
966 |
* @see AfterSavingListener |
|
967 |
* @see #addListener(AfterSavingListener) |
|
968 |
* @see #getAfterSavingListeners() |
|
969 |
*/ |
|
970 |
public synchronized void removeListener(AfterSavingListener l) { |
|
971 |
if (l == null) { |
|
972 |
return; |
|
973 |
} |
|
974 |
|
|
975 |
ExtensionPoint eP = (ExtensionPoint)((ExtensionPoints) ExtensionPointsSingleton.getInstance()).get(AFTER_SAVING_ID); |
|
976 |
|
|
977 |
if (eP != null) { |
|
978 |
((ArrayList)eP.get("")).remove(l); |
|
979 |
} |
|
980 |
} |
|
981 |
|
|
982 |
/** |
|
983 |
* Reports a before saving file event. |
|
984 |
* |
|
985 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
986 |
* |
|
987 |
* @param evt the before saving file event |
|
988 |
*/ |
|
989 |
protected void fireBeforeSavingFileEvent(SaveEvent evt) { |
|
990 |
if ((evt.getID() != SaveEvent.BEFORE_SAVING) || (evt.getFile() == null)) { |
|
991 |
return; |
|
992 |
} |
|
993 |
|
|
994 |
ExtensionPoint eP = (ExtensionPoint)((ExtensionPoints) ExtensionPointsSingleton.getInstance()).get(BEFORE_SAVING_ID); |
|
995 |
|
|
996 |
if (eP != null) { |
|
997 |
ArrayList listeners = ((ArrayList)eP.get("")); |
|
998 |
|
|
999 |
for (int i = 0; i < listeners.size(); i++) |
|
1000 |
((BeforeSavingListener)listeners.get(i)).beforeSaving(evt); |
|
1001 |
} |
|
1002 |
} |
|
1003 |
|
|
1004 |
/** |
|
1005 |
* Reports a after saving file event. |
|
1006 |
* |
|
1007 |
* @author Pablo Piqueras Bartolom? <pablo.piqueras@iver.es> |
|
1008 |
* |
|
1009 |
* @param evt the after saving file event |
|
1010 |
*/ |
|
1011 |
protected void fireAfterSavingFileEvent(SaveEvent evt) { |
|
1012 |
if ((evt.getID() != SaveEvent.AFTER_SAVING) || (evt.getFile() == null)) { |
|
1013 |
return; |
|
1014 |
} |
|
1015 |
|
|
1016 |
ExtensionPoint eP = (ExtensionPoint)((ExtensionPoints) ExtensionPointsSingleton.getInstance()).get(AFTER_SAVING_ID); |
|
1017 |
|
|
1018 |
if (eP != null) { |
|
1019 |
ArrayList listeners = ((ArrayList)eP.get("")); |
|
1020 |
|
|
1021 |
for (int i = 0; i < listeners.size(); i++) |
|
1022 |
((AfterSavingListener)listeners.get(i)).afterSaving(evt); |
|
1023 |
} |
|
1024 |
} |
|
803 | 1025 |
} |
Also available in: Unified diff