Revision 22119

View differences:

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