Revision 38682

View differences:

tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/wcs/wcs_1_0_0/WCSProtocolHandler_1_0_0Test.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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
/*
42
 * $Id$ 
43
 * $Log$
44
 * Revision 1.8  2006-05-12 07:45:49  jaume
45
 * some warnings removed
46
 *
47
 * Revision 1.7  2006/03/15 08:54:31  jaume
48
 * *** empty log message ***
49
 *
50
 * Revision 1.6  2006/03/06 07:16:08  jaume
51
 * *** empty log message ***
52
 *
53
 * Revision 1.5  2006/03/02 07:17:08  jaume
54
 * *** empty log message ***
55
 *
56
 * Revision 1.3  2006/03/01 18:07:11  jaume
57
 * *** empty log message ***
58
 *
59
 * Revision 1.2  2006/03/01 17:56:28  jaume
60
 * *** empty log message ***
61
 *
62
 * Revision 1.1  2006/02/28 15:26:59  jaume
63
 * *** empty log message ***
64
 * 
65
 */
66
package org.gvsig.remoteclient.wcs.wcs_1_0_0;
67

  
68
import java.io.File;
69

  
70
import junit.framework.TestCase;
71
/**
72
 * 
73
 * @author jaume
74
 *
75
 */
76
public class WCSProtocolHandler_1_0_0Test extends TestCase {
77
	WCSProtocolHandler1_0_0 handler1, handler2, handler3, handler4;
78
	
79
	public void setUp() {
80
		System.out.println("Setting up test..");
81
		handler1 = new WCSProtocolHandler1_0_0();
82
		handler2 = new WCSProtocolHandler1_0_0();
83
		handler3 = new WCSProtocolHandler1_0_0();
84
		handler4 = new WCSProtocolHandler1_0_0();
85
	}
86
	
87
	
88
	
89
	public void testParsing() {
90
		long t1 = System.currentTimeMillis();
91
		assertTrue(handler1.parseCapabilities(new File("testdata/wcs/WCS-hypnosGetCapabilities.xml")));
92
		assertTrue(handler1.parseDescribeCoverage(new File("testdata/wcs/WCS-hypnosDescribeCoverage.xml")));
93
		assertTrue(handler2.parseCapabilities(new File("testdata/wcs/WCS-simonCITCostasGetCapabilities.xml")));
94
		assertTrue(handler2.parseDescribeCoverage(new File("testdata/wcs/WCS-simonCITCostasDescribeCoverage.xml")));
95
		assertTrue(handler3.parseCapabilities(new File("testdata/wcs/WCS-simonCITSpotGetCapabilities.xml")));
96
		assertTrue(handler3.parseDescribeCoverage(new File("testdata/wcs/WCS-simonCITSpotDescribeCoverage.xml")));
97
		assertTrue(handler4.parseCapabilities(new File("testdata/wcs/WCS-ionicGetCapabilities.xml")));
98
		assertTrue(handler4.parseDescribeCoverage(new File("testdata/wcs/WCS-ionicDescribeCoverage.xml")));
99
		long t2 = System.currentTimeMillis();
100
		System.out.println("Test parsing done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
101
	}
102
}
0 103

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/wfs/wfs_1_0_0/WFSProtocolHandlerTest1_0_0.java
1
package org.gvsig.remoteclient.wfs.wfs_1_0_0;
2

  
3
import java.io.File;
4

  
5
import junit.framework.TestCase;
6
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
7
 *
8
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
9
 *
10
 * This program is free software; you can redistribute it and/or
11
 * modify it under the terms of the GNU General Public License
12
 * as published by the Free Software Foundation; either version 2
13
 * of the License, or (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, write to the Free Software
22
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
23
 *
24
 * For more information, contact:
25
 *
26
 *  Generalitat Valenciana
27
 *   Conselleria d'Infraestructures i Transport
28
 *   Av. Blasco Ib??ez, 50
29
 *   46010 VALENCIA
30
 *   SPAIN
31
 *
32
 *      +34 963862235
33
 *   gvsig@gva.es
34
 *      www.gvsig.gva.es
35
 *
36
 *    or
37
 *
38
 *   IVER T.I. S.A
39
 *   Salamanca 50
40
 *   46005 Valencia
41
 *   Spain
42
 *
43
 *   +34 963163400
44
 *   dac@iver.es
45
 */
46
/* CVS MESSAGES:
47
 *
48
 * $Id$
49
 * $Log$
50
 * Revision 1.2  2006-10-10 12:52:28  jorpiell
51
 * Soporte para features complejas.
52
 *
53
 * Revision 1.1  2006/08/10 12:00:49  jorpiell
54
 * Primer commit del driver de Gml
55
 *
56
 * Revision 1.3  2006/05/23 13:23:13  jorpiell
57
 * Se ha cambiado el final del bucle de parseado y se tiene en cuenta el online resource
58
 *
59
 * Revision 1.2  2006/04/20 16:39:16  jorpiell
60
 * A?adida la operacion de describeFeatureType y el parser correspondiente.
61
 *
62
 * Revision 1.1  2006/04/19 12:51:35  jorpiell
63
 * A?adidas algunas de las clases del servicio WFS
64
 *
65
 *
66
 */
67
/**
68
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
69
 */
70
public class WFSProtocolHandlerTest1_0_0 extends TestCase {
71
	WFSProtocolHandler1_0_0 handler;
72
	
73
	public void setUp() {
74
		System.out.println("Setting up test..");
75
		handler = new WFSProtocolHandler1_0_0();		
76
	}	
77
	
78
	public void testParsingDescribeFeatureType() {
79
		long t1 = System.currentTimeMillis();
80
		assertTrue(handler.parseCapabilities(new File("testdata/wfs/WFS-dmsolutionsGetCapabilities.xml")));
81
		handler.setCurrentFeature("popplace");		
82
		long t2 = System.currentTimeMillis();
83
		System.out.println("Test parsing vivid done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
84
	}
85
	
86
	public void testParsingDescribeFeatureType2() {
87
		long t1 = System.currentTimeMillis();
88
		assertTrue(handler.parseCapabilities(new File("testdata/wfs/WFS-sercartlinGetCapabilities.xml")));
89
		handler.setCurrentFeature("topp:tasmania_roads");		
90
		long t2 = System.currentTimeMillis();
91
		System.out.println("Test parsing sercartlin done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
92
	}
93
	
94
	public void testParsingDescribeFeatureType3() {
95
		long t1 = System.currentTimeMillis();
96
		assertTrue(handler.parseCapabilities(new File("testdata/wfs/WFS-IDEEGetCapabilities.xml")));
97
		handler.setCurrentFeature("BDLL200_Provincia");	
98
		long t2 = System.currentTimeMillis();
99
		System.out.println("Test parsing TNT done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
100
	}
101
	
102

  
103
	
104
}
0 105

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/wfs/wfs_1_1_0/WFSProtocolHandlerTest1_1_0.java
1
package org.gvsig.remoteclient.wfs.wfs_1_1_0;
2

  
3
import java.io.File;
4

  
5
import junit.framework.TestCase;
6
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
7
 *
8
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
9
 *
10
 * This program is free software; you can redistribute it and/or
11
 * modify it under the terms of the GNU General Public License
12
 * as published by the Free Software Foundation; either version 2
13
 * of the License, or (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program; if not, write to the Free Software
22
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
23
 *
24
 * For more information, contact:
25
 *
26
 *  Generalitat Valenciana
27
 *   Conselleria d'Infraestructures i Transport
28
 *   Av. Blasco Ib??ez, 50
29
 *   46010 VALENCIA
30
 *   SPAIN
31
 *
32
 *      +34 963862235
33
 *   gvsig@gva.es
34
 *      www.gvsig.gva.es
35
 *
36
 *    or
37
 *
38
 *   IVER T.I. S.A
39
 *   Salamanca 50
40
 *   46005 Valencia
41
 *   Spain
42
 *
43
 *   +34 963163400
44
 *   dac@iver.es
45
 */
46
/* CVS MESSAGES:
47
 *
48
 * $Id$
49
 * $Log$
50
 * Revision 1.1  2007-02-09 14:11:01  jorpiell
51
 * Primer piloto del soporte para WFS 1.1 y para WFS-T
52
 *
53
 *
54
 */
55
/**
56
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
57
 */
58
public class WFSProtocolHandlerTest1_1_0 extends TestCase {
59
	WFSProtocolHandler1_1_0 handler;
60
	
61
	public void setUp() {
62
		System.out.println("Setting up test..");
63
		handler = new WFSProtocolHandler1_1_0();		
64
	}
65
	
66
	public void testParsingDescribeFeatureType1() {
67
//		long t1 = System.currentTimeMillis();
68
//		assertTrue(handler.parseCapabilities(new File("test/WFS-1_1_0SercartlinGetCapabilities.xml")));
69
//		handler.setCurrentFeature("popplace");
70
//		
71
//		assertTrue(handler.parseDescribeFeatureType(new File("test/WFS-dmsolutionsDescribeFeatureType.xml"),null));
72
//		long t2 = System.currentTimeMillis();
73
//		System.out.println("Test parsing vivid done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
74
	}
75
	
76
	public void testParsingDescribeFeatureType2() {
77
		long t1 = System.currentTimeMillis();
78
		assertTrue(handler.parseCapabilities(new File("testdata/wfs/WFS-1_1_0IDEEGetCapabilities.xml")));
79
		handler.setCurrentFeature("ideewfs:VerticeRedOrdenInferior");	
80
		long t2 = System.currentTimeMillis();
81
		Object obj = handler.getFeatures().get("ideewfs:VerticeRedOrdenInferior");
82
		System.out.println("Test parsing vivid done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
83
	}
84
	
85
	public void testParsingDescribeFeatureTypeTNT() {
86
		long t1 = System.currentTimeMillis();
87
		assertTrue(handler.parseCapabilities(new File("testdata/wfs/WFS-1_1_0TNTGetCapabilities.xml")));
88
		handler.setCurrentFeature("BDLL200_Provincia");		
89
		long t2 = System.currentTimeMillis();
90
		System.out.println("Test parsing IDEE done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
91
	}
92
}
0 93

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/Tests/Test.java
1
package org.gvsig.remoteclient.Tests;
2

  
3
import java.awt.geom.Rectangle2D;
4

  
5
import junit.framework.TestCase;
6

  
7
import org.gvsig.remoteclient.wms.WMSClient;
8
import org.gvsig.remoteclient.wms.WMSStatus;
9

  
10
public class Test extends TestCase
11
{
12

  
13
	public static void main(String[] args)
14
	{
15
		try
16
		{
17
			WMSClient wmsclient = new WMSClient("http://orto.cth.gva.es:80/wmsconnector/com.esri.wms.Esrimap/wms_urbanismo_tematicos?");
18
			//http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_urbanismo_tematicos?REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=3&STYLES=&SRS=EPSG:4326&BBOX=-1.5597948439,37.8178641941,0.5286772976,40.8151000365&WIDTH=500&HEIGHT=500&FORMAT=image/jpeg&EXCEPTIONS=XML
19

  
20
			wmsclient.connect(null);
21
			//System.out.println();
22
			//System.out.println(Utilities.Vector2CS(layerNames));
23

  
24
			WMSStatus status = new WMSStatus();
25
			status.addLayerName("3");
26
//			status.addLayerName("europa_rivieren");
27
//			status.addStyleName("default");
28
//			status.addStyleName("default");
29
			status.setSrs("EPSG:4326");
30

  
31
			Rectangle2D extent = new Rectangle2D.Double(-1.5597948439,37.8178641941,-1.5597948439-0.5286772976,37.8178641941-40.8151000365);
32

  
33
			status.setExtent(extent);
34
			status.setFormat("image/jpeg");
35
			status.setHeight(500);
36
			status.setWidth(500);
37

  
38
			//wmsclient.getMap(status);
39

  
40
			//wmsclient.getFeatureInfo(status,300,300);
41

  
42
			System.out.println();
43
		}
44
		catch(Exception e)
45
		{
46
			System.out.println(e.getMessage());
47
		}
48
	}
49

  
50
}
0 51

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/wms/wms_1_1_1/WMSProtocolHandler_1_1_1Test.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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 org.gvsig.remoteclient.wms.wms_1_1_1;
42

  
43
import java.io.File;
44

  
45
import junit.framework.TestCase;
46

  
47
/**
48
 * @author jaume dominguez faus - jaume.dominguez@iver.es
49
 */
50
public class WMSProtocolHandler_1_1_1Test extends TestCase {
51
	WMSProtocolHandler1_1_1 handler1, handler2, handler3, handler4;
52

  
53
	public void setUp() {
54
		System.out.println("Setting up test..");
55
		handler1 = new WMSProtocolHandler1_1_1();
56
	}
57

  
58

  
59

  
60
	public void testParsing() {
61
		long t1 = System.currentTimeMillis();
62
		handler1.parseCapabilities(new File("testdata/wms/wms.xml"));
63
		long t2 = System.currentTimeMillis();
64
		System.out.println("Test parsing done with apparently no errors in "+ (t2-(float)t1)/1000+" seconds");
65
	}
66
}
67

  
0 68

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/wms/WMSStatusTest.java
1
package org.gvsig.remoteclient.wms;
2

  
3
import java.awt.geom.Rectangle2D;
4
import java.util.Vector;
5

  
6
import junit.framework.TestCase;
7
/**
8
 * 
9
 * @author jaume
10
 *
11
 */
12
public class WMSStatusTest extends TestCase {
13
	WMSStatus st1, st2, st3, st4;
14
    protected void setUp() {
15
    	st1 = new WMSStatus();
16
    	// Layer names
17
    	Vector v1 = new Vector();
18
    	v1.add("a");
19
    	v1.add("b");
20
    	v1.add("c");
21
    	st1.setLayerNames(v1);
22
    	v1.clear();
23
    	// Styles
24
    	v1.add("s1");
25
    	v1.add("s2");
26
    	v1.add("s3");
27
    	st1.setStyles(v1);
28
    	// Transparency
29
    	st1.setTransparency(false);
30
    	v1.clear();
31
    	v1.add("TIME=february");
32
    	v1.add("WAVELENGTH=200nm");
33
    	st1.setDimensions(v1);
34
    	// Extent
35
    	Rectangle2D rect1 = new Rectangle2D.Double(1.0, 1.00000001, 5.000000, 6.8);
36
    	st1.setExtent(rect1);
37
    	// Exception format
38
    	st1.setExceptionFormat("bla");
39
    	// SRS
40
    	st1.setSrs("bla bla");
41
    	// Format
42
    	st1.setFormat("image/mpeg");
43
    	// Width
44
    	st1.setWidth(800);
45
    	// Height
46
    	st1.setHeight(600);
47
    	// Online resource
48
    	st1.setOnlineResource("alkjf");
49
    	
50
    	st2 = new WMSStatus();
51
    	// Layer names
52
        Vector v2 = new Vector();
53
    	v2.add("a");
54
    	v2.add("b");
55
    	v2.add("c");
56
    	st2.setLayerNames(v2);
57
    	v2.clear();
58
    	// Styles
59
    	v2.add("s1");
60
    	v2.add("s2");
61
    	v2.add("s3");
62
    	st2.setStyles(v2);
63
    	// Transparency
64
    	st2.setTransparency(false);
65
    	v2.clear();
66
    	// Dimensions
67
    	v2.add("TIME=february");
68
    	v2.add("WAVELENGTH=200nm");
69
    	st2.setDimensions(v2);
70
    	// Extent
71
    	Rectangle2D rect2 = new Rectangle2D.Double(1.0, 1.00000001, 5.000000, 6.8);
72
    	st2.setExtent(rect2);
73
    	// Exception format
74
    	st2.setExceptionFormat("bla");
75
    	// SRS
76
    	st2.setSrs("bla bla");
77
    	// Format
78
    	st2.setFormat("image/mpeg");
79
    	// Width
80
    	st2.setWidth(800);
81
    	// Height
82
    	st2.setHeight(600);
83
    	// Online resource
84
    	st2.setOnlineResource("alkjf");
85
    	
86
    	st3 = new WMSStatus();
87
    	// Layer names
88
        Vector v3 = new Vector();
89
    	v3.add("a");
90
    	v3.add("b");
91
    	v3.add("c");
92
    	st3.setLayerNames(v3);
93
    	v3.clear();
94
    	// Styles
95
    	v3.add("s1");
96
    	v3.add("s2");
97
    	v3.add("s3");
98
    	st3.setStyles(v3);
99
    	// Transparency
100
    	st3.setTransparency(false);
101
    	v3.clear();
102
    	// Dimensions
103
    	v3.add("TIME=february");
104
    	v3.add("WAVELENGTH=200nm");
105
    	st3.setDimensions(v3);
106
    	// Extent
107
    	Rectangle2D rect3 = new Rectangle2D.Double(2.0, 1.00000001, 5.000000, 6.8);
108
    	st3.setExtent(rect3);
109
    	// Exception format
110
    	st3.setExceptionFormat("bla");
111
    	// SRS
112
    	st3.setSrs("bla bla");
113
    	// Format
114
    	st3.setFormat("image/mpeg");
115
    	// Width
116
    	st3.setWidth(800);
117
    	// Height
118
    	st3.setHeight(600);
119
    	// Online resource
120
    	st3.setOnlineResource("alkjf");
121
        
122
    	st4 = new WMSStatus(); 
123
        // Layer names
124
        Vector v4 = new Vector();
125
    	v4.add("a");
126
    	v4.add("b");
127
    	v4.add("c");
128
    	st4.setLayerNames(v4);
129
    	v4.clear();
130
    	// Styles
131
    	v4.add("s1");
132
    	v4.add("s2");
133
    	v4.add("s3");
134
    	st4.setStyles(v4);
135
    	// Transparency
136
    	st4.setTransparency(false);
137
    	v4.clear();
138
    	// Dimensions
139
    	v4.add("TIME=february");
140
    	v4.add("WAVELENGTH=200nm");
141
    	st4.setDimensions(v4);
142
    	// Extent
143
    	Rectangle2D rect4 = new Rectangle2D.Double(2.0, 1.00000001, 5.000000, 6.8);
144
    	st4.setExtent(rect3);
145
    	// Exception format
146
    	st4.setExceptionFormat("bla");
147
    	// SRS
148
    	st4.setSrs("bla bla");
149
    	// Format
150
    	st4.setFormat("image/mpeg");
151
    	// Width
152
    	st4.setWidth(800);
153
    	// Height
154
    	st4.setHeight(600);
155
    	// Online resource
156
    	st4.setOnlineResource("alkjfa");
157
    }
158

  
159
    public void testEquality() {
160
    	assertTrue(st1.equals(st2));
161
    	assertFalse(st1.equals(st3)); // (distinct extent)
162
    	assertFalse(st3.equals(st4)); // (distinct online resources)
163
    }
164
}
0 165

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/taskplanning/retrieving/URLRetrieveTest.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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

  
42
/* CVS MESSAGES:
43
 *
44
 * $Id$
45
 * $Log$
46
 * Revision 1.3  2006-05-16 17:10:27  jaume
47
 * *** empty log message ***
48
 *
49
 * Revision 1.2  2006/05/15 09:39:52  jaume
50
 * *** empty log message ***
51
 *
52
 * Revision 1.1  2006/05/12 07:45:49  jaume
53
 * some warnings removed
54
 *
55
 * Revision 1.1  2006/05/12 07:15:45  jaume
56
 * *** empty log message ***
57
 *
58
 *
59
 */
60
package org.gvsig.remoteclient.taskplanning.retrieving;
61

  
62
import java.io.File;
63

  
64
import junit.framework.TestCase;
65

  
66
import org.gvsig.remoteclient.taskplanning.IQueue;
67
import org.gvsig.remoteclient.taskplanning.IRunnableTask;
68
/**
69
 * 
70
 * @author jaume
71
 *
72
 */
73
public class URLRetrieveTest extends TestCase {
74
	private final static String tempDirectoryPath = System.getProperty("java.io.tmpdir")+"tmp-andami";
75
	IQueue queue;
76
	IRunnableTask task1, task2, task3, task4;
77
	boolean finished1, finished2, finished3, finished4;
78
	RetrieveListener listener1 = new RetrieveListener() {
79
		public void transferEventReceived(RetrieveEvent event) {
80
			int e = event.getType();
81
			printMessage("listener1", event.getType());
82
			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED || e == RetrieveEvent.REQUEST_CANCELLED )
83
				finished1 = true;
84
		}
85
	};
86
	
87
	String protocol = URLRequest.HTTP;
88
	String host1 = "192.168.0.223";
89
	String page1 = "cgi-bin/mapserv_46.exe?map=c:\\ms4w\\Apache\\cgi-bin\\demo.map&&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=comunidades&SRS=EPSG:23030&BBOX=507522.0,4154976.282477341,942309.0,4552983.717522658&WIDTH=332&HEIGHT=305&FORMAT=image/png&STYLES=&TRANSPARENT=TRUE";
90
	URLRequest request1;
91
	
92
	String host2 = "localhost";
93
	String page2 = "aegCapabilities1.3.xml";
94
	URLRequest request2;
95
	RetrieveListener listener2 = new RetrieveListener() {
96
		public void transferEventReceived(RetrieveEvent event) {
97
			int e = event.getType();
98
			printMessage("listener2", event.getType());
99
			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED || e==RetrieveEvent.REQUEST_CANCELLED )
100
				finished2 = true;
101

  
102
		}
103
	};
104
	
105
	String host3 = "localhost";
106
	String page3 = "avalencia.ecw";
107
	URLRequest request3;
108
	RetrieveListener listener3 = new RetrieveListener() {
109
		public void transferEventReceived(RetrieveEvent event) {
110
			int e = event.getType();
111
			printMessage("listener3", event.getType());
112
			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED  || e == RetrieveEvent.REQUEST_CANCELLED )
113
				finished3 = true;
114

  
115
		}
116
	};
117
	
118
	String host4 = "192.168.0.223";
119
	String page4 = "prueba.rar";
120
	URLRequest request4;
121
	RetrieveListener listener4 = new RetrieveListener() {
122
		public void transferEventReceived(RetrieveEvent event) {
123
			int e = event.getType();
124
			printMessage("listener4", event.getType());
125
			if (e==RetrieveEvent.REQUEST_FINISHED || e == RetrieveEvent.REQUEST_FAILED  || e == RetrieveEvent.REQUEST_CANCELLED )
126
				finished4 = true;
127

  
128
		}
129
	};
130
	{
131
		cleanFiles();
132
	}
133
	private static void cleanFiles(){
134
		try{
135
			File tempDirectory = new File(tempDirectoryPath);
136
			
137
			File[] files = tempDirectory.listFiles();
138
			if (files!=null) {
139
				for (int i = 0; i < files.length; i++) {
140
					// s?lo por si en un futuro se necesitan crear directorios temporales
141
					files[i].delete();
142
				}
143
			}
144
			tempDirectory.delete();
145
		} catch (Exception e) {	}
146
	}
147
	
148
	
149
	public void setUp() {
150
		File tmpDir = new File(tempDirectoryPath);
151
		if (!tmpDir.exists())
152
			tmpDir.mkdir();
153
		finished1 = finished2 = finished3 = finished4 = false;
154
		System.out.println("\n\n\nSetting up test..");
155
		queue = new RetrieveQueue("http://192.168.0.223/cgi-bin/mapserv_46.exe?map=c:\\ms4w\\Apache\\cgi-bin\\demo.map");
156
		
157
		request1 = new URLRequest();
158
		// http://192.168.0.223/cgi-bin/mapserv_46.exe?map=c:\\ms4w\\Apache\\cgi-bin\\demo.map&&REQUEST=GetMap&SERVICE=WMS&VERSION=1.1.1&LAYERS=comunidades&SRS=EPSG:23030&BBOX=507522.0,4154976.282477341,942309.0,4552983.717522658&WIDTH=332&HEIGHT=305&FORMAT=image/png&STYLES=&TRANSPARENT=TRUE
159
		request1.setProtocol(protocol);
160
		request1.setHost(host1);
161
		request1.setFile(page1);
162
		request1.setFileName(tempDirectoryPath+File.separator+"task1");
163
		request1.setRequestType(URLRequest.GET);
164
		task1 = new URLRetrieveTask(request1, listener1); 
165
		
166
		request2 = new URLRequest();
167
		// http://localhost/aegCapabilities1.3.xml
168
		request2.setProtocol(protocol);
169
		request2.setHost(host2);
170
		request2.setFile(page2);
171
		request2.setFileName(tempDirectoryPath+File.separator+"task2");
172
		request2.setRequestType(URLRequest.GET);
173
		task2 = new URLRetrieveTask(request2, listener2);
174
		
175
		request3 = new URLRequest();
176
		// http://localhost/avalencia.ecw
177
		request3.setProtocol(protocol);
178
		request3.setHost(host3);
179
		request3.setFile(page3);
180
		request3.setFileName(tempDirectoryPath+File.separator+"task3");
181
		request3.setRequestType(URLRequest.GET);
182
		task3 = new URLRetrieveTask(request3, listener3);
183
		
184
		request4 = new URLRequest();
185
		// http://192.168.0.223/prueba.rar
186
		request4.setProtocol(protocol);
187
		request4.setHost(host4);
188
		request4.setFile(page4);
189
		request4.setFileName(tempDirectoryPath+File.separator+"task4");
190
		request4.setRequestType(URLRequest.GET);
191
		
192
		task4 = new URLRetrieveTask(request4, listener4);
193
		
194
	}
195
	
196
	public void testRetrieve() {
197
		queue.put(task1);
198
		queue.put(task2);
199
		
200
		while(!queue.isEmpty()) {		
201
		}
202
	}
203
	
204
	public void testCancelling() {
205
		long time = System.currentTimeMillis();
206
		
207
		queue.put(task1);
208
		queue.put(task2);
209
		boolean more = true;
210
		while (!queue.isEmpty()) {
211
			if (more && System.currentTimeMillis()-time > 1000) { // wait 1 seconds and cancel
212
				task2.cancel();
213
				more = false;
214
			}
215
		}
216
	}
217
	
218
	public void testRequestManager() {
219
		System.out.println("tests parallel downloading from different servers");
220
		request3.setFileName("task3");
221
		// http://localhost/avalencia.ecw
222
		
223
		request4.setFileName("task4");
224
		// http://192.168.0.223/prueba.rar
225
		RequestManager manager = RequestManager.getInstance();
226
		manager.addURLRequest(request3, listener3);
227
		manager.addURLRequest(request4, listener4);
228
		manager.addURLRequest(request4, listener1);
229
		while (!(finished1 && finished3 && finished4)) { 
230
			
231
		}
232
	}
233
	
234
	public void testCocurrentTransfers() {
235
		finished1 = finished2 = finished3 = finished4 = false;
236
		System.out.println("tests to merge two or more equivalent transfers into one");
237
		RequestManager manager = RequestManager.getInstance();
238
		//manager.removeURLRequest(request3);
239
		request3.setFileName("task3");
240
		
241
		manager.addURLRequest(request3, listener1);
242
		manager.addURLRequest(request3, listener2);
243
		manager.addURLRequest(request3, listener3);
244
		
245
		manager.addURLRequest(request3, listener4);
246
		while (!(finished1 && finished2 && finished3 && finished4)) { 
247
			
248
		}
249
	}
250
	
251
	public void printMessage(String who, int code) {
252
		switch (code) {
253
		case RetrieveEvent.CONNECTING:
254
			System.out.println(who+": connecting");
255
			break;
256
		case RetrieveEvent.TRANSFERRING:
257
			System.out.println(who+": transferring");
258
			break;
259
		case RetrieveEvent.REQUEST_CANCELLED:
260
			System.out.println(who+": cancelled");
261
			break;
262
		case RetrieveEvent.REQUEST_FINISHED:
263
			System.out.println(who+": finished");
264
			break;
265
		case RetrieveEvent.REQUEST_FAILED:
266
			System.err.println(who+": failed");
267
			break;
268
		case RetrieveEvent.NOT_STARTED:
269
			System.out.println(who+": not started");
270
			break;
271
		case RetrieveEvent.POSTPROCESSING:
272
			System.out.println(who+": postprocessing");
273
			break;
274
		}
275
	}
276
}
0 277

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/test/org/gvsig/remoteclient/AllTests.java
1
package org.gvsig.remoteclient;
2

  
3
import junit.framework.Test;
4
import junit.framework.TestSuite;
5

  
6
import org.gvsig.remoteclient.wcs.wcs_1_0_0.WCSProtocolHandler_1_0_0Test;
7
import org.gvsig.remoteclient.wfs.wfs_1_0_0.WFSProtocolHandlerTest1_0_0;
8
import org.gvsig.remoteclient.wfs.wfs_1_1_0.WFSProtocolHandlerTest1_1_0;
9
import org.gvsig.remoteclient.wms.WMSStatusTest;
10
import org.gvsig.remoteclient.wms.wms_1_1_1.WMSProtocolHandler_1_1_1Test;
11

  
12
public class AllTests {
13

  
14
	public static Test suite() {
15
		TestSuite suite = new TestSuite("Test for org.gvsig.remoteClient");
16
		//$JUnit-BEGIN$
17
		suite.addTestSuite(Test.class);
18
		
19
		//commented until there is a way to simulate the needed servers.
20
		//suite.addTestSuite(URLRetrieveTest.class);
21
		suite.addTestSuite(WCSProtocolHandler_1_0_0Test.class);
22
		suite.addTestSuite(WFSProtocolHandlerTest1_0_0.class);
23
		suite.addTestSuite(WFSProtocolHandlerTest1_1_0.class);
24
		suite.addTestSuite(WMSProtocolHandler_1_1_1Test.class);
25
		suite.addTestSuite(WMSStatusTest.class);
26
		
27
		//$JUnit-END$
28
		return suite;
29
	}
30

  
31
}
0 32

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/src/org/gvsig/remoteclient/taskplanning/FIFOTaskPlanner.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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

  
42
/* CVS MESSAGES:
43
*
44
* $Id$
45
* $Log$
46
* Revision 1.1  2006-05-12 07:15:45  jaume
47
* *** empty log message ***
48
*
49
* Revision 1.1  2006/05/11 17:18:06  jaume
50
* Un planificador, monitorizador, de descargas que trabaja en segundo plano
51
*
52
*
53
*/
54
package org.gvsig.remoteclient.taskplanning;
55

  
56
/**
57
 * A simple FIFO task planner. The tasks returned by this planner are executed
58
 * enterely. It does not issue another task until the current is finished. 
59
 * @author jaume
60
 *
61
 */
62
public class FIFOTaskPlanner implements ITaskPlanner {
63
	IQueue queue;
64
	
65
	/**
66
	 * Creates a new instance of FIFOTaskPlanner that will work against the
67
	 * queue passed as paramenter 
68
	 * @param queue, the IQueue to be planned
69
	 */
70
	public FIFOTaskPlanner(IQueue queue) {
71
		this.queue = queue;
72
	}
73

  
74
	
75
	public IRunnableTask nextTask() {
76
		synchronized (this) {
77
			return (IRunnableTask) queue.getTasks().remove(0);
78
		}
79
	}
80
	/**
81
	 * FIFO plans have no previous tasks so, null is always returned.
82
	 */
83
	public IRunnableTask previousTask() {
84
		return null;
85
	}
86

  
87
}
0 88

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/src/org/gvsig/remoteclient/taskplanning/ITaskPlanner.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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

  
42
/* CVS MESSAGES:
43
*
44
* $Id$
45
* $Log$
46
* Revision 1.2  2006-05-12 07:45:49  jaume
47
* some warnings removed
48
*
49
* Revision 1.1  2006/05/12 07:15:45  jaume
50
* *** empty log message ***
51
*
52
* Revision 1.1  2006/05/11 17:18:06  jaume
53
* Un planificador, monitorizador, de descargas que trabaja en segundo plano
54
*
55
*
56
*/
57
package org.gvsig.remoteclient.taskplanning;
58

  
59
/**
60
 * <p>
61
 * ITaskPlanner provides an interface to program your own task planning. It gives
62
 * you operations for pick a task from the queue according on the criteria that
63
 * you designed.<br>
64
 * </p>
65
 * <p>
66
 * The simplest implementation of ITaskPlanner would be a FIFO task planner (see
67
 * FIFOTaskPlanner.java) which takes jobs from a task queue in the same order
68
 * they were put. But any kind of planner is possible (SJF, LIFO, RoundRobin, etc.). 
69
 * </p>
70
 * @author jaume dominguez faus - jaume.dominguez@iver.es
71
 *
72
 */
73
public interface ITaskPlanner {
74
	/**
75
	 * Takes the next task to be executed.
76
	 * @return IRunnableTask representing the next task to be executed
77
	 */
78
	public IRunnableTask nextTask();
79
	
80
	/**
81
	 * Takes the previous executed task. Notice that it may or may not have
82
	 * sense for specific implementations. For example, in a FIFO-like planner,
83
	 * the task is taken from the queue, executed until it is finished and 
84
	 * removed from the queue. So, there is no previous task.
85
	 * 
86
	 * @return IRunnableTask representing the previous executed task, or null
87
	 * if none.
88
	 * @deprecated (probably this is unuseful and i'll remove it)
89
	 */
90
	public IRunnableTask previousTask();
91
}
0 92

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/src/org/gvsig/remoteclient/taskplanning/IQueue.java
1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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

  
42
/* CVS MESSAGES:
43
*
44
* $Id$
45
* $Log$
46
* Revision 1.2  2006-05-16 17:10:27  jaume
47
* *** empty log message ***
48
*
49
* Revision 1.1  2006/05/12 07:15:45  jaume
50
* *** empty log message ***
51
*
52
* Revision 1.1  2006/05/11 17:18:06  jaume
53
* Un planificador, monitorizador, de descargas que trabaja en segundo plano
54
*
55
*
56
*/
57
package org.gvsig.remoteclient.taskplanning;
58

  
59
import java.util.Vector;
60

  
61
/**
62
 *  <p>
63
 *  You should write your own concrete Queue implementation to hold the tasks in
64
 *  a specific kind of queue.<br>
65
 *  </p>
66
 *  <p>
67
 *  Following the contract, you should also write a task planner that does what 
68
 *  you desire. Task planners are a concrete class of the ITaskPlanner that would 
69
 *  plannify which is the next, the previous,.. task to be done. However, if
70
 *  you don't want to write anything special, just guess a simple FIFO queue<br>
71
 *  </p>
72
 *  
73
 *  @author jaume dominguez faus - jaume.dominguez@iver.es
74
 *  @see ITaskPlanner
75
 */
76
public interface IQueue {
77
	
78
	/**
79
	 * Adds a new task to the queue. The place where the new task will be put its
80
	 * left to the concrete implementation of this interface.
81
	 * @param IRunnableTask task
82
	 */
83
	IRunnableTask put(IRunnableTask task);
84
	
85
	/**
86
	 * Returns the next task by calling the task planner's nextTask() method.
87
	 * @return IRunnableTask with the next task to be executed.
88
	 */
89
	IRunnableTask take();
90
	
91
	/**
92
	 * Returns true if the Queue has no (more) jobs to do.
93
	 * @return
94
	 */
95
	boolean isEmpty();
96
	
97
	/**
98
	 * Returns the task planner currently defined by this queue.
99
	 * @return ITaskPlanner
100
	 */
101
	ITaskPlanner getTaskPlanner();
102
	
103
	/**
104
	 * Sets the TaskPlanner that will decide which of the tasks in the queue will
105
	 * be executed next. A null value should represent a FIFO planner. 
106
	 * @param planner
107
	 */
108
	void setTaskPlanner(ITaskPlanner planner);
109
	
110
	/**
111
	 * Causes the execution of this queue to be paused. The task currently in execution
112
	 * finishes and after it the planner will not issue more tasks until resume() is
113
	 * invoked.
114
	 */
115
	void pause();
116
	
117
	/**
118
	 * Causes the execution of this queue to be resumed. The execution will continue
119
	 * with the next task issued by the planner. It has no effect if the queue was not
120
	 * paused yet. 
121
	 */
122
	void resume();
123

  
124
	/**
125
	 * Returns the set of tasks in a Vector (thread-safe).
126
	 * @return Vector containing the tasks in this queue.
127
	 */
128
	Vector getTasks();
129
}
0 130

  
tags/v2_0_0_Build_2050/libraries/libRemoteServices/src/org/gvsig/remoteclient/taskplanning/retrieving/RequestManager.java
1
/*
2
 * Created on 01-oct-2005
3
 */
4
package org.gvsig.remoteclient.taskplanning.retrieving;
5

  
6
import java.io.File;
7
import java.net.MalformedURLException;
8
import java.util.Hashtable;
9
import java.util.TreeMap;
10

  
11
import org.gvsig.remoteclient.taskplanning.IQueue;
12

  
13
/**
14
 * pa administrar les tasques (la hist?ria aquella
15
 *  de que hi haja una cola per a cada servidor)
16
 * @author Luis W. Sevilla (sevilla_lui@gva.es)
17
 */
18
public class RequestManager {
19
	private boolean debug = true;
20
    
21
	private static RequestManager instance;
22
	private TreeMap serversTable = new TreeMap();
23
	private RequestManager() {} // Avoid public instantiation
24
	 
25
	public static RequestManager getInstance() {
26
		if (instance == null)
27
			instance = new RequestManager();
28
		return instance;
29
	}
30
	
31
	
32
	public URLRetrieveTask addURLRequest(URLRequest request, RetrieveListener listener) {
33
		try {
34
			
35
			// TODO canviar per a quetorne el Request antic, que la request guarde el
36
			// seu estat aix? com la llista de listeners
37
			File f = getPreviousDownloadedURLRequest(request);
38
			
39
			if (f!=null) {
40
				// The file was already requested and it is in the cache or
41
				// the download is in process
42
				
43
				// Overwrite the file name with the file in the cache's one.
44
				request.setFileName(f.getAbsolutePath());
45
				System.out.println(request.getUrl()+" is cached at '"+f.getAbsolutePath()+"'");
46
				
47

  
48
				// get this server's task queue
49
				RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost());
50
				
51
				// Look up the previous cached jobs
52
				
53
				URLRetrieveTask workingTask = serverQueue.getURLPreviousRequest(request);
54
				if (workingTask == null) {
55
					// Task already done. Notify listener
56
					if (debug)
57
						System.err.println("done job found: "+request.getUrl());
58
					RetrieveEvent event = new RetrieveEvent();
59
					event.setType(RetrieveEvent.REQUEST_FINISHED);
60
					listener.transferEventReceived(event);
61
					
62
				} else {
63
					// The task is working yet, will register the listener
64
					
65
					// TODO no va b?... perqu? la cola va buidant-se molt r?pidament
66
					// per a fer que vaja tamb? hi hauria que registrar en cache
67
					// lo que s'est? baixant al principi de l'execute();
68
					if (debug)
69
						System.err.println("working job found: "+request.getUrl());
70
					workingTask.addRetrieveListener(listener);
71
					
72
				}
73
			} else {
74
				// Pick an unrepeatable fileName
75
				String host = request.getHost();
76
				String fileName = request.getFileName();
77
				File tempDir = new File(tempDirectoryPath);
78
				if (!tempDir.exists())
79
					tempDir.mkdir();
80
				String fileNamePrefix = tempDirectoryPath + 
81
											File.separator + host + 
82
											"-" ;
83
				if (fileName.startsWith(fileNamePrefix))
84
					fileName = fileName.substring(fileNamePrefix.length(), fileName.length());
85
				
86
				// get this server's task queue
87
				RetrieveQueue serverQueue = (RetrieveQueue) getQueue(request.getHost());
88
				
89
				
90
				fileName = fileNamePrefix + fileName;
91
				
92
				request.setFileName(fileName);
93
				
94
				// TODO
95
				// jo ac? comprovaria quin protocol, m?tode, host, etc... i crearia un
96
				// objecte que tractara la desc?rrega segons el m?tode que li toca.
97
				// algo en plan Strategy's
98
				//
99
				// per exemple si fem URLRetrieveTask una abstracta i tenim
100
				// 
101
				// GET de tota la vida
102
				// serverQueue.put(new HTTPGetRetrieveTask(request, listener));
103
				//
104
				// POST
105
				// serverQueue.put(new HTTPPostRetrieveTask(request, listener));
106
				//
107
				// FTP
108
				// serverQueue.put(new FTPRetrieveTask(request, listener));
109
				//
110
				// ????Xarxa local?????
111
				// serverQueue.put(new SMBRetrieveTask(request, listener));
112
				
113
				// Enqueue the request and the listener will be notified when done.
114
				URLRetrieveTask task = new URLRetrieveTask(request, listener);
115
				return (URLRetrieveTask) serverQueue.put(task);
116
			}
117
		} catch (MalformedURLException e) {
118
			e.printStackTrace();
119
		}
120
		return null;
121
	}
122
	
123
	private IQueue getQueue(String hostName) {
124
		RetrieveQueue queue = null;
125
		if (serversTable.containsKey(hostName))
126
			queue = (RetrieveQueue) serversTable.get(hostName);
127
		else {
128
			// crea la cola
129
			queue = new RetrieveQueue(hostName);
130
			// pone la cola del server en marcha.
131
		}
132
		return queue;
133
	}
134

  
135

  
136
	private Hashtable downloadedFiles;
137
	private final String tempDirectoryPath = System.getProperty("java.io.tmpdir")+"tmp-andami";
138
	/**
139
     * Remove an URL from the system cache. The file will remain in the file
140
     * system for further eventual uses.
141
     * @param request
142
     */
143
	public void removeURLRequest(URLRequest request) {
144
		if (downloadedFiles != null && downloadedFiles.containsKey(request))
145
			downloadedFiles.remove(request);
146
	}
147
	/**
148
     * Adds an URL to the table of downloaded files for further uses. If the URL
149
     * already exists in the table its filePath value is updated to the new one and
150
     * the old file itself is removed from the file system.
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff