Revision 33317

View differences:

tags/tmp_build/frameworks/_fwAndami/src/log4j.properties
1
log4j.rootLogger=debug, stdout
2

  
3
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
4
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
5

  
6
# Pattern to output the caller's file name and line number.
7
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
8

  
0 9

  
tags/tmp_build/frameworks/_fwAndami/src/com/iver/andami/Utilities.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004-2007 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package com.iver.andami;
42

  
43
import java.awt.Component;
44
import java.awt.Container;
45
import java.io.BufferedInputStream;
46
import java.io.BufferedOutputStream;
47
import java.io.DataOutputStream;
48
import java.io.File;
49
import java.io.FileOutputStream;
50
import java.io.IOException;
51
import java.io.InputStream;
52
import java.io.OutputStream;
53
import java.net.ConnectException;
54
import java.net.MalformedURLException;
55
import java.net.URL;
56
import java.net.UnknownHostException;
57
import java.util.Enumeration;
58
import java.util.Hashtable;
59
import java.util.zip.ZipEntry;
60
import java.util.zip.ZipException;
61
import java.util.zip.ZipFile;
62

  
63
import javax.swing.ImageIcon;
64
import javax.swing.RootPaneContainer;
65

  
66
import org.apache.log4j.Logger;
67

  
68
import com.iver.andami.ui.mdiManager.IWindow;
69
import com.iver.andami.ui.splash.MultiSplashWindow;
70

  
71

  
72

  
73
/**
74
 * This class offers several general purpose method, to perform common
75
 * tasks in an easy way.
76
 *
77
 * @version $Revision$
78
 */
79
public class Utilities {
80
	/**
81
     * <b>key</b>: URL, <b>value</b>: path to the downloaded file.
82
     */
83
    private static Hashtable downloadedFiles;
84
    /** DOCUMENT ME! */
85
    private static Logger logger = Logger.getLogger(Utilities.class.getName());
86
	public static final String TEMPDIRECTORYPATH = System.getProperty("java.io.tmpdir")+"/tmp-andami";
87

  
88

  
89
    /**
90
     * Creates an icon from an image path.
91
     *
92
     * @param path Path to the image to be loaded
93
     *
94
     * @return ImageIcon if the image is found, null otherwise
95
     */
96
    public static ImageIcon createImageIcon(String path) {
97
        URL imgURL = null;
98

  
99
        try {
100
            imgURL = new URL("file:" + path);
101
        } catch (MalformedURLException e) {
102
            e.printStackTrace();
103
        }
104

  
105
        if (imgURL != null) {
106
            return new ImageIcon(imgURL);
107
        } else {
108
            return null;
109
        }
110
    }
111

  
112
    /**
113
     * Method which frees the memory from JInternalFrames
114
     *
115
     * @param baseComponent JInternalFrame whose memory is to be
116
     * freed
117
     */
118
    public static void cleanComponent(Component baseComponent) {
119
        try {
120
            cleanComponent(baseComponent, 0);
121
        } catch (Exception ignore) { // give some exception handling...
122
        }
123
    }
124

  
125
    /*    * The "depth" parameter was being used for text output debugging.    * But isn't essential now.  I'll keep it anyways, as it avoids    * calling the garbage collector every recursion.    */
126
    protected static void cleanComponent(Component baseComponent, int depth) {
127
        if (baseComponent == null) // recursion terminating clause
128
         {
129
            return;
130
        }
131

  
132
        if (baseComponent instanceof IWindow){
133
        	return;
134
        }
135

  
136
        Container cont;
137
        Component[] childComponents;
138
        int numChildren; // clean up component containers
139

  
140
        if (baseComponent instanceof Container) { // now clean up container instance variables
141

  
142
            if (baseComponent instanceof RootPaneContainer) { // Swing specialised container
143
                cont = (Container) baseComponent;
144
                numChildren = cont.getComponentCount();
145
                childComponents = cont.getComponents();
146

  
147
                for (int i = 0; i < numChildren; i++) { // remove each component from the current container
148

  
149
                    // each child component may be a container itself
150
                    cleanComponent(childComponents[i], depth + 1);
151
                    ((RootPaneContainer) cont).getContentPane().remove(childComponents[i]);
152
                }
153

  
154
                ((RootPaneContainer) cont).getContentPane().setLayout(null);
155
            } else { // General Swing, and AWT, Containers
156
                cont = (Container) baseComponent;
157
                numChildren = cont.getComponentCount();
158
                childComponents = cont.getComponents();
159

  
160
                for (int i = 0; i < numChildren; i++) //for(int i = 0;i < numChildren;i++)
161
                 {
162
                    // remove each component from the current container                    // each child component may be a container itself
163
                    cleanComponent(childComponents[i], depth + 1);
164
                    cont.remove(childComponents[i]);
165
                }
166

  
167
                cont.setLayout(null);
168
            }
169
        }
170

  
171
        // if component is also a container
172
    }
173

  
174

  
175

  
176
    /**
177
     * Extracts a ZIP file in the provided directory
178
     *
179
     * @param file Compressed file
180
     * @param dir Directory to extract the files
181
     * @param splash The splash window to show the extraction progress
182
     *
183
     * @throws ZipException If there is some problem in the file format
184
     * @throws IOException If there is a problem reading the file
185
     */
186
    public static void extractTo(File file, File dir, MultiSplashWindow splash)
187
        throws ZipException, IOException {
188
        ZipFile zip = new ZipFile(file);
189
        Enumeration e = zip.entries();
190

  
191
		// Pasada para crear las carpetas
192
		while (e.hasMoreElements()) {
193
			ZipEntry entry = (ZipEntry) e.nextElement();
194

  
195
			if (entry.isDirectory()) {
196
				File directorio = new File(dir.getAbsolutePath()
197
						+ File.separator + entry.getName());
198

  
199
				directorio.mkdirs();
200
			}
201

  
202
    		}
203

  
204
		// Pasada para crear los ficheros
205
		e = zip.entries();
206
		while (e.hasMoreElements()) {
207
			ZipEntry entry = (ZipEntry) e.nextElement();
208
			splash.process(30, "Procesando " + entry.getName() + "...");
209
			if (!entry.isDirectory()) {
210
				InputStream in = zip.getInputStream(entry);
211
				OutputStream out = new FileOutputStream(dir + File.separator
212
						+ entry.getName());
213
				BufferedInputStream bin = new BufferedInputStream(in);
214
				BufferedOutputStream bout = new BufferedOutputStream(out);
215

  
216
				int i;
217

  
218
				while ((i = bin.read()) != -1) {
219
					bout.write(i);
220
				}
221

  
222
				bout.flush();
223
				bout.close();
224
				bin.close();
225

  
226
			}
227

  
228
		}
229

  
230
		zip.close();
231
		zip = null;
232
		System.gc();
233

  
234
	}
235
    /**
236
     * Returns the content of this URL as a file from the file system.<br>
237
     * <p>
238
     * If the URL has been already downloaded in this session and notified
239
     * to the system using the static <b>Utilities.addDownloadedURL(URL)</b>
240
     * method, it can be restored faster from the file system avoiding to
241
     * download it again.
242
     * </p>
243
     * @param url
244
     * @return File containing this URL's content or null if no file was found.
245
     */
246
    private static File getPreviousDownloadedURL(URL url){
247
        File f = null;
248
        if (downloadedFiles!=null && downloadedFiles.containsKey(url)){
249
            String filePath = (String) downloadedFiles.get(url);
250
            f = new File(filePath);
251
        }
252
        return f;
253
    }
254

  
255
    /**
256
     * Adds an URL to the table of downloaded files for further uses. If the URL
257
     * already exists in the table its filePath value is updated to the new one and
258
     * the old file itself is removed from the file system.
259
     *
260
     * @param url
261
     * @param filePath
262
     */
263
    private static void addDownloadedURL(URL url, String filePath){
264
        if (downloadedFiles==null)
265
            downloadedFiles = new Hashtable();
266
        String fileName = (String) downloadedFiles.put(url, filePath);
267
        //JMV: No se puede eliminar el anterior porque puede que alguien lo
268
        // este usando
269
        /*
270
        if (fileName!=null){
271
            File f = new File(fileName);
272
            if (f.exists())
273
                f.delete();
274
        }
275
        */
276
    }
277

  
278
    /**
279
     * Downloads an URL into a temporary file that is removed the next time the
280
     * tempFileManager class is called, which means the next time gvSIG is launched.
281
     *
282
     * @param url
283
     * @param name
284
     * @return
285
     * @throws IOException
286
     * @throws ServerErrorResponseException
287
     * @throws ConnectException
288
     * @throws UnknownHostException
289
     */
290
    public static File downloadFile(URL url, String name) throws IOException,ConnectException, UnknownHostException{
291
    	File f = null;
292

  
293
	    try{
294
	        if ((f=getPreviousDownloadedURL(url))==null){
295
	        	File tempDirectory = new File(TEMPDIRECTORYPATH);
296
	        	if (!tempDirectory.exists())
297
	        		tempDirectory.mkdir();
298

  
299
	        	f = new File(TEMPDIRECTORYPATH+"/"+name+System.currentTimeMillis());
300

  
301
	            System.out.println("downloading '"+url.toString()+"' to: "+f.getAbsolutePath());
302

  
303
	            f.deleteOnExit();
304
                DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)));
305
                byte[] buffer = new byte[1024*256];
306
                InputStream is = url.openStream();
307
                long readed = 0;
308
                for (int i = is.read(buffer); i>0; i = is.read(buffer)){
309
                    dos.write(buffer, 0, i);
310
                    readed += i;
311
                }
312
                dos.close();
313
                addDownloadedURL(url, f.getAbsolutePath());
314
	        }
315
	    } catch (IOException io) {
316
	    	io.printStackTrace();
317
	    }
318

  
319
	    return f;
320
	}
321

  
322
    /**
323
     * Cleans every temporal file previously downloaded.
324
     */
325
    public static void cleanUpTempFiles() {
326
    	try{
327
    		File tempDirectory = new File(TEMPDIRECTORYPATH);
328

  
329
    		File[] files = tempDirectory.listFiles();
330
    		if (files!=null) {
331
    			for (int i = 0; i < files.length; i++) {
332
    				 // s?lo por si en un futuro se necesitan crear directorios temporales
333
    				if (files[i].isDirectory())	deleteDirectory(files[i]);
334
    				files[i].delete();
335
    			}
336
    		}
337
    		tempDirectory.delete();
338
    	} catch (Exception e) {	}
339

  
340
    }
341
    /**
342
     * Recursive directory delete.
343
     * @param f
344
     */
345
	private static void deleteDirectory(File f) {
346
		File[] files = f.listFiles();
347
		for (int i = 0; i < files.length; i++) {
348
			if (files[i].isDirectory()) deleteDirectory(files[i]);
349
			files[i].delete();
350
		}
351

  
352
	}
353

  
354
    /**
355
     * Creates a temporary file with a the provided name and data. The file
356
     * will be automatically deleted when the application exits. 
357
     * 
358
     * @param fileName Name of the temporary file to create
359
     * @param data The data to store in the file
360
     */
361
    public static File createTemp(String fileName, String data)throws IOException{
362
    	File f = new File(fileName);
363
    	DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(f)) );
364
		dos.writeBytes(data);
365
		dos.close();
366
    	f.deleteOnExit();
367
    	return f;
368
    }
369

  
370
    /**
371
     * Remove an URL from the system cache. The file will remain in the file
372
     * system for further eventual uses.
373
     * @param request
374
     */
375
	public static void removeURL(URL url) {
376
		if (downloadedFiles != null && downloadedFiles.containsKey(url))
377
			downloadedFiles.remove(url);
378
	}
379
	
380
	/**
381
	 * Creates the directory for temporary files, and returns the path of
382
	 * this directory. If the directory already exists, it just returns
383
	 * its path. Any file or directory created in this special directory
384
	 * will be delete when the application finishes.
385
	 * 
386
	 * @return An String containing the full path to the temporary directory
387
	 */
388
	public static String createTempDirectory(){
389
		File tempDirectory = new File(TEMPDIRECTORYPATH);
390
    	if (!tempDirectory.exists())
391
    		tempDirectory.mkdir();
392
    	return TEMPDIRECTORYPATH;
393
	}
394
}
0 395

  
tags/tmp_build/frameworks/_fwAndami/src/com/iver/andami/ui/AndamiEventQueue.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package com.iver.andami.ui;
42

  
43
import java.awt.AWTEvent;
44
import java.awt.EventQueue;
45

  
46
import com.iver.andami.messages.Messages;
47
import com.iver.andami.messages.NotificationManager;
48

  
49

  
50
/**
51
 * DOCUMENT ME!
52
 *
53
 * @author Fernando Gonz?lez Cort?s
54
 */
55
public class AndamiEventQueue extends EventQueue {
56
	protected void dispatchEvent(AWTEvent event){
57
		try{
58
			super.dispatchEvent(event);
59
		} catch(RuntimeException e){
60
			NotificationManager.addError(e);//Messages.getString("PluginServices.Bug en el c?digo"), e);
61
		} catch (Error e){
62
			NotificationManager.addError(Messages.getString("PluginServices.Error grave de la aplicaci?n.  \n Es conveniente que salgas de la aplicaci?n"), e);
63
		}
64
	}
65
}
0 66

  
tags/tmp_build/frameworks/_fwAndami/src/com/iver/andami/ui/wizard/WizardAndami.java
1
package com.iver.andami.ui.wizard;
2

  
3
import java.awt.BorderLayout;
4

  
5
import javax.swing.ImageIcon;
6
import javax.swing.JPanel;
7

  
8
import jwizardcomponent.CancelAction;
9
import jwizardcomponent.DefaultJWizardComponents;
10
import jwizardcomponent.FinishAction;
11

  
12
import com.iver.andami.PluginServices;
13
import com.iver.andami.ui.mdiManager.IWindow;
14
import com.iver.andami.ui.mdiManager.WindowInfo;
15

  
16
public class WizardAndami extends JPanel implements IWindow {
17
	WindowInfo viewInfo = null;
18
	WizardPanelWithLogo wizardPanel;
19

  
20
	// No deber?an necesitarse un FinishAction y un CancelAction, pero bueno,
21
	// lo mantengo por ahora.
22
	private class CloseAction extends FinishAction
23
	{
24
		IWindow v;
25
		public CloseAction(IWindow view)
26
		{
27
			super(wizardPanel.getWizardComponents());
28
			v = view;
29
		}
30
		public void performAction() {
31
			PluginServices.getMDIManager().closeWindow(v);
32
		}
33

  
34
	}
35
	private class CloseAction2 extends CancelAction
36
	{
37

  
38
		IWindow v;
39
		public CloseAction2(IWindow view)
40
		{
41
			super(wizardPanel.getWizardComponents());
42
			v = view;
43
		}
44
		public void performAction() {
45
			PluginServices.getMDIManager().closeWindow(v);
46
		}
47

  
48
	}
49

  
50

  
51
	public WizardAndami(ImageIcon logo)
52
	{
53
		wizardPanel = new WizardPanelWithLogo(logo);
54
		CloseAction closeAction = new CloseAction(this);
55
		CloseAction2 closeAction2 = new CloseAction2(this);
56
		wizardPanel.getWizardComponents().setFinishAction(closeAction);
57
		wizardPanel.getWizardComponents().setCancelAction(closeAction2);
58

  
59
		this.setLayout(new BorderLayout());
60
		this.add(wizardPanel, BorderLayout.CENTER);
61
	}
62

  
63
	public DefaultJWizardComponents getWizardComponents()
64
	{
65
		return wizardPanel.getWizardComponents();
66
	}
67

  
68

  
69
	public WindowInfo getWindowInfo() {
70
		if (viewInfo == null)
71
		{
72
			viewInfo = new WindowInfo(WindowInfo.MODALDIALOG|WindowInfo.RESIZABLE);
73
		}
74
		return viewInfo;
75
	}
76

  
77
	public Object getWindowProfile() {
78
		// TODO Auto-generated method stub
79
		return WindowInfo.DIALOG_PROFILE;
80
	}
81

  
82
}
0 83

  
tags/tmp_build/frameworks/_fwAndami/src/com/iver/andami/ui/wizard/WizardPanelWithLogo.java
1
package com.iver.andami.ui.wizard;
2

  
3
import java.awt.BorderLayout;
4
import java.awt.Color;
5

  
6
import javax.swing.ImageIcon;
7
import javax.swing.JLabel;
8
import javax.swing.JPanel;
9
import javax.swing.JSeparator;
10

  
11
import jwizardcomponent.CancelAction;
12
import jwizardcomponent.DefaultJWizardComponents;
13
import jwizardcomponent.FinishAction;
14
import jwizardcomponent.common.SimpleButtonPanel;
15

  
16
public class WizardPanelWithLogo extends JPanel {
17
	  DefaultJWizardComponents wizardComponents;
18

  
19
	  JPanel buttonPanel;
20
	  JLabel statusLabel = new JLabel();
21

  
22
	  ImageIcon logo;
23

  
24
	  public WizardPanelWithLogo(ImageIcon logo) {
25
	    this.logo = logo;
26
	    wizardComponents = new DefaultJWizardComponents();
27
	    init();
28
	  }
29

  
30
	  private void init() {
31

  
32

  
33
	    JPanel logoPanel = new JPanel();
34

  
35
	    String fileString;
36
	    if (logo.toString().indexOf("file:") < 0 &&
37
	        logo.toString().indexOf("http:") < 0) {
38
	      fileString = "file:///" +System.getProperty("user.dir") +"/"
39
	                        +logo.toString();
40
	      fileString = fileString.replaceAll("\\\\", "/");
41
	    } else {
42
	      fileString = logo.toString();
43
	    }
44
	    logoPanel.add(new JLabel(logo));
45
	    logoPanel.setBackground(Color.WHITE);
46
	    this.setLayout(new BorderLayout());
47
	    this.add(logoPanel, BorderLayout.WEST);
48
	    this.add(wizardComponents.getWizardPanelsContainer(),
49
	    							BorderLayout.CENTER);
50

  
51
	    JPanel auxPanel = new JPanel(new BorderLayout());
52
	    auxPanel.add(new JSeparator(), BorderLayout.NORTH);
53

  
54
	    buttonPanel = new SimpleButtonPanel(wizardComponents);
55
	    auxPanel.add(buttonPanel);
56
	    this.add(auxPanel, BorderLayout.SOUTH);
57

  
58

  
59
	    wizardComponents.setFinishAction(new FinishAction(wizardComponents) {
60
	      public void performAction() {
61
	        // dispose();
62
	      }
63
	    });
64
	    wizardComponents.setCancelAction(new CancelAction(wizardComponents) {
65
	      public void performAction() {
66
	        // dispose();
67
	      }
68
	    });
69
	  }
70

  
71
	  public DefaultJWizardComponents getWizardComponents(){
72
	    return wizardComponents;
73
	  }
74

  
75
	  public void setWizardComponents(DefaultJWizardComponents aWizardComponents){
76
	    wizardComponents = aWizardComponents;
77
	  }
78

  
79
	  public void show() {
80
	    wizardComponents.updateComponents();
81
	    super.setVisible(true);
82
	  }
83

  
84
}
0 85

  
tags/tmp_build/frameworks/_fwAndami/src/com/iver/andami/ui/wizard/UnsavedDataPanel.java
1
package com.iver.andami.ui.wizard;
2

  
3
import java.awt.BorderLayout;
4
import java.awt.Color;
5
import java.awt.Dimension;
6
import java.awt.FlowLayout;
7
import java.awt.GridBagConstraints;
8
import java.awt.GridBagLayout;
9
import java.awt.Insets;
10
import java.awt.event.ActionEvent;
11
import java.awt.event.ActionListener;
12
import java.awt.event.MouseEvent;
13
import java.awt.event.MouseListener;
14
import java.awt.image.BufferedImage;
15
import java.util.ArrayList;
16
import java.util.Iterator;
17

  
18
import javax.swing.ImageIcon;
19
import javax.swing.JCheckBox;
20
import javax.swing.JLabel;
21
import javax.swing.JPanel;
22
import javax.swing.JScrollPane;
23

  
24
import org.gvsig.gui.beans.swing.JButton;
25

  
26
import com.iver.andami.PluginServices;
27
import com.iver.andami.plugins.status.IUnsavedData;
28
import com.iver.andami.ui.mdiManager.IWindow;
29
import com.iver.andami.ui.mdiManager.WindowInfo;
30

  
31
/**
32
 * Ask for elements to save before application exit
33
 *
34
 *
35
 */
36
public class UnsavedDataPanel extends JPanel implements IWindow, ActionListener {
37
	/**
38
	 *
39
	 */
40
	private static final long serialVersionUID = -4745219917358767905L;
41

  
42

  
43
	private static ImageIcon blanckIcon = null;
44
	private JPanel pResources = null;
45
	private JPanel pButtons = null;
46
	private JScrollPane pScrollList = null;
47
	private myList list = null;
48
	private JLabel lblDescription = null;
49
	private JButton botSave = null;
50
	private JButton botDiscard = null;
51
	private JButton botDontExit = null;
52
	private JPanel pActionButtons = null;
53
	private JPanel pSelectionButtons = null;
54
	private JButton botSelectAll = null;
55
	private JButton botDeselectAll = null;
56

  
57
	private ArrayList listeners = new ArrayList();
58
	private JLabel lblResourceDescription = null;
59
	private IUnsavedData[] unsavedDataList;
60
	private String windowTitle = PluginServices.getText(this, "save_resources");
61

  
62

  
63

  
64
	/**
65
	 * This is the default constructor
66
	 */
67
	public UnsavedDataPanel(IUnsavedData[] unsavedDatalist) {
68
		super();
69
		initialize();
70
		this.setUnsavedDataArray(unsavedDatalist);
71
	}
72

  
73
	/**
74
	 * This method initializes this
75
	 *
76
	 * @return void
77
	 */
78
	private void initialize() {
79
		BorderLayout borderLayout = new BorderLayout();
80
		borderLayout.setHgap(5);
81
		borderLayout.setVgap(5);
82
		lblDescription = new JLabel();
83
		lblDescription.setText(PluginServices.getText(this, "select_resources_to_save_before_exit"));
84
		lblDescription.setPreferredSize(new Dimension(497, 40));
85
		lblDescription.setName("lblDescription");
86
		this.setLayout(borderLayout);
87
		this.setSize(396, 272);
88
		this.add(getPResources(), java.awt.BorderLayout.CENTER);
89
		this.add(getPButtons(), java.awt.BorderLayout.SOUTH);
90
		this.add(lblDescription, BorderLayout.NORTH);
91
	}
92

  
93
	/**
94
	 * This method initializes pResources
95
	 *
96
	 * @return javax.swing.JPanel
97
	 */
98
	private JPanel getPResources() {
99
		if (pResources == null) {
100
			pResources = new JPanel();
101
			pResources.setLayout(new BorderLayout());
102
			pResources.add(getPScrollList(), BorderLayout.CENTER);
103
			pResources.add(getLblResourceDescription(), BorderLayout.SOUTH);
104
		}
105
		return pResources;
106
	}
107

  
108

  
109
	/**
110
	 * This method initializes lblResourceDescription
111
	 *
112
	 * @return javax.swing.JLabel
113
	 */
114
	private JLabel getLblResourceDescription() {
115
		if (lblResourceDescription == null) {
116
			lblResourceDescription = new JLabel();
117
			lblResourceDescription.setText("");
118
			lblResourceDescription.setPreferredSize(new Dimension(38, 50));
119
			lblResourceDescription.setName("lblResourceDescription");
120
		}
121
		return lblResourceDescription;
122
	}
123

  
124

  
125
	/**
126
	 * This method initializes pButtons
127
	 *
128
	 * @return javax.swing.JPanel
129
	 */
130
	private JPanel getPButtons() {
131
		if (pButtons == null) {
132
			BorderLayout borderLayout2 = new BorderLayout();
133
			borderLayout2.setHgap(5);
134
			borderLayout2.setVgap(5);
135
			pButtons = new JPanel();
136
			pButtons.setLayout(borderLayout2);
137
			pButtons.add(getPSelectionButtons(), BorderLayout.NORTH);
138
			pButtons.add(getPActionButtons(), BorderLayout.SOUTH);
139
		}
140
		return pButtons;
141
	}
142

  
143
	/**
144
	 * This method initializes pScrollList
145
	 *
146
	 * @return javax.swing.JScrollPane
147
	 */
148
	private JScrollPane getPScrollList() {
149
		if (pScrollList == null) {
150
			pScrollList = new JScrollPane();
151
			pScrollList.setPreferredSize(new java.awt.Dimension(350,350));
152
			pScrollList.setViewportView(getList());
153
		}
154
		return pScrollList;
155
	}
156

  
157
	/**
158
	 * This method initializes list
159
	 *
160
	 * @return javax.swing.JList
161
	 */
162
	private myList getList() {
163
		if (list == null) {
164
			list = new myList();
165
			list.setBackground(Color.white);
166
		}
167
		return list;
168
	}
169

  
170
	/**
171
	 * This method initializes botSave
172
	 *
173
	 * @return javax.swing.JButton
174
	 */
175
	private JButton getBotSave() {
176
		if (botSave == null) {
177
			botSave = new JButton();
178
			botSave.setName("botSave");
179
			botSave.setToolTipText(PluginServices.getText(this, "save_selected_resources_and_exit"));
180
			botSave.setText(PluginServices.getText(this, "ok"));
181
			botSave.setActionCommand("Accept");
182
			botSave.addActionListener(this);
183
		}
184
		return botSave;
185
	}
186

  
187
	/**
188
	 * This method initializes botDiscard
189
	 *
190
	 * @return javax.swing.JButton
191
	 */
192
	private JButton getBotDiscard() {
193
		if (botDiscard == null) {
194
			botDiscard = new JButton();
195
			botDiscard.setName("botDiscard");
196
			botDiscard.setToolTipText(PluginServices.getText(this, "discard_changes_and_exit"));
197
			botDiscard.setText(PluginServices.getText(this, "discard_changes"));
198
			botDiscard.setActionCommand("Discard");
199
			botDiscard.addActionListener(this);
200
		}
201
		return botDiscard;
202
	}
203

  
204
	/**
205
	 * This method initializes botDontExit
206
	 *
207
	 * @return javax.swing.JButton
208
	 */
209
	private JButton getBotDontExit() {
210
		if (botDontExit == null) {
211
			botDontExit = new JButton();
212
			botDontExit.setName("botDontExit");
213
			botDontExit.setToolTipText(PluginServices.getText(this, "cancel_the_application_termination"));
214
			botDontExit.setText(PluginServices.getText(this, "cancelar"));
215
			botDontExit.setActionCommand("Cancel");
216
			botDontExit.addActionListener(this);
217
		}
218
		return botDontExit;
219
	}
220

  
221
	/**
222
	 * This method initializes pActionButtons
223
	 *
224
	 * @return javax.swing.JPanel
225
	 */
226
	private JPanel getPActionButtons() {
227
		if (pActionButtons == null) {
228
			FlowLayout flowLayout = new FlowLayout();
229
			flowLayout.setAlignment(FlowLayout.RIGHT);
230
			pActionButtons = new JPanel();
231
			pActionButtons.setLayout(flowLayout);
232
			pActionButtons.setName("pActionButtons");
233
			pActionButtons.add(getBotSave(), null);
234
			pActionButtons.add(getBotDiscard(), null);
235
			pActionButtons.add(getBotDontExit(), null);
236
		}
237
		return pActionButtons;
238
	}
239

  
240
	/**
241
	 * This method initializes pSelectionButtons
242
	 *
243
	 * @return javax.swing.JPanel
244
	 */
245
	private JPanel getPSelectionButtons() {
246
		if (pSelectionButtons == null) {
247
			FlowLayout flowLayout1 = new FlowLayout();
248
			flowLayout1.setAlignment(FlowLayout.LEFT);
249
			pSelectionButtons = new JPanel();
250
			pSelectionButtons.setLayout(flowLayout1);
251
			pSelectionButtons.setName("pSelectionButtons");
252
			pSelectionButtons.add(getBotSelectAll(), null);
253
			pSelectionButtons.add(getBotDeselectAll(), null);
254
		}
255
		return pSelectionButtons;
256
	}
257

  
258
	/**
259
	 * This method initializes botSelectAll
260
	 *
261
	 * @return javax.swing.JButton
262
	 */
263
	private JButton getBotSelectAll() {
264
		if (botSelectAll == null) {
265
			botSelectAll = new JButton();
266
			botSelectAll.setText(PluginServices.getText(this, "select_all"));
267
			botSelectAll.setName("botSelectAll");
268
			botSelectAll.setToolTipText(PluginServices.getText(this, "select_all_resources"));
269
			botSelectAll.setActionCommand("SelectAll");
270
			botSelectAll.addActionListener(this);
271
		}
272
		return botSelectAll;
273
	}
274

  
275
	/**
276
	 * This method initializes botDeselectAll
277
	 *
278
	 * @return javax.swing.JButton
279
	 */
280
	private JButton getBotDeselectAll() {
281
		if (botDeselectAll == null) {
282
			botDeselectAll = new JButton();
283
			botDeselectAll.setName("botDeselectAll");
284
			botDeselectAll.setToolTipText(PluginServices.getText(this, "deselect_all_resources"));
285
			botDeselectAll.setText(PluginServices.getText(this, "deselect_all"));
286
			botDeselectAll.setActionCommand("DeselectAll");
287
			botDeselectAll.addActionListener(this);
288
		}
289
		return botDeselectAll;
290
	}
291

  
292
	public WindowInfo getWindowInfo() {
293
		WindowInfo wi = new WindowInfo(WindowInfo.MODALDIALOG
294
				| WindowInfo.RESIZABLE
295
				| WindowInfo.MAXIMIZABLE);
296
		wi.setTitle(windowTitle);
297
		wi.setHeight(270);
298
		wi.setWidth(450);
299
		return wi;
300
	}
301

  
302
	public void setWindowTitle(String windowTitle) {
303
		this.windowTitle = windowTitle;
304
	}
305

  
306
	public void setCancelText(String text, String tooltipText) {
307
		getBotDontExit().setToolTipText(tooltipText);
308
		getBotDontExit().setText(text);
309
	}
310

  
311
	public void setDiscardText(String text, String tooltipText) {
312
		getBotDiscard().setToolTipText(tooltipText);
313
		getBotDiscard().setText(text);
314
	}
315

  
316
	public void setAcceptText(String text, String tooltipText) {
317
		getBotSave().setToolTipText(tooltipText);
318
		getBotSave().setText(text);
319
	}
320

  
321
	public void setHeaderText(String text) {
322
		lblDescription.setText(text);
323
	}
324

  
325
	/**
326
	 * Register a listener to call
327
	 *
328
	 * @param a UnsavedDataPanelListener instance
329
	 */
330
	public void addActionListener(UnsavedDataPanelListener listener){
331
		this.listeners.add(listener);
332
	}
333

  
334
	public void removeActionListener(UnsavedDataPanelListener listener){
335
		this.listeners.remove(listener);
336
	}
337

  
338
	public class UnsavedDataPanelListener {
339
		public void cancel(UnsavedDataPanel panel){
340

  
341
		}
342

  
343
		public void accept(UnsavedDataPanel panel){
344

  
345
		}
346

  
347
		public void discard(UnsavedDataPanel panel) {
348

  
349
		}
350
	}
351

  
352
	private class myList extends JPanel{
353

  
354
		/**
355
		 *
356
		 */
357
		private static final long serialVersionUID = 3179254463477354501L;
358

  
359
		private GridBagConstraints constraints;
360
		private GridBagConstraints constraintsLast;
361

  
362
		public myList(){
363
			super();
364
			initialize();
365
		}
366

  
367
		private void initialize(){
368
			this.setLayout(new GridBagLayout());
369
			this.constraints = new GridBagConstraints();
370
			this.constraints.fill = GridBagConstraints.HORIZONTAL;
371
			this.constraints.gridwidth = GridBagConstraints.REMAINDER;
372
			this.constraints.weightx =0;
373
			this.constraints.gridx =0;
374
			this.constraints.gridy=0;
375
			this.constraints.anchor = GridBagConstraints.WEST;
376
			this.constraints.insets =new Insets(3,3,0,0);
377

  
378
			this.constraintsLast = new GridBagConstraints();
379
			this.constraintsLast.fill = GridBagConstraints.BOTH;
380
			this.constraintsLast.gridheight = GridBagConstraints.REMAINDER;
381
			this.constraintsLast.gridwidth = GridBagConstraints.REMAINDER;
382
			this.constraintsLast.gridx =0;
383
			this.constraintsLast.weightx =1;
384
			this.constraintsLast.weighty =1;
385
			this.constraintsLast.anchor = GridBagConstraints.FIRST_LINE_START;
386

  
387

  
388
		}
389

  
390
		public void addItems(IUnsavedData[] itemList){
391
			int i;
392
			this.removeAll();
393
			if (itemList.length == 0){
394
				return;
395
			}
396

  
397
			for (i=0;i< itemList.length;i++){
398
				this.constraints.gridy = i;
399
				this.add(newItem(itemList[i]), this.constraints);
400
			}
401
			this.constraintsLast.gridy=itemList.length;
402
			this.add(new JLabel(),this.constraintsLast);
403

  
404
		}
405
		public int getItemsCount(){
406
			return this.getComponentCount() -1;
407
		}
408

  
409
		public myUnsavedItem getItem(int i){
410
			if (i>= this.getComponentCount()){
411
				return null;
412
			}
413
			return (myUnsavedItem)this.getComponent(i);
414
		}
415

  
416
		private myUnsavedItem newItem(IUnsavedData itemData){
417
			myUnsavedItem item;
418
			item = new myUnsavedItem(itemData);
419
			item.addMouseListener(new MouseListener(){
420
				public void mouseClicked(MouseEvent e) {
421
					myUnsavedItem item = (myUnsavedItem)e.getComponent();
422
					getLblResourceDescription().setText(item.getDescription());
423
				}
424
				public void mouseEntered(MouseEvent e) {
425
				}
426

  
427
				public void mouseExited(MouseEvent e) {
428
				}
429

  
430
				public void mousePressed(MouseEvent e) {
431
				}
432

  
433
				public void mouseReleased(MouseEvent e) {
434
				}
435

  
436
			});
437
			return item;
438
		}
439

  
440
	}
441

  
442
	private class myUnsavedItem extends JPanel{
443
		/**
444
		 *
445
		 */
446
		private static final long serialVersionUID = -6280057775368437349L;
447
		private JCheckBox chkChecked;
448
		private JLabel lblText;
449
		private IUnsavedData dataItem;
450

  
451
		public myUnsavedItem(IUnsavedData dataItem ){
452
			super();
453
			this.initialize();
454
			this.setData(dataItem);
455
		}
456

  
457
		private void initialize(){
458
			this.setOpaque(false);
459
			BorderLayout layout = new BorderLayout();
460
			layout.setHgap(5);
461
			this.setLayout(layout);
462
			this.add(this.getChkChecked(),BorderLayout.WEST);
463
			this.add(this.getLblText(),BorderLayout.CENTER);
464
		}
465

  
466
		private JLabel getLblText() {
467
			if (lblText == null){
468
				lblText = new JLabel();
469
				lblText.setName("lblText");
470
			}
471
			return lblText;
472
		}
473

  
474
		private JCheckBox getChkChecked() {
475
			if (chkChecked == null){
476
				chkChecked = new JCheckBox();
477
				chkChecked.setName("chkChecked");
478
				chkChecked.setSelected(true);
479
				chkChecked.setOpaque(false);
480
			}
481
			return chkChecked;
482
		}
483

  
484
		public boolean isSelected(){
485
			return getChkChecked().isSelected();
486
		}
487

  
488
		public void setSelected(boolean selected){
489
			getChkChecked().setSelected(selected);
490
		}
491

  
492
		public void setData(IUnsavedData dataItem){
493
			this.dataItem = dataItem;
494
			JLabel lbl = getLblText();
495
			if (dataItem.getIcon() != null){
496
				lbl.setIcon(dataItem.getIcon());
497
			} else{
498
				lbl.setIcon(getBlanckIcon());
499
			}
500
			lbl.setText(dataItem.getResourceName());
501
			getChkChecked().setSelected(true);
502
		}
503

  
504
		public IUnsavedData getData(){
505
			return this.dataItem;
506
		}
507

  
508
		public String getDescription(){
509
			return this.dataItem.getDescription();
510
		}
511

  
512
		private ImageIcon getBlanckIcon(){
513
			if (blanckIcon== null){
514
				BufferedImage buff =new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
515
				blanckIcon = new ImageIcon(buff);
516
			}
517
			return blanckIcon;
518
		}
519

  
520
	}
521

  
522
	public void actionPerformed(ActionEvent e) {
523
		if (e.getActionCommand() == "Cancel"){
524
			fireDontExitEvent();
525
			return;
526
		}
527
		if (e.getActionCommand() == "Accept"){
528
			fireAcceptEvent();
529
			return;
530
		}
531
		if (e.getActionCommand() == "Discard") {
532
			fireDiscardEvent();
533
			return;
534
		}
535
		if (e.getActionCommand() == "SelectAll"){
536
			selectAll();
537
			return;
538
		}
539
		if (e.getActionCommand() == "DeselectAll"){
540
			deselectAll();
541
			return;
542
		}
543
	}
544

  
545
	public void close(){
546
		PluginServices.getMDIManager().closeWindow(this);
547

  
548
	}
549

  
550
	private void fireAcceptEvent() {
551
		Iterator iter = this.listeners.iterator();
552
		while (iter.hasNext()){
553
			((UnsavedDataPanelListener)iter.next()).accept(this);
554
		}
555
	}
556

  
557
	private void fireDiscardEvent() {
558
		Iterator iter = this.listeners.iterator();
559
		while (iter.hasNext()){
560
			((UnsavedDataPanelListener)iter.next()).discard(this);
561
		}
562
	}
563

  
564
	private void fireDontExitEvent() {
565
		Iterator iter = this.listeners.iterator();
566
		while (iter.hasNext()){
567
			((UnsavedDataPanelListener)iter.next()).cancel(this);
568
		}
569
	}
570

  
571
	private void setSelectedsAll( boolean selected){
572
		int i;
573
		myList theList = getList();
574
		myUnsavedItem item;
575
		for (i=0;i < theList.getItemsCount();i++){
576
			item = (myUnsavedItem)theList.getItem(i);
577
			item.setSelected(selected);
578
		}
579
		theList.doLayout();
580
	}
581

  
582
	public void deselectAll() {
583
		this.setSelectedsAll(false);
584
	}
585

  
586
	public void selectAll() {
587
		this.setSelectedsAll(true);
588
	}
589

  
590

  
591
	/**
592
	 * Set the resorces to ask for
593
	 *
594
	 * @param IUnsavedData[] resources pending to save
595
	 */
596
	public void setUnsavedDataArray(IUnsavedData[] unsavedDatalist){
597
		this.unsavedDataList = unsavedDatalist;
598
		myList theList = getList();
599

  
600
		theList.addItems(unsavedDatalist);
601
		theList.validate();
602

  
603
	}
604

  
605

  
606
	private IUnsavedData[] getUnsavedData(boolean selected){
607
		int i;
608
		myList theList = getList();
609
		ArrayList aList = new ArrayList();
610
		myUnsavedItem item;
611
		IUnsavedData[] result;
612

  
613
		for (i=0;i < theList.getItemsCount();i++){
614
			item = (myUnsavedItem)theList.getItem(i);
615
			if (item.isSelected() == selected){
616
				aList.add(item.getData());
617
			}
618
		}
619
		result = new IUnsavedData[aList.size()];
620
		System.arraycopy(aList.toArray(), 0, result, 0, aList.size());
621
		return result;
622
	}
623

  
624

  
625
	/**
626
	 * Returns the IUnsavedData selecteds for the user to save
627
	 *
628
	 * @return IUnsaveData[] to save
629
	 */
630
	public IUnsavedData[] getSelectedsUnsavedData(){
631
		return this.getUnsavedData(true);
632

  
633
	}
634

  
635
	/**
636
	 * Returns the IUnsavedData not selecteds for the user
637
	 *
638
	 * @return IUnsavedData[] to ignore
639
	 */
640
	public IUnsavedData[] getUnselectedsUnsavedData(){
641
		return this.getUnsavedData(false);
642
	}
643

  
644
	public Object getWindowProfile() {
645
		return WindowInfo.DIALOG_PROFILE;
646
	}
647

  
648
}  //  @jve:decl-index=0:visual-constraint="10,10"
649

  
0 650

  
tags/tmp_build/frameworks/_fwAndami/src/com/iver/andami/ui/theme/Theme.java
1
package com.iver.andami.ui.theme;
2

  
3
import java.awt.Color;
4
import java.awt.Point;
5
import java.io.BufferedReader;
6
import java.io.File;
7
import java.io.FileInputStream;
8
import java.io.FileNotFoundException;
9
import java.io.FileReader;
10
import java.io.IOException;
11
import java.util.ArrayList;
12

  
13
import javax.swing.ImageIcon;
14

  
15
import org.kxml2.io.KXmlParser;
16
import org.xmlpull.v1.XmlPullParser;
17

  
18
import com.iver.andami.PluginServices;
19
import com.iver.andami.messages.NotificationManager;
20

  
21

  
22
/**
23
 * Personalization of the program according to the file xml with the necessary information.
24
 *
25
 * @author Vicente Caballero Navarro
26
 */
27
public class Theme {
28
    public static final String CENTERED = "CENTERED";
29
    public static final String EXPAND = "EXPAND";
30
    public static final String MOSAIC = "MOSAIC";
31

  
32
	private static String encoding = "UTF-8";
33
	private static final String ANDAMI_PROPERTIES = "AndamiProperties";
34
    private static final String APPLICATION_IMAGES = "ApplicationImages";
35
    private static final String SPLASH_IMAGES = "SplashImages";
36
    private static final String SPLASH = "Splash";
37
    private static final String PATH = "path";
38
    private static final String TIMER = "timer";
39
    private static final String ICON = "Icon";
40
    private static final String APPLICATION_NAME = "ApplicationName";
41
    private static final String VALUE = "value";
42
	private static final String BACKGROUND_IMAGE = "BackgroundImage";
43
	private static final String WALLPAPER_TYPE = "WallpaperType";
44

  
45
	private static final String VERSION="version";
46
	private static final String FONTPOSITIONX="x";
47
	private static final String FONTPOSITIONY="y";
48

  
49
	private static final String FONTSIZE="fontsize";
50
	private static final String FONTCOLOR="color";
51

  
52
	private ArrayList<String> images = new ArrayList<String>();
53
    private String icon;
54
    private ArrayList<String> timers = new ArrayList<String>();
55
    private ArrayList<String> versions = new ArrayList<String>();
56
    private ArrayList<String> fontColors = new ArrayList<String>();
57
    private ArrayList<String> fontSizes = new ArrayList<String>();
58
    private ArrayList<String> fontpositionsX=new ArrayList<String>();
59
    private ArrayList<String> fontpositionsY=new ArrayList<String>();
60

  
61
    private String name = null;
62
	private String backgroundimage;
63
	private String wallpaperType=CENTERED;
64

  
65
    public static void main(String[] args) {
66
        Theme theme = new Theme();
67
        theme.readTheme(new File(
68
                "c:/workspace/_fwAndami/theme/andami-theme.xml"));
69
    }
70

  
71
    /**
72
     * Read the file xml with the personalization.
73
     *
74
     * @param file xml
75
     */
76
    public void readTheme(File file) {
77
        try {
78
            FileReader fr;
79

  
80
            try {
81
                fr = new FileReader(file);
82

  
83
                BufferedReader br = new BufferedReader(fr);
84
                char[] buffer = new char[100];
85
                br.read(buffer);
86

  
87
                StringBuffer st = new StringBuffer(new String(buffer));
88
                String searchText = "encoding=\"";
89
                int index = st.indexOf(searchText);
90

  
91
                if (index > -1) {
92
                    st.delete(0, index + searchText.length());
93
                    encoding = st.substring(0, st.indexOf("\""));
94
                }
95
            } catch (FileNotFoundException ex) {
96
                ex.printStackTrace();
97
            } catch (IOException e) {
98
                e.printStackTrace();
99
            }
100

  
101
            fr = new FileReader(file);
102

  
103
            KXmlParser parser = new KXmlParser();
104
            parser.setInput(new FileInputStream(file), encoding);
105

  
106
            int tag = parser.nextTag();
107

  
108
            if (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
109
                parser.require(XmlPullParser.START_TAG, null, ANDAMI_PROPERTIES);
110

  
111
                while (tag != XmlPullParser.END_DOCUMENT) {
112
                    //parser.next();
113
                    switch (tag) {
114
                    case XmlPullParser.START_TAG:
115

  
116
                        if (parser.getName().compareTo(ANDAMI_PROPERTIES) == 0) {
117
                            parser.nextTag();
118
                            if (parser.getName().compareTo(APPLICATION_IMAGES) == 0) {
119
                                int splashtag = parser.nextTag();
120
                            if (parser.getName().compareTo(SPLASH_IMAGES) == 0) {
121
									splashtag = parser.nextTag();
122
									boolean endSplash = false;
123

  
124
									// parser.require(KXmlParser.START_TAG,
125
									// null, SPLASH);
126
									while ((splashtag != XmlPullParser.END_DOCUMENT)
127
											&& !endSplash) {
128
										if (splashtag == XmlPullParser.END_TAG) {
129
											splashtag = parser.nextTag();
130

  
131
											continue;
132
										}
133

  
134
										if (parser.getName().compareTo(SPLASH) == 0) {
135
											images.add(parser
136
													.getAttributeValue("",
137
															PATH));
138
											timers.add(parser
139
													.getAttributeValue("",
140
															TIMER));
141
											versions.add(parser
142
													.getAttributeValue("",
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff