Statistics
| Revision:

root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / ExtentHistory.java @ 1034

History | View | Annotate | Download (3.38 KB)

1
package com.iver.cit.gvsig.fmap;
2

    
3
import com.iver.utiles.XMLEntity;
4

    
5
import java.awt.Rectangle;
6
import java.awt.geom.Rectangle2D;
7

    
8

    
9
/**
10
 * Clase que gestiona los diferentes extent por los que ha pasado la vista.
11
 *
12
 * @author Vicente Caballero Navarro
13
 */
14
public class ExtentHistory {
15
        private int NUMREC;
16
        private Rectangle2D[] extents;
17
        private int num = 0;
18

    
19
        /**
20
         * Creates a new ExtentsHistory object.
21
         */
22
        public ExtentHistory() {
23
                NUMREC = 10;
24
                extents = new Rectangle2D.Double[NUMREC];
25
        }
26

    
27
        /**
28
         * Creates a new ExtentsHistory object.
29
         *
30
         * @param numEntries Numero de entradas que se guardan en el historico de
31
         *                   rect?ngulos, por defecto 20
32
         */
33
        public ExtentHistory(int numEntries) {
34
                NUMREC = numEntries;
35
        }
36

    
37
        /**
38
         * Pone un nuevo rect?ngulo al final del array
39
         *
40
         * @param ext Rect?ngulo que se a?ade al hist?rico
41
         */
42
        public void put(Rectangle2D ext) {
43
                if ((ext != null) && ((num < 1) || (ext != extents[num - 1]))) {
44
                        if (ext instanceof Rectangle) {
45
                                //Esto solo hace falta cuando se pasa como par?metro el fullextent del DGN.
46
                                ext = new Rectangle2D.Double(ext.getX(), ext.getY(),
47
                                                ext.getWidth(), ext.getHeight());
48
                        }
49

    
50
                        if (num < (NUMREC)) {
51
                                extents[num] = ext;
52
                                num = num + 1;
53
                        } else {
54
                                for (int i = 0; i < (NUMREC - 1); i++) {
55
                                        extents[i] = extents[i + 1];
56
                                }
57

    
58
                                extents[num - 1] = ext;
59
                        }
60
                }
61
        }
62

    
63
        /**
64
         * Devuelve true si hay alg?n rect?ngulo en el hist?rico
65
         *
66
         * @return true o false en caso de que haya o no haya rect?ngulos
67
         */
68
        public boolean hasPrevious() {
69
                return num > 0;
70
        }
71

    
72
        /**
73
         * Obtiene el ?ltimo rect?ngulo que se a?adi? al hist?rico
74
         *
75
         * @return Ultimo rect?ngulo a?adido
76
         */
77
        public Rectangle2D get() {
78
                Rectangle2D ext = extents[num - 1];
79

    
80
                return ext;
81
        }
82

    
83
        /**
84
         * Devuelve el ?ltimo rect?ngulo del hist?rico y lo elimina del mismo
85
         *
86
         * @return Ultimo rect?ngulo a?adido
87
         */
88
        public Rectangle2D removePrev() {
89
                Rectangle2D ext = extents[num - 1];
90
                num = num - 1;
91

    
92
                return ext;
93
        }
94

    
95
        /**
96
         * Devuelve el XMLEntity con la informaci?n para poder reproducir de nuevo
97
         * el objeto actual.
98
         *
99
         * @return XMLEntity.
100
         */
101
        public XMLEntity getXMLEntity() {
102
                XMLEntity xml = new XMLEntity();
103
                xml.putProperty("num", num);
104
                xml.putProperty("numrec", NUMREC);
105

    
106
                for (int i = 0; i < NUMREC; i++) {
107
                        if (extents[i] != null) {
108
                                xml.putProperty("extent" + i + "X", extents[i].getX());
109
                                xml.putProperty("extent" + i + "Y", extents[i].getY());
110
                                xml.putProperty("extent" + i + "W", extents[i].getWidth());
111
                                xml.putProperty("extent" + i + "H", extents[i].getHeight());
112
                        }
113
                }
114

    
115
                return xml;
116
        }
117

    
118
        /**
119
         * Crea un nuevo ExtentHistory a partir del XMLEntity.
120
         *
121
         * @param xml XMLEntity
122
         *
123
         * @return Nuevo ExtentHistory.
124
         */
125
        public static ExtentHistory createFromXML(XMLEntity xml) {
126
                ExtentHistory eh = new ExtentHistory();
127
                eh.num = xml.getIntProperty("num");
128
                eh.NUMREC = xml.getIntProperty("numrec");
129

    
130
                for (int i = 0; i < eh.NUMREC; i++) {
131
                        try {
132
                                eh.extents[i] = new Rectangle2D.Double(xml.getDoubleProperty(
133
                                                        "extent" + i + "X"),
134
                                                xml.getDoubleProperty("extent" + i + "Y"),
135
                                                xml.getDoubleProperty("extent" + i + "W"),
136
                                                xml.getDoubleProperty("extent" + i + "H"));
137
                        } catch (Exception e) {
138
                                System.out.println("En las ExtentHistory =" + e); //TODO o se captura de alguna forma o se mete un nuevo parametro en el xml para saber exactamente cuantos rect?gulos se han a?adido.
139
                        }
140
                }
141

    
142
                return eh;
143
        }
144
}